2 个版本

0.13.3 2023年4月18日
0.13.2 2023年4月18日

#1520硬件支持

Download history 15/week @ 2024-03-15 33/week @ 2024-03-22 69/week @ 2024-03-29 26/week @ 2024-04-05 21/week @ 2024-04-12 26/week @ 2024-04-19 11/week @ 2024-04-26 24/week @ 2024-05-03 18/week @ 2024-05-10 16/week @ 2024-05-17 11/week @ 2024-05-24 13/week @ 2024-05-31 20/week @ 2024-06-07 33/week @ 2024-06-14 24/week @ 2024-06-21 7/week @ 2024-06-28

86 每月下载量
3 包中使用

MIT 协议

160KB
3.5K SLoC

huelib2-rs

Crate Docs License Downloads

Rust 对 Philips Hue API 的绑定。

这是 huelib-rs 的分支——它本身又是 ... 的分支。

文档

许可证

根据 MIT 许可证 许可。


lib.rs:

Rust 对 Philips Hue API 的绑定。

关于

最低支持的 API 版本是 1.37

这个库使用 ureq 包向网桥发送 HTTP 请求。响应/请求使用 serdeserde_jsonserde_repr 包进行反序列化和序列化。

功能

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

连接到网桥

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

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

use huelib2::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 huelib2::resource::group;
    
    // let bridge = Bridge::new(...);
    let creator = group::Creator::new("example".into(), vec!["1".into()])
        .with_class("Office".to_string());
    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 huelib2::resource::{group, Creator};
    
    // let bridge = Bridge::new(...);
    let id = group::Creator::new("example".into(), vec!["1".into()])
        .with_class("Office".to_string())
        .execute(&bridge)?;
    println!("Created group with id `{}`", id);
    

修改灯光状态

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

  • 使用Bridge::set_light_state方法

    use huelib2::{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 huelib2::resource::{light, Modifier};
    use huelib2::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 huelib2::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);
}

依赖关系

~4–10MB
~126K SLoC