A rust port of the python-broadlink library.
The following devices have been tested and found to work with this library:
Model Code | Device Name | Manufacturer | Type
-----------|-------------|--------------|-----
0x649B | RM4 Pro | Broadlink | Remote
Before a device can be used, it must be connected to a network. Refer to this link on how to get the device into AP mode, connect to its network (e.g. BroadlinkDeviceWifi), and then run the following code:
```rust 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::connecttonetwork(&network_info) .expect("Could not connect the device to the network!"); ```
You can also use the included cli to do so:
```sh
cargo run --example rbroadlink-cli -- connect wpa2 "SSID Here" "Password here"
cargo run --example rbroadlink-cli -- connect -p wpa2 "SSID Here" ```
Devices can either be constructed from a known IP or by local discovery:
```rust use std::net::Ipv4Addr; use rbroadlink::Device;
// Create a device by IP // Note: Devices only support Ipv4 addresses let knownip = Ipv4Addr::new(1, 2, 3, 4); let device = Device::fromip(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 localip = Ipv4::new(9, 8, 7, 6); let devicewithlocalip = Device::fromip(knownip, 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!"); ```
Once you have a valid device, you probably want to differentiate the kind of device
that you have. Device
is a structured enum that contains different types of devices with
more specialized methods.
```rust 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 = remotedevice.learnir() .expect("Could not learn IR code!"); remotedevice.sendcode(&code) .expect("Could not send code!"); ```
There are a few examples of this library present in the examples
folder. Refer to
the examples folder README for more info.