2 个版本
0.1.1 | 2021 年 7 月 1 日 |
---|---|
0.1.0 | 2021 年 6 月 26 日 |
#842 在 硬件支持
用于 houseflow
115KB
3K SLoC
Houseflow
Houseflow 是一个开源的智能家居系统,支持各种配件,如灯光、开关、门禁、传感器等。
特性
- 快速,使用高性能语言 Rust 编写。
- 使用配置文件可配置和可重复。
支持的配件
支持的客户端
- iOS Apple Home 应用程序。参见 HomeKit 配件协议
- Google Home。
架构
Hub 配置
Hub 必须配置,默认情况下位于 $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 Hub 集成。
示例配置
[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 Hub 通信提供 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]
提供者
提供者为 hub 提供配件。
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
}
响应
如果状态正常,则返回空体,否则以 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]。
依赖项
~7–9.5MB
~193K SLoC