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次下载

MIT 许可证

69KB
1K SLoC

rbroadlink

Crates.io Crates.io

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