emsplus for Tx

This commit is contained in:
Paul
2020-03-01 16:47:26 +01:00
parent 81188eccd9
commit 4cc670f010
5 changed files with 40 additions and 34 deletions

View File

@@ -26,9 +26,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- RC35 setting temperature also forces the current select temp to change, irrespective of the mode - RC35 setting temperature also forces the current select temp to change, irrespective of the mode
### Changed ### Changed
- improved MQTT publishing to stop flooding. `publish_time` must be at least 1 (second) - improved MQTT publishing to stop network flooding. `publish_time` of -1 is no publish, 0 is automatic otherwise its a time interval
- External sensors (like dallas) are sent as a nested MQTT topic including their unqiue identifier - External sensors (like Dallas DS18*) are sent as a nested MQTT topic including their unqiue identifier
- `mqttlog` console command renamed to `mqttqueue` - `mqttlog` console command renamed to `mqttqueue` to only show the current publish queue
### Removed ### Removed
- `autodetect scan` - `autodetect scan`

View File

@@ -607,7 +607,8 @@ void _ems_sendTelegram() {
} }
// complete the rest of the header depending on EMS or EMS+ // complete the rest of the header depending on EMS or EMS+
if (EMS_TxTelegram.type > 0xFF) { // or if we explicitly set EMS+ like with Junkers
if ((EMS_TxTelegram.type > 0xFF) || (EMS_TxTelegram.emsplus)) {
// EMS 2.0 / EMS+ // EMS 2.0 / EMS+
EMS_TxTelegram.data[2] = 0xFF; // fixed value indicating an extended message EMS_TxTelegram.data[2] = 0xFF; // fixed value indicating an extended message
EMS_TxTelegram.data[3] = EMS_TxTelegram.offset; EMS_TxTelegram.data[3] = EMS_TxTelegram.offset;
@@ -699,6 +700,7 @@ void _createValidate() {
new_EMS_TxTelegram.comparisonValue = EMS_TxTelegram.comparisonValue; new_EMS_TxTelegram.comparisonValue = EMS_TxTelegram.comparisonValue;
new_EMS_TxTelegram.comparisonPostRead = EMS_TxTelegram.comparisonPostRead; new_EMS_TxTelegram.comparisonPostRead = EMS_TxTelegram.comparisonPostRead;
new_EMS_TxTelegram.comparisonOffset = EMS_TxTelegram.comparisonOffset; new_EMS_TxTelegram.comparisonOffset = EMS_TxTelegram.comparisonOffset;
new_EMS_TxTelegram.emsplus = EMS_TxTelegram.emsplus;
// this is what is different // this is what is different
new_EMS_TxTelegram.offset = EMS_TxTelegram.comparisonOffset; // location of byte to fetch new_EMS_TxTelegram.offset = EMS_TxTelegram.comparisonOffset; // location of byte to fetch
@@ -2420,6 +2422,8 @@ void ems_setThermostatTemp(float temperature, uint8_t hc_num, uint8_t temptype)
} }
else if (model == EMS_DEVICE_FLAG_JUNKERS) { else if (model == EMS_DEVICE_FLAG_JUNKERS) {
// All Junkers use EMS+. I think.
EMS_TxTelegram.emsplus = true;
switch (temptype) { switch (temptype) {
case 1: // change the no frost temp case 1: // change the no frost temp
EMS_TxTelegram.offset = EMS_OFFSET_JunkersSetMessage_no_frost_temp; EMS_TxTelegram.offset = EMS_OFFSET_JunkersSetMessage_no_frost_temp;
@@ -2432,7 +2436,7 @@ void ems_setThermostatTemp(float temperature, uint8_t hc_num, uint8_t temptype)
break; break;
default: default:
case 0: // automatic selection, if no type is defined, we use the standard code case 0: // automatic selection, if no type is defined, we use the standard code
// not sure if this is correct for Junkers // TODO: not sure if this is correct for Junkers
if (EMS_Thermostat.hc[hc_num - 1].mode_type == 0) { if (EMS_Thermostat.hc[hc_num - 1].mode_type == 0) {
EMS_TxTelegram.offset = EMS_OFFSET_JunkersSetMessage_night_temp; EMS_TxTelegram.offset = EMS_OFFSET_JunkersSetMessage_night_temp;
} else if (EMS_Thermostat.hc[hc_num - 1].mode_type == 1) { } else if (EMS_Thermostat.hc[hc_num - 1].mode_type == 1) {

View File

@@ -155,22 +155,6 @@ typedef struct {
uint8_t emsMasterThermostat; // product ID for the default thermostat to use uint8_t emsMasterThermostat; // product ID for the default thermostat to use
} _EMS_Sys_Status; } _EMS_Sys_Status;
// The Tx send package
typedef struct {
_EMS_TX_TELEGRAM_ACTION action; // read, write, validate, init
uint8_t dest;
uint16_t type;
uint8_t offset;
uint8_t length; // full length of complete telegram, including CRC
uint8_t dataValue; // value to validate against
uint16_t type_validate; // type to call after a successful Write command
uint8_t comparisonValue; // value to compare against during a validate command
uint8_t comparisonOffset; // offset of where the byte is we want to compare too during validation
uint16_t comparisonPostRead; // after a successful write, do a read from this type ID
unsigned long timestamp; // when created
uint8_t data[EMS_MAX_TELEGRAM_LENGTH];
} _EMS_TxTelegram;
// The Rx receive package // The Rx receive package
typedef struct { typedef struct {
unsigned long timestamp; // timestamp from millis() unsigned long timestamp; // timestamp from millis()
@@ -186,6 +170,23 @@ typedef struct {
uint8_t emsplus_type; // FF, F7 or F9 uint8_t emsplus_type; // FF, F7 or F9
} _EMS_RxTelegram; } _EMS_RxTelegram;
// The Tx send package
typedef struct {
_EMS_TX_TELEGRAM_ACTION action; // read, write, validate, init
uint8_t dest;
uint16_t type;
uint8_t offset;
uint8_t length; // full length of complete telegram, including CRC
bool emsplus; // true if ems+/ems 2.0
uint8_t dataValue; // value to validate against
uint16_t type_validate; // type to call after a successful Write command
uint8_t comparisonValue; // value to compare against during a validate command
uint8_t comparisonOffset; // offset of where the byte is we want to compare too during validation
uint16_t comparisonPostRead; // after a successful write, do a read from this type ID
unsigned long timestamp; // when created
uint8_t data[EMS_MAX_TELEGRAM_LENGTH];
} _EMS_TxTelegram;
// default empty Tx, must match struct // default empty Tx, must match struct
const _EMS_TxTelegram EMS_TX_TELEGRAM_NEW = { const _EMS_TxTelegram EMS_TX_TELEGRAM_NEW = {
EMS_TX_TELEGRAM_INIT, // action EMS_TX_TELEGRAM_INIT, // action
@@ -193,7 +194,8 @@ const _EMS_TxTelegram EMS_TX_TELEGRAM_NEW = {
EMS_ID_NONE, // type EMS_ID_NONE, // type
0, // offset 0, // offset
0, // length 0, // length
0, // data value false, // emsplus (no)
0, // dataValue
EMS_ID_NONE, // type_validate EMS_ID_NONE, // type_validate
0, // comparisonValue 0, // comparisonValue
0, // comparisonOffset 0, // comparisonOffset

View File

@@ -287,14 +287,14 @@ static const _EMS_Device EMS_Devices[] = {
{76, EMS_DEVICE_TYPE_THERMOSTAT, "Sieger ES73", EMS_DEVICE_FLAG_RC35}, // 0x10 {76, EMS_DEVICE_TYPE_THERMOSTAT, "Sieger ES73", EMS_DEVICE_FLAG_RC35}, // 0x10
{113, EMS_DEVICE_TYPE_THERMOSTAT, "Sieger ES72", EMS_DEVICE_FLAG_RC20}, // 0x17 {113, EMS_DEVICE_TYPE_THERMOSTAT, "Sieger ES72", EMS_DEVICE_FLAG_RC20}, // 0x17
// Junkers // Junkers - all 0x10
{105, EMS_DEVICE_TYPE_THERMOSTAT, "Junkers FW100", EMS_DEVICE_FLAG_JUNKERS}, // 0x10 {105, EMS_DEVICE_TYPE_THERMOSTAT, "Junkers FW100", EMS_DEVICE_FLAG_JUNKERS}, // 0x10
{106, EMS_DEVICE_TYPE_THERMOSTAT, "Junkers FW200", EMS_DEVICE_FLAG_JUNKERS | EMS_DEVICE_FLAG_NO_WRITE}, // 0x10, cannot write {106, EMS_DEVICE_TYPE_THERMOSTAT, "Junkers FW200", EMS_DEVICE_FLAG_JUNKERS}, // 0x10
{107, EMS_DEVICE_TYPE_THERMOSTAT, "Junkers FR100", EMS_DEVICE_FLAG_JUNKERS}, // 0x10 {107, EMS_DEVICE_TYPE_THERMOSTAT, "Junkers FR100", EMS_DEVICE_FLAG_JUNKERS}, // 0x10
{108, EMS_DEVICE_TYPE_THERMOSTAT, "Junkers FR110", EMS_DEVICE_FLAG_JUNKERS | EMS_DEVICE_FLAG_NO_WRITE}, // 0x10, cannot write {108, EMS_DEVICE_TYPE_THERMOSTAT, "Junkers FR110", EMS_DEVICE_FLAG_JUNKERS}, // 0x10
{111, EMS_DEVICE_TYPE_THERMOSTAT, "Junkers FR10", EMS_DEVICE_FLAG_JUNKERS}, // 0x10 {111, EMS_DEVICE_TYPE_THERMOSTAT, "Junkers FR10", EMS_DEVICE_FLAG_JUNKERS}, // 0x10
{147, EMS_DEVICE_TYPE_THERMOSTAT, "Junkers FR50", EMS_DEVICE_FLAG_JUNKERS | EMS_DEVICE_FLAG_NO_WRITE}, // 0x10, cannot write {147, EMS_DEVICE_TYPE_THERMOSTAT, "Junkers FR50", EMS_DEVICE_FLAG_JUNKERS}, // 0x10
{191, EMS_DEVICE_TYPE_THERMOSTAT, "Junkers FR120", EMS_DEVICE_FLAG_JUNKERS | EMS_DEVICE_FLAG_NO_WRITE}, // 0x10, cannot write {191, EMS_DEVICE_TYPE_THERMOSTAT, "Junkers FR120", EMS_DEVICE_FLAG_JUNKERS}, // 0x10
{192, EMS_DEVICE_TYPE_THERMOSTAT, "Junkers FW120", EMS_DEVICE_FLAG_JUNKERS} // 0x10 {192, EMS_DEVICE_TYPE_THERMOSTAT, "Junkers FW120", EMS_DEVICE_FLAG_JUNKERS} // 0x10

View File

@@ -1 +1 @@
#define APP_VERSION "1.9.5b46" #define APP_VERSION "1.9.5b47"