From 21b96c2925fff5f4a912936ba28d7e1e2a8f38c9 Mon Sep 17 00:00:00 2001 From: Dreaded_X Date: Sat, 7 Jan 2023 05:04:24 +0100 Subject: [PATCH] Added OnPresence handler for AudioSetup --- src/devices/audio_setup.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/devices/audio_setup.rs b/src/devices/audio_setup.rs index f674453..28cf8fa 100644 --- a/src/devices/audio_setup.rs +++ b/src/devices/audio_setup.rs @@ -1,13 +1,16 @@ use google_home::traits; use rumqttc::{AsyncClient, matches}; -use tracing::{error, warn}; +use tracing::{error, warn, debug}; use pollster::FutureExt as _; use crate::config::MqttDeviceConfig; use crate::mqtt::{OnMqtt, RemoteMessage, RemoteAction}; +use crate::presence::OnPresence; use super::Device; +// @TODO Ideally we store am Arc to the childern devices, +// that way they hook into everything just like all other devices pub struct AudioSetup { identifier: String, mqtt: MqttDeviceConfig, @@ -67,3 +70,14 @@ impl OnMqtt for AudioSetup { } } } + +impl OnPresence for AudioSetup { + fn on_presence(&mut self, presence: bool) { + // Turn off the audio setup when we leave the house + if !presence { + debug!(id = self.identifier, "Turning devices off"); + self.speakers.set_on(false).unwrap(); + self.mixer.set_on(false).unwrap(); + } + } +}