#light #hue #philips #api-version #api-bindings #http-request

huelib

Rust 对 Philips Hue API 的绑定

20 个版本 (12 个破坏性更新)

0.13.2 2021 年 10 月 22 日
0.13.0 2021 年 4 月 21 日
0.12.4 2021 年 1 月 24 日
0.11.0 2020 年 12 月 30 日
0.3.0 2020 年 3 月 25 日

#1221硬件支持

Download history 11/week @ 2024-03-26 49/week @ 2024-04-02 1/week @ 2024-05-21 3/week @ 2024-05-28 17/week @ 2024-06-04 21/week @ 2024-06-11 58/week @ 2024-07-02

90 每月下载次数
2 crates 中使用

MIT 许可协议

160KB
3.5K SLoC

huelib-rs

Crate Docs License Downloads

Rust 对 Philips Hue API 的绑定。

文档

许可协议

MIT 许可协议 下许可。


lib.rs:

Rust 对 Philips Hue API 的绑定。

关于

最低支持的 API 版本是 1.37

此库使用 ureq crate 向网桥发送 HTTP 请求。响应/请求使用 serdeserde_jsonserde_repr crate 进行反序列化/序列化。

特性

  • upnp-description:添加对访问网桥 UPnP 描述的支持。有关更多信息,请参阅 bridge::Description 结构。
  • old-api:对旧版 API 版本的最低支持。对于不再受支持的 Hue v1 网桥的用户很有用。这降低了支持的 API 版本到 1.16,并不保证所有功能都能正常工作。

连接到网桥

要连接到网桥,需要网桥的 IP 地址和已注册用户的名称。您可以使用 bridge::discover_nupnp 函数获取本地网络中网桥的 IP 地址,并使用 bridge::register_user 函数在网桥上注册新用户。

要能够向网桥发送请求,必须创建一个 Bridge。例如

use huelib::Bridge;
use std::net::{IpAddr, Ipv4Addr};

let bridge = Bridge::new(IpAddr::V4(Ipv4Addr::new(192, 168, 1, 2)), "username");

您可以使用Bridge的方法或者不同的特性(如CreatorModifier等)来发送请求。

使用Bridge方法发送请求

Bridge的方法可以用来发送请求。

createsetsearch_new开头的的方法需要一个创建者、修改者或扫描器作为参数,该参数在发送请求前需要构建。例如,您可以使用new函数构建一个group::Creator,并将其作为参数传递给Bridge::create_group方法。

有关可用方法的列表,请查看Bridge的文档。

使用特性方法发送请求

一些特性方法可以用来发送请求,而不是调用Bridge的方法。

示例

注意:在以下示例中,为了减少无关代码,省略了创建bridge的过程。

创建一个组

创建一个新的组,命名为example,并将标识符为1的灯光放入组中,并将类别设置为Office

  • 使用Bridge::create_group方法

    use huelib::resource::group;
    
    // let bridge = Bridge::new(...);
    let creator = group::Creator::new("example".into(), vec!["1".into()])
        .with_class(group::Class::Office);
    let id = bridge.create_group(&creator)?;
    println!("Created group with id `{}`", id);
    
  • 使用Creator::execute特性方法

    // Note that the trait `Creator` has to be in scope because the `execute` method is called.
    use huelib::resource::{group, Creator};
    
    // let bridge = Bridge::new(...);
    let id = group::Creator::new("example".into(), vec!["1".into()])
        .with_class(group::Class::Office)
        .execute(&bridge)?;
    println!("Created group with id `{}`", id);
    

修改灯光状态

将标识符为1的灯光打开,并将颜色设置为红色。

  • 使用Bridge::set_light_state方法

    use huelib::{resource::light, Color};
    
    // let bridge = Bridge::new(...);
    let modifier = light::StateModifier::new()
        .with_on(true)
        .with_color(Color::from_rgb(255, 0, 0));
    let responses = bridge.set_light_state("1", &modifier)?;
    
  • 使用Modifier::execute特性方法

    // Note that the trait `Modifier` has to be in scope because the `execute` method is called.
    use huelib::resource::{light, Modifier};
    use huelib::Color;
    
    // let bridge = Bridge::new(...);
    let responses = light::StateModifier::new()
        .with_on(true)
        .with_color(Color::from_rgb(255, 0, 0))
        .execute(&bridge, "1".into())?;
    

获取灯光

打印标识符为1的灯光

// let bridge = Bridge::new(...);
let light = bridge.get_light("1")?;
println!("Light 1: {:?}", light);

搜索新的传感器

开始搜索新的传感器

use huelib::resource::sensor;

// let bridge = Bridge::new(...);
let scanner = sensor::Scanner::new();
bridge.search_new_sensors(&scanner)?;

打印发现的传感器

// let bridge = Bridge::new(...);
let scan = bridge.get_new_sensors()?;
for resource in scan.resources {
    println!("Discovered sensor `{}` with ID `{}`", resource.name, resource.id);
}

依赖项

~3.5–5MB
~121K SLoC