2 个版本
0.13.3 | 2023年4月18日 |
---|---|
0.13.2 | 2023年4月18日 |
#1520 在 硬件支持
86 每月下载量
在 3 包中使用
160KB
3.5K SLoC
huelib2-rs
Rust 对 Philips Hue API 的绑定。
这是 huelib-rs 的分支——它本身又是 ... 的分支。
文档
许可证
根据 MIT 许可证 许可。
lib.rs
:
Rust 对 Philips Hue API 的绑定。
关于
最低支持的 API 版本是 1.37
。
这个库使用 ureq 包向网桥发送 HTTP 请求。响应/请求使用 serde、serde_json 和 serde_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
的方法或不同的特质(如Creator
、Modifier
等)来发送请求。
使用Bridge
方法发送请求
Bridge
的方法可以用来发送请求。
以下方法以create
、set
和search_new
开头,它们接受一个创建者、修改器或扫描器作为参数,该参数在发送请求之前必须构建。例如,您可以使用new
函数构建一个group::Creator
,然后将它作为参数传递给Bridge::create_group
方法。
有关可用方法的列表,请查看Bridge
的文档。
使用特质方法发送请求
某些特质方法可以用来发送请求,而不是调用Bridge
方法。
Creator::execute
:可以用作代替Bridge::create_*
方法。Modifier::execute
:可以用作代替Bridge::set_*
方法。Scanner::execute
:可以用作代替Bridge::search_new_*
方法。
示例
注意:在以下示例中,bridge
的创建被省略以减少无关代码。
创建一个组
创建一个名为example
的新组,并将标识符为1
的灯光放入组中,并将类别设置为Office
。
-
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
的灯光打开,并将颜色设置为红色。
-
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