store backup now in binary, and let backend serialize/deserialize

This commit is contained in:
2026-04-05 13:30:11 +02:00
parent 1fa765a5d8
commit 4d4fcbe33b
9 changed files with 121 additions and 204 deletions

View File

@@ -1,17 +1,17 @@
use crate::hal::PLANT_COUNT;
use crate::plant_state::PlantWateringMode;
use alloc::string::String;
use core::str::FromStr;
use alloc::string::{String, ToString};
use bincode::{Decode, Encode};
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Encode, Decode)]
#[serde(default)]
pub struct NetworkConfig {
pub ap_ssid: heapless::String<32>,
pub ssid: Option<heapless::String<32>>,
pub password: Option<heapless::String<64>>,
pub ap_ssid: String,
pub ssid: Option<String>,
pub password: Option<String>,
pub mqtt_url: Option<String>,
pub base_topic: Option<heapless::String<64>>,
pub base_topic: Option<String>,
pub mqtt_user: Option<String>,
pub mqtt_password: Option<String>,
pub max_wait: u32,
@@ -19,7 +19,7 @@ pub struct NetworkConfig {
impl Default for NetworkConfig {
fn default() -> Self {
Self {
ap_ssid: heapless::String::from_str("PlantCtrl Init").unwrap(),
ap_ssid: "PlantCtrl Init".to_string(),
ssid: None,
password: None,
mqtt_url: None,
@@ -31,7 +31,7 @@ impl Default for NetworkConfig {
}
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Encode, Decode)]
#[serde(default)]
pub struct NightLampConfig {
pub enabled: bool,
@@ -54,7 +54,7 @@ impl Default for NightLampConfig {
}
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Encode, Decode)]
#[serde(default)]
pub struct TankConfig {
pub tank_sensor_enabled: bool,
@@ -79,26 +79,26 @@ impl Default for TankConfig {
}
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Default)]
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Default, Encode, Decode)]
pub enum BatteryBoardVersion {
#[default]
Disabled,
WchI2cSlave,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Default)]
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Default, Encode, Decode)]
pub enum BoardVersion {
Initial,
#[default]
V4,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Default)]
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Default, Encode, Decode)]
pub struct BoardHardware {
pub board: BoardVersion,
pub battery: BatteryBoardVersion,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Default)]
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Default, Encode, Decode)]
#[serde(default)]
pub struct PlantControllerConfig {
pub hardware: BoardHardware,
@@ -109,7 +109,7 @@ pub struct PlantControllerConfig {
pub timezone: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Encode, Decode)]
#[serde(default)]
pub struct PlantConfig {
pub mode: PlantWateringMode,