FR10 Junkers

This commit is contained in:
proddy
2019-05-05 14:46:47 +02:00
parent 55f3f5418d
commit 0f4ea8d5af
6 changed files with 62 additions and 19 deletions

View File

@@ -460,10 +460,13 @@ void showInfo() {
myDebug("%sThermostat stats:%s", COLOR_BOLD_ON, COLOR_BOLD_OFF);
myDebug(" Thermostat: %s", ems_getThermostatDescription(buffer_type));
if ((ems_getThermostatModel() == EMS_MODEL_EASY) || (ems_getThermostatModel() == EMS_MODEL_BOSCHEASY)) {
// for easy temps are * 100
// also we don't have the time or mode
_renderShortValue("Set room temperature", "C", EMS_Thermostat.setpoint_roomTemp, 10);
_renderShortValue("Current room temperature", "C", EMS_Thermostat.curr_roomTemp, 10);
// for easy temps are * 100, also we don't have the time or mode
_renderShortValue("Set room temperature", "C", EMS_Thermostat.setpoint_roomTemp, 10); // *100
_renderShortValue("Current room temperature", "C", EMS_Thermostat.curr_roomTemp, 10); // *100
} else if (ems_getThermostatModel() == EMS_MODEL_FR10) {
// Junkers are *10
_renderIntValue("Set room temperature", "C", EMS_Thermostat.setpoint_roomTemp, 10); // *10
_renderIntValue("Current room temperature", "C", EMS_Thermostat.curr_roomTemp, 10); // *10
} else {
// because we store in 2 bytes short, when converting to a single byte we'll loose the negative value if its unset
if (EMS_Thermostat.setpoint_roomTemp <= 0) {
@@ -673,12 +676,19 @@ void publishValues(bool force) {
rootThermostat[THERMOSTAT_HC] = _int_to_char(s, EMSESP_Status.heating_circuit);
// different logic depending on thermostat types
if ((ems_getThermostatModel() == EMS_MODEL_EASY) || (ems_getThermostatModel() == EMS_MODEL_BOSCHEASY)) {
if (abs(EMS_Thermostat.setpoint_roomTemp) < EMS_VALUE_SHORT_NOTSET)
rootThermostat[THERMOSTAT_SELTEMP] = (double)EMS_Thermostat.setpoint_roomTemp / 10;
if (abs(EMS_Thermostat.curr_roomTemp) < EMS_VALUE_SHORT_NOTSET)
rootThermostat[THERMOSTAT_CURRTEMP] = (double)EMS_Thermostat.curr_roomTemp / 10;
} else if (ems_getThermostatModel() == EMS_MODEL_FR10) {
if (abs(EMS_Thermostat.setpoint_roomTemp) < EMS_VALUE_SHORT_NOTSET)
rootThermostat[THERMOSTAT_SELTEMP] = (double)EMS_Thermostat.setpoint_roomTemp / 10;
if (abs(EMS_Thermostat.curr_roomTemp) < EMS_VALUE_SHORT_NOTSET)
rootThermostat[THERMOSTAT_CURRTEMP] = (double)EMS_Thermostat.curr_roomTemp / 10;
} else {
if (EMS_Thermostat.setpoint_roomTemp != EMS_VALUE_INT_NOTSET)
rootThermostat[THERMOSTAT_SELTEMP] = (double)EMS_Thermostat.setpoint_roomTemp / 2;

View File

@@ -81,13 +81,16 @@ void _process_RC30StatusMessage(_EMS_RxTelegram * EMS_RxTelegram);
void _process_RC35Set(_EMS_RxTelegram * EMS_RxTelegram);
void _process_RC35StatusMessage(_EMS_RxTelegram * EMS_RxTelegram);
// Easy
// Easy type devices like C100
void _process_EasyStatusMessage(_EMS_RxTelegram * EMS_RxTelegram);
// RC1010, RC300, RC310
void _process_RCPLUSStatusMessage(_EMS_RxTelegram * EMS_RxTelegram);
void _process_RCPLUSSetMessage(_EMS_RxTelegram * EMS_RxTelegram);
// Junkers FR10
void _process_FR10StatusMessage(_EMS_RxTelegram * EMS_RxTelegram);
/*
* Recognized EMS types and the functions they call to process the telegrams
* Format: MODEL ID, TYPE ID, Description, function, emsplus
@@ -156,7 +159,11 @@ const _EMS_Type EMS_Types[] = {
// Nefit 1010, RC300, RC310 (EMS Plus)
{EMS_MODEL_ALL, EMS_TYPE_RCPLUSStatusMessage, "RCPLUSStatusMessage", _process_RCPLUSStatusMessage},
{EMS_MODEL_ALL, EMS_TYPE_RCPLUSSet, "RCPLUSSetMessage", _process_RCPLUSSetMessage}
{EMS_MODEL_ALL, EMS_TYPE_RCPLUSSet, "RCPLUSSetMessage", _process_RCPLUSSetMessage},
// Junkers FR10
{EMS_MODEL_ALL, EMS_TYPE_FR10StatusMessage, "FR10StatusMessage", _process_FR10StatusMessage}
};
@@ -1252,6 +1259,17 @@ void _process_RCPLUSStatusMessage(_EMS_RxTelegram * EMS_RxTelegram) {
}
}
/*
* FR10 Junkers - type x6F01
*/
void _process_FR10StatusMessage(_EMS_RxTelegram * EMS_RxTelegram) {
if (EMS_RxTelegram->data_length == 6) {
// e.g. 90 00 FF 00 00 6F 03 01 00 BE 00 BF
EMS_Thermostat.curr_roomTemp = _toByte(EMS_OFFSET_FR10StatusMessage_curr); // value is * 10
EMS_Thermostat.setpoint_roomTemp = _toByte(EMS_OFFSET_FR10StatusMessage_setpoint); // value is * 10, which is different from other EMS+ devices
}
}
/*
* to complete....
*/
@@ -1742,7 +1760,11 @@ char * ems_getThermostatDescription(char * buffer) {
}
strlcat(buffer, " (ProductID:", size);
strlcat(buffer, itoa(EMS_Thermostat.product_id, tmp, 10), size);
if (EMS_Thermostat.product_id == EMS_ID_NONE) {
strlcat(buffer, "?", size);
} else {
strlcat(buffer, itoa(EMS_Thermostat.product_id, tmp, 10), size);
}
strlcat(buffer, " Version:", size);
strlcat(buffer, EMS_Thermostat.version, size);
strlcat(buffer, ")", size);
@@ -1779,7 +1801,11 @@ char * ems_getBoilerDescription(char * buffer) {
}
strlcat(buffer, " (ProductID:", size);
strlcat(buffer, itoa(EMS_Boiler.product_id, tmp, 10), size);
if (EMS_Boiler.product_id == EMS_ID_NONE) {
strlcat(buffer, "?", size);
} else {
strlcat(buffer, itoa(EMS_Boiler.product_id, tmp, 10), size);
}
strlcat(buffer, " Version:", size);
strlcat(buffer, EMS_Boiler.version, size);
strlcat(buffer, ")", size);

View File

@@ -100,10 +100,16 @@
// RC1010, RC310 and RC300 specific (EMS Plus)
#define EMS_TYPE_RCPLUSStatusMessage 0x01A5 // is an automatic thermostat broadcast giving us temps
#define EMS_TYPE_RCPLUSSet 0x03 // setpoint temp message - this is incorrect!
#define EMS_TYPE_RCPLUSSet 0x03 // setpoint temp message
#define EMS_OFFSET_RCPLUSStatusMessage_setpoint 3 // setpoint temp
#define EMS_OFFSET_RCPLUSStatusMessage_curr 0 // current temp
// Junkers FR10 (EMS Plus)
#define EMS_TYPE_FR10StatusMessage 0x6F // is an automatic thermostat broadcast giving us temps
#define EMS_OFFSET_FR10StatusMessage_setpoint 3 // setpoint temp
#define EMS_OFFSET_FR10StatusMessage_curr 5 // current temp
// Known EMS types
typedef enum {
EMS_MODEL_NONE,

View File

@@ -45,7 +45,8 @@ static const char * TEST_DATA[] = {
"30 00 FF 00 02 62 00 E4", // test 40 - SM100
"10 48 F7 00 FF 01 A5 DF FF F7 7F 1F", // test 41 - gateway
"30 00 FF 09 02 64 1E", // test 42 - SM100
"08 00 18 00 05 03 30 00 00 00 00 04 40 80 00 02 17 80 00 00 00 FF 30 48 00 CB 00 00 00" // test 43 - sys pressure
"08 00 18 00 05 03 30 00 00 00 00 04 40 80 00 02 17 80 00 00 00 FF 30 48 00 CB 00 00 00", // test 43 - sys pressure
"90 00 FF 00 00 6F 03 01 00 BE 00 BF" // test 44 - FR10
};

View File

@@ -6,5 +6,5 @@
#pragma once
#define APP_NAME "EMS-ESP"
#define APP_VERSION "1.7.0b14"
#define APP_VERSION "1.7.0b15"
#define APP_HOSTNAME "ems-esp"