Display relays status

This commit is contained in:
2024-09-25 19:35:39 +02:00
parent 78ace02d15
commit 3c2fa18d9a
6 changed files with 101 additions and 8 deletions

View File

@ -360,3 +360,34 @@ impl Handler<GetDevicesState> for EnergyActor {
.collect()
}
}
#[derive(serde::Serialize)]
pub struct ResRelayState {
pub id: DeviceRelayID,
on: bool,
r#for: usize,
}
/// Get the state of all relays
#[derive(Message)]
#[rtype(result = "Vec<ResRelayState>")]
pub struct GetAllRelaysState;
impl Handler<GetAllRelaysState> for EnergyActor {
type Result = Vec<ResRelayState>;
fn handle(&mut self, _msg: GetAllRelaysState, _ctx: &mut Context<Self>) -> Self::Result {
let mut list = vec![];
for d in &self.devices.relays_list() {
let state = self.engine.relay_state(d.id);
list.push(ResRelayState {
id: d.id,
on: state.is_on(),
r#for: state.state_for(),
})
}
list
}
}

View File

@ -39,6 +39,10 @@ impl RelayState {
fn is_off(&self) -> bool {
!self.on
}
pub fn state_for(&self) -> usize {
(time_secs() - self.since as u64) as usize
}
}
type RelaysState = HashMap<DeviceRelayID, RelayState>;

View File

@ -185,6 +185,10 @@ pub async fn secure_server(energy_actor: EnergyActorAddr) -> anyhow::Result<()>
"/web_api/relay/{id}",
web::delete().to(relays_controller::delete),
)
.route(
"/web_api/relays/status",
web::get().to(relays_controller::get_status_all),
)
// Devices API
.route(
"/devices_api/utils/time",

View File

@ -93,3 +93,10 @@ pub async fn delete(actor: WebEnergyActor, path: web::Path<RelayIDInPath>) -> Ht
Ok(HttpResponse::Accepted().finish())
}
/// Get the status of all relays
pub async fn get_status_all(actor: WebEnergyActor) -> HttpResult {
let list = actor.send(energy_actor::GetAllRelaysState).await?;
Ok(HttpResponse::Ok().json(list))
}