2个版本

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

嵌入式开发 中排名 1861

每月下载 27
6 存储库中使用

GPL-3.0-or-later

90KB
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/ 文件夹。

元HTTP API

为Houseflow中心通信提供HTTP API。有关详细信息,请参阅 元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]

元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–13MB
~162K SLoC