use dallas sensor address as ID - #327

This commit is contained in:
Paul
2020-02-12 22:00:45 +01:00
parent c801160351
commit ff97b3b70b
6 changed files with 62 additions and 64 deletions

View File

@@ -97,7 +97,7 @@ void DS18::loop() {
} }
// return string of the device, with name and address // 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; uint8_t size = 128;
if (index < _count) { if (index < _count) {
unsigned char chip_id = chip(index); unsigned char chip_id = chip(index);
@@ -112,25 +112,22 @@ char * DS18::getDeviceString(char * buffer, unsigned char index) {
} else { } else {
strlcpy(buffer, "Unknown", size); 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; uint8_t * address = _devices[index].address;
char a[30] = {0}; char a[30] = {0};
snprintf(a, 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]);
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);
strlcat(buffer, a, size); strlcpy(buffer, a, size);
*/
} else { } else {
strlcpy(buffer, "invalid", size); strlcpy(buffer, "invalid", size);
} }

View File

@@ -39,7 +39,8 @@ class DS18 {
void setup(uint8_t gpio, bool parasite); void setup(uint8_t gpio, bool parasite);
uint8_t scan(); uint8_t scan();
void loop(); 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); float getValue(unsigned char index);
int16_t getRawValue(unsigned char index); // raw values, needs / 16 int16_t getRawValue(unsigned char index); // raw values, needs / 16

View File

@@ -514,13 +514,18 @@ void showInfo() {
// Dallas external temp sensors // Dallas external temp sensors
if (EMSESP_Settings.dallas_sensors) { if (EMSESP_Settings.dallas_sensors) {
myDebug_P(PSTR("")); // newline myDebug_P(PSTR("")); // newline
char buffer[128] = {0}; char buffer[128] = {0};
char valuestr[8] = {0}; // for formatting temp char buffer2[128] = {0};
char valuestr[8] = {0}; // for formatting temp
myDebug_P(PSTR("%sExternal temperature sensors:%s"), COLOR_BOLD_ON, COLOR_BOLD_OFF); myDebug_P(PSTR("%sExternal temperature sensors:%s"), COLOR_BOLD_ON, COLOR_BOLD_OFF);
for (uint8_t i = 0; i < EMSESP_Settings.dallas_sensors; i++) { for (uint8_t i = 0; i < EMSESP_Settings.dallas_sensors; i++) {
float sensorValue = ds18.getValue(i); float sensorValue = ds18.getValue(i);
if (sensorValue != DS18_DISCONNECTED) { 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() { void scanDallas() {
EMSESP_Settings.dallas_sensors = ds18.scan(); EMSESP_Settings.dallas_sensors = ds18.scan();
if (EMSESP_Settings.dallas_sensors) { 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++) { 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; StaticJsonDocument<200> doc;
JsonObject sensors = doc.to<JsonObject>(); JsonObject sensors = doc.to<JsonObject>();
bool hasdata = false; bool hasdata = false;
char label[8] = {0}; char buffer[128] = {0};
// see if the sensor values have changed, if so send it on // see if the sensor values have changed, if so send it on
for (uint8_t i = 0; i < EMSESP_Settings.dallas_sensors; i++) { for (uint8_t i = 0; i < EMSESP_Settings.dallas_sensors; i++) {
float sensorValue = ds18.getValue(i); float sensorValue = ds18.getValue(i);
if (sensorValue != DS18_DISCONNECTED) { if (sensorValue != DS18_DISCONNECTED) {
sprintf(label, PAYLOAD_EXTERNAL_SENSORS, (i + 1)); sensors[ds18.getDeviceID(buffer, i)] = sensorValue;
sensors[label] = sensorValue; hasdata = true;
hasdata = true;
} }
} }
@@ -1001,11 +1005,6 @@ bool LoadSaveCallback(MYESP_FSACTION_t action, JsonObject settings) {
EMSESP_Settings.shower_alert = settings["shower_alert"]; EMSESP_Settings.shower_alert = settings["shower_alert"];
EMSESP_Settings.publish_time = settings["publish_time"] | DEFAULT_PUBLISHTIME; 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"]; EMSESP_Settings.listen_mode = settings["listen_mode"];
ems_setTxDisabled(EMSESP_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(PSTR(" %d = %s"), (it)->product_id, device_string);
} }
} }
myDebug_P("");
myDebug_P(PSTR("Usage: set master_thermostat <product id>")); myDebug_P(PSTR("Usage: set master_thermostat <product id>"));
ok = true; ems_setMasterThermostat(0); // default value
EMSESP_Settings.master_thermostat = 0; // back to default
ok = true;
} else if (wc == 2) { } else if (wc == 2) {
uint8_t pid = atoi(value); uint8_t pid = atoi(value);
EMSESP_Settings.master_thermostat = pid; EMSESP_Settings.master_thermostat = pid;

View File

@@ -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].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) _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 // don't fetch temp if in nightmode
if (EMS_Thermostat.hc[hc].day_mode) { 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 _setValue8(EMS_RxTelegram, &EMS_Thermostat.hc[hc].setpoint_roomTemp, EMS_OFFSET_RCPLUSStatusMessage_setpoint); // convert to single byte, value is * 2

View File

@@ -55,6 +55,27 @@
#define EMS_OFFSET_UBASetPoints_flowtemp 0 // flow temp #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 // Solar Module
// Assuming here that the SM200 behaves like SM100 // Assuming here that the SM200 behaves like SM100
#define EMS_TYPE_SM10Monitor 0x97 // SM10Monitor #define EMS_TYPE_SM10Monitor 0x97 // SM10Monitor
@@ -62,17 +83,15 @@
#define EMS_TYPE_SM100Status 0x0264 // SM100Status #define EMS_TYPE_SM100Status 0x0264 // SM100Status
#define EMS_TYPE_SM100Status2 0x026A // SM100Status2 #define EMS_TYPE_SM100Status2 0x026A // SM100Status2
#define EMS_TYPE_SM100Energy 0x028E // SM100Energy #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 // ISPM solar module
#define EMS_TYPE_ISM1StatusMessage 0x0003 // Solar Module Junkers ISM1 Status #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_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) #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 * 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_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 #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 * Table of all known EMS Devices
* ProductID, DeviceType, Description, Flags * ProductID, DeviceType, Description, Flags

View File

@@ -1 +1 @@
#define APP_VERSION "1.9.5b30" #define APP_VERSION "1.9.5b31"