minor code optimizations

This commit is contained in:
Paul
2019-10-13 14:34:28 +02:00
parent 633aec9fcd
commit a97ecb414a
4 changed files with 18 additions and 45 deletions

View File

@@ -595,7 +595,7 @@ void MyESP::_telnetConnected() {
// show crash dump if just restarted after a fatal crash // show crash dump if just restarted after a fatal crash
uint32_t crash_time; uint32_t crash_time;
EEPROMr.get(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_CRASH_TIME, crash_time); EEPROMr.get(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_CRASH_TIME, crash_time);
if ((crash_time != 0) && (crash_time != 0xFFFFFFFF)) { if ((crash_time) && (crash_time != 0xFFFFFFFF)) {
myDebug_P(PSTR("[SYSTEM] There is stack data available from the last system crash. Use 'crash dump' to view and 'crash clear' to reset")); myDebug_P(PSTR("[SYSTEM] There is stack data available from the last system crash. Use 'crash dump' to view and 'crash clear' to reset"));
} }
#endif #endif

View File

@@ -462,7 +462,7 @@ void showInfo() {
} }
// Dallas external temp sensors // Dallas external temp sensors
if (EMSESP_Settings.dallas_sensors != 0) { if (EMSESP_Settings.dallas_sensors) {
myDebug_P(PSTR("")); // newline myDebug_P(PSTR("")); // newline
char buffer[128] = {0}; char buffer[128] = {0};
char valuestr[8] = {0}; // for formatting temp char valuestr[8] = {0}; // for formatting temp
@@ -678,8 +678,8 @@ void publishValues(bool force) {
// hc{1-4} // hc{1-4}
char hc[10]; char hc[10];
strncpy(hc, THERMOSTAT_HC, sizeof(hc)); strlcpy(hc, THERMOSTAT_HC, sizeof(hc));
strncat(hc, _int_to_char(s, thermostat->hc), sizeof(hc)); strlcat(hc, _int_to_char(s, thermostat->hc), sizeof(hc));
JsonObject dataThermostat = rootThermostat.createNestedObject(hc); JsonObject dataThermostat = rootThermostat.createNestedObject(hc);
// different logic depending on thermostat types // different logic depending on thermostat types
@@ -909,7 +909,7 @@ char * _readWord() {
// publish external dallas sensor temperature values to MQTT // publish external dallas sensor temperature values to MQTT
void do_publishSensorValues() { void do_publishSensorValues() {
if ((EMSESP_Settings.dallas_sensors != 0) && (EMSESP_Settings.publish_time != 0)) { if ((EMSESP_Settings.dallas_sensors) && (EMSESP_Settings.publish_time)) {
publishSensorValues(); publishSensorValues();
} }
} }
@@ -917,7 +917,7 @@ void do_publishSensorValues() {
// call PublishValues without forcing, so using CRC to see if we really need to publish // call PublishValues without forcing, so using CRC to see if we really need to publish
void do_publishValues() { void do_publishValues() {
// don't publish if we're not connected to the EMS bus // don't publish if we're not connected to the EMS bus
if ((ems_getBusConnected()) && myESP.isMQTTConnected() && EMSESP_Settings.publish_time != 0) { if ((ems_getBusConnected()) && myESP.isMQTTConnected() && EMSESP_Settings.publish_time) {
publishValues(true); // force publish publishValues(true); // force publish
} }
} }
@@ -1542,7 +1542,6 @@ void MQTTCallback(unsigned int type, const char * topic, const char * message) {
if (strcmp(topic, TOPIC_GENERIC_CMD) == 0) { if (strcmp(topic, TOPIC_GENERIC_CMD) == 0) {
// convert JSON and get the command // convert JSON and get the command
StaticJsonDocument<100> doc; StaticJsonDocument<100> doc;
JsonObject root = doc.to<JsonObject>(); // create empty object
DeserializationError error = deserializeJson(doc, message); // Deserialize the JSON document DeserializationError error = deserializeJson(doc, message); // Deserialize the JSON document
if (error) { if (error) {
myDebug_P(PSTR("[MQTT] Invalid command from topic %s, payload %s, error %s"), topic, message, error.c_str()); myDebug_P(PSTR("[MQTT] Invalid command from topic %s, payload %s, error %s"), topic, message, error.c_str());
@@ -1562,7 +1561,6 @@ void MQTTCallback(unsigned int type, const char * topic, const char * message) {
// check for shower commands // check for shower commands
if (strcmp(topic, TOPIC_SHOWER_DATA) == 0) { if (strcmp(topic, TOPIC_SHOWER_DATA) == 0) {
StaticJsonDocument<100> doc; StaticJsonDocument<100> doc;
JsonObject root = doc.to<JsonObject>(); // create empty object
DeserializationError error = deserializeJson(doc, message); // Deserialize the JSON document DeserializationError error = deserializeJson(doc, message); // Deserialize the JSON document
if (error) { if (error) {
myDebug_P(PSTR("[MQTT] Invalid command from topic %s, payload %s, error %s"), topic, message, error.c_str()); myDebug_P(PSTR("[MQTT] Invalid command from topic %s, payload %s, error %s"), topic, message, error.c_str());
@@ -1594,7 +1592,6 @@ void MQTTCallback(unsigned int type, const char * topic, const char * message) {
if (strcmp(topic, TOPIC_BOILER_CMD) == 0) { if (strcmp(topic, TOPIC_BOILER_CMD) == 0) {
// convert JSON and get the command // convert JSON and get the command
StaticJsonDocument<100> doc; StaticJsonDocument<100> doc;
JsonObject root = doc.to<JsonObject>(); // create empty object
DeserializationError error = deserializeJson(doc, message); // Deserialize the JSON document DeserializationError error = deserializeJson(doc, message); // Deserialize the JSON document
if (error) { if (error) {
myDebug_P(PSTR("[MQTT] Invalid command from topic %s, payload %s, error %s"), topic, message, error.c_str()); myDebug_P(PSTR("[MQTT] Invalid command from topic %s, payload %s, error %s"), topic, message, error.c_str());
@@ -1672,7 +1669,6 @@ void MQTTCallback(unsigned int type, const char * topic, const char * message) {
if (strcmp(topic, TOPIC_THERMOSTAT_CMD) == 0) { if (strcmp(topic, TOPIC_THERMOSTAT_CMD) == 0) {
// convert JSON and get the command // convert JSON and get the command
StaticJsonDocument<100> doc; StaticJsonDocument<100> doc;
JsonObject root = doc.to<JsonObject>(); // create empty object
DeserializationError error = deserializeJson(doc, message); // Deserialize the JSON document DeserializationError error = deserializeJson(doc, message); // Deserialize the JSON document
if (error) { if (error) {
myDebug_P(PSTR("[MQTT] Invalid command from topic %s, payload %s, error %s"), topic, message, error.c_str()); myDebug_P(PSTR("[MQTT] Invalid command from topic %s, payload %s, error %s"), topic, message, error.c_str());
@@ -1680,30 +1676,6 @@ void MQTTCallback(unsigned int type, const char * topic, const char * message) {
} }
const char * command = doc["cmd"]; const char * command = doc["cmd"];
uint8_t hc;
// thermostat temp changes
hc = _hasHCspecified(TOPIC_THERMOSTAT_CMD_TEMP, command);
if (hc) {
float f = doc["data"];
ems_setThermostatTemp(f, hc);
publishValues(true); // publish back immediately
return;
}
// thermostat mode changes
hc = _hasHCspecified(TOPIC_THERMOSTAT_CMD_MODE, command);
if (hc) {
const char * data = doc["data"];
if (strcmp(data, "auto") == 0) {
ems_setThermostatMode(2, hc);
} else if ((strcmp(data, "day") == 0) || (strcmp(data, "manual") == 0) || (strcmp(data, "heat") == 0)) {
ems_setThermostatMode(1, hc);
} else if ((strcmp(data, "night") == 0) || (strcmp(data, "off") == 0)) {
ems_setThermostatMode(0, hc);
}
return;
}
// set night temp value // set night temp value
hc = _hasHCspecified(TOPIC_THERMOSTAT_CMD_NIGHTTEMP, command); hc = _hasHCspecified(TOPIC_THERMOSTAT_CMD_NIGHTTEMP, command);
if (hc) { if (hc) {
@@ -1968,12 +1940,12 @@ void showerCheck() {
} }
} else { // hot water is off } else { // hot water is off
// if it just turned off, record the time as it could be a short pause // if it just turned off, record the time as it could be a short pause
if ((EMSESP_Shower.timerStart != 0) && (EMSESP_Shower.timerPause == 0)) { if ((EMSESP_Shower.timerStart) && (EMSESP_Shower.timerPause == 0)) {
EMSESP_Shower.timerPause = EMSESP_Settings.timestamp; EMSESP_Shower.timerPause = EMSESP_Settings.timestamp;
} }
// if shower has been off for longer than the wait time // if shower has been off for longer than the wait time
if ((EMSESP_Shower.timerPause != 0) && ((EMSESP_Settings.timestamp - EMSESP_Shower.timerPause) > SHOWER_PAUSE_TIME)) { if ((EMSESP_Shower.timerPause) && ((EMSESP_Settings.timestamp - EMSESP_Shower.timerPause) > SHOWER_PAUSE_TIME)) {
// it is over the wait period, so assume that the shower has finished and calculate the total time and publish // it is over the wait period, so assume that the shower has finished and calculate the total time and publish
// because its unsigned long, can't have negative so check if length is less than OFFSET_TIME // because its unsigned long, can't have negative so check if length is less than OFFSET_TIME
if ((EMSESP_Shower.timerPause - EMSESP_Shower.timerStart) > SHOWER_OFFSET_TIME) { if ((EMSESP_Shower.timerPause - EMSESP_Shower.timerStart) > SHOWER_OFFSET_TIME) {
@@ -2047,7 +2019,7 @@ void setup() {
} }
// set timers for MQTT publish // set timers for MQTT publish
if (EMSESP_Settings.publish_time != 0) { if (EMSESP_Settings.publish_time) {
publishValuesTimer.attach(EMSESP_Settings.publish_time, do_publishValues); // post MQTT EMS values publishValuesTimer.attach(EMSESP_Settings.publish_time, do_publishValues); // post MQTT EMS values
publishSensorValuesTimer.attach(EMSESP_Settings.publish_time, do_publishSensorValues); // post MQTT dallas sensor values publishSensorValuesTimer.attach(EMSESP_Settings.publish_time, do_publishSensorValues); // post MQTT dallas sensor values
} }
@@ -2076,7 +2048,7 @@ void loop() {
// check Dallas sensors, using same schedule as publish_time (default 2 mins) // check Dallas sensors, using same schedule as publish_time (default 2 mins)
// these values are published to MQTT separately via the timer publishSensorValuesTimer // these values are published to MQTT separately via the timer publishSensorValuesTimer
if (EMSESP_Settings.dallas_sensors != 0) { if (EMSESP_Settings.dallas_sensors) {
ds18.loop(); ds18.loop();
} }
@@ -2085,6 +2057,7 @@ void loop() {
if (ems_getEmsRefreshed() && (scanThermostat_count == 0)) { if (ems_getEmsRefreshed() && (scanThermostat_count == 0)) {
publishValues(false); publishValues(false);
do_publishSensorValues(); do_publishSensorValues();
do_publishShowerData();
ems_setEmsRefreshed(false); // reset ems_setEmsRefreshed(false); // reset
} }
@@ -2093,7 +2066,7 @@ void loop() {
showerCheck(); showerCheck();
} }
if (EMSESP_DELAY != 0) { if (EMSESP_DELAY) {
delay(EMSESP_DELAY); // some time to WiFi and everything else to catch up, and prevent overheating delay(EMSESP_DELAY); // some time to WiFi and everything else to catch up, and prevent overheating
} }
} }

View File

@@ -7,9 +7,9 @@
*/ */
#include "ems.h" #include "ems.h"
#include "ems_utils.h"
#include "MyESP.h" #include "MyESP.h"
#include "ems_devices.h" #include "ems_devices.h"
#include "ems_utils.h"
#include "emsuart.h" #include "emsuart.h"
#include <CircularBuffer.h> // https://github.com/rlogiacco/CircularBuffer #include <CircularBuffer.h> // https://github.com/rlogiacco/CircularBuffer
@@ -1001,7 +1001,7 @@ void _printMessage(_EMS_RxTelegram * EMS_RxTelegram) {
strlcpy(color_s, COLOR_MAGENTA, sizeof(color_s)); strlcpy(color_s, COLOR_MAGENTA, sizeof(color_s));
} }
if (length != 0) { if (length) {
// type // type
strlcat(output_str, ", type 0x", sizeof(output_str)); strlcat(output_str, ", type 0x", sizeof(output_str));
@@ -1691,7 +1691,7 @@ void _process_SM10Monitor(_EMS_RxTelegram * EMS_RxTelegram) {
*/ */
void _process_SM100Monitor(_EMS_RxTelegram * EMS_RxTelegram) { void _process_SM100Monitor(_EMS_RxTelegram * EMS_RxTelegram) {
// only process the complete telegram, not partial // only process the complete telegram, not partial
if (EMS_RxTelegram->offset != 0) { if (EMS_RxTelegram->offset) {
return; return;
} }
@@ -1802,7 +1802,7 @@ void _process_ISM1Set(_EMS_RxTelegram * EMS_RxTelegram) {
*/ */
void _process_SetPoints(_EMS_RxTelegram * EMS_RxTelegram) { void _process_SetPoints(_EMS_RxTelegram * EMS_RxTelegram) {
if (EMS_Sys_Status.emsLogging == EMS_SYS_LOGGING_VERBOSE) { if (EMS_Sys_Status.emsLogging == EMS_SYS_LOGGING_VERBOSE) {
if (EMS_RxTelegram->data_length != 0) { if (EMS_RxTelegram->data_length) {
uint8_t setpoint = EMS_RxTelegram->data[0]; // flow temp uint8_t setpoint = EMS_RxTelegram->data[0]; // flow temp
//uint8_t ww_power = data[2]; // power in % //uint8_t ww_power = data[2]; // power in %

View File

@@ -178,7 +178,7 @@ void ICACHE_FLASH_ATTR emsuart_tx_brk() {
uint32_t tmp; uint32_t tmp;
// must make sure Tx FIFO is empty // must make sure Tx FIFO is empty
while (((USS(EMSUART_UART) >> USTXC) & 0xFF) != 0) while (((USS(EMSUART_UART) >> USTXC) & 0xFF))
; ;
tmp = ((1 << UCRXRST) | (1 << UCTXRST)); // bit mask tmp = ((1 << UCRXRST) | (1 << UCTXRST)); // bit mask
@@ -227,7 +227,7 @@ _EMS_TX_STATUS ICACHE_FLASH_ATTR emsuart_tx_buffer(uint8_t * buf, uint8_t len) {
USF(EMSUART_UART) = buf[i]; USF(EMSUART_UART) = buf[i];
// just to be safe wait for tx fifo empty (needed?) // just to be safe wait for tx fifo empty (needed?)
while (((USS(EMSUART_UART) >> USTXC) & 0xff) != 0) while (((USS(EMSUART_UART) >> USTXC) & 0xff))
; ;
// wait until bits are sent on wire // wait until bits are sent on wire