I've added a valetudo_state_watcher
function to my src/main.rs · main · thomas351 / rust-influxdb-udp-logger · GitLab
I've expected this line to get parsed and reach the innermost if:
data: [{"__class":"AttachmentStateAttribute","metaData":{},"type":"watertank","attached":false},{"__class":"AttachmentStateAttribute","metaData":{},"type":"mop","attached":false},{"__class":"StatusStateAtt
ribute","metaData":{},"value":"idle","flag":"none"},{"__class":"BatteryStateAttribute","metaData":{},"level":83,"flag":"discharging"},{"__class":"PresetSelectionStateAttribute","metaData":{},"type":"fan_speed","value":"max"},{"__class":
"PresetSelectionStateAttribute","metaData":{},"type":"water_grade","value":"low"},{"__class":"ConsumableStateAttribute","metaData":{},"type":"brush","subType":"main","remaining":{"value":0,"unit":"minutes"}},{"__class":"ConsumableStateA
ttribute","metaData":{},"type":"brush","subType":"side_right","remaining":{"value":0,"unit":"minutes"}},{"__class":"ConsumableStateAttribute","metaData":{},"type":"filter","subType":"main","remaining":{"value":0,"unit":"minutes"}},{"__c
lass":"ConsumableStateAttribute","metaData":{},"type":"sensor","subType":"all","remaining":{"value":0,"unit":"minutes"}}]
if let Ok(value) = from_str::<Value>(&line) {
if let Some(data) = value["data"].as_str() {
println!("Received data: {}", data);
}
else {
println!("couldn't extract data. value = {value}");
}
}
else {
println!("couldn't parse as json, line = {line}")
}
But the only line I've seen so far that doesn't end up in the last else
block = "couldn't parse as json," was = "11".
Why? Is the problem, that the beginning reads data:
instead of "data":
? Can I make it more tolerant and accept strings without double-quotes? I don't control the software creating these events..