2 个版本
0.1.2 | 2024年6月7日 |
---|---|
0.1.0 | 2024年5月1日 |
#56 in 多媒体
每月 91 次下载
270KB
6.5K SLoC
hues
Philips Hue API v2 的 Rust 客户端,注重对官方规范的准确性。
hues
使用 reqwest 和 tokio 异步运行时。它目前支持大多数基本操作,例如
- 本地网络设备发现
- 通过 mDNS 使用 mdns crate,需要
mdns
功能 - 通过 HTTPS 使用 Hue 发现端点
- 通过 mDNS 使用 mdns crate,需要
- 创建应用密钥
- 控制灯光、组和场景
- 计划和智能场景管理
它尚未支持以下功能
- 娱乐 API,通过 UDP 实现快速同步灯光效果
- 关于娱乐配置的高级功能
[!警告] 这是一个实验性库,可能会更改。使用风险自担。
安装
cargo add hues
用法
如果您已经知道网桥的 IP 地址并且之前已创建应用密钥,构建客户端快速且简单
use hues::prelude::*;
#[tokio::main]
async fn main() -> Result<(), HueAPIError> {
// Construct a Bridge when IP and App Key are known
let bridge = Bridge::new([10u8, 0, 0, 123], "my-app-key");
// Refresh it to fetch the current state of all resources
bridge.refresh().await?;
// Toggle the power state of a Room named "office", if it exists
if let Some(office) = bridge.rooms().iter().find(|r| r.name() == "office") {
office.toggle().await?;
}
Ok(())
}
网桥发现和注册
当不知道网桥 IP 地址时,可以使用 Bridge::discover 相关函数在本地网络中定位设备。如果您是第一次创建应用,则 Bridge::create_app 方法将初始化新的凭证,可用于未来的身份验证。
use hues::prelude::*
use std::time::Duration;
#[tokio::main]
async fn main() {
// Discover a Hue Bridge on the local network, and initialize polling
// to synchronize state every 30 seconds.
let mut bridge = Bridge::discover()
.await
.unwrap()
.build()
.poll(Duration::from_secs(30))
.await;
// This is your App Key, it should be saved for future sessions
// NOTE: press the `Link Button` on the Hues Bridge before attempting
// to create new app credentials.
let key = bridge.create_app("my_app", "my_instance").await.unwrap();
// Blink each light to confirm you're registered!
for light in bridge.lights() {
let _ = light.identify().await;
}
}
使用 sse
自动同步
可选地,您可以通过监听服务器发送事件来自动同步。网桥将随着事件的发生将更改通知客户端,如果选择,您可以采取行动。
use hues::prelude::*;
#[tokio::main]
async main() -> Result<(), HueAPIError> {
let bridge = Bridge::new([10u8, 0, 0, 123], "my_app_key").listen(|_rids| {
// Do something whenever changes are sent from the Bridge
});
}
许可证
MIT © Tobias Fried
依赖项
~6–27MB
~413K SLoC