streamline tank state mqtt information structure

This commit is contained in:
2025-03-15 15:16:20 +01:00
parent b993f2b037
commit 4a334ef2f2
2 changed files with 78 additions and 58 deletions

View File

@@ -401,41 +401,32 @@ fn safe_main() -> anyhow::Result<()> {
let dry_run = false;
let tank_state = determine_tank_state(&mut board, &config);
let mut tank_state_mqtt = TankStateMQTT {
enough_water: tank_state.enough_water,
left_ml: tank_state.left_ml,
warn_level: tank_state.warn_level,
sensor_error: tank_state.sensor_error,
raw: tank_state.raw,
water_frozen: "".to_owned(),
};
let mut water_frozen = false;
let mut temp: Option<f32> = None;
for _attempt in 0..5 {
let water_temperature = board.water_temperature_c();
match water_temperature {
let mut attempt = 1;
let water_temp: Result<f32, anyhow::Error> = loop {
let temp = board.water_temperature_c();
match &temp {
Ok(res) => {
temp = Some(res);
break;
println!("Water temp is {}", res);
break temp
}
Err(err) => {
println!("Could not get water temp {} attempt {}", err, _attempt)
println!("Could not get water temp {} attempt {}", err, attempt)
}
}
}
match temp {
Some(res) => {
println!("Water temp is {}", res);
if res < 4_f32 {
water_frozen = true;
}
tank_state_mqtt.water_frozen = water_frozen.to_string();
if attempt == 5 {
break temp
}
attempt += 1;
};
if let Ok(res) = water_temp {
if res < WATER_FROZEN_THRESH {
water_frozen = true;
}
None => tank_state_mqtt.water_frozen = "tank sensor error".to_owned(),
}
match serde_json::to_string(&tank_state_mqtt) {
match serde_json::to_string(&tank_state.as_mqtt_info(&config.tank, water_temp)) {
Ok(state) => {
let _ = board.mqtt_publish(&config, "/water", state.as_bytes());
}