diff --git a/config.lua b/config.lua index c39fd87..8b991e8 100644 --- a/config.lua +++ b/config.lua @@ -158,7 +158,7 @@ automation.device_manager:create( }) ) -automation.device_manager:create( +local bedroom_air_filter = automation.device_manager:create( "bedroom_air_filter", AirFilter.new({ name = "Air Filter", @@ -167,3 +167,17 @@ automation.device_manager:create( client = automation.mqtt_client, }) ) + +-- TODO: Use the wrapped device bedroom_air_filter instead of the string +automation.device_manager:add_schedule({ + ["0 0 19 * * *"] = { + on = { + "bedroom_air_filter", + }, + }, + ["0 0 20 * * *"] = { + off = { + "bedroom_air_filter", + }, + }, +}) diff --git a/config/config.yml b/config/config.yml index 12e6265..43e6466 100644 --- a/config/config.yml +++ b/config/config.yml @@ -13,13 +13,3 @@ ntfy: presence: topic: "automation/presence/+/#" - -# Run the air filter everyday for 19:00 to 20:00 -schedule: - 0 0 19 * * *: - on: - - "bedroom_air_filter" - - 0 0 20 * * *: - off: - - "bedroom_air_filter" diff --git a/config/zeus.dev.yml b/config/zeus.dev.yml index 3aaac6b..9ba2789 100644 --- a/config/zeus.dev.yml +++ b/config/zeus.dev.yml @@ -14,12 +14,3 @@ ntfy: presence: topic: "automation_dev/presence/+/#" - -schedule: - # 0/30 * * * * *: - # on: - # - *outlet - # - # 15/30 * * * * *: - # off: - # - *outlet diff --git a/src/config.rs b/src/config.rs index 48b19ab..3d9d580 100644 --- a/src/config.rs +++ b/src/config.rs @@ -10,7 +10,6 @@ use tracing::debug; use crate::auth::OpenIDConfig; use crate::devices::PresenceConfig; use crate::error::{ConfigParseError, MissingEnv}; -use crate::schedule::Schedule; #[derive(Debug, Deserialize)] pub struct Config { @@ -21,7 +20,6 @@ pub struct Config { pub fullfillment: FullfillmentConfig, pub ntfy: Option, pub presence: PresenceConfig, - pub schedule: Schedule, } #[derive(Debug, Clone, Deserialize)] diff --git a/src/device_manager.rs b/src/device_manager.rs index e132e33..2a9dad3 100644 --- a/src/device_manager.rs +++ b/src/device_manager.rs @@ -6,7 +6,7 @@ use async_trait::async_trait; use enum_dispatch::enum_dispatch; use futures::future::join_all; use google_home::traits::OnOff; -use mlua::FromLua; +use mlua::{FromLua, LuaSerdeExt}; use rumqttc::{matches, AsyncClient, QoS}; use tokio::sync::{RwLock, RwLockReadGuard}; use tokio_cron_scheduler::{Job, JobScheduler}; @@ -261,6 +261,12 @@ impl mlua::UserData for DeviceManager { Ok(this.add(device).await) }, - ) + ); + + methods.add_async_method("add_schedule", |lua, this, schedule| async { + let schedule = lua.from_value(schedule)?; + this.add_schedule(schedule).await; + Ok(()) + }) } } diff --git a/src/main.rs b/src/main.rs index 2bcb5c7..0d4824a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -63,8 +63,6 @@ async fn app() -> anyhow::Result<()> { // Setup the device handler let device_manager = DeviceManager::new(client.clone()); - device_manager.add_schedule(config.schedule).await; - let event_channel = device_manager.event_channel(); // Create and add the presence system