From 1d3a31b9f3fd49ff20a606421372c777b90a31ff Mon Sep 17 00:00:00 2001 From: proddy Date: Fri, 31 Jul 2020 13:59:06 +0200 Subject: [PATCH] show external dallas temp sensors in web UI --- interface/src/project/EMSESP.tsx | 2 +- .../src/project/EMSESPDevicesController.tsx | 2 +- interface/src/project/EMSESPDevicesForm.tsx | 57 ++++++++++++++++++- interface/src/project/EMSESPtypes.ts | 6 ++ src/EMSESPDevicesService.cpp | 25 +++++--- src/emsesp.cpp | 6 +- src/sensors.cpp | 8 +-- src/sensors.h | 2 +- 8 files changed, 87 insertions(+), 21 deletions(-) diff --git a/interface/src/project/EMSESP.tsx b/interface/src/project/EMSESP.tsx index bc2e19971..2d88cd1a9 100644 --- a/interface/src/project/EMSESP.tsx +++ b/interface/src/project/EMSESP.tsx @@ -22,7 +22,7 @@ class EMSESP extends Component { - + diff --git a/interface/src/project/EMSESPDevicesController.tsx b/interface/src/project/EMSESPDevicesController.tsx index dfcb5bf1c..bd035f933 100644 --- a/interface/src/project/EMSESPDevicesController.tsx +++ b/interface/src/project/EMSESPDevicesController.tsx @@ -17,7 +17,7 @@ class EMSESPDevicesController extends Component { render() { return ( - + } diff --git a/interface/src/project/EMSESPDevicesForm.tsx b/interface/src/project/EMSESPDevicesForm.tsx index d90904aba..50673747e 100644 --- a/interface/src/project/EMSESPDevicesForm.tsx +++ b/interface/src/project/EMSESPDevicesForm.tsx @@ -71,14 +71,21 @@ class EMSESPDevicesForm extends Component { + return (this.props.data.sensors.length === 0); + }; + noDeviceData = () => { return (this.state.deviceData?.deviceData.length === 0); }; - createTableItems() { + createDeviceItems() { const { width, data } = this.props; return ( + + Devices: + {!this.noDevices() && ( @@ -132,6 +139,49 @@ class EMSESPDevicesForm extends Component +

+ + Sensors: + + {!this.noSensors() && ( +
+ + + ID + Temperature + + + + {data.sensors.map(sensorData => ( + + + {sensorData.id} + + + {sensorData.temp}°C + + + ))} + +
+ )} + {this.noSensors() && + ( + + + No external temperature sensors detected. + + + ) + } +
+ ); + } + renderScanDevicesDialog() { return (

- {this.createTableItems()} + {this.createDeviceItems()} {this.renderDeviceData()} + {this.createSensorItems()}

diff --git a/interface/src/project/EMSESPtypes.ts b/interface/src/project/EMSESPtypes.ts index 2e510ab4e..43084bf9b 100644 --- a/interface/src/project/EMSESPtypes.ts +++ b/interface/src/project/EMSESPtypes.ts @@ -33,8 +33,14 @@ export interface Device { version: string; } +export interface Sensor { + id: string; + temp: number; +} + export interface EMSESPDevices { devices: Device[]; + sensors: Sensor[]; } export interface DeviceData { diff --git a/src/EMSESPDevicesService.cpp b/src/EMSESPDevicesService.cpp index 46d33293f..15368789a 100644 --- a/src/EMSESPDevicesService.cpp +++ b/src/EMSESPDevicesService.cpp @@ -50,14 +50,23 @@ void EMSESPDevicesService::all_devices(AsyncWebServerRequest * request) { JsonArray devices = root.createNestedArray("devices"); for (const auto & emsdevice : EMSESP::emsdevices) { if (emsdevice) { - JsonObject deviceRoot = devices.createNestedObject(); - deviceRoot["id"] = emsdevice->unique_id(); - deviceRoot["type"] = emsdevice->device_type_name(); - deviceRoot["brand"] = emsdevice->brand_to_string(); - deviceRoot["name"] = emsdevice->name(); - deviceRoot["deviceid"] = emsdevice->device_id(); - deviceRoot["productid"] = emsdevice->product_id(); - deviceRoot["version"] = emsdevice->version(); + JsonObject obj = devices.createNestedObject(); + obj["id"] = emsdevice->unique_id(); + obj["type"] = emsdevice->device_type_name(); + obj["brand"] = emsdevice->brand_to_string(); + obj["name"] = emsdevice->name(); + obj["deviceid"] = emsdevice->device_id(); + obj["productid"] = emsdevice->product_id(); + obj["version"] = emsdevice->version(); + } + } + + JsonArray sensors = root.createNestedArray("sensors"); + if (!EMSESP::sensor_devices().empty()) { + for (const auto & sensor : EMSESP::sensor_devices()) { + JsonObject obj = sensors.createNestedObject(); + obj["id"] = sensor.to_string(); + obj["temp"] = sensor.temperature_c; } } diff --git a/src/emsesp.cpp b/src/emsesp.cpp index 96e06318c..e26fb9e26 100644 --- a/src/emsesp.cpp +++ b/src/emsesp.cpp @@ -248,7 +248,7 @@ void EMSESP::show_device_values(uuid::console::Shell & shell) { } } -// show Dallas sensors +// show Dallas temperature sensors void EMSESP::show_sensor_values(uuid::console::Shell & shell) { if (sensor_devices().empty()) { return; @@ -257,7 +257,7 @@ void EMSESP::show_sensor_values(uuid::console::Shell & shell) { char valuestr[8] = {0}; // for formatting temp shell.printfln(F("External temperature sensors:")); for (const auto & device : sensor_devices()) { - shell.printfln(F(" Sensor ID %s: %s°C"), device.to_string().c_str(), Helpers::render_value(valuestr, device.temperature_c_, 2)); + shell.printfln(F(" ID: %s, Temperature: %s°C"), device.to_string().c_str(), Helpers::render_value(valuestr, device.temperature_c, 2)); } shell.println(); } @@ -778,7 +778,7 @@ void EMSESP::loop() { // if we're doing an OTA upload, skip MQTT and EMS if (system_.upload_status()) { #if defined(ESP32) - delay(1); // slow down OTA update to avoid getting killed by task watchdog (task_wdt) + delay(10); // slow down OTA update to avoid getting killed by task watchdog (task_wdt) #endif return; } diff --git a/src/sensors.cpp b/src/sensors.cpp index c09b71b05..306457f43 100644 --- a/src/sensors.cpp +++ b/src/sensors.cpp @@ -107,7 +107,7 @@ void Sensors::loop() { case TYPE_DS1822: case TYPE_DS1825: found_.emplace_back(addr); - found_.back().temperature_c_ = get_temperature_c(addr); + found_.back().temperature_c = get_temperature_c(addr); /* // comment out for debugging @@ -253,7 +253,7 @@ void Sensors::publish_values() { StaticJsonDocument<100> doc; for (const auto & device : devices_) { char s[5]; - doc["temp"] = Helpers::render_value(s, device.temperature_c_, 2); + doc["temp"] = Helpers::render_value(s, device.temperature_c, 2); char topic[60]; // sensors{1-n} strlcpy(topic, "sensor_", 50); // create topic, e.g. home/ems-esp/sensor_28-EA41-9497-0E03-5F strlcat(topic, device.to_string().c_str(), 60); @@ -279,7 +279,7 @@ void Sensors::publish_values() { for (const auto & device : devices_) { if (mqtt_format_ == MQTT_format::CUSTOM) { char s[5]; - doc[device.to_string()] = Helpers::render_value(s, device.temperature_c_, 2); + doc[device.to_string()] = Helpers::render_value(s, device.temperature_c, 2); } else { char sensorID[10]; // sensor{1-n} strlcpy(sensorID, "sensor", 10); @@ -287,7 +287,7 @@ void Sensors::publish_values() { strlcat(sensorID, Helpers::itoa(s, i++), 10); JsonObject dataSensor = doc.createNestedObject(sensorID); dataSensor["id"] = device.to_string(); - dataSensor["temp"] = Helpers::render_value(s, device.temperature_c_, 2); + dataSensor["temp"] = Helpers::render_value(s, device.temperature_c, 2); } } diff --git a/src/sensors.h b/src/sensors.h index 4601224b0..07a1d0793 100644 --- a/src/sensors.h +++ b/src/sensors.h @@ -46,7 +46,7 @@ class Sensors { uint64_t id() const; std::string to_string() const; - float temperature_c_ = NAN; + float temperature_c = NAN; private: const uint64_t id_;