2 个版本

0.1.1 2021 年 7 月 1 日
0.1.0 2021 年 6 月 26 日

#346 in 配置

21 每月下载量
4 crates 中使用

GPL-3.0-or-later

100KB
2.5K SLoC

Houseflow

lines-of-code

Houseflow 是一个开源的家庭自动化系统,支持各种配件,如灯光、开关、门禁、传感器等。

特性

  • 快速,使用高性能语言 Rust 编写。
  • 使用配置文件可配置和可重复。

支持的配件

支持的客户端

架构

中心配置

中心必须配置,默认位于 $XDG_CONFIG_HOME/houseflow/hub.toml

示例配置

# Houseflow hub configuration

[hub]
# UUID of the Hub, generate using `uuidgen` command
id = "00000000-0000-0000-0000-000000000000"

# Uncomment to allow outside network accesss
# [network]
# address = "0.0.0.0"

[[accessories]]
id = "1c59f25a-a5b4-4248-810f-01422cee16b0"
name = "super termometr"
room-name = "Bedroom"
manufacturer = "xiaomi-mijia"
model = "hygro-thermometer"
mac-address = "A4:C1:38:EF:77:51"

[providers.mijia]

[controllers.hap]
pin = "11122333"
name = "ExampleHub"

[controllers.meta]

控制器

控制器从外部控制配件。

HomeKit 配件协议

允许您将 Apple Home 应用与 Houseflow 中心集成。

示例配置

[controllers.hap]
# The `Pin` struct represents the server's 8 digit pin used for pairing.
#
# The pin consists of eight digits between 0 and 9 and defaults to `11122333`.
#
# The following pins are considered too easy and are therefore not allowed:
# - `00000000`
# - `11111111`
# - `22222222`
# - `33333333`
# - `44444444`
# - `55555555`
# - `66666666`
# - `77777777`
# - `88888888`
# - `99999999`
# - `12345678`
# - `87654321`
pin = "11122333"
# Name of the Hub. The name will be visible in the Apple Home app
name = "ExampleHub"

要清除缓存,请删除 ~/.local/share/houseflow/hap/ 文件夹。

Meta HTTP API

提供 Houseflow 中心通信的 HTTP API。请参阅 Meta HTTP API 方案 了解更多详细信息。

请记住在 URL 路径中添加 /controllers/meta/。例如

GET houseflow_hub.local:5001/controller/meta/characteristic/00000000-0000-0000-0000-000000000000/temperature-sensor/current-temperature

示例配置

[controllers.metea]

提供者

提供者为中心提供配件。

Mijia

允许小米米家设备连接

示例配置

[providers.mijia]

Meta HTTP API 方案

读取特性

请求

GET /characteristic/:accessory-id/:service-name/:characteristic-name

响应

{
    "name": :characteristc_name
    // ... values of the characteristic
}

示例

使用以下参数读取特性

accessory-id: 00000000-0000-0000-0000-000000000000
service-name: temperature-sensor
characteristic-name: current-temperature
GET /characteristic/00000000-0000-0000-0000-000000000000/temperature-sensor/current-temperature

如果配件连接,并且实现了具有特性的服务,则应返回

{
    "name": "current-temperature",
    "temperature": 21.89 // or whatever the current temperature is
}

写入特性

请求

POST /characteristic/:accessory-id/:service-name
Content-Type: application/json
{
    "name": :characteristic-name,
    // ... values of the characteristic
}

响应

如果状态为 OK,则返回空体,否则以 JSON 格式返回错误消息。

示例

使用以下参数读取特性

accessory-id: 00000000-0000-0000-0000-000000000000
service-name: garage-door-opener
characteristic.name: target-door-state
characteristic.open-percent: 80
POST /characteristic/00000000-0000-0000-0000-000000000000/garage-door-opener
{
    "name": "target-door-state",
    "open-percent": 80 // or whatever the current temperature is
}

贡献

欢迎贡献者! 没有贡献太小,所有贡献都很有价值。

获取帮助

在 Discord 上与我联系 gbaranski#5119,或通过电子邮件 [email protected]

依赖项

~1.4–3.5MB
~62K SLoC