7 个不稳定版本 (3 个破坏性更新)
0.4.2 | 2024年6月18日 |
---|---|
0.4.1 | 2023年11月4日 |
0.4.0 | 2023年9月16日 |
0.3.2 | 2023年9月16日 |
0.1.0 | 2022年1月1日 |
#1098 在 网络编程
每月23次下载
69KB
1K SLoC
rbroadlink
python-broadlink 库的 Rust 版本。
已测试设备
以下设备经过测试并发现可以与该库一起使用
型号代码 | 设备名称 | 制造商 | 类型 |
---|---|---|---|
0x649B | RM4 Pro | Broadlink | 遥控器 |
0x4E2A | Ande Jupiter+ | ANG Klimatyzacja Sp. z o.o. | Hvac |
设置
在可以使用设备之前,它必须连接到网络。有关如何将设备置于 AP 模式、连接到其网络(例如 Broadlink_Device_Wifi)的说明,请参阅 此链接,然后运行以下代码
use rbroadlink::Device;
use rbroadlink::network::WirelessConnection;
// Construct the network information
let network_info = WirelessConnection::WPA2(
"SSID Here",
"Password here",
);
// Connect the device to the specified network
Device::connect_to_network(&network_info)
.expect("Could not connect the device to the network!");
您还可以使用包含的 cli 来完成此操作
# Pass the password directly
cargo run --example rbroadlink-cli -- connect wpa2 "SSID Here" "Password here"
# Prompt for the password safely
cargo run --example rbroadlink-cli -- connect -p wpa2 "SSID Here"
用法
设备可以是已知 IP 或通过本地发现构建
use std::net::Ipv4Addr;
use rbroadlink::Device;
// Create a device by IP
// Note: Devices only support Ipv4 addresses
let known_ip = Ipv4Addr::new(1, 2, 3, 4);
let device = Device::from_ip(known_ip, None)
.expect("Could not connect to device!");
// You can also specify the local IP of the machine in the case of the device being
// on a different subnet.
let local_ip = Ipv4::new(9, 8, 7, 6);
let device_with_local_ip = Device::from_ip(known_ip, Some(local_ip))
.expect("Could not connect to device!");
// You can also just enumerate all of the discovered devices, with an optional
// local ip as well.
let devices = Device::list(Some(local_ip))
.expect("Could not enumerate devices!");
一旦您有一个有效的设备,您可能想要区分您拥有的设备类型。 Device
是一个结构化枚举,包含不同类型的设备,具有更专业的功能。
use rbroadlink::Device;
// Assuming that you have a valid device in `device`...
let remote_device = match device {
Device::Remote { remote } => remote,
_ => return Err("Not a remote!"),
};
// Use a remote-specific method to echo a learned IR code.
let code = remote_device.learn_ir()
.expect("Could not learn IR code!");
remote_device.send_code(&code)
.expect("Could not send code!");
HVAC
从本库的 0.4.0 版本开始,增加了 HVAC/空调的支持。支持的设备是 broadlink 设备类型 0x4E2A
。
尽管它在特定单元上进行了测试,但它很可能可以与更多类似设备一起工作。这些空调通常使用 AC Freedom 应用程序进行控制。
如果您有此类设备连接到 AC Freedom 应用程序,则它肯定处于“锁定”状态(不能使用此库进行控制)。
您可以从 AC Freedom 或此库(不能同时使用)之一进行控制。如果您决定使用 rbroadlink,则您需要从 AC Freedom 云中删除该设备,然后重置 WiFi 橡皮糖并重新配置 WiFi 参数。
您还可以查看这篇帖子以获取详细信息:https://github.com/liaan/broadlink_ac_mqtt/issues/76#issuecomment-884763601
可能使用此库/rbroadlink-cli配置WiFi参数也应该可行(参看上面的设置部分)。
设置目标温度设定点的示例代码片段
use rbroadlink::Device;
// Assuming that you have a valid device in `device`...
let hvac_device = match device {
Device::Hvac { hvac } => hvac,
_ => return Err("Not a HVAC device!"),
};
// First obtain current state/parameters of the device:
let mut state = hvac_device.get_state().expect("Cannot obtain current state");
println!("Current state: {:?}", state);
// Print current temperature and try to set a new setpoint (degree Celsius)
println!("Target temp: {:.1}", state.get_target_temp());
if let Err(e) = state.set_target_temp(22.0) {
println!("Error setting temperature: {}", e);
}
// Request to set a new state (with new temperature)
hvac_device.set_state(&mut state);
示例
该库的几个示例位于examples
文件夹中。有关更多信息,请参阅示例文件夹README。
依赖项
约4-14MB
约184K SLoC