Compare commits
150 Commits
45ece6d052
...
renovate/f
| Author | SHA1 | Date | |
|---|---|---|---|
| 6681ea29d8 | |||
| d0b8c34ecd | |||
| c3d0120376 | |||
| 842571506f | |||
| e1943dfb8b | |||
| f1d8a6f4c4 | |||
| a12d95b5d1 | |||
| 4594f61725 | |||
| a17baa3d1c | |||
| a5f0e90c39 | |||
| 1a16a562ce | |||
| 8388017788 | |||
| 109a9aff0b | |||
| d6310d75df | |||
| ff5739ea9b | |||
| 9b3d7fd600 | |||
| f26ffee9d2 | |||
| a638bd3f84 | |||
| 688b304eb6 | |||
| eaed7a59bd | |||
| 4abb416a9a | |||
| 19dd75498e | |||
| 912077dbbb | |||
| 5aa0fed50f | |||
| cc2ee8f47f | |||
| c772529f13 | |||
| 713bdd3085 | |||
| aebee1b347 | |||
| 90cdfd8c7a | |||
| 29093662fe | |||
| d5079b5741 | |||
| 1c380f7eee | |||
| b7ca199736 | |||
| 6b43b90028 | |||
| 2b4f43e639 | |||
| 99456da11e | |||
| 504417c3b5 | |||
| d3c6280fba | |||
| bd91e1b624 | |||
| c6e3162f9a | |||
| caa8db3256 | |||
| 29b6da5c62 | |||
| d44a2e6ab0 | |||
| bb6290585f | |||
| bd5223900b | |||
| 3b28567136 | |||
| deb988983b | |||
| f204919cc4 | |||
| dc834c6ae9 | |||
| d3e08402a8 | |||
| b7cfd3d518 | |||
| b1ba264a84 | |||
| 28ec599432 | |||
| 3894a85d99 | |||
| 42be5c1847 | |||
| 63caa0569d | |||
| f9f906e268 | |||
| 8a5b9bacd4 | |||
| 35b2e9408f | |||
| 06cf1c1cd3 | |||
| 73b607d023 | |||
| 1d9375b85d | |||
| f42b452640 | |||
| d6ebf91939 | |||
| 09c15190c8 | |||
| b13f16d451 | |||
| 7d793c360b | |||
| 05f54d6c32 | |||
| 6d5991c406 | |||
| 726e3fc3ba | |||
| 41acf82c96 | |||
| 0cbbb5c087 | |||
| eef82578db | |||
| b77754f79e | |||
| eeebc124c7 | |||
| 230bd453ab | |||
| 53bd6e0e5d | |||
| 8c44776ebf | |||
| 6f5f571abe | |||
| 30d5768a8d | |||
| 05b99ce907 | |||
| 057dd6bd13 | |||
| c99b9b2c09 | |||
| 23be7391ea | |||
| 682661f30f | |||
| 9f3fe2317c | |||
| 1b1872a9f5 | |||
| 5be84cd908 | |||
| 4d4c55d277 | |||
| 52c1d6df7d | |||
| 8b8c6c3233 | |||
| 0bab1c569d | |||
| 9a4d741588 | |||
| aeeb188743 | |||
| 3c62477f11 | |||
| a903c1dad6 | |||
| 36b063eb0b | |||
| a17c6aacd1 | |||
| 5dfbb44dcc | |||
| 1dc8f11a0f | |||
| 964003d8f7 | |||
| a8832a003e | |||
| 0dc184faa7 | |||
| da25666d29 | |||
| 11e0196f48 | |||
| b5527ed2cb | |||
| f917b4e578 | |||
| 5e5a63282d | |||
| aca3c304e7 | |||
| ef8ea24cf3 | |||
| a40f453989 | |||
| 8aaac8f686 | |||
| daf2c957df | |||
| b25aa37065 | |||
| 29c8f9a47a | |||
| ba62f37615 | |||
| cb07c78575 | |||
| 2c65de2f9c | |||
| 8b24b8a5e6 | |||
| ae6706bf71 | |||
| d184d158d9 | |||
| 9a2a26f083 | |||
| af6cd33e10 | |||
| ba006d3533 | |||
| 4667f7da55 | |||
| 30f0cd255f | |||
| 78dfa49d58 | |||
| 5a06288c96 | |||
| 70eda78fe5 | |||
| b6d4b2bafb | |||
| 6267c0a16a | |||
| 24fc1df414 | |||
| 67b714e57c | |||
| 0235a7d8e2 | |||
| 5e73d68edf | |||
| 14f741f1e7 | |||
| ec44b92146 | |||
| e41afdebd1 | |||
| 3b9fd41905 | |||
| ad03f72f51 | |||
| b43b27a17e | |||
| 9a7cabe4a7 | |||
| 0d1baac2b7 | |||
| eae781a613 | |||
| ff47f86792 | |||
| 8398bb17ed | |||
| cfcb7a0ebb | |||
| 465477e862 | |||
| 6075085b0b | |||
| c469d49ff7 |
@@ -5,7 +5,7 @@ name: default
|
||||
|
||||
steps:
|
||||
- name: web_build
|
||||
image: node:23
|
||||
image: node:25
|
||||
volumes:
|
||||
- name: web_app
|
||||
path: /tmp/web_build
|
||||
@@ -63,7 +63,7 @@ steps:
|
||||
|
||||
# Build ESP32 program
|
||||
- name: esp32_compile
|
||||
image: espressif/idf:v5.5.1
|
||||
image: espressif/idf:v5.5.3
|
||||
volumes:
|
||||
- name: releases
|
||||
path: /tmp/releases
|
||||
|
||||
766
central_backend/Cargo.lock
generated
766
central_backend/Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -5,23 +5,23 @@ edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
log = "0.4.29"
|
||||
env_logger = "0.11.8"
|
||||
env_logger = "0.11.9"
|
||||
lazy_static = "1.5.0"
|
||||
dotenvy = "0.15.7"
|
||||
clap = { version = "4.5.53", features = ["derive", "env"] }
|
||||
anyhow = "1.0.100"
|
||||
thiserror = "2.0.17"
|
||||
clap = { version = "4.5.60", features = ["derive", "env"] }
|
||||
anyhow = "1.0.102"
|
||||
thiserror = "2.0.18"
|
||||
openssl = { version = "0.10.75" }
|
||||
openssl-sys = "0.9.111"
|
||||
libc = "0.2.178"
|
||||
libc = "0.2.181"
|
||||
foreign-types-shared = "0.1.1"
|
||||
asn1 = "0.23.0"
|
||||
actix-web = { version = "4.12.1", features = ["openssl"] }
|
||||
futures = "0.3.31"
|
||||
futures = "0.3.32"
|
||||
serde = { version = "1.0.228", features = ["derive"] }
|
||||
reqwest = { version = "0.12.24", features = ["json"] }
|
||||
serde_json = "1.0.145"
|
||||
rand = "0.10.0-rc.5"
|
||||
reqwest = { version = "0.13.1", features = ["json"] }
|
||||
serde_json = "1.0.149"
|
||||
rand = "0.10.0"
|
||||
actix = "0.13.5"
|
||||
actix-identity = "0.9.0"
|
||||
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-remote-ip = "0.1.0"
|
||||
futures-util = "0.3.31"
|
||||
uuid = { version = "1.19.0", features = ["v4", "serde"] }
|
||||
uuid = { version = "1.20.0", features = ["v4", "serde"] }
|
||||
semver = { version = "1.0.27", features = ["serde"] }
|
||||
lazy-regex = "3.4.2"
|
||||
tokio = { version = "1.48.0", features = ["full"] }
|
||||
lazy-regex = "3.5.1"
|
||||
tokio = { version = "1.49.0", features = ["full"] }
|
||||
tokio_schedule = "0.3.2"
|
||||
mime_guess = "2.0.5"
|
||||
rust-embed = "8.9.0"
|
||||
jsonwebtoken = { version = "10.2.0", features = ["use_pem", "rust_crypto"] }
|
||||
rust-embed = "8.11.0"
|
||||
jsonwebtoken = { version = "10.3.0", features = ["use_pem", "rust_crypto"] }
|
||||
prettytable-rs = "0.10.0"
|
||||
chrono = "0.4.42"
|
||||
chrono = "0.4.44"
|
||||
serde_yml = "0.0.12"
|
||||
bincode = "2.0.1"
|
||||
bincode-next = "2.0.4"
|
||||
fs4 = { version = "0.13.1", features = ["sync"] }
|
||||
zip = { version = "6.0.0", features = ["bzip2"] }
|
||||
walkdir = "2.5.0"
|
||||
|
||||
@@ -29,9 +29,9 @@ impl ConsumptionHistoryFile {
|
||||
if path.exists() {
|
||||
Ok(Self {
|
||||
day,
|
||||
buff: bincode::decode_from_slice(
|
||||
buff: bincode_next::decode_from_slice(
|
||||
&std::fs::read(path)?,
|
||||
bincode::config::standard(),
|
||||
bincode_next::config::standard(),
|
||||
)?
|
||||
.0,
|
||||
r#type,
|
||||
@@ -94,7 +94,7 @@ impl ConsumptionHistoryFile {
|
||||
let path = AppConfig::get().energy_consumption_history_day(self.day, self.r#type);
|
||||
std::fs::write(
|
||||
path,
|
||||
bincode::encode_to_vec(&self.buff, bincode::config::standard())?,
|
||||
bincode_next::encode_to_vec(&self.buff, bincode_next::config::standard())?,
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -389,7 +389,7 @@ impl Handler<SynchronizeDevice> for EnergyActor {
|
||||
pub struct ResDevState {
|
||||
pub id: DeviceId,
|
||||
last_ping: u64,
|
||||
online: bool,
|
||||
pub online: bool,
|
||||
}
|
||||
|
||||
/// Get the state of devices
|
||||
|
||||
@@ -64,6 +64,8 @@ pub async fn legacy_state(
|
||||
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
|
||||
@@ -77,7 +79,7 @@ pub struct FullRelayState {
|
||||
/// Required uptime during a day (in seconds)
|
||||
daily_requirement: Option<usize>,
|
||||
/// Forced relay state
|
||||
relay_forced_state: RelayForcedState,
|
||||
forced_state: RelayForcedState,
|
||||
}
|
||||
|
||||
#[derive(serde::Serialize)]
|
||||
@@ -96,6 +98,8 @@ 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?;
|
||||
@@ -107,16 +111,26 @@ pub async fn relays_full_state(energy_actor: WebEnergyActor) -> HttpResult {
|
||||
relays: relays
|
||||
.into_iter()
|
||||
.map(|r| {
|
||||
let state = relays_state.iter().find(|s| s.id == r.id);
|
||||
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,
|
||||
is_on: state.map(|s| s.on).unwrap_or(false),
|
||||
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: state.map(|s| s.r#for).unwrap_or(0),
|
||||
total_uptime: 0,
|
||||
r#for: relay_state.map(|s| s.r#for).unwrap_or(0),
|
||||
total_uptime,
|
||||
daily_requirement: r.daily_runtime.map(|r| r.min_runtime),
|
||||
relay_forced_state: state.map(|s| s.forced_state.clone()).unwrap_or_default(),
|
||||
forced_state: relay_state
|
||||
.map(|s| s.forced_state.clone())
|
||||
.unwrap_or_default(),
|
||||
}
|
||||
})
|
||||
.collect(),
|
||||
|
||||
1259
central_frontend/package-lock.json
generated
1259
central_frontend/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -12,34 +12,34 @@
|
||||
"dependencies": {
|
||||
"@emotion/react": "^11.14.0",
|
||||
"@emotion/styled": "^11.14.1",
|
||||
"@fontsource/roboto": "^5.2.9",
|
||||
"@fontsource/roboto": "^5.2.10",
|
||||
"@mdi/js": "^7.4.47",
|
||||
"@mdi/react": "^1.6.1",
|
||||
"@mui/icons-material": "^7.3.6",
|
||||
"@mui/material": "^7.3.6",
|
||||
"@mui/x-charts": "^8.21.0",
|
||||
"@mui/x-date-pickers": "^8.21.0",
|
||||
"date-and-time": "^4.1.1",
|
||||
"@mui/icons-material": "^7.3.8",
|
||||
"@mui/material": "^7.3.8",
|
||||
"@mui/x-charts": "^8.26.0",
|
||||
"@mui/x-date-pickers": "^8.26.0",
|
||||
"date-and-time": "^4.2.0",
|
||||
"dayjs": "^1.11.19",
|
||||
"filesize": "^11.0.13",
|
||||
"react": "^19.2.1",
|
||||
"react-dom": "^19.2.1",
|
||||
"react-router-dom": "^7.10.1",
|
||||
"semver": "^7.7.3"
|
||||
"react": "^19.2.4",
|
||||
"react-dom": "^19.2.4",
|
||||
"react-router-dom": "^7.13.1",
|
||||
"semver": "^7.7.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/react": "^19.2.7",
|
||||
"@types/react": "^19.2.14",
|
||||
"@types/react-dom": "^19.2.3",
|
||||
"@types/semver": "^7.7.1",
|
||||
"@typescript-eslint/eslint-plugin": "^8.48.1",
|
||||
"@typescript-eslint/parser": "^8.48.1",
|
||||
"@vitejs/plugin-react": "^5.1.2",
|
||||
"eslint": "^9.39.1",
|
||||
"@typescript-eslint/eslint-plugin": "^8.56.0",
|
||||
"@typescript-eslint/parser": "^8.56.0",
|
||||
"@vitejs/plugin-react": "^5.1.4",
|
||||
"eslint": "^9.39.3",
|
||||
"eslint-plugin-react-hooks": "^7.0.1",
|
||||
"eslint-plugin-react-refresh": "^0.4.24",
|
||||
"eslint-plugin-react-refresh": "^0.5.2",
|
||||
"globals": "^16.5.0",
|
||||
"typescript": "^5.9.3",
|
||||
"typescript-eslint": "^8.48.1",
|
||||
"vite": "^7.2.7"
|
||||
"typescript-eslint": "^8.56.0",
|
||||
"vite": "^7.3.1"
|
||||
}
|
||||
}
|
||||
|
||||
1682
custom_consumption/Cargo.lock
generated
1682
custom_consumption/Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -4,9 +4,9 @@ version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
env_logger = "0.11.8"
|
||||
log = "0.4.28"
|
||||
clap = { version = "4.5.53", features = ["derive", "env"] }
|
||||
egui = "0.33.2"
|
||||
eframe = "0.32.3"
|
||||
env_logger = "0.11.9"
|
||||
log = "0.4.29"
|
||||
clap = { version = "4.5.60", features = ["derive", "env"] }
|
||||
egui = "0.33.3"
|
||||
eframe = "0.33.3"
|
||||
lazy_static = "1.5.0"
|
||||
|
||||
Reference in New Issue
Block a user