This commit is contained in:
Paul
2019-09-27 14:35:23 +02:00
parent 814f477cf9
commit 4b4ef4b426
5 changed files with 46 additions and 21 deletions

View File

@@ -5,13 +5,13 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.9.1 beta] 2019-09-16
## [1.9.1 beta] 2019-09-27
### Added
- Support for multiple Heating Circuits (RC35 only for now and writing via telnet) - https://github.com/proddy/EMS-ESP/issues/162
- mqttlog command also shows which MQTT topics it is subscribed too
- Optimized event log loading in web and added integrity checks on all config and log files
- Support for multiple Heating Circuits - https://github.com/proddy/EMS-ESP/issues/162
- new `mqttlog` command also shows which MQTT topics it is subscribed too
- Optimized event log loading in web and added integrity checks on all config and log files during boot
### Fixed
@@ -21,10 +21,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
- Web login password is now mandatory
- Faster detection of EMS devices on bus by using the 0x07 telegram instead of the brute-force scan
- Fixes to the default HA climate component .yaml file to support latest Home Assistance ('heat' added)
- Update documentation in Wiki on MQTT and troubleshooting
### Removed
- Removed `heating_circuit` parameter
- Removed `heating_circuit` config setting
## [1.9.0] 2019-09-01

View File

@@ -631,15 +631,22 @@ void showInfo() {
// only show if we have data for the Heating Circuit
if (EMS_Thermostat.hc[hc_num - 1].active) {
myDebug_P(PSTR(" Heating Circuit %d"), hc_num);
// Render Current & Setpoint Room Temperature for each thermostat type
_renderShortValue(" Setpoint room temperature", "C", EMS_Thermostat.hc[hc_num - 1].setpoint_roomTemp, _m_setpoint);
_renderShortValue(" Current room temperature", "C", EMS_Thermostat.hc[hc_num - 1].curr_roomTemp, _m_curr);
// Render Day/Night/Holiday Temperature on RC35s
// there is no single setpoint temp, but one for day, night and vacation
if (model == EMS_MODEL_RC35) {
if (EMS_Thermostat.hc[hc_num - 1].summer_mode) {
myDebug_P(PSTR(" Program is set to Summer mode"));
} else if (EMS_Thermostat.hc[hc_num - 1].holiday_mode) {
myDebug_P(PSTR(" Program is set to Holiday mode"));
}
_renderIntValue(" Day temperature", "C", EMS_Thermostat.hc[hc_num - 1].daytemp, 2); // convert to a single byte * 2
_renderIntValue(" Night temperature", "C", EMS_Thermostat.hc[hc_num - 1].nighttemp, 2); // convert to a single byte * 2
_renderIntValue(" Vacation temperature", "C", EMS_Thermostat.hc[hc_num - 1].holidaytemp, 2); // convert to a single byte * 2
} else {
_renderShortValue(" Setpoint room temperature", "C", EMS_Thermostat.hc[hc_num - 1].setpoint_roomTemp, _m_setpoint);
}
// Render Termostat Mode, if we have a mode

View File

@@ -256,8 +256,10 @@ void ems_init() {
for (uint8_t i = 0; i < EMS_THERMOSTAT_MAXHC; i++) {
EMS_Thermostat.hc[i].hc = i + 1;
EMS_Thermostat.hc[i].active = false;
EMS_Thermostat.hc[i].mode = EMS_VALUE_INT_NOTSET;
EMS_Thermostat.hc[i].mode = EMS_VALUE_INT_NOTSET; // night, day, auto
EMS_Thermostat.hc[i].day_mode = EMS_VALUE_INT_NOTSET;
EMS_Thermostat.hc[i].summer_mode = EMS_VALUE_INT_NOTSET;
EMS_Thermostat.hc[i].holiday_mode = EMS_VALUE_INT_NOTSET;
EMS_Thermostat.hc[i].daytemp = EMS_VALUE_INT_NOTSET;
EMS_Thermostat.hc[i].nighttemp = EMS_VALUE_INT_NOTSET;
EMS_Thermostat.hc[i].holidaytemp = EMS_VALUE_INT_NOTSET;
@@ -1400,28 +1402,37 @@ void _process_RC30StatusMessage(_EMS_RxTelegram * EMS_RxTelegram) {
* 10 0B 52 00 00 00 00 00 00 00 00 00 00 00 00 00 00 11 00 00
* 10 0B 5C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 11 00 00
*
* For reading the temp values only
* night mode:
* 10 00 3E 00 04 03 00 7D 00 00 00 00 00 00 00 00 00 11 05 00
* 10 00 48 00 00 00 10 00 E9 00 00 00 00 00 00 00 00 11 05 00
*
* day mode:
* 10 0B 3E 00 04 03 00 7D 00 00 00 00 00 00 00 00 00 11 05 00
* 10 0B 48 00 00 00 10 00 E8 00 00 00 00 00 00 00 00 11 05 00
*
* auto day:
* 10 00 3E 00 04 03 00 7D 00 00 00 00 00 00 00 00 00 11 05 00
* 10 0B 48 00 04 03 00 00 EB 00 00 00 00 00 00 00 00 11 05 00
*
* For reading the current room temperature only and picking up the modes
* received every 60 seconds
*/
void _process_RC35StatusMessage(_EMS_RxTelegram * EMS_RxTelegram) {
// ignore if first byte is 0x00
if (EMS_RxTelegram->data[0] == 0x00) {
// ignore if 14th byte is 0x00, which I think is flow temp?
if (EMS_RxTelegram->data[14] == 0x00) {
return;
}
uint8_t hc_num = _getHeatingCircuit(EMS_RxTelegram); // which HC is it?
// check if setpoint temp sensor is unavailable
if (EMS_RxTelegram->data[EMS_OFFSET_RC35StatusMessage_setpoint] != 0x7D) {
EMS_Thermostat.hc[hc_num - 1].setpoint_roomTemp = _toByte(EMS_OFFSET_RC35StatusMessage_setpoint); // is * 2
}
// check if current temp sensor is unavailable
if (EMS_RxTelegram->data[EMS_OFFSET_RC35StatusMessage_curr] != 0x7D) {
EMS_Thermostat.hc[hc_num - 1].curr_roomTemp = _toShort(EMS_OFFSET_RC35StatusMessage_curr); // is * 10
}
EMS_Thermostat.hc[hc_num - 1].day_mode = _bitRead(EMS_OFFSET_RC35StatusMessage_mode, 1); // get day mode flag
EMS_Thermostat.hc[hc_num - 1].summer_mode = _bitRead(EMS_OFFSET_RC35StatusMessage_mode, 0); // summer mode?
EMS_Thermostat.hc[hc_num - 1].holiday_mode = _bitRead(EMS_OFFSET_RC35StatusMessage_mode1, 5); // holiday mode?
EMS_Thermostat.hc[hc_num - 1].circuitcalctemp = _toByte(EMS_OFFSET_RC35Set_circuitcalctemp); // calculated temperature
@@ -1623,7 +1634,7 @@ void _process_RC35Set(_EMS_RxTelegram * EMS_RxTelegram) {
uint8_t hc_num = _getHeatingCircuit(EMS_RxTelegram); // which HC is it?
EMS_Thermostat.hc[hc_num - 1].mode = _toByte(EMS_OFFSET_RC35Set_mode);
EMS_Thermostat.hc[hc_num - 1].mode = _toByte(EMS_OFFSET_RC35Set_mode); // night, day, auto
EMS_Thermostat.hc[hc_num - 1].daytemp = _toByte(EMS_OFFSET_RC35Set_temp_day); // is * 2
EMS_Thermostat.hc[hc_num - 1].nighttemp = _toByte(EMS_OFFSET_RC35Set_temp_night); // is * 2
EMS_Thermostat.hc[hc_num - 1].holidaytemp = _toByte(EMS_OFFSET_RC35Set_temp_holiday); // is * 2

View File

@@ -385,8 +385,10 @@ typedef struct {
bool active; // true if there is data for this HC
int16_t setpoint_roomTemp; // current set temp
int16_t curr_roomTemp; // current room temp
uint8_t mode; // 0=low, 1=manual, 2=auto
bool day_mode; // 0=night, 1=day
uint8_t mode; // 0=low, 1=manual, 2=auto (or night, day on RC35s)
uint8_t day_mode; // 0=night, 1=day
uint8_t summer_mode;
uint8_t holiday_mode;
uint8_t daytemp;
uint8_t nighttemp;
uint8_t holidaytemp;

View File

@@ -97,7 +97,9 @@
#define EMS_OFFSET_RC35StatusMessage_setpoint 2 // desired temp
#define EMS_OFFSET_RC35StatusMessage_curr 3 // current temp
#define EMS_OFFSET_RC35StatusMessage_mode 1 //day mode
#define EMS_OFFSET_RC35StatusMessage_mode 1 // day mode, also summer on RC3's
#define EMS_OFFSET_RC35StatusMessage_mode1 0 // for holiday mode
#define EMS_TYPE_RC35Set_HC1 0x3D // for setting values like temp and mode (Working mode HC1)
#define EMS_TYPE_RC35Set_HC2 0x47 // for setting values like temp and mode (Working mode HC2)