streamline tank state mqtt information structure
This commit is contained in:
@@ -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());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user