2 个版本

0.1.2 2024年6月7日
0.1.0 2024年5月1日

#56 in 多媒体

Download history 115/week @ 2024-04-30 2/week @ 2024-05-14 19/week @ 2024-05-21 2/week @ 2024-05-28 174/week @ 2024-06-04 31/week @ 2024-06-11

每月 91 次下载

MIT 许可证

270KB
6.5K SLoC

hues

Philips Hue API v2 的 Rust 客户端,注重对官方规范的准确性。

Crates.io (version)

GitHub stars GitHub forks GitHub watchers Follow on GitHub

hues 使用 reqwesttokio 异步运行时。它目前支持大多数基本操作,例如

  • 本地网络设备发现
    • 通过 mDNS 使用 mdns crate,需要 mdns 功能
    • 通过 HTTPS 使用 Hue 发现端点
  • 创建应用密钥
  • 控制灯光、组和场景
  • 计划和智能场景管理

它尚未支持以下功能

  • 娱乐 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