Display relays status
This commit is contained in:
@ -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
|
||||
}
|
||||
}
|
||||
|
@ -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>;
|
||||
|
@ -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",
|
||||
|
@ -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))
|
||||
}
|
||||
|
Reference in New Issue
Block a user