Rename active_schedule to override_schedule and add EmgauwaNow

This commit is contained in:
Tobias Reisinger 2024-05-26 22:47:56 +02:00
parent bf3192ec65
commit 8244a1d837
Signed by: serguzim
GPG key ID: 13AD60C237A28DFE
4 changed files with 228 additions and 151 deletions

View file

@ -3,9 +3,10 @@ use std::time::{Duration, Instant};
use actix::{Actor, Context, Handler, Message};
use emgauwa_common::constants;
use emgauwa_common::db::DbSchedule;
use emgauwa_common::errors::EmgauwaError;
use emgauwa_common::models::Controller;
use emgauwa_common::types::RelayStates;
use emgauwa_common::types::{RelayStates, Weekday};
use futures::executor::block_on;
use sqlx::{Pool, Sqlite};
use tokio::sync::Notify;
@ -30,6 +31,14 @@ pub struct RelayPulse {
pub duration: Option<u32>,
}
#[derive(Message)]
#[rtype(result = "Result<(), EmgauwaError>")]
pub struct RelayOverrideSchedule {
pub relay_number: i64,
pub schedule: Option<DbSchedule>,
pub weekday: Weekday,
}
#[derive(Message)]
#[rtype(result = "Controller")]
pub struct GetThis {}
@ -105,7 +114,7 @@ impl Handler<UpdateRelayStates> for AppState {
.iter_mut()
.zip(msg.relay_states.iter())
.for_each(|(driver, state)| {
if let Err(e) = driver.set(state.unwrap_or(false)) {
if let Err(e) = driver.set(state.is_on.unwrap_or(false)) {
log::error!("Error setting relay: {}", e);
}
});
@ -148,6 +157,35 @@ impl Handler<RelayPulse> for AppState {
}
}
impl Handler<RelayOverrideSchedule> for AppState {
type Result = Result<(), EmgauwaError>;
fn handle(&mut self, msg: RelayOverrideSchedule, _ctx: &mut Self::Context) -> Self::Result {
let relay_num = msg.relay_number;
let schedule = msg.schedule;
let weekday = msg.weekday;
let relay = self
.this
.relays
.iter_mut()
.find(|r| r.r.number == relay_num)
.ok_or(EmgauwaError::Other(String::from("Relay not found")))?;
log::debug!(
"Overriding schedule for relay {} to '{}' on day {}",
relay_num,
schedule.as_ref().map_or("NONE", |s| &s.name),
weekday
);
relay.override_schedule = Some(schedule);
relay.override_schedule_weekday = weekday;
Ok(())
}
}
impl Handler<GetThis> for AppState {
type Result = Controller;