From ff97b3b70bd5a0bb323efeb93853d25d9617083a Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 12 Feb 2020 22:00:45 +0100 Subject: [PATCH] use dallas sensor address as ID - #327 --- src/ds18.cpp | 31 +++++++++++++--------------- src/ds18.h | 3 ++- src/ems-esp.cpp | 36 ++++++++++++++++---------------- src/ems.cpp | 2 +- src/ems_devices.h | 52 +++++++++++++++++++++++------------------------ src/version.h | 2 +- 6 files changed, 62 insertions(+), 64 deletions(-) diff --git a/src/ds18.cpp b/src/ds18.cpp index eba3e6b1a..17db75013 100644 --- a/src/ds18.cpp +++ b/src/ds18.cpp @@ -97,7 +97,7 @@ void DS18::loop() { } // return string of the device, with name and address -char * DS18::getDeviceString(char * buffer, unsigned char index) { +char * DS18::getDeviceType(char * buffer, unsigned char index) { uint8_t size = 128; if (index < _count) { unsigned char chip_id = chip(index); @@ -112,25 +112,22 @@ char * DS18::getDeviceString(char * buffer, unsigned char index) { } else { strlcpy(buffer, "Unknown", size); } + } else { + strlcpy(buffer, "invalid", size); + } - /* + return buffer; +} + +// return string of the device, with name and address +char * DS18::getDeviceID(char * buffer, unsigned char index) { + uint8_t size = 128; + if (index < _count) { uint8_t * address = _devices[index].address; - char a[30] = {0}; - snprintf(a, - sizeof(a), - " (%02X%02X%02X%02X%02X%02X%02X%02X) @ GPIO%d", - address[0], - address[1], - address[2], - address[3], - address[4], - address[5], - address[6], - address[7], - _gpio); + char a[30] = {0}; + snprintf(a, sizeof(a), "%02X%02X%02X%02X%02X%02X%02X%02X", address[0], address[1], address[2], address[3], address[4], address[5], address[6], address[7]); - strlcat(buffer, a, size); - */ + strlcpy(buffer, a, size); } else { strlcpy(buffer, "invalid", size); } diff --git a/src/ds18.h b/src/ds18.h index aa1c2986f..8fbfc1141 100644 --- a/src/ds18.h +++ b/src/ds18.h @@ -39,7 +39,8 @@ class DS18 { void setup(uint8_t gpio, bool parasite); uint8_t scan(); void loop(); - char * getDeviceString(char * s, unsigned char index); + char * getDeviceType(char * s, unsigned char index); + char * getDeviceID(char * buffer, unsigned char index); float getValue(unsigned char index); int16_t getRawValue(unsigned char index); // raw values, needs / 16 diff --git a/src/ems-esp.cpp b/src/ems-esp.cpp index f088b8768..43d01d3b2 100644 --- a/src/ems-esp.cpp +++ b/src/ems-esp.cpp @@ -514,13 +514,18 @@ void showInfo() { // Dallas external temp sensors if (EMSESP_Settings.dallas_sensors) { myDebug_P(PSTR("")); // newline - char buffer[128] = {0}; - char valuestr[8] = {0}; // for formatting temp + char buffer[128] = {0}; + char buffer2[128] = {0}; + char valuestr[8] = {0}; // for formatting temp myDebug_P(PSTR("%sExternal temperature sensors:%s"), COLOR_BOLD_ON, COLOR_BOLD_OFF); for (uint8_t i = 0; i < EMSESP_Settings.dallas_sensors; i++) { float sensorValue = ds18.getValue(i); if (sensorValue != DS18_DISCONNECTED) { - myDebug_P(PSTR(" Sensor #%d %s: %s C"), i + 1, ds18.getDeviceString(buffer, i), _float_to_char(valuestr, sensorValue)); + myDebug_P(PSTR(" Sensor #%d type:%s id:%s temperature: %s C"), + i + 1, + ds18.getDeviceType(buffer, i), + ds18.getDeviceID(buffer2, i), + _float_to_char(valuestr, sensorValue)); } } } @@ -532,9 +537,10 @@ void showInfo() { void scanDallas() { EMSESP_Settings.dallas_sensors = ds18.scan(); if (EMSESP_Settings.dallas_sensors) { - char buffer[128] = {0}; + char buffer[128]; + char buffer2[128]; for (uint8_t i = 0; i < EMSESP_Settings.dallas_sensors; i++) { - myDebug_P(PSTR("External temperature sensor %s found"), ds18.getDeviceString(buffer, i)); + myDebug_P(PSTR("External temperature sensor type:%s id:%s found"), ds18.getDeviceType(buffer, i), ds18.getDeviceID(buffer2, i)); } } } @@ -553,16 +559,14 @@ void publishSensorValues() { StaticJsonDocument<200> doc; JsonObject sensors = doc.to(); - bool hasdata = false; - char label[8] = {0}; - + bool hasdata = false; + char buffer[128] = {0}; // see if the sensor values have changed, if so send it on for (uint8_t i = 0; i < EMSESP_Settings.dallas_sensors; i++) { float sensorValue = ds18.getValue(i); if (sensorValue != DS18_DISCONNECTED) { - sprintf(label, PAYLOAD_EXTERNAL_SENSORS, (i + 1)); - sensors[label] = sensorValue; - hasdata = true; + sensors[ds18.getDeviceID(buffer, i)] = sensorValue; + hasdata = true; } } @@ -1001,11 +1005,6 @@ bool LoadSaveCallback(MYESP_FSACTION_t action, JsonObject settings) { EMSESP_Settings.shower_alert = settings["shower_alert"]; EMSESP_Settings.publish_time = settings["publish_time"] | DEFAULT_PUBLISHTIME; - // can't be 0 which could be the case coming from earlier builds < 1.9.5b12 - if (EMSESP_Settings.publish_time == 0) { - EMSESP_Settings.publish_time = DEFAULT_PUBLISHTIME; - } - EMSESP_Settings.listen_mode = settings["listen_mode"]; ems_setTxDisabled(EMSESP_Settings.listen_mode); @@ -1164,8 +1163,11 @@ bool SetListCallback(MYESP_FSACTION_t action, uint8_t wc, const char * setting, myDebug_P(PSTR(" %d = %s"), (it)->product_id, device_string); } } + myDebug_P(""); myDebug_P(PSTR("Usage: set master_thermostat ")); - ok = true; + ems_setMasterThermostat(0); // default value + EMSESP_Settings.master_thermostat = 0; // back to default + ok = true; } else if (wc == 2) { uint8_t pid = atoi(value); EMSESP_Settings.master_thermostat = pid; diff --git a/src/ems.cpp b/src/ems.cpp index 817f611ca..3a4cde315 100644 --- a/src/ems.cpp +++ b/src/ems.cpp @@ -1354,7 +1354,7 @@ void _process_RCPLUSStatusMessage(_EMS_RxTelegram * EMS_RxTelegram) { _setValue(EMS_RxTelegram, &EMS_Thermostat.hc[hc].day_mode, EMS_OFFSET_RCPLUSStatusMessage_mode, 1); _setValue(EMS_RxTelegram, &EMS_Thermostat.hc[hc].mode, EMS_OFFSET_RCPLUSStatusMessage_mode, 0); // bit 1, mode (auto=1 or manual=0) - // setpoint as in position 3 and also 6 (EMS_OFFSET_RCPLUSStatusMessage_currsetpoint). We're sticking to 3 for now. + // setpoint is in position 3 and also 6 (EMS_OFFSET_RCPLUSStatusMessage_currsetpoint). We're sticking to 3 for now. // don't fetch temp if in nightmode if (EMS_Thermostat.hc[hc].day_mode) { _setValue8(EMS_RxTelegram, &EMS_Thermostat.hc[hc].setpoint_roomTemp, EMS_OFFSET_RCPLUSStatusMessage_setpoint); // convert to single byte, value is * 2 diff --git a/src/ems_devices.h b/src/ems_devices.h index 287d54438..e1c183ad9 100644 --- a/src/ems_devices.h +++ b/src/ems_devices.h @@ -55,6 +55,27 @@ #define EMS_OFFSET_UBASetPoints_flowtemp 0 // flow temp +// Mixing Modules +// MM100/MM200 (EMS Plus) +#define EMS_TYPE_MMPLUSStatusMessage_HC1 0x01D7 // mixer status HC1 +#define EMS_TYPE_MMPLUSStatusMessage_HC2 0x01D8 // mixer status HC2 +#define EMS_TYPE_MMPLUSStatusMessage_HC3 0x01D9 // mixer status HC3 +#define EMS_TYPE_MMPLUSStatusMessage_HC4 0x01DA // mixer status HC4 +#define EMS_TYPE_MMPLUSStatusMessage_WWC1 0x0231 // mixer status WWC1 +#define EMS_TYPE_MMPLUSStatusMessage_WWC2 0x0232 // mixer status WWC2 +#define EMS_OFFSET_MMPLUSStatusMessage_flow_temp 3 // flow temperature +#define EMS_OFFSET_MMPLUSStatusMessage_pump_mod 5 // pump modulation +#define EMS_OFFSET_MMPLUSStatusMessage_valve_status 2 // valve in percent +#define EMS_OFFSET_MMPLUSStatusMessage_WW_flow_temp 0 // flow temperature +#define EMS_OFFSET_MMPLUSStatusMessage_WW_pump_mod 2 // pump on 6, off 0 +#define EMS_OFFSET_MMPLUSStatusMessage_WW_temp_status 11 // 0,1,2 +// MM10 +#define EMS_TYPE_MMStatusMessage 0xAB // mixer status +#define EMS_OFFSET_MMStatusMessage_flow_set 0 // flow setpoint +#define EMS_OFFSET_MMStatusMessage_flow_temp 1 // flow temperature +#define EMS_OFFSET_MMStatusMessage_pump_mod 3 // pump modulation in percent +#define EMS_OFFSET_MMStatusMessage_valve_status 4 // valve 0..255 + // Solar Module // Assuming here that the SM200 behaves like SM100 #define EMS_TYPE_SM10Monitor 0x97 // SM10Monitor @@ -62,17 +83,15 @@ #define EMS_TYPE_SM100Status 0x0264 // SM100Status #define EMS_TYPE_SM100Status2 0x026A // SM100Status2 #define EMS_TYPE_SM100Energy 0x028E // SM100Energy - -// Heat Pump -#define EMS_TYPE_HPMonitor1 0xE3 // HeatPump Monitor 1 -#define EMS_TYPE_HPMonitor2 0xE5 // HeatPump Monitor 2 - - // ISPM solar module #define EMS_TYPE_ISM1StatusMessage 0x0003 // Solar Module Junkers ISM1 Status #define EMS_TYPE_ISM1Set 0x0001 // for setting values of the solar module like max boiler temp #define EMS_OFFSET_ISM1Set_MaxBoilerTemp 6 // position of max boiler temp e.g. 50 in the following example: 90 30 FF 06 00 01 50 (CRC=2C) +// Heat Pump +#define EMS_TYPE_HPMonitor1 0xE3 // HeatPump Monitor 1 +#define EMS_TYPE_HPMonitor2 0xE5 // HeatPump Monitor 2 + /* * Thermostat Types */ @@ -176,27 +195,6 @@ #define EMS_OFFSET_JunkersSetMessage_no_frost_temp 0x0F // EMS offset to set temperature on thermostat for no frost mode #define EMS_OFFSET_JunkersSetMessage_set_mode 0x0E // EMS offset to set mode on thermostat -// MM100/MM200 (EMS Plus) -#define EMS_TYPE_MMPLUSStatusMessage_HC1 0x01D7 // mixer status HC1 -#define EMS_TYPE_MMPLUSStatusMessage_HC2 0x01D8 // mixer status HC2 -#define EMS_TYPE_MMPLUSStatusMessage_HC3 0x01D9 // mixer status HC3 -#define EMS_TYPE_MMPLUSStatusMessage_HC4 0x01DA // mixer status HC4 -#define EMS_TYPE_MMPLUSStatusMessage_WWC1 0x0231 // mixer status WWC1 -#define EMS_TYPE_MMPLUSStatusMessage_WWC2 0x0232 // mixer status WWC2 -#define EMS_OFFSET_MMPLUSStatusMessage_flow_temp 3 // flow temperature -#define EMS_OFFSET_MMPLUSStatusMessage_pump_mod 5 // pump modulation -#define EMS_OFFSET_MMPLUSStatusMessage_valve_status 2 // valve in percent -#define EMS_OFFSET_MMPLUSStatusMessage_WW_flow_temp 0 // flow temperature -#define EMS_OFFSET_MMPLUSStatusMessage_WW_pump_mod 2 // pump on 6, off 0 -#define EMS_OFFSET_MMPLUSStatusMessage_WW_temp_status 11 // 0,1,2 - -// MM10 -#define EMS_TYPE_MMStatusMessage 0xAB // mixer status -#define EMS_OFFSET_MMStatusMessage_flow_set 0 // flow setpoint -#define EMS_OFFSET_MMStatusMessage_flow_temp 1 // flow temperature -#define EMS_OFFSET_MMStatusMessage_pump_mod 3 // pump modulation in percent -#define EMS_OFFSET_MMStatusMessage_valve_status 4 // valve 0..255 - /* * Table of all known EMS Devices * ProductID, DeviceType, Description, Flags diff --git a/src/version.h b/src/version.h index 6ee70b06c..4d64191cd 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define APP_VERSION "1.9.5b30" +#define APP_VERSION "1.9.5b31"