From 3d76575e1f8b97d2a49959d3844cc0648bd449e8 Mon Sep 17 00:00:00 2001 From: eric Date: Wed, 9 Apr 2025 22:47:38 +0200 Subject: [PATCH 1/3] add publish flag to SensorData and update MQTT publishing logic --- src/domain.rs | 1 + src/sensors_task.rs | 5 +++-- src/update_task.rs | 25 +++++++++++++++++++++---- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/domain.rs b/src/domain.rs index 6629cee..c48e93c 100644 --- a/src/domain.rs +++ b/src/domain.rs @@ -17,6 +17,7 @@ const MOISTURE_DRY_THRESHOLD: f32 = 0.15; #[derive(Default, Debug)] pub struct SensorData { pub data: Vec, + pub publish: bool, } impl Display for SensorData { diff --git a/src/sensors_task.rs b/src/sensors_task.rs index f3a7656..fe1272b 100644 --- a/src/sensors_task.rs +++ b/src/sensors_task.rs @@ -199,10 +199,11 @@ pub async fn sensor_task( .data .push(Sensor::BatteryVoltage(avg_battery_voltage)) .expect("Too many samples"); - } else { - println!("Error measuring battery voltage"); } + // no battery samples - no publish! + sensor_data.publish = !battery_voltage_samples.is_empty(); + if battery_voltage_samples.is_empty() { println!( "No battery voltage samples collected - skipping this cycle {:?}", diff --git a/src/update_task.rs b/src/update_task.rs index 8274c44..bbcf378 100644 --- a/src/update_task.rs +++ b/src/update_task.rs @@ -146,6 +146,20 @@ async fn handle_sensor_data( client: &mut MqttClientImpl<'_>, display: &mut Display<'static, Delay>, sensor_data: SensorData, +) -> Result<(), Error> { + if sensor_data.publish { + process_mqtt(client, &sensor_data).await?; + } else { + println!("skipping publishing to MQTT"); + } + + process_display(display, &sensor_data).await?; + Ok(()) +} + +async fn process_mqtt( + client: &mut MqttClientImpl<'_>, + sensor_data: &SensorData, ) -> Result<(), Error> { let discovery_messages_sent = unsafe { DISCOVERY_MESSAGES_SENT }; if !discovery_messages_sent { @@ -216,8 +230,6 @@ async fn handle_sensor_data( .await?; } - display.write_multiline(&format!("{}", sensor_data))?; - let pump_topic = format!("{}/pump/state", DEVICE_ID); let message = "OFF"; println!( @@ -234,11 +246,16 @@ async fn handle_sensor_data( false, ) .await?; + Ok(()) +} +async fn process_display( + display: &mut Display<'static, Delay>, + sensor_data: &SensorData, +) -> Result<(), Error> { + display.write_multiline(&format!("{}", sensor_data))?; Timer::after(Duration::from_secs(AWAKE_DURATION_SECONDS)).await; - display.enable_powersave()?; - Ok(()) } From 861fefecb25d8939ee713c5d341ba84994246e51 Mon Sep 17 00:00:00 2001 From: eric Date: Wed, 9 Apr 2025 22:48:58 +0200 Subject: [PATCH 2/3] simplify sensor task logic by always sending sensor data and removing empty sample check --- src/sensors_task.rs | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/sensors_task.rs b/src/sensors_task.rs index fe1272b..71e9648 100644 --- a/src/sensors_task.rs +++ b/src/sensors_task.rs @@ -204,14 +204,7 @@ pub async fn sensor_task( // no battery samples - no publish! sensor_data.publish = !battery_voltage_samples.is_empty(); - if battery_voltage_samples.is_empty() { - println!( - "No battery voltage samples collected - skipping this cycle {:?}", - &sensor_data - ); - } else { - sender.send(sensor_data).await; - } + sender.send(sensor_data).await; // Power off the sensors moisture_power_pin.set_low(); From e357717519b52d82c1ef44c1687170d6251289cb Mon Sep 17 00:00:00 2001 From: eric Date: Sun, 20 Apr 2025 20:38:38 +0200 Subject: [PATCH 3/3] update serde and esp-backtrace dependencies; refactor pump trigger logic in update_task --- Cargo.lock | 8 ++++---- Cargo.toml | 8 ++++---- src/update_task.rs | 8 +++----- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 74e65e9..2a46dfe 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1136,18 +1136,18 @@ checksum = "407ec8d274cd77556e9c2bef886df91eb3447b4059e603d6fb19f85e6452e275" [[package]] name = "serde" -version = "1.0.218" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.218" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 4715479..0a421e0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" edition = "2021" [dependencies] -esp-backtrace = { version = "0.15.0", features = [ +esp-backtrace = { version = "0.15.1", features = [ "esp32s3", "exception-handler", "panic-handler", @@ -36,12 +36,12 @@ rust-mqtt = { version = "0.3.0", default-features = false, features = [] } embedded-text = "0.7.2" embedded-graphics = { version = "0.8.1", features = [] } embedded-hal = { version = "1.0.0", features = [] } -serde = { version = "1.0.215", default-features = false, features = ["derive"] } -serde_json = { version = "1.0.133", default-features = false, features = [ +serde = { version = "1.0.219", default-features = false, features = ["derive"] } +serde_json = { version = "1.0.140", default-features = false, features = [ "alloc", ] } embassy-futures = { version = "0.1.1", features = [] } -embassy-sync = { version = "0.6.0", features = [] } +embassy-sync = { version = "0.6.2", features = [] } static_cell = "2.1.0" nb = { version = "1.1.0", features = [] } diff --git a/src/update_task.rs b/src/update_task.rs index bbcf378..aada2a1 100644 --- a/src/update_task.rs +++ b/src/update_task.rs @@ -200,11 +200,9 @@ async fn process_mqtt( println!("Water level is full, stopping pump"); update_pump_state(false); } else if let Sensor::PumpTrigger(enabled) = entry { - // Pump trigger is enabled, start the pump - if *enabled { - println!("Soil moisture is low, starting pump"); - update_pump_state(true); - } + let enabled = *enabled; + println!("Pump trigger value: {} - updating pump state", enabled); + update_pump_state(enabled); } });