mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-07 16:29:51 +03:00
use dallas sensor address as ID - #327
This commit is contained in:
29
src/ds18.cpp
29
src/ds18.cpp
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -515,12 +515,17 @@ void showInfo() {
|
|||||||
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 buffer2[128] = {0};
|
||||||
char valuestr[8] = {0}; // for formatting temp
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -554,14 +560,12 @@ void publishSensorValues() {
|
|||||||
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,7 +1163,10 @@ 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>"));
|
||||||
|
ems_setMasterThermostat(0); // default value
|
||||||
|
EMSESP_Settings.master_thermostat = 0; // back to default
|
||||||
ok = true;
|
ok = true;
|
||||||
} else if (wc == 2) {
|
} else if (wc == 2) {
|
||||||
uint8_t pid = atoi(value);
|
uint8_t pid = atoi(value);
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
#define APP_VERSION "1.9.5b30"
|
#define APP_VERSION "1.9.5b31"
|
||||||
|
|||||||
Reference in New Issue
Block a user