#![allow(dead_code)]
use rand::Rng;
#[tokio::main]
async fn main() {
let mut hub = dirigera::hub::Hub::default();
trigger_scene(&mut hub).await.unwrap();
}
async fn get_devices(hub: &mut dirigera::hub::Hub) -> anyhow::Result<()> {
for device in hub.devices().await? {
let inner = device.inner();
println!(
"{:<20} {:<40} {:<20} {}",
inner.attributes.custom_name,
inner.id,
inner.device_type,
inner
.room
.as_ref()
.map(|room| room.name.clone())
.unwrap_or("Unknown".to_string()),
);
}
Ok(())
}
async fn get_device(hub: &mut dirigera::hub::Hub) -> anyhow::Result<()> {
println!(
"{:#?}",
hub.device("3b1a04db-9abe-4811-b60a-797970f51e8a_1").await?
);
Ok(())
}
async fn get_scenes(hub: &mut dirigera::hub::Hub) -> anyhow::Result<()> {
for scene in hub.scenes().await? {
println!("{:#?}\n", scene);
}
Ok(())
}
async fn toggle_light(hub: &mut dirigera::hub::Hub) -> anyhow::Result<()> {
let mut light = hub.device("3b1a04db-9abe-4811-b60a-797970f51e8a_1").await?;
loop {
println!(
"Light is on = {}, will toggle",
light.inner().attributes.is_on
);
hub.toggle_on_off(&mut light).await?;
tokio::time::sleep(std::time::Duration::from_millis(1000)).await;
}
}
async fn light_level(hub: &mut dirigera::hub::Hub) -> anyhow::Result<()> {
let mut light = hub.device("3b1a04db-9abe-4811-b60a-797970f51e8a_1").await?;
let mut level = 0;
loop {
level = if level <= 90 { level + 10 } else { 0 };
println!(
"Light has level = {}",
light.inner().attributes.light_level.unwrap_or(0),
);
hub.set_light_level(&mut light, level).await?;
tokio::time::sleep(std::time::Duration::from_millis(500)).await;
}
}
async fn temperature(hub: &mut dirigera::hub::Hub) -> anyhow::Result<()> {
let mut light = hub.device("86a0fac2-d213-42bb-b1c1-00533ba468cd_1").await?;
let mut temp = 2300;
loop {
temp = if temp <= 3900 { temp + 100 } else { 2300 };
println!(
"Light has temp = {}",
light.inner().attributes.color_temperature.unwrap_or(0),
);
hub.set_temperature(&mut light, temp).await?;
tokio::time::sleep(std::time::Duration::from_millis(500)).await;
}
}
async fn randomize_hue(hub: &mut dirigera::hub::Hub) -> anyhow::Result<()> {
let mut light = hub.device("3b1a04db-9abe-4811-b60a-797970f51e8a_1").await?;
if !light.inner().attributes.is_on {
hub.toggle_on_off(&mut light).await?;
}
loop {
println!(
"Light has hue = {}, saturation = {}, will toggle",
light.inner().attributes.color_hue.unwrap_or(0.0),
light.inner().attributes.color_saturation.unwrap_or(0.0),
);
let mut rng = rand::thread_rng();
let hue = rng.gen_range(0.0..360.0);
let saturation = rng.gen_range(0.0..1.0);
hub.set_hue_saturation(&mut light, hue, saturation).await?;
tokio::time::sleep(std::time::Duration::from_millis(100)).await;
}
}
async fn startup(hub: &mut dirigera::hub::Hub) -> anyhow::Result<()> {
let mut light = hub.device("3b1a04db-9abe-4811-b60a-797970f51e8a_1").await?;
loop {
println!(
"Light startup is = {:?}",
light.inner().attributes.startup_on_off,
);
let new_startup = match light.inner().attributes.startup_on_off {
Some(dirigera::device::Startup::StartPrevious) => dirigera::device::Startup::StartOff,
_ => dirigera::device::Startup::StartPrevious,
};
hub.set_startup_behaviour(&mut light, new_startup).await?;
tokio::time::sleep(std::time::Duration::from_millis(1000)).await;
}
}
async fn trigger_scene(hub: &mut dirigera::hub::Hub) -> anyhow::Result<()> {
let scene = hub.scene("744173bf-f7d6-4f27-9dee-d7a2345ffe00").await?;
hub.trigger_scene(&scene).await?;
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
hub.undo_scene(&scene).await?;
let scene = hub.scene("744173bf-f7d6-4f27-9dee-d7a2345ffe00").await?;
println!("{:#?}", scene);
Ok(())
}