From 5672ff0c3d43640f20730d48fb15fcef34850f5c Mon Sep 17 00:00:00 2001 From: Yurii Date: Wed, 22 Nov 2023 17:53:43 +0300 Subject: [PATCH] use TinyLogger lib --- platformio.ini | 1 + src/MainTask.h | 60 +++++++++++++++++----------- src/MqttTask.h | 56 ++++++++++++++++---------- src/OpenThermTask.h | 92 +++++++++++++++++++++++++++---------------- src/RegulatorTask.h | 39 ++++++++++-------- src/SensorsTask.h | 18 ++++----- src/Settings.h | 8 +++- src/WifiManagerTask.h | 17 ++++---- src/defines.h | 27 ++----------- src/main.cpp | 23 +++++++---- 10 files changed, 196 insertions(+), 145 deletions(-) diff --git a/platformio.ini b/platformio.ini index ec8eda3..34c40b0 100644 --- a/platformio.ini +++ b/platformio.ini @@ -20,6 +20,7 @@ lib_deps = gyverlibs/GyverPID@^3.3 gyverlibs/GyverBlinker@^1.0 milesburton/DallasTemperature@^3.11.0 + laxilef/TinyLogger@^1.0.2 https://github.com/Laxilef/WiFiManager/archive/refs/heads/patch-1.zip ;https://github.com/tzapu/WiFiManager.git#v2.0.16-rc.2 build_flags = -D PIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH -mtext-section-literals diff --git a/src/MainTask.h b/src/MainTask.h index befcaf0..a280e18 100644 --- a/src/MainTask.h +++ b/src/MainTask.h @@ -14,6 +14,7 @@ protected: unsigned long firstFailConnect = 0; unsigned int heapSize = 0; unsigned int minFreeHeapSize = 0; + unsigned long restartSignalTime = 0; const char* getTaskName() { return "Main"; @@ -41,21 +42,20 @@ protected: void loop() { if (eeSettings.tick()) { - INFO("Settings updated (EEPROM)"); + Log.sinfoln("MAIN", "Settings updated (EEPROM)"); } - if (vars.parameters.restartAfterTime > 0 && millis() - vars.parameters.restartSignalTime > vars.parameters.restartAfterTime) { - vars.parameters.restartAfterTime = 0; - - INFO("Received restart message..."); + if (vars.actions.restart) { + Log.sinfoln("MAIN", "Restart signal received. Restart after 10 sec."); eeSettings.updateNow(); - INFO("Restart..."); - delay(1000); - - ESP.restart(); + restartSignalTime = millis(); + vars.actions.restart = false; } if (WiFi.status() == WL_CONNECTED) { + //timeClient.update(); + vars.states.rssi = WiFi.RSSI(); + if (!tMqtt->isEnabled() && strlen(settings.mqtt.server) > 0) { tMqtt->enable(); } @@ -64,7 +64,12 @@ protected: firstFailConnect = 0; } - vars.states.rssi = WiFi.RSSI(); + if ( Log.getLevel() == TinyLogger::Level::VERBOSE && !settings.debug ) { + Log.setLevel(TinyLogger::Level::INFO); + + } else if ( Log.getLevel() != TinyLogger::Level::VERBOSE && settings.debug ) { + Log.setLevel(TinyLogger::Level::VERBOSE); + } } else { if (tMqtt->isEnabled()) { @@ -78,7 +83,7 @@ protected: if (millis() - firstFailConnect > EMERGENCY_TIME_TRESHOLD) { vars.states.emergency = true; - INFO("Emergency mode enabled"); + Log.sinfoln("MAIN", "Emergency mode enabled"); } } } @@ -89,7 +94,9 @@ protected: #ifdef LED_STATUS_PIN ledStatus(LED_STATUS_PIN); + yield(); #endif + heap(); #if USE_TELNET yield(); @@ -101,19 +108,28 @@ protected: } #endif - if (settings.debug) { - unsigned int freeHeapSize = ESP.getFreeHeap(); - unsigned int minFreeHeapSizeDiff = 0; + if (restartSignalTime > 0 && millis() - restartSignalTime > 10000) { + restartSignalTime = 0; + ESP.restart(); + } + } - if (freeHeapSize < minFreeHeapSize) { - minFreeHeapSizeDiff = minFreeHeapSize - freeHeapSize; - minFreeHeapSize = freeHeapSize; - } + void heap() { + if (!settings.debug) { + return; + } - if (millis() - lastHeapInfo > 10000 || minFreeHeapSizeDiff > 0) { - DEBUG_F("Free heap size: %u of %u bytes, min: %u bytes (diff: %u bytes)\n", freeHeapSize, heapSize, minFreeHeapSize, minFreeHeapSizeDiff); - lastHeapInfo = millis(); - } + unsigned int freeHeapSize = ESP.getFreeHeap(); + unsigned int minFreeHeapSizeDiff = 0; + + if (freeHeapSize < minFreeHeapSize) { + minFreeHeapSizeDiff = minFreeHeapSize - freeHeapSize; + minFreeHeapSize = freeHeapSize; + } + + if (millis() - lastHeapInfo > 60000 || minFreeHeapSizeDiff > 0) { + Log.sverboseln("MAIN", "Free heap size: %u of %u bytes, min: %u bytes (diff: %u bytes)", freeHeapSize, heapSize, minFreeHeapSize, minFreeHeapSizeDiff); + lastHeapInfo = millis(); } } diff --git a/src/MqttTask.h b/src/MqttTask.h index 519fe4f..9fa8eb9 100644 --- a/src/MqttTask.h +++ b/src/MqttTask.h @@ -24,13 +24,13 @@ protected: } void setup() { - DEBUG("[MQTT] Started"); + Log.sinfoln("MQTT", "Started"); client.setCallback(__callback); haHelper.setDevicePrefix(settings.mqtt.prefix); - haHelper.setDeviceVersion(OT_GATEWAY_VERSION); - haHelper.setDeviceModel("Opentherm Gateway"); - haHelper.setDeviceName("Opentherm Gateway"); + haHelper.setDeviceVersion(PROJECT_VERSION); + haHelper.setDeviceModel(PROJECT_NAME); + haHelper.setDeviceName(PROJECT_NAME); sprintf(buffer, CONFIG_URL, WiFi.localIP().toString().c_str()); haHelper.setDeviceConfigUrl(buffer); @@ -38,11 +38,11 @@ protected: void loop() { if (!client.connected() && millis() - lastReconnectAttempt >= MQTT_RECONNECT_INTERVAL) { - INFO_F("Mqtt not connected, state: %i, connecting to server %s...\n", client.state(), settings.mqtt.server); + Log.sinfoln("MQTT", "Not connected, state: %i, connecting to server %s...", client.state(), settings.mqtt.server); client.setServer(settings.mqtt.server, settings.mqtt.port); if (client.connect(settings.hostname, settings.mqtt.user, settings.mqtt.password)) { - INFO("Connected to MQTT server"); + Log.sinfoln("MQTT", "Connected"); client.subscribe(getTopicPath("settings/set").c_str()); client.subscribe(getTopicPath("state/set").c_str()); @@ -53,7 +53,7 @@ protected: lastReconnectAttempt = 0; } else { - INFO("Failed to connect to MQTT server\n"); + Log.swarningln("MQTT", "Failed to connect to server"); if (settings.emergency.enable && !vars.states.emergency) { if (firstFailConnect == 0) { @@ -62,7 +62,7 @@ protected: if (millis() - firstFailConnect > EMERGENCY_TIME_TRESHOLD) { vars.states.emergency = true; - INFO("Emergency mode enabled"); + Log.sinfoln("MQTT", "Emergency mode enabled"); } } @@ -75,7 +75,7 @@ protected: if (vars.states.emergency) { vars.states.emergency = false; - INFO("Emergency mode disabled"); + Log.sinfoln("MQTT", "Emergency mode disabled"); } client.loop(); @@ -323,9 +323,16 @@ protected: } } - if (!doc["restart"].isNull() && doc["restart"].is() && doc["restart"].as()) { - vars.parameters.restartAfterTime = 5000; - vars.parameters.restartSignalTime = millis(); + if (!doc["actions"]["restart"].isNull() && doc["actions"]["restart"].is() && doc["actions"]["restart"].as()) { + vars.actions.restart = true; + } + + if (!doc["actions"]["faultReset"].isNull() && doc["actions"]["faultReset"].is() && doc["actions"]["faultReset"].as()) { + vars.actions.faultReset = true; + } + + if (!doc["actions"]["diagnosticReset"].isNull() && doc["actions"]["diagnosticReset"].is() && doc["actions"]["diagnosticReset"].as()) { + vars.actions.diagnosticReset = true; } if (flag) { @@ -412,6 +419,7 @@ protected: haHelper.publishBinSensorDiagnostic(); haHelper.publishSensorFaultCode(); haHelper.publishSensorRssi(false); + haHelper.publishSensorUptime(false); // sensors haHelper.publishSensorModulation(false); @@ -421,6 +429,11 @@ protected: haHelper.publishNumberIndoorTemp(); //haHelper.publishNumberOutdoorTemp(); haHelper.publishSensorHeatingTemp(); + + // buttons + haHelper.publishButtonRestart(false); + haHelper.publishButtonFaultReset(); + haHelper.publishButtonDiagnosticReset(); } static bool publishNonStaticHaEntities(bool force = false) { @@ -556,9 +569,6 @@ protected: doc["sensors"]["indoor"]["offset"] = settings.sensors.indoor.offset; client.beginPublish(topic, measureJson(doc), false); - //BufferingPrint bufferedClient(client, 32); - //serializeJson(doc, bufferedClient); - //bufferedClient.flush(); serializeJson(doc, client); return client.endPublish(); } @@ -577,6 +587,7 @@ protected: doc["states"]["diagnostic"] = vars.states.diagnostic; doc["states"]["faultCode"] = vars.states.faultCode; doc["states"]["rssi"] = vars.states.rssi; + doc["states"]["uptime"] = (unsigned long) (millis() / 1000); doc["sensors"]["modulation"] = vars.sensors.modulation; doc["sensors"]["pressure"] = vars.sensors.pressure; @@ -594,9 +605,6 @@ protected: doc["parameters"]["dhwMaxTemp"] = vars.parameters.dhwMaxTemp; client.beginPublish(topic, measureJson(doc), false); - //BufferingPrint bufferedClient(client, 32); - //serializeJson(doc, bufferedClient); - //bufferedClient.flush(); serializeJson(doc, client); return client.endPublish(); } @@ -611,11 +619,17 @@ protected: } if (settings.debug) { - DEBUG_F("MQTT received message\n\r Topic: %s\n\r Data: ", topic); + String payloadStr; + payloadStr.reserve(length); for (unsigned int i = 0; i < length; i++) { - DEBUG_STREAM.print((char)payload[i]); + if ( payload[i] == 10 ) { + payloadStr += "\r\n> "; + } else { + payloadStr += (char) payload[i]; + } } - DEBUG_STREAM.print("\n"); + + Log.strace("MQTT.MSG", "Topic: %s\r\n> %s\n\r\n", topic, payloadStr.c_str()); } StaticJsonDocument<2048> doc; diff --git a/src/OpenThermTask.h b/src/OpenThermTask.h index 70f3d54..d30fa4d 100644 --- a/src/OpenThermTask.h +++ b/src/OpenThermTask.h @@ -40,11 +40,11 @@ protected: unsigned long localResponse; if (setMasterMemberIdCode()) { - DEBUG_F("Slave member id code: %u\r\n", vars.parameters.slaveMemberIdCode); - DEBUG_F("Master member id code: %u\r\n", settings.opentherm.memberIdCode > 0 ? settings.opentherm.memberIdCode : vars.parameters.slaveMemberIdCode); + Log.straceln("OT", "Slave member id code: %u", vars.parameters.slaveMemberIdCode); + Log.straceln("OT", "Master member id code: %u", settings.opentherm.memberIdCode > 0 ? settings.opentherm.memberIdCode : vars.parameters.slaveMemberIdCode); } else { - WARN("Slave member id failed"); + Log.swarningln("OT", "Slave member id failed"); } bool heatingEnabled = (vars.states.emergency || settings.heating.enable) && pump && isReady(); @@ -64,13 +64,13 @@ protected: ); if (!ot->isValidResponse(localResponse)) { - WARN_F("Invalid response after setBoilerStatus: %s\r\n", ot->statusToString(ot->getLastResponseStatus())); + Log.swarningln("OT", "Invalid response after setBoilerStatus: %s", ot->statusToString(ot->getLastResponseStatus())); return; } if (vars.parameters.heatingEnabled != heatingEnabled) { vars.parameters.heatingEnabled = heatingEnabled; - INFO_F("Heating enabled: %s\r\n", heatingEnabled ? "on\0" : "off\0"); + Log.sinfoln("OT.HEATING", "%s", heatingEnabled ? "Enabled" : "Disabled"); } vars.states.heating = ot->isCentralHeatingActive(localResponse); @@ -87,29 +87,35 @@ protected: updateSlaveParameters(); updateMasterParameters(); - DEBUG_F("Master type: %u, version: %u\r\n", vars.parameters.masterType, vars.parameters.masterVersion); - DEBUG_F("Slave type: %u, version: %u\r\n", vars.parameters.slaveType, vars.parameters.slaveVersion); + Log.straceln("OT", "Master type: %u, version: %u", vars.parameters.masterType, vars.parameters.masterVersion); + Log.straceln("OT", "Slave type: %u, version: %u", vars.parameters.slaveType, vars.parameters.slaveVersion); if (settings.opentherm.dhwPresent) { if (updateMinMaxDhwTemp()) { - if (settings.dhw.minTemp < vars.parameters.dhwMinTemp || settings.dhw.maxTemp > vars.parameters.dhwMaxTemp) { + if (settings.dhw.minTemp < vars.parameters.dhwMinTemp) { settings.dhw.minTemp = vars.parameters.dhwMinTemp; + } + + if (settings.dhw.maxTemp > vars.parameters.dhwMaxTemp) { settings.dhw.maxTemp = vars.parameters.dhwMaxTemp; } } else { - WARN("Failed get min/max DHW temp"); + Log.swarningln("OT.DHW", "Failed get min/max temp"); } } if (updateMinMaxHeatingTemp()) { - if (settings.heating.minTemp < vars.parameters.heatingMinTemp || settings.heating.maxTemp > vars.parameters.heatingMaxTemp) { + if (settings.heating.minTemp < vars.parameters.heatingMinTemp) { settings.heating.minTemp = vars.parameters.heatingMinTemp; - settings.heating.maxTemp = vars.parameters.heatingMaxTemp; - - } else { - WARN("Failed get min/max heating temp"); } + + if (settings.heating.maxTemp > vars.parameters.heatingMaxTemp) { + settings.heating.maxTemp = vars.parameters.heatingMaxTemp; + } + + } else { + Log.swarningln("OT.HEATING", "Failed get min/max temp"); } // force @@ -121,11 +127,6 @@ protected: if (vars.states.fault) { updateFaultCode(); - ot->sendBoilerReset(); - } - - if (vars.states.diagnostic) { - ot->sendServiceReset(); } prevUpdateNonEssentialVars = millis(); @@ -150,6 +151,36 @@ protected: updateHeatingTemp(); yield(); + // fault reset action + if (vars.actions.faultReset) { + if (vars.states.fault) { + if (ot->sendBoilerReset()) { + Log.sinfoln("OT", "Boiler fault reset successfully"); + + } else { + Log.serrorln("OT", "Boiler fault reset failed"); + } + } + + vars.actions.faultReset = false; + yield(); + } + + // diag reset action + if (vars.actions.diagnosticReset) { + if (vars.states.diagnostic) { + if (ot->sendServiceReset()) { + Log.sinfoln("OT", "Boiler diagnostic reset successfully"); + + } else { + Log.serrorln("OT", "Boiler diagnostic reset failed"); + } + } + + vars.actions.diagnosticReset = false; + yield(); + } + // // Температура ГВС byte newDHWTemp = settings.dhw.target; @@ -158,7 +189,7 @@ protected: newDHWTemp = constrain(newDHWTemp, settings.dhw.minTemp, settings.dhw.maxTemp); } - INFO_F("Set DHW temp = %u\r\n", newDHWTemp); + Log.sinfoln("OT.DHW", "Set temp = %u", newDHWTemp); // Записываем заданную температуру ГВС if (ot->setDHWSetpoint(newDHWTemp)) { @@ -166,14 +197,14 @@ protected: dhwSetTempTime = millis(); } else { - WARN("Failed set DHW temp"); + Log.swarningln("OT.DHW", "Failed set temp"); } } // // Температура отопления if (heatingEnabled && (needSetHeatingTemp() || fabs(vars.parameters.heatingSetpoint - currentHeatingTemp) > 0.0001)) { - INFO_F("Setting heating temp = %u \n", vars.parameters.heatingSetpoint); + Log.sinfoln("OT.HEATING", "Set temp = %u", vars.parameters.heatingSetpoint); // Записываем заданную температуру if (ot->setBoilerTemperature(vars.parameters.heatingSetpoint)) { @@ -181,12 +212,12 @@ protected: heatingSetTempTime = millis(); } else { - WARN("Failed set heating temp"); + Log.swarningln("OT.HEATING", "Failed set temp"); } if (settings.opentherm.heatingCh1ToCh2) { if (!ot->setBoilerTemperature2(vars.parameters.heatingSetpoint)) { - WARN("Failed set ch2 heating temp"); + Log.swarningln("OT.HEATING", "Failed set ch2 temp"); } } } @@ -268,13 +299,7 @@ protected: } void static printRequestDetail(OpenThermMessageID id, OpenThermResponseStatus status, unsigned long request, unsigned long response, byte attempt) { - sprintf(buffer, "OT REQUEST ID: %4d Request: %8lx Response: %8lx Attempt: %2d Status: %s", id, request, response, attempt, ot->statusToString(status)); - if (status != OpenThermResponseStatus::SUCCESS) { - //WARN(buffer); - DEBUG(buffer); - } else { - DEBUG(buffer); - } + Log.straceln("OT", "OT REQUEST ID: %4d Request: %8lx Response: %8lx Attempt: %2d Status: %s", id, request, response, attempt, ot->statusToString(status)); } bool setMasterMemberIdCode() { @@ -293,7 +318,8 @@ protected: vars.parameters.slaveMemberIdCode = response & 0xFF; /*uint8_t flags = (response & 0xFFFF) >> 8; - DEBUG_F( + Log.strace( + "OT", "MasterMemberIdCode:\r\n DHW present: %u\r\n Control type: %u\r\n Cooling configuration: %u\r\n DHW configuration: %u\r\n Pump control: %u\r\n CH2 present: %u\r\n Remote water filling function: %u\r\n Heat/cool mode control: %u\r\n Slave MemberID Code: %u\r\n", flags & 0x01, flags & 0x02, @@ -331,13 +357,11 @@ protected: if (!ot->isValidResponse(response)) { return false; } - // INFO_F("Opentherm version slave: %f\n", ot->getFloat(response)); response = ot->sendRequest(ot->buildRequest(OpenThermRequestType::WRITE_DATA, OpenThermMessageID::OpenThermVersionMaster, response)); if (!ot->isValidResponse(response)) { return false; } - // INFO_F("Opentherm version master: %f\n", ot->getFloat(response)); return true; } diff --git a/src/RegulatorTask.h b/src/RegulatorTask.h index 5450cd0..c174e12 100644 --- a/src/RegulatorTask.h +++ b/src/RegulatorTask.h @@ -33,7 +33,7 @@ protected: if (settings.heating.turbo) { settings.heating.turbo = false; - INFO("[REGULATOR] Turbo mode auto disabled"); + Log.sinfoln("REGULATOR", "Turbo mode auto disabled"); } newTemp = getEmergencyModeTemp(); @@ -43,7 +43,7 @@ protected: if (settings.heating.turbo) { settings.heating.turbo = false; - INFO("[REGULATOR] Turbo mode auto disabled"); + Log.sinfoln("REGULATOR", "Turbo mode auto disabled"); } newTemp = getTuningModeTemp(); @@ -57,7 +57,7 @@ protected: if (settings.heating.turbo && (fabs(settings.heating.target - vars.temperatures.indoor) < 1 || (settings.equitherm.enable && settings.pid.enable))) { settings.heating.turbo = false; - INFO("[REGULATOR] Turbo mode auto disabled"); + Log.sinfoln("REGULATOR", "Turbo mode auto disabled"); } newTemp = getNormalModeTemp(); @@ -86,7 +86,7 @@ protected: prevEtResult = etResult; newTemp += etResult; - INFO_F("[REGULATOR][EQUITHERM] New emergency result: %u (%f) \n", (int)round(etResult), etResult); + Log.sinfoln("REGULATOR.EQUITHERM", "New emergency result: %u (%f)", (int)round(etResult), etResult); } else { newTemp += prevEtResult; @@ -105,11 +105,11 @@ protected: if (fabs(prevHeatingTarget - settings.heating.target) > 0.0001) { prevHeatingTarget = settings.heating.target; - INFO_F("[REGULATOR] New target: %f \n", settings.heating.target); + Log.sinfoln("REGULATOR", "New target: %f", settings.heating.target); if (settings.equitherm.enable && settings.pid.enable) { pidRegulator.integral = 0; - INFO_F("[REGULATOR][PID] Integral sum has been reset"); + Log.sinfoln("REGULATOR.PID", "Integral sum has been reset"); } } @@ -121,7 +121,7 @@ protected: prevEtResult = etResult; newTemp += etResult; - INFO_F("[REGULATOR][EQUITHERM] New result: %u (%f) \n", (int)round(etResult), etResult); + Log.sinfoln("REGULATOR.EQUITHERM", "New result: %u (%f)", (int)round(etResult), etResult); } else { newTemp += prevEtResult; @@ -139,7 +139,7 @@ protected: prevPidResult = pidResult; newTemp += pidResult; - INFO_F("[REGULATOR][PID] New result: %d (%f) \n", (int)round(pidResult), pidResult); + Log.sinfoln("REGULATOR.PID", "New result: %d (%f)", (int)round(pidResult), pidResult); } else { newTemp += prevPidResult; @@ -168,7 +168,7 @@ protected: tunerInit = false; tunerRegulator = 0; tunerState = 0; - INFO(F("[REGULATOR][TUNING] Stopped")); + Log.sinfoln("REGULATOR.TUNING", "Stopped"); } if (!vars.tuning.enable) { @@ -178,7 +178,7 @@ protected: if (vars.tuning.regulator == 0) { // @TODO дописать - INFO(F("[REGULATOR][TUNING][EQUITHERM] Not implemented")); + Log.sinfoln("REGULATOR.TUNING.EQUITHERM", "Not implemented"); return 0; } else if (vars.tuning.regulator == 1) { @@ -188,8 +188,10 @@ protected: : settings.heating.target; if (tunerInit && pidTuner.getState() == 3) { - INFO(F("[REGULATOR][TUNING][PID] Finished")); - pidTuner.debugText(&INFO_STREAM); + Log.sinfoln("REGULATOR.TUNING.PID", "Finished"); + for (Stream* stream : Log.getStreams()) { + pidTuner.debugText(stream); + } pidTuner.reset(); tunerInit = false; @@ -197,7 +199,7 @@ protected: tunerState = 0; if (pidTuner.getAccuracy() < 90) { - WARN(F("[REGULATOR][TUNING][PID] Bad result, try again...")); + Log.swarningln("REGULATOR.TUNING.PID", "Bad result, try again..."); } else { settings.pid.p_factor = pidTuner.getPID_p(); @@ -209,7 +211,7 @@ protected: } if (!tunerInit) { - INFO(F("[REGULATOR][TUNING][PID] Start...")); + Log.sinfoln("REGULATOR.TUNING.PID", "Start..."); float step; if (vars.temperatures.indoor - vars.temperatures.outdoor > 10) { @@ -219,7 +221,7 @@ protected: } float startTemp = step; - INFO_F("[REGULATOR][TUNING][PID] Started. Start value: %f, step: %f \n", startTemp, step); + Log.sinfoln("REGULATOR.TUNING.PID", "Started. Start value: %f, step: %f", startTemp, step); pidTuner.setParameters(NORMAL, startTemp, step, 20 * 60 * 1000, 0.15, 60 * 1000, 10000); tunerInit = true; tunerRegulator = 1; @@ -229,8 +231,11 @@ protected: pidTuner.compute(); if (tunerState > 0 && pidTuner.getState() != tunerState) { - INFO(F("[REGULATOR][TUNING][PID] Log:")); - pidTuner.debugText(&INFO_STREAM); + Log.sinfoln("REGULATOR.TUNING.PID", "Log:"); + for (Stream* stream : Log.getStreams()) { + pidTuner.debugText(stream); + } + tunerState = pidTuner.getState(); } diff --git a/src/SensorsTask.h b/src/SensorsTask.h index f2a35a8..048b89e 100644 --- a/src/SensorsTask.h +++ b/src/SensorsTask.h @@ -59,7 +59,7 @@ protected: outdoorSensor->requestTemperatures(); startConversionTime = millis(); - ERROR("[SENSORS][OUTDOOR] Could not read temperature data (no response)"); + Log.serrorln("SENSORS.OUTDOOR", "Could not read temperature data (no response)"); } if (!completed) { @@ -68,10 +68,10 @@ protected: float rawTemp = outdoorSensor->getTempCByIndex(0); if (rawTemp == DEVICE_DISCONNECTED_C) { - ERROR("[SENSORS][OUTDOOR] Could not read temperature data (not connected)"); + Log.serrorln("SENSORS.OUTDOOR", "Could not read temperature data (not connected)"); } else { - DEBUG_F("[SENSORS][OUTDOOR] Raw temp: %f \n", rawTemp); + Log.straceln("SENSORS.OUTDOOR", "Raw temp: %f", rawTemp); if (emptyOutdoorTemp) { filteredOutdoorTemp = rawTemp; @@ -85,7 +85,7 @@ protected: if (fabs(vars.temperatures.outdoor - filteredOutdoorTemp) > 0.099) { vars.temperatures.outdoor = filteredOutdoorTemp + settings.sensors.outdoor.offset; - INFO_F("[SENSORS][OUTDOOR] New temp: %f \n", filteredOutdoorTemp); + Log.sinfoln("SENSORS.OUTDOOR", "New temp: %f", filteredOutdoorTemp); } } @@ -115,8 +115,8 @@ protected: // fail, retry indoorSensor->requestTemperatures(); startConversionTime = millis(); - - ERROR("[SENSORS][INDOOR] Could not read temperature data (no response)"); + + Log.serrorln("SENSORS.INDOOR", "Could not read temperature data (no response)"); } if (!completed) { @@ -125,10 +125,10 @@ protected: float rawTemp = indoorSensor->getTempCByIndex(0); if (rawTemp == DEVICE_DISCONNECTED_C) { - ERROR("[SENSORS][INDOOR] Could not read temperature data (not connected)"); + Log.serrorln("SENSORS.INDOOR", "Could not read temperature data (not connected)"); } else { - DEBUG_F("[SENSORS][INDOOR] Raw temp: %f \n", rawTemp); + Log.straceln("SENSORS.INDOOR", "Raw temp: %f", rawTemp); if (emptyIndoorTemp) { filteredIndoorTemp = rawTemp; @@ -142,7 +142,7 @@ protected: if (fabs(vars.temperatures.indoor - filteredIndoorTemp) > 0.099) { vars.temperatures.indoor = filteredIndoorTemp + settings.sensors.indoor.offset; - INFO_F("[SENSORS][INDOOR] New temp: %f \n", filteredIndoorTemp); + Log.sinfoln("SENSORS.INDOOR", "New temp: %f", filteredIndoorTemp); } } diff --git a/src/Settings.h b/src/Settings.h index e61bef0..6339f32 100644 --- a/src/Settings.h +++ b/src/Settings.h @@ -109,8 +109,6 @@ struct Variables { } temperatures; struct { - unsigned long restartSignalTime = 0; - unsigned int restartAfterTime = 0; bool heatingEnabled = false; byte heatingMinTemp = 20; byte heatingMaxTemp = 90; @@ -123,4 +121,10 @@ struct Variables { uint8_t masterType; uint8_t masterVersion; } parameters; + + struct { + bool restart = false; + bool faultReset = false; + bool diagnosticReset = false; + } actions; } vars; \ No newline at end of file diff --git a/src/WifiManagerTask.h b/src/WifiManagerTask.h index 06d4282..c3ee8e4 100644 --- a/src/WifiManagerTask.h +++ b/src/WifiManagerTask.h @@ -48,12 +48,12 @@ protected: #endif wm.setDebugOutput(settings.debug, (wm_debuglevel_t) WM_DEBUG_MODE); - wm.setTitle("OpenTherm Gateway"); + wm.setTitle(PROJECT_NAME); wm.setCustomMenuHTML(PSTR( "" "
" - "
OpenTherm Gateway
" - "
Repo | Issues | Releases | v" OT_GATEWAY_VERSION " (" __DATE__ ")
" + "
" PROJECT_NAME "
" + "
Repo | Issues | Releases | v" PROJECT_VERSION " (" __DATE__ ")
" "
" )); @@ -146,7 +146,7 @@ protected: TelnetStream.stop(); #endif - INFO("[wifi] Disconnected"); + Log.sinfoln("WIFI", "Disconnected"); } else if (!connected && WiFi.status() == WL_CONNECTED) { connected = true; @@ -166,7 +166,7 @@ protected: TelnetStream.begin(); #endif - INFO_F("[wifi] Connected. IP address: %s, RSSI: %d\n", WiFi.localIP().toString().c_str(), WiFi.RSSI()); + Log.sinfoln("WIFI", "Connected. IP: %s, RSSI: %d", WiFi.localIP().toString().c_str(), WiFi.RSSI()); } #if defined(ESP8266) @@ -273,11 +273,11 @@ protected: } if (needRestart) { - vars.parameters.restartAfterTime = 5000; - vars.parameters.restartSignalTime = millis(); + vars.actions.restart = true; } - INFO_F( + Log.sinfo( + "WIFI", "New settings:\r\n" " Hostname: %s\r\n" " Mqtt server: %s:%d\r\n" @@ -313,7 +313,6 @@ protected: ); eeSettings.updateNow(); - INFO(F("Settings saved")); } static void arpGratuitous() { diff --git a/src/defines.h b/src/defines.h index 3ede21b..5d6c33e 100644 --- a/src/defines.h +++ b/src/defines.h @@ -1,5 +1,6 @@ -#define OT_GATEWAY_VERSION "1.3.4" -#define OT_GATEWAY_REPO "https://github.com/Laxilef/OTGateway" +#define PROJECT_NAME "OpenTherm Gateway" +#define PROJECT_VERSION "1.3.4" +#define PROJECT_REPO "https://github.com/Laxilef/OTGateway" #define AP_SSID "OpenTherm Gateway" #define AP_PASSWORD "otgateway123456" @@ -44,26 +45,4 @@ #define SENSOR_INDOOR_PIN_DEFAULT 0 #endif -#if USE_TELNET - #define INFO_STREAM TelnetStream - #define WARN_STREAM TelnetStream - #define ERROR_STREAM TelnetStream - #define DEBUG_STREAM if (settings.debug) TelnetStream - #define WM_DEBUG_PORT TelnetStream -#else - #define INFO_STREAM Serial - #define WARN_STREAM Serial - #define ERROR_STREAM Serial - #define DEBUG_STREAM if (settings.debug) Serial - #define WM_DEBUG_PORT Serial -#endif - -#define INFO(...) INFO_STREAM.print("\r[INFO] "); INFO_STREAM.println(__VA_ARGS__); -#define INFO_F(...) INFO_STREAM.print("\r[INFO] "); INFO_STREAM.printf(__VA_ARGS__); -#define WARN(...) WARN_STREAM.print("\r[WARN] "); WARN_STREAM.println(__VA_ARGS__); -#define WARN_F(...) WARN_STREAM.print("\r[WARN] "); WARN_STREAM.printf(__VA_ARGS__); -#define ERROR(...) ERROR_STREAM.print("\r[ERROR] "); ERROR_STREAM.println(__VA_ARGS__); -#define DEBUG(...) DEBUG_STREAM.print("\r[DEBUG] "); DEBUG_STREAM.println(__VA_ARGS__); -#define DEBUG_F(...) DEBUG_STREAM.print("\r[DEBUG] "); DEBUG_STREAM.printf(__VA_ARGS__); - char buffer[255]; \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index fedf25d..da7e5fc 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include "Settings.h" EEManager eeSettings(settings, 30000); @@ -36,30 +37,38 @@ MainTask* tMain; void setup() { - #if !USE_TELNET - Serial.begin(115200); - Serial.println("\n\n"); + #if USE_TELNET + TelnetStream.begin(); + Log.begin(&TelnetStream, TinyLogger::Level::VERBOSE); + delay(1000); + #else + Serial.begin(115200); + Log.begin(&Serial, TinyLogger::Level::VERBOSE); + Serial.println("\n\n"); #endif + //Log.setNtpClient(&timeClient); EEPROM.begin(eeSettings.blockSize()); uint8_t eeSettingsResult = eeSettings.begin(0, 's'); if (eeSettingsResult == 0) { - INFO("Settings loaded"); + Log.sinfoln("MAIN", "Settings loaded"); if (strcmp(SETTINGS_VALID_VALUE, settings.validationValue) != 0) { - INFO("Settings not valid, reset and restart..."); + Log.swarningln("MAIN", "Settings not valid, reset and restart..."); eeSettings.reset(); delay(1000); ESP.restart(); } } else if (eeSettingsResult == 1) { - INFO("Settings NOT loaded, first start"); + Log.sinfoln("MAIN", "Settings NOT loaded, first start"); } else if (eeSettingsResult == 2) { - INFO("Settings NOT loaded (error)"); + Log.serrorln("MAIN", "Settings NOT loaded (error)"); } + Log.setLevel(settings.debug ? TinyLogger::Level::VERBOSE : TinyLogger::Level::INFO); + tWm = new WifiManagerTask(true); Scheduler.start(tWm);