#light #iot #lan #yeelight #ssdp

bin+lib yeelib_rs

Easily find and interface with Yeelight IoT smart lights

2 releases

0.1.1 Mar 11, 2021
0.1.0 Jan 21, 2021

#3 in #ssdp

MIT/Apache

47KB
1K SLoC

yeelib_rs

Crates.io badge License

A Rust library for easy interfacing with Yeelight products, including LAN light discovery with multicast and SSDP, with intended implementation of all major parts of the Yeelight Third-party Control Protocol.

Getting started

Unless otherwise specified, methods to adjust the light's parameters have the method name and behavior exactly as specified in the above spec.

use std::time::Duration;
use std::thread::sleep;

use yeelib_rs::{YeeClient, Light, YeeError};
use yeelib_rs::fields::{PowerStatus, Transition};

fn main() -> Result<(), YeeError> {
    let client = YeeClient::new()?;
    let mut lights: Vec<Light> = client.find_lights(Duration::from_secs(1));

    for light in lights.iter_mut() {
        light.set_power(PowerStatus::On, Transition::sudden())?;
        sleep(Duration::from_secs(1));

        light.set_bright(50, Transition::sudden())?;
        sleep(Duration::from_secs(1));

        light.set_ct_abx(3500,
                         Transition::smooth(Duration::from_millis(400))
                             .unwrap())?;
        sleep(Duration::from_secs(2));

        light.toggle()?;
    }
}

See main.rs for some more examples.

Currently supported methods

set_ct_abx
set_rgb
set_hsv
set_bright
set_power
toggle
adjust_bright
adjust_ct

To do

  • Document every component
  • Flatten public exports
  • Finish implementation of the API
  • Improve test coverage
  • Handle API errors

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~2.9–4.5MB
~88K SLoC