diff --git a/code/components/jomjol_flowcontroll/ClassFlowCNNGeneral.cpp b/code/components/jomjol_flowcontroll/ClassFlowCNNGeneral.cpp index 7d128077..cd846960 100644 --- a/code/components/jomjol_flowcontroll/ClassFlowCNNGeneral.cpp +++ b/code/components/jomjol_flowcontroll/ClassFlowCNNGeneral.cpp @@ -790,8 +790,7 @@ bool ClassFlowCNNGeneral::doNeuralNetwork(string time) string zw = "_num (p, m): " + to_string(_num) + " " + to_string(_numplus) + " " + to_string(_numminus); zw = zw + " _val (p, m): " + to_string(_val) + " " + to_string(_valplus) + " " + to_string(_valminus); zw = zw + " result: " + to_string(result) + " _fit: " + to_string(_fit); - ESP_LOGD(TAG, "details cnn: %s", zw.c_str()); - LogFile.WriteToFile(ESP_LOG_INFO, TAG, zw); + LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, zw); _result_save_file = result; diff --git a/code/components/jomjol_flowcontroll/ClassFlowImage.cpp b/code/components/jomjol_flowcontroll/ClassFlowImage.cpp index b065195f..b701790d 100644 --- a/code/components/jomjol_flowcontroll/ClassFlowImage.cpp +++ b/code/components/jomjol_flowcontroll/ClassFlowImage.cpp @@ -129,7 +129,7 @@ void ClassFlowImage::RemoveOldLogs() } } } - LogFile.WriteToFile(ESP_LOG_INFO, TAG, "Image folder deleted: " + std::to_string(deleted) + ". Image folder not deleted: " + std::to_string(notDeleted)); + LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "Image folder deleted: " + std::to_string(deleted) + ". Image folder not deleted: " + std::to_string(notDeleted)); closedir(dir); } diff --git a/code/components/jomjol_flowcontroll/ClassFlowMQTT.cpp b/code/components/jomjol_flowcontroll/ClassFlowMQTT.cpp index c116aca7..50465cec 100644 --- a/code/components/jomjol_flowcontroll/ClassFlowMQTT.cpp +++ b/code/components/jomjol_flowcontroll/ClassFlowMQTT.cpp @@ -230,6 +230,8 @@ bool ClassFlowMQTT::doFlow(string zwtime) { std::vector* NUMBERS = flowpostprocessing->GetNumbers(); + LogFile.WriteToFile(ESP_LOG_INFO, TAG, "Publishing MQTT topics..."); + for (int i = 0; i < (*NUMBERS).size(); ++i) { result = (*NUMBERS)[i]->ReturnValue; @@ -245,7 +247,6 @@ bool ClassFlowMQTT::doFlow(string zwtime) else namenumber = maintopic + "/" + namenumber + "/"; - LogFile.WriteToFile(ESP_LOG_INFO, TAG, "Publishing MQTT topics..."); if (result.length() > 0) MQTTPublish(namenumber + "value", result, SetRetainFlag); diff --git a/code/components/jomjol_logfile/ClassLogFile.cpp b/code/components/jomjol_logfile/ClassLogFile.cpp index 1ef43110..dfaa5ebe 100644 --- a/code/components/jomjol_logfile/ClassLogFile.cpp +++ b/code/components/jomjol_logfile/ClassLogFile.cpp @@ -327,7 +327,7 @@ void ClassLogFile::RemoveOld() } } } - LogFile.WriteToFile(ESP_LOG_INFO, TAG, "logfiles deleted: " + std::to_string(deleted) + " files not deleted (incl. leer.txt): " + std::to_string(notDeleted)); + LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "logfiles deleted: " + std::to_string(deleted) + " files not deleted (incl. leer.txt): " + std::to_string(notDeleted)); closedir(dir); diff --git a/code/components/jomjol_mqtt/interface_mqtt.cpp b/code/components/jomjol_mqtt/interface_mqtt.cpp index ab4ff602..935b122d 100644 --- a/code/components/jomjol_mqtt/interface_mqtt.cpp +++ b/code/components/jomjol_mqtt/interface_mqtt.cpp @@ -4,6 +4,7 @@ #include "esp_log.h" #include "mqtt_client.h" #include "ClassLogFile.h" +#include "server_tflite.h" #define __HIDE_PASSWORD @@ -13,6 +14,8 @@ std::map>* connectFunktionMap = NULL; std::map>* subscribeFunktionMap = NULL; +int failedOnRound = -1; + esp_mqtt_event_id_t esp_mmqtt_ID = MQTT_EVENT_ANY; // ESP_EVENT_ANY_ID @@ -27,11 +30,18 @@ bool MQTTPublish(std::string _key, std::string _content, int retained_flag) { int msg_id; std::string zw; + if (failedOnRound == getCountFlowRounds()) { // we already failed in this round, do not retry until the next round + return true; // Fail quietly + } + + LogFile.WriteHeapInfo("MQTT Publish"); + if (!mqtt_connected) { LogFile.WriteToFile(ESP_LOG_WARN, TAG, "Not connected, trying to re-connect..."); if (!MQTT_Init()) { if (!MQTT_Init()) { // Retry - LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "Failed to init!"); + LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "Failed to init, skipping all MQTT publishings in this round!"); + failedOnRound = getCountFlowRounds(); return false; } } @@ -43,8 +53,9 @@ bool MQTTPublish(std::string _key, std::string _content, int retained_flag) { msg_id = esp_mqtt_client_publish(client, _key.c_str(), _content.c_str(), 0, 1, retained_flag); if (msg_id < 0) { - LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "Failed to publish topic '" + _key + "'!"); + LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "Failed to publish topic '" + _key + "', skipping all MQTT publishings in this round!"); mqtt_connected = false; // Force re-init on next call + failedOnRound = getCountFlowRounds(); return false; } } @@ -172,6 +183,7 @@ bool MQTT_Init() { mqtt_cfg.password = password.c_str(); }; + LogFile.WriteHeapInfo("MQTT Client Init"); client = esp_mqtt_client_init(&mqtt_cfg); if (client) { @@ -182,6 +194,7 @@ bool MQTT_Init() { return false; } + LogFile.WriteHeapInfo("MQTT Client Start"); ret = esp_mqtt_client_start(client); if (ret != ESP_OK) { diff --git a/code/components/jomjol_mqtt/server_mqtt.cpp b/code/components/jomjol_mqtt/server_mqtt.cpp index 80e0c728..53cf0537 100644 --- a/code/components/jomjol_mqtt/server_mqtt.cpp +++ b/code/components/jomjol_mqtt/server_mqtt.cpp @@ -52,39 +52,30 @@ void sendHomeAssistantDiscoveryTopic(std::string group, std::string field, version = std::string(libfive_git_branch()) + " (" + std::string(libfive_git_revision()) + ")"; } - std::string topic; std::string topicFull; - std::string topicT; + std::string configTopic; std::string payload; std::string nl = "\n"; - if (group == "") { - topic = field; - topicT = field; - } - else { - topic = group + "/" + field; - topicT = group + "_" + field; - } + configTopic = field; - if ((*NUMBERS).size() > 1) { // There is more than one meter, prepend the group so we can differentiate them - if (group != "") { // But only if the group is set - name = group + " " + name; - } - } + if (group != "" && (*NUMBERS).size() > 1) { // There is more than one meter, prepend the group so we can differentiate them + configTopic = group + "_" + field; + name = group + " " + name; + } if (field == "problem") { // Special binary sensor which is based on error topic - topicFull = "homeassistant/binary_sensor/" + maintopic + "/" + topicT + "/config"; + topicFull = "homeassistant/binary_sensor/" + maintopic + "/" + configTopic + "/config"; } else { - topicFull = "homeassistant/sensor/" + maintopic + "/" + topicT + "/config"; + topicFull = "homeassistant/sensor/" + maintopic + "/" + configTopic + "/config"; } /* See https://www.home-assistant.io/docs/mqtt/discovery/ */ payload = "{" + nl + "\"~\": \"" + maintopic + "\"," + nl + - "\"unique_id\": \"" + maintopic + "-" + topicT + "\"," + nl + - "\"object_id\": \"" + maintopic + "_" + topicT + "\"," + nl + // This used to generate the Entity ID + "\"unique_id\": \"" + maintopic + "-" + configTopic + "\"," + nl + + "\"object_id\": \"" + maintopic + "_" + configTopic + "\"," + nl + // This used to generate the Entity ID "\"name\": \"" + name + "\"," + nl + "\"icon\": \"mdi:" + icon + "\"," + nl; diff --git a/code/components/jomjol_tfliteclass/server_tflite.h b/code/components/jomjol_tfliteclass/server_tflite.h index ee39fe3d..8d77ee05 100644 --- a/code/components/jomjol_tfliteclass/server_tflite.h +++ b/code/components/jomjol_tfliteclass/server_tflite.h @@ -17,6 +17,8 @@ bool isSetupModusActive(); std::string GetMQTTMainTopic(); +int getCountFlowRounds(); + esp_err_t GetJPG(std::string _filename, httpd_req_t *req); esp_err_t GetRawJPG(httpd_req_t *req);