Hacky hue flashing-- no locking multiple presses

This commit is contained in:
2020-10-29 07:43:00 -07:00
parent 1730f55d21
commit 6e7e74205e
3 changed files with 27 additions and 3 deletions

View File

@@ -9,11 +9,13 @@ use futures_util::{FutureExt, select, stream, StreamExt};
use rppal::gpio::{Gpio, Level, Trigger};
use smallvec::SmallVec;
use tokio::{ sync::mpsc,
time::interval };
time::{delay_for, interval} };
use warp::{Filter, sse, sse::ServerSentEvent};
const HUE_ADDRESS: &str = "philips-hue.local";
const OUTDOOR_CHIME_FILE: &str = "static/outdoor.mp3";
const HUE_KEY: &str = include_str!("../hue.key");
const BUTTON_PIN: u8 = 26;
const CHANNEL_VEC_SIZE: usize = 32;
@@ -34,12 +36,14 @@ async fn main() {
pin.set_async_interrupt(Trigger::FallingEdge, move |level| button_pressed(level, &clients))
.expect("set interrupt");
let reqwest = reqwest::Client::new();
let (tx, rx) = mpsc::channel(1);
events_clients.lock().unwrap().push(tx);
let pushes = rx.for_each(|()| {
let pushes = rx.for_each(|()| async {
if !audio_busy() { play_chime() }
else { debug!("doorbell still ringing, not playing new chime"); }
futures_util::future::ready(())
flash_patio(&reqwest).await;
});
select! {
@@ -121,3 +125,21 @@ fn play_chime() {
Err(err) => error!("Error playing outdoor chime: {}", err)
};
}
fn hue_base(reqwest: &reqwest::Client) -> reqwest::RequestBuilder {
reqwest.put(&format!("http://{}/api/{}/lights/10/state", HUE_ADDRESS, HUE_KEY))
}
async fn flash_patio(reqwest: &reqwest::Client) {
for _ in 0..5 {
let _ = hue_base(reqwest).body(r#"{"transitiontime":0,"sat":254, "bri":254,"hue":2125}"#) // orange
.send().await;
delay_for(Duration::from_millis(250)).await;
let _ = hue_base(reqwest).body(r#"{"transitiontime":0,"hue":25500}"#) // green
.send().await;
delay_for(Duration::from_millis(250)).await;
let _ = hue_base(reqwest).body(r#"{"transitiontime":0,"hue":56228}"#) // purple
.send().await;
delay_for(Duration::from_millis(250)).await;
}
}