Publish connection errors to MQTT
Also move `raw` debug output to console output, hex-formatted.gh-action
parent
2ee2f597d0
commit
d2e37ebfbf
|
@ -49,8 +49,14 @@ pub(crate) async fn run(
|
|||
|
||||
let _ = connection_is_ready.send(());
|
||||
|
||||
if let Err(error) = conn.run().await {
|
||||
let result = conn.run().await;
|
||||
|
||||
if let Err(error) = result {
|
||||
error!(?error, "Modbus connection failed");
|
||||
mqtt.publish("state", "errorered").await.unwrap();
|
||||
mqtt.publish("last_error", format!("{error:?}"))
|
||||
.await
|
||||
.unwrap();
|
||||
tokio::time::sleep(std::time::Duration::from_secs(current_wait as u64))
|
||||
.await;
|
||||
|
||||
|
@ -73,7 +79,10 @@ pub(crate) async fn run(
|
|||
}
|
||||
});
|
||||
|
||||
is_connection_ready.changed().await;
|
||||
is_connection_ready
|
||||
.changed()
|
||||
.await
|
||||
.map_err(|_| Error::RecvError)?;
|
||||
Ok(handle)
|
||||
}
|
||||
|
||||
|
|
|
@ -31,21 +31,17 @@ impl Monitor {
|
|||
loop {
|
||||
interval.tick().await;
|
||||
if let Ok(words) = self.read().await {
|
||||
debug!(address=%self.register.address, "type"=?self.register.register_type, ?words);
|
||||
|
||||
#[cfg(feature = "raw")]
|
||||
self.mqtt
|
||||
.publish("raw", serde_json::to_vec(&words).unwrap())
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
let value = self.register.parse_words(&words);
|
||||
let value = serde_json::to_string(&value).unwrap();
|
||||
|
||||
if let Err(error) = self
|
||||
.mqtt
|
||||
.publish("state", serde_json::to_vec(&value).unwrap())
|
||||
.await
|
||||
{
|
||||
debug!(
|
||||
address=%self.register.address,
|
||||
"type"=?self.register.register_type,
|
||||
%value,
|
||||
raw=%format!("{:04x?}", &words),
|
||||
);
|
||||
|
||||
if let Err(error) = self.mqtt.publish("state", value).await {
|
||||
warn!(?error);
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue