diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d0aefffd..dca6ced33 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - improved MQTT publishing to stop flooding. `publish_time` must be at least 1 (second) - External sensors (like dallas) are sent as a nested MQTT topic including their unqiue identifier +- `mqttlog` console command renamed to `mqttqueue` ### Removed - `autodetect scan` diff --git a/src/ems.cpp b/src/ems.cpp index 126cd9f04..327dc2046 100644 --- a/src/ems.cpp +++ b/src/ems.cpp @@ -195,8 +195,10 @@ void ems_init() { // Solar Module values EMS_SolarModule.collectorTemp = EMS_VALUE_SHORT_NOTSET; // collector temp from SM10/SM100/SM200 EMS_SolarModule.bottomTemp = EMS_VALUE_SHORT_NOTSET; // bottom temp from SM10/SM100/SM200 + EMS_SolarModule.bottomTemp2 = EMS_VALUE_SHORT_NOTSET; // bottom temp 2 from SM200 EMS_SolarModule.pumpModulation = EMS_VALUE_INT_NOTSET; // modulation solar pump SM10/SM100/SM200 EMS_SolarModule.pump = EMS_VALUE_BOOL_NOTSET; // pump active + EMS_SolarModule.valveStatus = EMS_VALUE_BOOL_NOTSET; // valve status from SM200 EMS_SolarModule.EnergyLastHour = EMS_VALUE_USHORT_NOTSET; EMS_SolarModule.EnergyToday = EMS_VALUE_USHORT_NOTSET; EMS_SolarModule.EnergyTotal = EMS_VALUE_USHORT_NOTSET; @@ -1494,18 +1496,23 @@ void _process_SM10Monitor(_EMS_RxTelegram * EMS_RxTelegram) { } /* - * SM100Monitor - type 0x0262 EMS+ + * SM100Monitor - type 0x0262 EMS+ - for SM100 and SM200 + * e.g. B0 0B FF 00 02 62 00 44 02 7A 80 00 80 00 80 00 80 00 80 00 80 00 00 7C 80 00 80 00 80 00 80 * e.g, 30 00 FF 00 02 62 01 AC * 30 00 FF 18 02 62 80 00 * 30 00 FF 00 02 62 01 A1 - for bottom temps + * bytes 0+1 = TS1 Temperature sensor for collector + * bytes 2+3 = TS2 Temperature sensor bottom cylinder 1 + * bytes 16+17 = TS5 Temperature sensor bottom cylinder 2 */ void _process_SM100Monitor(_EMS_RxTelegram * EMS_RxTelegram) { _setValue(EMS_RxTelegram, &EMS_SolarModule.collectorTemp, 0); // is *10 _setValue(EMS_RxTelegram, &EMS_SolarModule.bottomTemp, 2); // is *10 + _setValue(EMS_RxTelegram, &EMS_SolarModule.bottomTemp2, 16); // is *10 } /* - * SM100Status - type 0x0264 EMS+ for pump modulation + * SM100Status - type 0x0264 EMS+ for pump modulation - for SM100 and SM200 * e.g. 30 00 FF 09 02 64 64 = 100% * 30 00 FF 09 02 64 1E = 30% */ @@ -1514,10 +1521,14 @@ void _process_SM100Status(_EMS_RxTelegram * EMS_RxTelegram) { } /* - * SM100Status2 - type 0x026A EMS+ for pump on/off at offset 0x0A + * SM100Status2 - type 0x026A EMS+ for pump on/off at offset 0x0A - for SM100 and SM200 + * e.g. B0 00 FF 00 02 6A 03 03 03 03 01 03 03 03 03 03 01 03 + * byte 4 = VS2 3-way valve for cylinder 2 : test=01, on=04 and off=03 + * byte 10 = PS1 Solar circuit pump for collector array 1: test=01, on=04 and off=03 */ void _process_SM100Status2(_EMS_RxTelegram * EMS_RxTelegram) { - _setValue(EMS_RxTelegram, &EMS_SolarModule.pump, 10, 2); // 03=off 04=on + _setValue(EMS_RxTelegram, &EMS_SolarModule.valveStatus, 4, 2); // 03=off 04=on + _setValue(EMS_RxTelegram, &EMS_SolarModule.pump, 10, 2); // 03=off 04=on } /* @@ -1998,7 +2009,7 @@ void ems_getSolarModuleValues() { if (EMS_SolarModule.device_flags == EMS_DEVICE_FLAG_SM10) { ems_doReadCommand(EMS_TYPE_SM10Monitor, EMS_SolarModule.device_id); // fetch all from SM10Monitor } else if (EMS_SolarModule.device_flags == EMS_DEVICE_FLAG_SM100) { - ems_doReadCommand(EMS_TYPE_SM100Monitor, EMS_SolarModule.device_id); // fetch all from SM100Monitor + ems_doReadCommand(EMS_TYPE_SM100Monitor, EMS_SolarModule.device_id); // fetch all from SM100Monitor (also for SM200) } } } @@ -2823,7 +2834,7 @@ const _EMS_Type EMS_Types[] = { {EMS_DEVICE_UPDATE_FLAG_BOILER, EMS_TYPE_UBAMonitorFast2, "UBAMonitorFast2", _process_UBAMonitorFast2}, {EMS_DEVICE_UPDATE_FLAG_BOILER, EMS_TYPE_UBAMonitorSlow2, "UBAMonitorSlow2", _process_UBAMonitorSlow2}, - // Solar Module devices + // Solar Module devices. Note SM100 also covers SM200 {EMS_DEVICE_UPDATE_FLAG_SOLAR, EMS_TYPE_SM10Monitor, "SM10Monitor", _process_SM10Monitor}, {EMS_DEVICE_UPDATE_FLAG_SOLAR, EMS_TYPE_SM100Monitor, "SM100Monitor", _process_SM100Monitor}, {EMS_DEVICE_UPDATE_FLAG_SOLAR, EMS_TYPE_SM100Status, "SM100Status", _process_SM100Status}, diff --git a/src/ems.h b/src/ems.h index a1793ca4f..40a2b2dc0 100644 --- a/src/ems.h +++ b/src/ems.h @@ -46,22 +46,23 @@ #define EMS_MIXING_MAXWWC 2 // max number of warm water circuits // Device Flags -#define EMS_DEVICE_FLAG_NONE 0 // no flags set -#define EMS_DEVICE_FLAG_SM10 10 // solar module1 -#define EMS_DEVICE_FLAG_SM100 11 // solar module2 -#define EMS_DEVICE_FLAG_MMPLUS 12 // mixing module EMS+ -#define EMS_DEVICE_FLAG_MM10 13 // mixing modules MM10 and MM50 - -// device flags specific for thermostats -#define EMS_DEVICE_FLAG_NO_WRITE 0x80 // top bit set if write not supported -#define EMS_DEVICE_FLAG_EASY 1 -#define EMS_DEVICE_FLAG_RC10 2 -#define EMS_DEVICE_FLAG_RC20 3 -#define EMS_DEVICE_FLAG_RC30 4 -#define EMS_DEVICE_FLAG_RC30N 5 // newer type of RC30 with RC35 circuit -#define EMS_DEVICE_FLAG_RC35 6 -#define EMS_DEVICE_FLAG_RC300 7 -#define EMS_DEVICE_FLAG_JUNKERS 8 +// They are unique to the model type (mixing, solar, thermostat etc) +enum EMS_DEVICE_FLAG_TYPES : uint8_t { + EMS_DEVICE_FLAG_NONE = 0, + EMS_DEVICE_FLAG_MMPLUS = 20, // mixing EMS+ + EMS_DEVICE_FLAG_MM10 = 21, // mixing MM10, MM50 + EMS_DEVICE_FLAG_SM10 = 10, + EMS_DEVICE_FLAG_SM100 = 11, // for SM100 and SM200 + EMS_DEVICE_FLAG_EASY = 1, + EMS_DEVICE_FLAG_RC10 = 2, + EMS_DEVICE_FLAG_RC20 = 3, + EMS_DEVICE_FLAG_RC30 = 4, + EMS_DEVICE_FLAG_RC30N = 5, // newer type of RC30 with RC35 circuit + EMS_DEVICE_FLAG_RC35 = 6, + EMS_DEVICE_FLAG_RC300 = 7, + EMS_DEVICE_FLAG_JUNKERS = (1 << 6), // 6th bit set if its junkers HT3 + EMS_DEVICE_FLAG_NO_WRITE = (1 << 7) // top bit set if thermostat write not supported +}; typedef enum { EMS_THERMOSTAT_MODE_UNKNOWN, @@ -335,7 +336,6 @@ typedef struct { // calculated values uint8_t tapwaterActive; // Hot tap water is on/off uint8_t heatingActive; // Central heating is on/off - } _EMS_Boiler; /* @@ -388,10 +388,12 @@ typedef struct { const char * device_desc_p; uint8_t product_id; char version[10]; - int16_t collectorTemp; // collector temp - int16_t bottomTemp; // bottom temp + int16_t collectorTemp; // collector temp (TS1) + int16_t bottomTemp; // bottom temp (TS2) + int16_t bottomTemp2; // bottom temp cylinder 2 (TS5) uint8_t pumpModulation; // modulation solar pump uint8_t pump; // pump active + uint8_t valveStatus; // valve status (VS2) int16_t setpoint_maxBottomTemp; // setpoint for maximum collector temp uint16_t EnergyLastHour; uint16_t EnergyToday; diff --git a/src/version.h b/src/version.h index c978fe68c..1fe84677b 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define APP_VERSION "1.9.5b43" +#define APP_VERSION "1.9.5b44"