2个不稳定版本
0.2.0 | 2023年11月18日 |
---|---|
0.1.0 | 2023年11月16日 |
#6 in #home-automation
69KB
1.5K SLoC
tradfri_gateway
一个用于连接宜家TRÅDFRI网关并通过网关控制您的家庭设备的Rust包。
它还允许您通过mDNS自动发现网关的IP地址,以简化配置。
此包的目的是创建一个稳定的构建环境,其中多个相关包依赖于外部二进制文件或C绑定,这使得构建比所需的更复杂。该包包括适用于此应用的coap/dtls代码,唯一的系统依赖项是通过openssl crate的openssl。此外,目标是尽可能简单地将网关连接起来,而不是暴露所有底层细节。
该包处于初始开发阶段,因此请期待在找到最佳API之前会偶尔出现破坏性更改。
用法示例
简单计划程序的示例(来自examples/light.rs
)
use tradfri_gateway::{Device, TradfriGateway};
fn main() -> Result<(), Box<dyn std::error::Error>> {
// Connect with gateway code
let gateway_code = "enter gateway code from the underside of your TRÅDFRI gateway";
let mut gateway = TradfriGateway::from_gateway_code(gateway_code)?;
println!("{:#?}", gateway);
// Connect with identifier and session key once created
// let session_key = "enter pre shared key generated from gateway code";
// let identifier = "enter identifier generated along with the pre shared key";
// let mut gateway =
// TradfriGateway::from_identifier_and_session_key(identifier, session_key)?;
// println!("{:#?}", gateway);
// Toggle all your lights
for i in 0..10 {
for device in gateway.devices()? {
match device {
Ok(Device::RemoteControl) => (),
Ok(Device::Light(mut light)) => {
if i % 2 == 0 {
light.on()?;
} else {
light.off()?;
}
println!("light {:#?}", light);
}
Err(error) => panic!("{}", error),
}
}
}
// Turn on one specific light, if id exists
for i in 0..10 {
if let Ok(Device::Light(mut light)) = gateway.device(65568) {
if i % 2 == 0 {
light.on()?;
} else {
light.off()?;
}
}
}
Ok(())
}
在示例中输入您的凭据,并使用以下命令运行示例:
$ cargo run --example light
新功能愿望清单
- 支持更多设备。
- 添加可选的自动将会话密钥和标识符存储到磁盘上,以简化连接过程。
- 添加命令行界面以从终端控制网关,这将也是一个很好的演示。
- 添加相关的调试日志。
- 支持较新的宜家DIRIGERA集线器。
贡献
您可以通过以下几种方式提供帮助
- 尝试使用该包
- 报告任何问题、错误、缺失的文档或示例
- 创建问题,提供对包API的用户体验反馈
- 扩展文档或示例
- 贡献代码更改
对包的用户体验或其功能/缺失的反馈可能与代码贡献一样有价值。
代码贡献
话虽如此,代码贡献是非常受欢迎的。创建一个合并请求,包括您的新功能、工具、程序或其他改进,并创建一个拉取请求。
确保任何新的/更改的公开API都有适当的文档注释。
一旦拉取请求准备就绪,请将提交压缩成每个特性或修复的单个提交。
本项目的提交信息应遵守常规提交标准,以便自动计算语义版本和自动生成发布变更日志。
许可证
根据您的选择,可在Apache许可证2.0版本或MIT许可证下获得许可。
除非您明确声明,否则您提交给Serde的任何有意包含的贡献,根据Apache-2.0许可证的定义,应按照上述双重许可,不附加任何额外条款或条件。
依赖项
~12-28MB
~422K SLoC