Can request consumption history

This commit is contained in:
Pierre HUBERT 2024-09-25 22:31:00 +02:00
parent 821b4644a2
commit 2e72634abf
3 changed files with 56 additions and 0 deletions

View File

@ -97,6 +97,30 @@ impl ConsumptionHistoryFile {
)?; )?;
Ok(()) Ok(())
} }
/// Get the total runtime of a relay during a given time window
pub fn get_history(
r#type: ConsumptionHistoryType,
from: u64,
to: u64,
interval: u64,
) -> anyhow::Result<Vec<EnergyConsumption>> {
let mut res = Vec::with_capacity(((to - from) / interval) as usize);
let mut file = Self::open(from, r#type)?;
let mut curr_time = from;
while curr_time < to {
if !file.contains_time(curr_time) {
file = Self::open(curr_time, r#type)?;
}
res.push(file.get_consumption(curr_time)?);
curr_time += interval;
}
Ok(res)
}
} }
#[cfg(test)] #[cfg(test)]

View File

@ -131,10 +131,18 @@ pub async fn secure_server(energy_actor: EnergyActorAddr) -> anyhow::Result<()>
"/web_api/energy/curr_consumption", "/web_api/energy/curr_consumption",
web::get().to(energy_controller::curr_consumption), web::get().to(energy_controller::curr_consumption),
) )
.route(
"/web_api/energy/curr_consumption/history",
web::get().to(energy_controller::curr_consumption_history),
)
.route( .route(
"/web_api/energy/cached_consumption", "/web_api/energy/cached_consumption",
web::get().to(energy_controller::cached_consumption), web::get().to(energy_controller::cached_consumption),
) )
.route(
"/web_api/energy/relays_consumption/history",
web::get().to(energy_controller::relays_consumption_history),
)
// Devices controller // Devices controller
.route( .route(
"/web_api/devices/list_pending", "/web_api/devices/list_pending",

View File

@ -1,6 +1,9 @@
use crate::app_config::ConsumptionHistoryType;
use crate::energy::consumption_history_file::ConsumptionHistoryFile;
use crate::energy::{consumption, energy_actor}; use crate::energy::{consumption, energy_actor};
use crate::server::custom_error::HttpResult; use crate::server::custom_error::HttpResult;
use crate::server::WebEnergyActor; use crate::server::WebEnergyActor;
use crate::utils::time_utils::time_secs;
use actix_web::HttpResponse; use actix_web::HttpResponse;
#[derive(serde::Serialize)] #[derive(serde::Serialize)]
@ -15,9 +18,30 @@ pub async fn curr_consumption() -> HttpResult {
Ok(HttpResponse::Ok().json(Consumption { consumption })) Ok(HttpResponse::Ok().json(Consumption { consumption }))
} }
/// Get curr consumption history
pub async fn curr_consumption_history() -> HttpResult {
let history = ConsumptionHistoryFile::get_history(
ConsumptionHistoryType::GridConsumption,
time_secs() - 3600 * 24,
time_secs(),
60 * 10,
)?;
Ok(HttpResponse::Ok().json(history))
}
/// Get cached energy consumption /// Get cached energy consumption
pub async fn cached_consumption(energy_actor: WebEnergyActor) -> HttpResult { pub async fn cached_consumption(energy_actor: WebEnergyActor) -> HttpResult {
let consumption = energy_actor.send(energy_actor::GetCurrConsumption).await?; let consumption = energy_actor.send(energy_actor::GetCurrConsumption).await?;
Ok(HttpResponse::Ok().json(Consumption { consumption })) Ok(HttpResponse::Ok().json(Consumption { consumption }))
} }
pub async fn relays_consumption_history() -> HttpResult {
let history = ConsumptionHistoryFile::get_history(
ConsumptionHistoryType::RelayConsumption,
time_secs() - 3600 * 24,
time_secs(),
60 * 10,
)?;
Ok(HttpResponse::Ok().json(history))
}