82 Commits

Author SHA1 Message Date
94e3a16e56 Update Rust crate rust-embed to 8.11.0
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-21 00:24:33 +00:00
b77754f79e Merge pull request 'Update typescript-eslint to ^8.53.1' (#418) from renovate/typescript-eslint into master
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-21 00:24:03 +00:00
eeebc124c7 Update typescript-eslint to ^8.53.1
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2026-01-20 00:17:11 +00:00
230bd453ab Merge pull request 'Update Rust crate thiserror to 2.0.18' (#417) from renovate/thiserror-2.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-20 00:17:02 +00:00
53bd6e0e5d Update Rust crate thiserror to 2.0.18
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2026-01-19 00:16:37 +00:00
8c44776ebf Merge pull request 'Update dependency @mui/x-charts to ^8.25.0' (#416) from renovate/mui-x-charts-8.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-19 00:16:25 +00:00
6f5f571abe Update dependency @mui/x-charts to ^8.25.0
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2026-01-18 00:17:40 +00:00
30d5768a8d Merge pull request 'Update Node.js to v25' (#415) from renovate/node-25.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-17 00:16:41 +00:00
05b99ce907 Merge pull request 'Update typescript-eslint to ^8.53.0' (#414) from renovate/typescript-eslint into master
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-17 00:16:40 +00:00
057dd6bd13 Update Node.js to v25
Some checks failed
continuous-integration/drone/push Build encountered an error
continuous-integration/drone/pr Build is passing
2026-01-16 00:35:05 +00:00
c99b9b2c09 Update typescript-eslint to ^8.53.0
Some checks failed
continuous-integration/drone/push Build encountered an error
continuous-integration/drone/pr Build is passing
2026-01-16 00:35:03 +00:00
23be7391ea Merge pull request 'Update dependency @mui/x-date-pickers to ^8.25.0' (#413) from renovate/mui-x-date-pickers-8.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-16 00:34:49 +00:00
682661f30f Merge pull request 'Update Rust crate chrono to 0.4.43' (#412) from renovate/chrono-0.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-16 00:34:22 +00:00
9f3fe2317c Update dependency @mui/x-date-pickers to ^8.25.0
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2026-01-15 00:42:40 +00:00
1b1872a9f5 Update Rust crate chrono to 0.4.43
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2026-01-15 00:42:38 +00:00
5be84cd908 Merge pull request 'Update Rust crate reqwest to 0.13.1' (#411) from renovate/reqwest-0.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-15 00:42:25 +00:00
4d4c55d277 Update Rust crate reqwest to 0.13.1
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2026-01-14 00:41:08 +00:00
52c1d6df7d Merge pull request 'Update dependency @mui/x-charts to ^8.24.0' (#410) from renovate/mui-x-charts-8.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-14 00:40:18 +00:00
8b8c6c3233 Update dependency @mui/x-charts to ^8.24.0
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2026-01-13 00:31:12 +00:00
0bab1c569d Merge pull request 'Update Rust crate serde_json to 1.0.149' (#409) from renovate/serde_json-1.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-13 00:31:01 +00:00
9a4d741588 Update Rust crate serde_json to 1.0.149
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2026-01-12 00:31:42 +00:00
aeeb188743 Merge pull request 'Update dependency @types/react to ^19.2.8' (#408) from renovate/react into master
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-12 00:31:33 +00:00
3c62477f11 Update dependency @types/react to ^19.2.8
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2026-01-11 00:30:51 +00:00
a903c1dad6 Merge pull request 'Update Rust crate libc to 0.2.180' (#407) from renovate/libc-0.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-11 00:30:46 +00:00
36b063eb0b Update Rust crate libc to 0.2.180
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2026-01-10 00:31:34 +00:00
a17c6aacd1 Merge pull request 'Update materialui to ^7.3.7' (#406) from renovate/materialui into master
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-10 00:31:25 +00:00
5dfbb44dcc Update materialui to ^7.3.7
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2026-01-09 00:27:19 +00:00
1dc8f11a0f Merge pull request 'Update dependency vite to ^7.3.1' (#405) from renovate/vite-7.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-09 00:27:05 +00:00
964003d8f7 Update dependency vite to ^7.3.1
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2026-01-08 00:27:57 +00:00
a8832a003e Merge pull request 'Update Rust crate rand to 0.10.0-rc.6' (#404) from renovate/rand-0.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-08 00:27:51 +00:00
0dc184faa7 Update Rust crate rand to 0.10.0-rc.6
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2026-01-07 00:27:42 +00:00
da25666d29 Merge pull request 'Update Rust crate libc to 0.2.179' (#403) from renovate/libc-0.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-07 00:27:31 +00:00
11e0196f48 Update Rust crate libc to 0.2.179
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2026-01-06 00:28:43 +00:00
b5527ed2cb Merge pull request 'Update Rust crate clap to 4.5.54' (#402) from renovate/clap-4.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-06 00:28:33 +00:00
f917b4e578 Update Rust crate clap to 4.5.54
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2026-01-05 00:28:52 +00:00
5e5a63282d Merge pull request 'Update dependency vite to ^7.3.0' (#401) from renovate/vite-7.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-05 00:28:34 +00:00
aca3c304e7 Update dependency vite to ^7.3.0
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2025-12-31 00:38:03 +00:00
ef8ea24cf3 Replace bincode with bincode_next
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-30 08:53:25 +01:00
a40f453989 Merge pull request 'Update dependency @mui/x-date-pickers to ^8.23.0' (#400) from renovate/mui-x-date-pickers-8.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-30 00:39:10 +00:00
8aaac8f686 Update dependency @mui/x-date-pickers to ^8.23.0
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2025-12-29 00:37:45 +00:00
daf2c957df Merge pull request 'Update Rust crate serde_json to 1.0.148' (#399) from renovate/serde_json-1.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-29 00:37:31 +00:00
b25aa37065 Update Rust crate serde_json to 1.0.148
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2025-12-28 00:35:26 +00:00
29c8f9a47a Merge pull request 'Update espressif/idf Docker tag to v5.5.2' (#398) from renovate/espressif-idf-5.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-28 00:35:13 +00:00
ba62f37615 Update espressif/idf Docker tag to v5.5.2
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2025-12-27 00:37:39 +00:00
cb07c78575 Merge pull request 'Update dependency @mui/x-charts to ^8.23.0' (#397) from renovate/mui-x-charts-8.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-27 00:37:32 +00:00
2c65de2f9c Update dependency @mui/x-charts to ^8.23.0
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2025-12-25 00:37:55 +00:00
8b24b8a5e6 Merge pull request 'Update Rust crate serde_json to 1.0.147' (#396) from renovate/serde_json-1.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-25 00:37:42 +00:00
ae6706bf71 Update Rust crate serde_json to 1.0.147
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2025-12-24 00:38:24 +00:00
d184d158d9 Merge pull request 'Update Rust crate reqwest to 0.12.28' (#395) from renovate/reqwest-0.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-24 00:38:14 +00:00
9a2a26f083 Update Rust crate reqwest to 0.12.28
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2025-12-23 00:35:43 +00:00
af6cd33e10 Merge pull request 'Update dependency react-router-dom to ^7.11.0' (#394) from renovate/react-router-dom-7.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-23 00:35:32 +00:00
ba006d3533 Update dependency react-router-dom to ^7.11.0
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2025-12-22 00:36:24 +00:00
4667f7da55 Merge pull request 'Update dependency @mui/x-date-pickers to ^8.22.1' (#393) from renovate/mui-x-date-pickers-8.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-22 00:36:13 +00:00
30f0cd255f Update dependency @mui/x-date-pickers to ^8.22.1
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2025-12-21 00:35:42 +00:00
78dfa49d58 Merge pull request 'Update dependency @mui/x-charts to ^8.22.1' (#392) from renovate/mui-x-charts-8.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-21 00:35:34 +00:00
5a06288c96 Update dependency @mui/x-charts to ^8.22.1
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2025-12-20 00:33:42 +00:00
70eda78fe5 Merge pull request 'Update Rust crate reqwest to 0.12.26' (#391) from renovate/reqwest-0.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-20 00:33:26 +00:00
b6d4b2bafb Update Rust crate reqwest to 0.12.26
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2025-12-19 00:36:32 +00:00
6267c0a16a Merge pull request 'Update react to ^19.2.3' (#390) from renovate/react into master
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-19 00:36:20 +00:00
24fc1df414 Update react to ^19.2.3
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2025-12-18 00:36:45 +00:00
67b714e57c Merge pull request 'Update dependency eslint-plugin-react-refresh to ^0.4.26' (#389) from renovate/eslint-plugin-react-refresh-0.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-18 00:36:24 +00:00
0235a7d8e2 Update dependency eslint-plugin-react-refresh to ^0.4.26
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2025-12-17 00:35:24 +00:00
5e73d68edf Merge pull request 'Update dependency date-and-time to ^4.1.2' (#388) from renovate/date-and-time-4.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-17 00:35:16 +00:00
14f741f1e7 Update dependency date-and-time to ^4.1.2
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2025-12-16 00:35:50 +00:00
ec44b92146 Merge pull request 'Update dependency eslint to ^9.39.2' (#387) from renovate/eslint-9.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-16 00:35:44 +00:00
e41afdebd1 Update dependency eslint to ^9.39.2
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2025-12-13 00:35:16 +00:00
3b9fd41905 Merge pull request 'Update egui to 0.33.3' (#386) from renovate/egui into master
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-13 00:35:07 +00:00
ad03f72f51 Update egui to 0.33.3
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2025-12-12 00:37:13 +00:00
b43b27a17e Merge pull request 'Update Rust crate reqwest to 0.12.25' (#385) from renovate/reqwest-0.x into master
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-12 00:37:06 +00:00
9a7cabe4a7 Update Rust crate reqwest to 0.12.25
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2025-12-10 00:36:45 +00:00
0d1baac2b7 Merge branch 'master' of ssh://gitea.communiquons.org:52001/pierre/SolarEnergy
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-09 18:22:50 +01:00
eae781a613 Fix bad default value 2025-12-09 19:22:25 +01:00
ff47f86792 Can check if relay is online or not 2025-12-09 14:54:01 +01:00
8398bb17ed Fix dependencies conflict
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
2025-12-09 14:00:02 +01:00
cfcb7a0ebb Merge branch 'master' of ssh://gitea.communiquons.org:52001/pierre/SolarEnergy
Some checks failed
continuous-integration/drone/push Build is failing
2025-12-09 13:55:10 +01:00
465477e862 Merge pull request 'Update dependency @typescript-eslint/eslint-plugin to ^8.49.0' (#384) from renovate/typescript-eslint-eslint-plugin-8.x into master
Some checks failed
continuous-integration/drone/push Build is failing
2025-12-09 00:36:12 +00:00
6075085b0b Update dependency @typescript-eslint/eslint-plugin to ^8.49.0
Some checks failed
renovate/artifacts Artifact file update failure
continuous-integration/drone/push Build is failing
continuous-integration/drone/pr Build is failing
2025-12-09 00:36:02 +00:00
c469d49ff7 Update custom consumption dependencies
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
2025-12-08 20:45:04 +01:00
45ece6d052 Add anonymous route to get access to all relays at once
Some checks failed
continuous-integration/drone/push Build is failing
2025-12-08 20:16:57 +01:00
fee7841253 Update frontend dependencies 2025-12-08 18:52:29 +01:00
af69a3f1d9 Updated backend dependencies 2025-12-08 15:36:31 +01:00
c30e2327e0 Merge pull request 'Update dependency typescript-eslint to ^8.48.1' (#383) from renovate/typescript-eslint-8.x into master
Some checks failed
continuous-integration/drone/push Build is failing
2025-12-07 00:35:45 +00:00
11 changed files with 2549 additions and 1917 deletions

View File

@@ -5,7 +5,7 @@ name: default
steps: steps:
- name: web_build - name: web_build
image: node:23 image: node:25
volumes: volumes:
- name: web_app - name: web_app
path: /tmp/web_build path: /tmp/web_build
@@ -63,7 +63,7 @@ steps:
# Build ESP32 program # Build ESP32 program
- name: esp32_compile - name: esp32_compile
image: espressif/idf:v5.5.1 image: espressif/idf:v5.5.2
volumes: volumes:
- name: releases - name: releases
path: /tmp/releases path: /tmp/releases

File diff suppressed because it is too large Load Diff

View File

@@ -4,24 +4,24 @@ version = "1.0.3"
edition = "2024" edition = "2024"
[dependencies] [dependencies]
log = "0.4.28" log = "0.4.29"
env_logger = "0.11.8" env_logger = "0.11.8"
lazy_static = "1.5.0" lazy_static = "1.5.0"
dotenvy = "0.15.7" dotenvy = "0.15.7"
clap = { version = "4.5.53", features = ["derive", "env"] } clap = { version = "4.5.54", features = ["derive", "env"] }
anyhow = "1.0.100" anyhow = "1.0.100"
thiserror = "2.0.17" thiserror = "2.0.18"
openssl = { version = "0.10.75" } openssl = { version = "0.10.75" }
openssl-sys = "0.9.111" openssl-sys = "0.9.111"
libc = "0.2.177" libc = "0.2.180"
foreign-types-shared = "0.1.1" foreign-types-shared = "0.1.1"
asn1 = "0.23.0" asn1 = "0.23.0"
actix-web = { version = "4.12.1", features = ["openssl"] } actix-web = { version = "4.12.1", features = ["openssl"] }
futures = "0.3.31" futures = "0.3.31"
serde = { version = "1.0.228", features = ["derive"] } serde = { version = "1.0.228", features = ["derive"] }
reqwest = { version = "0.12.24", features = ["json"] } reqwest = { version = "0.13.1", features = ["json"] }
serde_json = "1.0.145" serde_json = "1.0.149"
rand = "0.10.0-rc.5" rand = "0.10.0-rc.6"
actix = "0.13.5" actix = "0.13.5"
actix-identity = "0.9.0" actix-identity = "0.9.0"
actix-session = { version = "0.11.0", features = ["cookie-session"] } actix-session = { version = "0.11.0", features = ["cookie-session"] }
@@ -29,18 +29,18 @@ actix-cors = "0.7.1"
actix-multipart = { version = "0.7.2", features = ["derive"] } actix-multipart = { version = "0.7.2", features = ["derive"] }
actix-remote-ip = "0.1.0" actix-remote-ip = "0.1.0"
futures-util = "0.3.31" futures-util = "0.3.31"
uuid = { version = "1.18.1", features = ["v4", "serde"] } uuid = { version = "1.19.0", features = ["v4", "serde"] }
semver = { version = "1.0.27", features = ["serde"] } semver = { version = "1.0.27", features = ["serde"] }
lazy-regex = "3.4.2" lazy-regex = "3.4.2"
tokio = { version = "1.48.0", features = ["full"] } tokio = { version = "1.48.0", features = ["full"] }
tokio_schedule = "0.3.2" tokio_schedule = "0.3.2"
mime_guess = "2.0.5" mime_guess = "2.0.5"
rust-embed = "8.8.0" rust-embed = "8.11.0"
jsonwebtoken = { version = "10.1.0", features = ["use_pem", "rust_crypto"] } jsonwebtoken = { version = "10.2.0", features = ["use_pem", "rust_crypto"] }
prettytable-rs = "0.10.0" prettytable-rs = "0.10.0"
chrono = "0.4.42" chrono = "0.4.43"
serde_yml = "0.0.12" serde_yml = "0.0.12"
bincode = "2.0.1" bincode-next = "2.0.4"
fs4 = { version = "0.13.1", features = ["sync"] } fs4 = { version = "0.13.1", features = ["sync"] }
zip = { version = "6.0.0", features = ["bzip2"] } zip = { version = "6.0.0", features = ["bzip2"] }
walkdir = "2.5.0" walkdir = "2.5.0"

View File

@@ -29,9 +29,9 @@ impl ConsumptionHistoryFile {
if path.exists() { if path.exists() {
Ok(Self { Ok(Self {
day, day,
buff: bincode::decode_from_slice( buff: bincode_next::decode_from_slice(
&std::fs::read(path)?, &std::fs::read(path)?,
bincode::config::standard(), bincode_next::config::standard(),
)? )?
.0, .0,
r#type, r#type,
@@ -94,7 +94,7 @@ impl ConsumptionHistoryFile {
let path = AppConfig::get().energy_consumption_history_day(self.day, self.r#type); let path = AppConfig::get().energy_consumption_history_day(self.day, self.r#type);
std::fs::write( std::fs::write(
path, path,
bincode::encode_to_vec(&self.buff, bincode::config::standard())?, bincode_next::encode_to_vec(&self.buff, bincode_next::config::standard())?,
)?; )?;
Ok(()) Ok(())
} }

View File

@@ -389,7 +389,7 @@ impl Handler<SynchronizeDevice> for EnergyActor {
pub struct ResDevState { pub struct ResDevState {
pub id: DeviceId, pub id: DeviceId,
last_ping: u64, last_ping: u64,
online: bool, pub online: bool,
} }
/// Get the state of devices /// Get the state of devices

View File

@@ -48,6 +48,10 @@ pub async fn unsecure_server(energy_actor: EnergyActorAddr) -> anyhow::Result<()
"/relay/{id}/legacy_state", "/relay/{id}/legacy_state",
web::get().to(unsecure_relay_controller::legacy_state), web::get().to(unsecure_relay_controller::legacy_state),
) )
.route(
"/relay/relays_full_state",
web::get().to(unsecure_relay_controller::relays_full_state),
)
}) })
.bind(&AppConfig::get().unsecure_listen_address)? .bind(&AppConfig::get().unsecure_listen_address)?
.run() .run()

View File

@@ -1,5 +1,6 @@
use crate::devices::device::DeviceRelayID; use crate::devices::device::DeviceRelayID;
use crate::energy::{energy_actor, relay_state_history}; use crate::energy::engine::RelayForcedState;
use crate::energy::{consumption, energy_actor, relay_state_history};
use crate::server::WebEnergyActor; use crate::server::WebEnergyActor;
use crate::server::custom_error::HttpResult; use crate::server::custom_error::HttpResult;
use actix_web::{HttpResponse, web}; use actix_web::{HttpResponse, web};
@@ -58,3 +59,80 @@ pub async fn legacy_state(
required_uptime: relay.daily_runtime.map(|r| r.min_runtime).unwrap_or(0), required_uptime: relay.daily_runtime.map(|r| r.min_runtime).unwrap_or(0),
})) }))
} }
#[derive(serde::Serialize)]
pub struct FullRelayState {
/// Indicates if the relay (or its parent device) is enabled or not
enabled: bool,
/// Indicate if the device is online or not
online: bool,
/// Indicates if relay is on or off
is_on: bool,
/// Relay name
name: String,
/// Relay priority (0 = lowest)
priority: usize,
/// Duration since last change of state
r#for: usize,
/// Total uptime since last reset
total_uptime: usize,
/// Required uptime during a day (in seconds)
daily_requirement: Option<usize>,
/// Forced relay state
forced_state: RelayForcedState,
}
#[derive(serde::Serialize)]
pub struct RelaysFullState {
/// Current global consumption, if successful
curr_consumption: Option<i32>,
/// Cached consumption
cached_consumption: i32,
/// Total relays consumptions
relays_consumption: usize,
/// Individual relays state
relays: Vec<FullRelayState>,
}
pub async fn relays_full_state(energy_actor: WebEnergyActor) -> HttpResult {
let cached_consumption = energy_actor.send(energy_actor::GetCurrConsumption).await?;
let relays_consumption = energy_actor.send(energy_actor::RelaysConsumption).await?;
let curr_consumption = consumption::get_curr_consumption().await.ok();
let devices = energy_actor.send(energy_actor::GetDeviceLists).await?;
let devices_state = energy_actor.send(energy_actor::GetDevicesState).await?;
let mut relays = energy_actor.send(energy_actor::GetRelaysList).await?;
relays.sort_by_key(|r| -(r.priority as i64));
let relays_state = energy_actor.send(energy_actor::GetAllRelaysState).await?;
Ok(HttpResponse::Ok().json(RelaysFullState {
curr_consumption,
cached_consumption,
relays_consumption,
relays: relays
.into_iter()
.map(|r| {
let device = devices
.iter()
.find(|d| d.relays.iter().any(|sr| sr.id == r.id))
.expect("All relay shall have an associated device!");
let device_state = devices_state.iter().find(|s| s.id == device.id);
let relay_state = relays_state.iter().find(|s| s.id == r.id);
let total_uptime = relay_state_history::relay_total_runtime_adjusted(&r);
FullRelayState {
enabled: r.enabled && device.enabled,
online: device_state.map(|d| d.online).unwrap_or(false),
is_on: relay_state.map(|s| s.on).unwrap_or(false),
name: r.name,
priority: r.priority,
r#for: relay_state.map(|s| s.r#for).unwrap_or(0),
total_uptime,
daily_requirement: r.daily_runtime.map(|r| r.min_runtime),
forced_state: relay_state
.map(|s| s.forced_state.clone())
.unwrap_or_default(),
}
})
.collect(),
}))
}

File diff suppressed because it is too large Load Diff

View File

@@ -15,31 +15,31 @@
"@fontsource/roboto": "^5.2.9", "@fontsource/roboto": "^5.2.9",
"@mdi/js": "^7.4.47", "@mdi/js": "^7.4.47",
"@mdi/react": "^1.6.1", "@mdi/react": "^1.6.1",
"@mui/icons-material": "^7.3.5", "@mui/icons-material": "^7.3.7",
"@mui/material": "^7.3.5", "@mui/material": "^7.3.7",
"@mui/x-charts": "^8.20.0", "@mui/x-charts": "^8.25.0",
"@mui/x-date-pickers": "^8.19.0", "@mui/x-date-pickers": "^8.25.0",
"date-and-time": "^4.1.1", "date-and-time": "^4.1.2",
"dayjs": "^1.11.19", "dayjs": "^1.11.19",
"filesize": "^11.0.13", "filesize": "^11.0.13",
"react": "^19.2.0", "react": "^19.2.3",
"react-dom": "^19.2.0", "react-dom": "^19.2.3",
"react-router-dom": "^7.9.6", "react-router-dom": "^7.11.0",
"semver": "^7.7.3" "semver": "^7.7.3"
}, },
"devDependencies": { "devDependencies": {
"@types/react": "^19.2.7", "@types/react": "^19.2.8",
"@types/react-dom": "^19.2.3", "@types/react-dom": "^19.2.3",
"@types/semver": "^7.7.1", "@types/semver": "^7.7.1",
"@typescript-eslint/eslint-plugin": "^8.48.1", "@typescript-eslint/eslint-plugin": "^8.53.1",
"@typescript-eslint/parser": "^8.48.1", "@typescript-eslint/parser": "^8.53.1",
"@vitejs/plugin-react": "^5.1.1", "@vitejs/plugin-react": "^5.1.2",
"eslint": "^9.39.1", "eslint": "^9.39.2",
"eslint-plugin-react-hooks": "^7.0.1", "eslint-plugin-react-hooks": "^7.0.1",
"eslint-plugin-react-refresh": "^0.4.24", "eslint-plugin-react-refresh": "^0.4.26",
"globals": "^16.5.0", "globals": "^16.5.0",
"typescript": "^5.9.3", "typescript": "^5.9.3",
"typescript-eslint": "^8.48.1", "typescript-eslint": "^8.53.1",
"vite": "^7.2.6" "vite": "^7.3.1"
} }
} }

File diff suppressed because it is too large Load Diff

View File

@@ -5,8 +5,8 @@ edition = "2024"
[dependencies] [dependencies]
env_logger = "0.11.8" env_logger = "0.11.8"
log = "0.4.28" log = "0.4.29"
clap = { version = "4.5.53", features = ["derive", "env"] } clap = { version = "4.5.54", features = ["derive", "env"] }
egui = "0.33.2" egui = "0.33.3"
eframe = "0.32.3" eframe = "0.33.3"
lazy_static = "1.5.0" lazy_static = "1.5.0"