#home-automation #dtls #coap #ikea #api-bindings #tradfri

tradfri_gateway

一个用于连接宜家TRÅDFRI网关并通过网关控制您的家庭设备的Rust包。

2个不稳定版本

0.2.0 2023年11月18日
0.1.0 2023年11月16日

#6 in #home-automation

MIT/Apache

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集线器。

贡献

您可以通过以下几种方式提供帮助

  1. 尝试使用该包
  2. 报告任何问题、错误、缺失的文档或示例
  3. 创建问题,提供对包API的用户体验反馈
  4. 扩展文档或示例
  5. 贡献代码更改

对包的用户体验或其功能/缺失的反馈可能与代码贡献一样有价值。

代码贡献

话虽如此,代码贡献是非常受欢迎的。创建一个合并请求,包括您的新功能、工具、程序或其他改进,并创建一个拉取请求。

确保任何新的/更改的公开API都有适当的文档注释。

一旦拉取请求准备就绪,请将提交压缩成每个特性或修复的单个提交。

本项目的提交信息应遵守常规提交标准,以便自动计算语义版本和自动生成发布变更日志。

许可证

根据您的选择,可在Apache许可证2.0版本MIT许可证下获得许可。

除非您明确声明,否则您提交给Serde的任何有意包含的贡献,根据Apache-2.0许可证的定义,应按照上述双重许可,不附加任何额外条款或条件。

依赖项

~12-28MB
~422K SLoC