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 在 硬件支持
90 每月下载次数
在 2 crates 中使用
160KB
3.5K SLoC
huelib-rs
Rust 对 Philips Hue API 的绑定。
文档
许可协议
在 MIT 许可协议 下许可。
lib.rs
:
Rust 对 Philips Hue API 的绑定。
关于
最低支持的 API 版本是 1.37
。
此库使用 ureq crate 向网桥发送 HTTP 请求。响应/请求使用 serde、serde_json 和 serde_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
的方法或者不同的特性(如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 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
的灯光打开,并将颜色设置为红色。
-
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