From 16300b6070e528b6aac569f143088c685a8c392c Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Thu, 22 Oct 2020 12:05:05 +0200 Subject: [PATCH] fix sensor output on error --- interface/src/project/EMSESPtypes.ts | 2 +- src/EMSESPDevicesService.cpp | 3 +- src/sensor.cpp | 44 ++++++++++------------------ 3 files changed, 19 insertions(+), 30 deletions(-) diff --git a/interface/src/project/EMSESPtypes.ts b/interface/src/project/EMSESPtypes.ts index 748a01bee..80ce48159 100644 --- a/interface/src/project/EMSESPtypes.ts +++ b/interface/src/project/EMSESPtypes.ts @@ -45,7 +45,7 @@ export interface Device { export interface Sensor { no: number; id: string; - temp: number; + temp: string; } export interface EMSESPDevices { diff --git a/src/EMSESPDevicesService.cpp b/src/EMSESPDevicesService.cpp index 541550b52..7211a4e2d 100644 --- a/src/EMSESPDevicesService.cpp +++ b/src/EMSESPDevicesService.cpp @@ -65,11 +65,12 @@ void EMSESPDevicesService::all_devices(AsyncWebServerRequest * request) { JsonArray sensors = root.createNestedArray("sensors"); if (!EMSESP::sensor_devices().empty()) { uint8_t i = 1; + char s[8]; for (const auto & sensor : EMSESP::sensor_devices()) { JsonObject obj = sensors.createNestedObject(); obj["no"] = i++; obj["id"] = sensor.to_string(); - obj["temp"] = (float)(sensor.temperature_c) / 10; + obj["temp"] = Helpers::render_value(s, sensor.temperature_c, 10); } } diff --git a/src/sensor.cpp b/src/sensor.cpp index e94254dda..1e8008496 100644 --- a/src/sensor.cpp +++ b/src/sensor.cpp @@ -295,13 +295,13 @@ bool Sensor::export_values(JsonObject & output) { } uint8_t i = 1; // sensor count for (const auto & device : devices_) { - char s[7]; char sensorID[10]; // sensor{1-n} - snprintf_P(sensorID, 10, PSTR("sensor%d"), i); + snprintf_P(sensorID, 10, PSTR("sensor%d"), i++); JsonObject dataSensor = output.createNestedObject(sensorID); dataSensor["id"] = device.to_string(); - dataSensor["temp"] = Helpers::render_value(s, device.temperature_c, 10); - i++; + if (Helpers::hasValue(device.temperature_c)) { + dataSensor["temp"] = (float)(device.temperature_c) / 10; + } } return true; @@ -316,43 +316,31 @@ void Sensor::publish_values() { return; } - uint8_t mqtt_format_ = Mqtt::mqtt_format(); - /* - // single mode as one topic per sensor e.g. ems-esp/sensor_data1 = 20.2 - if (mqtt_format_ == Mqtt::Format::SINGLE) { - uint8_t i = 1; - for (const auto & device : devices_) { - char topic[20]; - snprintf_P(topic, 20, PSTR("sensor_data%d"), i); - char s[7]; // to support -55.00 to 125.00 - Mqtt::publish(topic, Helpers::render_value(s, device.temperature_c, 10)); - i++; - } - return; - } - */ - DynamicJsonDocument doc(100 * num_devices); - uint8_t sensor_no = 1; // sensor count + uint8_t sensor_no = 1; // sensor count + uint8_t mqtt_format_ = Mqtt::mqtt_format(); for (const auto & device : devices_) { char sensorID[10]; // sensor{1-n} snprintf_P(sensorID, 10, PSTR("sensor%d"), sensor_no); if (mqtt_format_ == Mqtt::Format::SINGLE) { // e.g. sensor_data = {"sensor1":23.3,"sensor2":24.0} - // doc[sensorID] = Helpers::render_value(s, device.temperature_c, 10); - doc[sensorID] = (float)(device.temperature_c) / 10; + if (Helpers::hasValue(device.temperature_c)) { + doc[sensorID] = (float)(device.temperature_c) / 10; + } } else if (mqtt_format_ == Mqtt::Format::NESTED) { // e.g. sensor_data = {"sensor1":{"id":"28-EA41-9497-0E03","temp":"23.3"},"sensor2":{"id":"28-233D-9497-0C03","temp":"24.0"}} JsonObject dataSensor = doc.createNestedObject(sensorID); dataSensor["id"] = device.to_string(); - // dataSensor["temp"] = Helpers::render_value(s, device.temperature_c, 10); - dataSensor["temp"] = (float)(device.temperature_c) / 10; + if (Helpers::hasValue(device.temperature_c)) { + dataSensor["temp"] = (float)(device.temperature_c) / 10; + } } else if (mqtt_format_ == Mqtt::Format::HA) { - // e.g. sensor_data = {"28-EA41-9497-0E03":23.3,"28-233D-9497-0C03":24.0} - // doc[device.to_string()] = Helpers::render_value(s, device.temperature_c, 10); + // e.g. sensor_data = {"sensor1":{"id":"28-EA41-9497-0E03","temp":"23.3"},"sensor2":{"id":"28-233D-9497-0C03","temp":"24.0"}} JsonObject dataSensor = doc.createNestedObject(sensorID); dataSensor["id"] = device.to_string(); - dataSensor["temp"] = (float)(device.temperature_c) / 10; + if (Helpers::hasValue(device.temperature_c)) { + dataSensor["temp"] = (float)(device.temperature_c) / 10; + } // create the config if this hasn't already been done // to e.g. homeassistant/sensor/ems-esp/dallas_28-233D-9497-0C03/config if (!(registered_ha_[sensor_no - 1])) {