Paul
2019-07-22 20:06:22 +02:00
parent 32e189ec67
commit 3fdd086160
3 changed files with 58 additions and 72 deletions

View File

@@ -371,6 +371,38 @@ void _renderBoolValue(const char * prefix, uint8_t value) {
myDebug(buffer);
}
// figures out the thermostat mode
// returns 0xFF=unknown, 0=low, 1=manual, 2=auto, 3=night, 4=day
uint8_t _getThermostatMode() {
int thermoMode = EMS_VALUE_INT_NOTSET;
if (ems_getThermostatModel() == EMS_MODEL_RC20) {
if (EMS_Thermostat.mode == 0) {
thermoMode = 0; // low
} else if (EMS_Thermostat.mode == 1) {
thermoMode = 1; // manual
} else if (EMS_Thermostat.mode == 2) {
thermoMode = 2; // auto
}
} else if (ems_getThermostatModel() == EMS_MODEL_RC300) {
if (EMS_Thermostat.mode == 0) {
thermoMode = 1; // manual
} else if (EMS_Thermostat.mode == 1) {
thermoMode = 2; // auto
}
} else { // default for all thermostats
if (EMS_Thermostat.mode == 0) {
thermoMode = 3; // night
} else if (EMS_Thermostat.mode == 1) {
thermoMode = 4; // day
} else if (EMS_Thermostat.mode == 2) {
thermoMode = 2; // auto
}
}
return thermoMode;
}
// Show command - display stats on an 's' command
void showInfo() {
// General stats from EMS bus
@@ -550,7 +582,7 @@ void showInfo() {
myDebug_P(PSTR(" Thermostat: %s"), ems_getThermostatDescription(buffer_type));
// Render Current & Setpoint Room Temperature
if ((ems_getThermostatModel() == EMS_MODEL_EASY)) {
if (ems_getThermostatModel() == EMS_MODEL_EASY) {
// Temperatures are *100
_renderShortValue("Set room temperature", "C", EMS_Thermostat.setpoint_roomTemp, 10); // *100
_renderShortValue("Current room temperature", "C", EMS_Thermostat.curr_roomTemp, 10); // *100
@@ -572,6 +604,8 @@ void showInfo() {
}
// Render Thermostat Date & Time
// not for EASY
if ((ems_getThermostatModel() != EMS_MODEL_EASY)) {
myDebug_P(PSTR(" Thermostat time is %02d:%02d:%02d %d/%d/%d"),
EMS_Thermostat.hour,
EMS_Thermostat.minute,
@@ -579,35 +613,11 @@ void showInfo() {
EMS_Thermostat.day,
EMS_Thermostat.month,
EMS_Thermostat.year + 2000);
// thermostat mode (-1=unknown, 0=low, 1=manual, 2=auto, 3=night, 4=day)
int thermoMode = -1;
if (ems_getThermostatModel() == EMS_MODEL_RC20) {
if (EMS_Thermostat.mode == 0) {
thermoMode = 0; // low
} else if (EMS_Thermostat.mode == 1) {
thermoMode = 1; // manual
} else {
thermoMode = 2; // auto
}
} else if (ems_getThermostatModel() == EMS_MODEL_RC300) {
if (EMS_Thermostat.mode == 0) {
thermoMode = 1; // manual
} else if (EMS_Thermostat.mode == 1) {
thermoMode = 2; // auto
}
} else { // default for all thermostats
if (EMS_Thermostat.mode == 0) {
thermoMode = 3; // night
} else if (EMS_Thermostat.mode == 1) {
thermoMode = 4; // day
} else {
thermoMode = 2; // auto
}
}
// Render Termostat Mode
// Render Termostat Mode, if we have a mode
uint8_t thermoMode = _getThermostatMode(); // 0xFF=unknown, 0=low, 1=manual, 2=auto, 3=night, 4=day
if (thermoMode == 0) {
myDebug_P(PSTR(" Mode is set to low"));
} else if (thermoMode == 1) {
@@ -618,8 +628,6 @@ void showInfo() {
myDebug_P(PSTR(" Mode is set to night"));
} else if (thermoMode == 4) {
myDebug_P(PSTR(" Mode is set to day"));
} else {
myDebug_P(PSTR(" Mode is set to ?"));
}
}
@@ -801,12 +809,16 @@ 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_FR10) || (ems_getThermostatModel() == EMS_MODEL_FW100)) {
if (ems_getThermostatModel() == EMS_MODEL_EASY) {
if (EMS_Thermostat.setpoint_roomTemp != EMS_VALUE_SHORT_NOTSET)
rootThermostat[THERMOSTAT_SELTEMP] = (double)EMS_Thermostat.setpoint_roomTemp / 100;
if (EMS_Thermostat.curr_roomTemp != EMS_VALUE_SHORT_NOTSET)
rootThermostat[THERMOSTAT_CURRTEMP] = (double)EMS_Thermostat.curr_roomTemp / 100;
} else if ((ems_getThermostatModel() == EMS_MODEL_FR10) || (ems_getThermostatModel() == EMS_MODEL_FW100)) {
if (EMS_Thermostat.setpoint_roomTemp != EMS_VALUE_SHORT_NOTSET)
rootThermostat[THERMOSTAT_SELTEMP] = (double)EMS_Thermostat.setpoint_roomTemp / 10;
if (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_SHORT_NOTSET)
rootThermostat[THERMOSTAT_SELTEMP] = (double)EMS_Thermostat.setpoint_roomTemp / 2;
@@ -827,32 +839,7 @@ void publishValues(bool force) {
rootThermostat[THERMOSTAT_CIRCUITCALCTEMP] = EMS_Thermostat.circuitcalctemp;
}
// thermostat mode (-1=unknown, 0=low, 1=manual, 2=auto, 3=night, 4=day)
int thermoMode = -1;
if (ems_getThermostatModel() == EMS_MODEL_RC20) {
if (EMS_Thermostat.mode == 0) {
thermoMode = 0; // low
} else if (EMS_Thermostat.mode == 1) {
thermoMode = 1; // manual
} else {
thermoMode = 2; // auto
}
} else if (ems_getThermostatModel() == EMS_MODEL_RC300) {
if (EMS_Thermostat.mode == 0) {
thermoMode = 1; // manual
} else if (EMS_Thermostat.mode == 1) {
thermoMode = 2; // auto
}
} else { // default for all thermostats
if (EMS_Thermostat.mode == 0) {
thermoMode = 3; // night
} else if (EMS_Thermostat.mode == 1) {
thermoMode = 4; // day
} else {
thermoMode = 2; // auto
}
}
uint8_t thermoMode = _getThermostatMode(); // 0xFF=unknown, 0=low, 1=manual, 2=auto, 3=night, 4=day
// Termostat Mode
if (thermoMode == 0) {
@@ -1856,7 +1843,7 @@ void setup() {
// GPIO15 has a pull down, so we must set it to HIGH
pinMode(15, OUTPUT);
digitalWrite(15,1);
digitalWrite(15, 1);
// init our own parameters
initEMSESP();

View File

@@ -220,7 +220,6 @@ const uint32_t EMS_BUS_TIMEOUT = 15000; // timeout in ms before recogni
const uint32_t EMS_POLL_TIMEOUT = 5000000; // timeout in microseconds before recognizing the ems bus is offline (5 seconds)
// init stats and counters and buffers
// uses -255 or 255 for values that haven't been set yet (EMS_VALUE_INT_NOTSET and EMS_VALUE_FLOAT_NOTSET)
void ems_init() {
// overall status
EMS_Sys_Status.emsRxPgks = 0;
@@ -248,8 +247,8 @@ void ems_init() {
EMS_Thermostat.day = 0;
EMS_Thermostat.month = 0;
EMS_Thermostat.year = 0;
EMS_Thermostat.mode = 255; // dummy value
EMS_Thermostat.day_mode = 255; // dummy value
EMS_Thermostat.mode = EMS_VALUE_INT_NOTSET;
EMS_Thermostat.day_mode = EMS_VALUE_INT_NOTSET;
EMS_Thermostat.device_id = EMS_ID_NONE;
EMS_Thermostat.write_supported = false;
EMS_Thermostat.hc = 1; // default heating circuit is 1

View File

@@ -6,5 +6,5 @@
#pragma once
#define APP_NAME "EMS-ESP"
#define APP_VERSION "1.8.1b21"
#define APP_VERSION "1.8.1b22"
#define APP_HOSTNAME "ems-esp"