Expose timesync error in MQTT and web UI
BACKWARD-INCOMPATIBLE: MQTT faults payload now always includes err_last/err_last_text and err_last_age (schema change).
This commit is contained in:
@@ -10,6 +10,21 @@ static PubSubClient mqtt_client(wifi_client);
|
||||
static WifiMqttConfig g_cfg;
|
||||
static String g_client_id;
|
||||
|
||||
static const char *fault_text(FaultType fault) {
|
||||
switch (fault) {
|
||||
case FaultType::MeterRead:
|
||||
return "meter";
|
||||
case FaultType::Decode:
|
||||
return "decode";
|
||||
case FaultType::LoraTx:
|
||||
return "loratx";
|
||||
case FaultType::TimeSync:
|
||||
return "timesync";
|
||||
default:
|
||||
return "none";
|
||||
}
|
||||
}
|
||||
|
||||
void mqtt_init(const WifiMqttConfig &config, const char *device_id) {
|
||||
g_cfg = config;
|
||||
mqtt_client.setServer(config.mqtt_host.c_str(), config.mqtt_port);
|
||||
@@ -66,10 +81,9 @@ bool mqtt_publish_faults(const char *device_id, const FaultCounters &counters, F
|
||||
doc["err_m"] = counters.meter_read_fail;
|
||||
doc["err_d"] = counters.decode_fail;
|
||||
doc["err_tx"] = counters.lora_tx_fail;
|
||||
if (last_error != FaultType::None) {
|
||||
doc["err_last"] = static_cast<uint8_t>(last_error);
|
||||
doc["err_last_age"] = last_error_age_sec;
|
||||
}
|
||||
doc["err_last"] = static_cast<uint8_t>(last_error);
|
||||
doc["err_last_text"] = fault_text(last_error);
|
||||
doc["err_last_age"] = last_error != FaultType::None ? last_error_age_sec : 0;
|
||||
|
||||
String payload;
|
||||
size_t len = serializeJson(doc, payload);
|
||||
@@ -138,6 +152,8 @@ bool mqtt_publish_discovery(const char *device_id) {
|
||||
ok = ok && publish_discovery_sensor(device_id, "err_m", "Meter Read Errors", "count", "", faults_topic.c_str(), "{{ value_json.err_m }}");
|
||||
ok = ok && publish_discovery_sensor(device_id, "err_d", "Decode Errors", "count", "", faults_topic.c_str(), "{{ value_json.err_d }}");
|
||||
ok = ok && publish_discovery_sensor(device_id, "err_tx", "LoRa TX Errors", "count", "", faults_topic.c_str(), "{{ value_json.err_tx }}");
|
||||
ok = ok && publish_discovery_sensor(device_id, "err_last", "Last Error Code", "", "", faults_topic.c_str(), "{{ value_json.err_last }}");
|
||||
ok = ok && publish_discovery_sensor(device_id, "err_last_text", "Last Error", "", "", faults_topic.c_str(), "{{ value_json.err_last_text }}");
|
||||
ok = ok && publish_discovery_sensor(device_id, "err_last_age", "Last Error Age", "s", "", faults_topic.c_str(), "{{ value_json.err_last_age }}");
|
||||
return ok;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user