diff --git a/doc/mqtt.md b/doc/mqtt.md index ff499be..346968d 100644 --- a/doc/mqtt.md +++ b/doc/mqtt.md @@ -1,6 +1,8 @@ # MQTT - Kommandos -Da das **ESPAsyncMQTT** (meines Erachtens) nicht mehrere verschiedene Topics subscriben kann, wird auf **nuccy** mit Hilfe von **Node-Red** aus den jeweiligen unterschiedlichen Smart-Home-Daten ein eigenes Topic erzeugt. Dieses heißt immer **CYD/** und hat verschiedene Untertopics (die über die Wildcard **#** subscribed werden können). +Da das **ESPAsyncMQTT** (meines Erachtens) nicht sehr zuverlässig arbeitet bzw. mit dem LVGL anscheinedn nicht wirklich klar kommt (macht immer wieder Resets), wird das alte PubSub-Client verwendet. + +Es werden auf **nuccy** mit Hilfe von **Node-Red** aus den jeweiligen unterschiedlichen Smart-Home-Daten ein eigenes Topic erzeugt. Dieses heißt immer **CYD/** und hat verschiedene Untertopics (die über die Wildcard **#** subscribed werden können). Das generelle Topic, auf das subscribed und das published wird ist **CYD/**. @@ -24,10 +26,15 @@ Auch hier sind es Float-Zahlen * **parameter/** Hiermit können divere Parameter des Gerätes gesetzt werden. Unterschieden werden sie in der Payload. Im Moment sind folgende Parameter möglich: - * **{"bmerate": rrr}** + * **{"bmerate":rrr}** Einstellen der Einleserate des BME280-Sensors (in Sekunden). - * **{"updaterate": rrr}** + * **{"updaterate":rrr}** Einstellen der Updaterate der Grafik (in Sekunden). + * **{"tempoffset":ttt}** + Einstellen des Offset für die Temperatur (in den Gehäuse ist es zu warm) + * **{"humoffset":hhh}**
 Einstellen des Feuchte-Offsets (der BME misst etwas zu wenig) + + Alle Wert sind Float-Werte! ### get-Topic @@ -35,12 +42,13 @@ Folgende daten werden aus dem Gerät heraus gesendet: * **CYD/get/bme280** mit der Payload: -**{"temperature": tttt, "humidity": hhhh"}** -Wieder mit Float-Zahlen. Dies sind die Werte, die mit dem lokalen BME280 gemessen werden. +**{"temperature":tttt,"tempmess":ttt,"humidity":hhhh,"hummess":hhh}** +Wieder mit Float-Zahlen. Die xxxmess-Werte sind die Werte, die mit dem lokalen BME280 gemessen werden, die anderen beiden sind die auf aktelle Tempteratur und Feuchte umgerechneten Werte (die auf der Anzeige angezeigt werden) ## Versionen |Version | Datum | Bemerkung | |--------|-------|---------| +| 1.1| 2024-08-21 | PubSub client, weitere Parameter |1.0 | 2024-07-22 | erste Version | diff --git a/src/grafik.cpp b/src/grafik.cpp index 83a66c5..55194ea 100644 --- a/src/grafik.cpp +++ b/src/grafik.cpp @@ -339,8 +339,8 @@ void drawChart() // Versionsnummer und Datum lv_obj_t *version_label = lv_label_create(lv_screen_active()); - char ver[20]; - sprintf(ver, "V %s %s", VERSION, VDATE); + char ver[40]; + sprintf(ver, "V %s %s %s", VERSION, VDATE, VTIME); lv_label_set_text(version_label, ver); lv_obj_align(version_label, LV_ALIGN_BOTTOM_MID, 0, 0); lv_obj_add_style(version_label, &style_info_label, LV_PART_MAIN); diff --git a/src/interpolation.cpp b/src/interpolation.cpp index 13cbcc3..b4ae462 100644 --- a/src/interpolation.cpp +++ b/src/interpolation.cpp @@ -4,6 +4,8 @@ // Feuchte immer deutlich zu niedrig. Mit Hilfe der Sättigungs-Tabelle wird nun die absolute Feuchte bei der // wahren Temperatur (Tmess - 3.2°C) ermittelt und dann die relative Feuchte berechnet. +#define INTERPOL + #include #include "interpolation.h" diff --git a/src/interpolation.h b/src/interpolation.h index 5a276ab..133fbe9 100644 --- a/src/interpolation.h +++ b/src/interpolation.h @@ -13,9 +13,14 @@ const float dampftabelle[] = { // 30, 31, 32, 33, 34, 35 36 30.35, 32.05, 33, 85, 35.70, 37.65, 39.6, 41.7}; const int indexOffset = 15; -const float tempOffset = 3.2; -const float humOffset = 5.0; +#ifdef INTERPOL +float tempOffset = 3.2; +float humOffset = 5.0; +#else +extern float tempOffset; +extern float humOffset; +#endif float getDampfgehalt(float temp); int getRelativeFeuchte(float temp, float hum); diff --git a/src/main.cpp b/src/main.cpp index 228c70c..8423f74 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -72,6 +72,7 @@ void setup() { bmedata = readBME280(); bmedata.hum = getRelativeFeuchte(bmedata.temp, bmedata.hum); + bmedata.temp = bmedata.temp - tempOffset; arcTemp.value = bmedata.temp; arcHum.value = bmedata.hum; delay(1000); @@ -126,8 +127,11 @@ void loop() { if (millis() - bmeReadtimer > bmeReadTime) { bmeReadtimer = millis(); bmedata = readBME280(); + float tmess = bmedata.temp; + float hmess = bmedata.hum; bmedata.hum = getRelativeFeuchte(bmedata.temp, bmedata.hum); - doPublish(bmedata.temp+arcTemp.value_offset, bmedata.hum+arcHum.value_offset, bmedata.temp, bmedata.hum); + bmedata.temp = bmedata.temp - tempOffset; + doPublish(bmedata.temp, bmedata.hum, tmess, hmess); } if (millis() - updatetimer > updateTime) { updatetimer = millis(); @@ -136,11 +140,12 @@ void loop() { setValuetoArc(arcHum, bmedata.hum+arcHum.value_offset); } - if (!client.connected()) - { - reconnect(); - } - client.loop(); + checkMQTT(); +// if (!client.connected()) +// { +// reconnect(); +// } +// client.loop(); server.handleClient(); diff --git a/src/mqtt.cpp b/src/mqtt.cpp index ee94ab8..911013d 100644 --- a/src/mqtt.cpp +++ b/src/mqtt.cpp @@ -3,6 +3,7 @@ #include "grafik.h" #include "main.h" #include "weifi.h" +#include "interpolation.h" #include "mqtt.h" @@ -44,13 +45,13 @@ void onmessage(char *tp, byte *msg, unsigned int length) setBMEreadtime(doc["updaterate"]); // showRate(doc["updaterate"]); } - if(doc.containsKey("isttemp")) { - arcTemp.value_offset = (float)doc["isttemp"] - arcTemp.value; + if(doc.containsKey("tempoffset")) { + tempOffset = (float)doc["tempoffset"]; } - if(doc.containsKey("isthum")) { - arcHum.value_offset = (float)doc["isthum"] - arcHum.value; + if(doc.containsKey("humoffset")) { + humOffset = (float)doc["humoffset"]; } - Serial.printf("tempoffset: %.1f, humoffset: %.1f\n", arcTemp.value_offset, arcHum.value_offset); + Serial.printf("tempoffset: %.1f, humoffset: %.1f\n",tempOffset, humOffset); } } @@ -60,10 +61,11 @@ void reconnect(void) while (!client.connected()) { Serial.print("Reconnecting..."); - bool erg = client.connect(CLIENT_ID, MQTT_USER, MQTT_PASSWD); + char * chipID = getChipID(); + bool erg = client.connect(chipID, MQTT_USER, MQTT_PASSWD); Serial.println(erg); - if (!client.connect(CLIENT_ID, MQTT_USER, MQTT_PASSWD)) + if (!client.connect(chipID, MQTT_USER, MQTT_PASSWD)) { Serial.print("failed, rc="); Serial.print(client.state()); @@ -76,8 +78,8 @@ void reconnect(void) } void doPublish(float temp, float hum, float tm, float hm) { - char payload[50]; - sprintf(payload, "{\"temperature\":%.1f,\"tempmess\":%.1f,\"humidity\":%.1f,\"hummess\":%.1f}", temp, hum, tm, hm); + char payload[80]; + sprintf(payload, "{\"temperature\":%.1f,\"tempmess\":%.1f,\"humidity\":%.1f,\"hummess\":%.1f}", temp, tm, hum, hm); char * chipID = getChipID(); char topic[50]; sprintf(topic, "CYD/get/%s/bme280", chipID); @@ -88,8 +90,6 @@ void doPublish(float temp, float hum, float tm, float hm) { // check MQTT in the loop void checkMQTT(void) { - Serial.println("Try connected ..."); - if (!client.connected()) { diff --git a/src/mqtt.h b/src/mqtt.h index 1c63abc..f5d9e9e 100644 --- a/src/mqtt.h +++ b/src/mqtt.h @@ -15,8 +15,6 @@ #define MQTT_TOPIC "CYD/set/" #define MQTT_PUB_TEMP "CYD/get/bme280" -#define CLIENT_ID "ESP32Client7" - #ifdef MQTT WiFiClient espClient; PubSubClient client(espClient); diff --git a/src/version.h b/src/version.h index c777db0..2861140 100644 --- a/src/version.h +++ b/src/version.h @@ -1,10 +1,20 @@ // Versionsgeschichte -#define VERSION "1.5.0" +#define VERSION "1.5.2" #define VDATE "2024-08-21" +#define VTIME "12:15 UTC" /* Version Date Author +1.5.2 2024-08-21 rxf + - Payloadbuffer für MQTT auf 80 Byte vergrößert + - Version-Time zu version.h hinzugefügt und zur Anzeige + - tempoffset und humoffset per MQTT einstellbar + +1.5.1 2024-08-21 rxf + - Temperaturanzeige ebenfalls angepasst (-3.2°C) + - via MQTT gemessen und berechte Werte ausgeben + 1.5.0 2024-08-21 rxf - Mit Hilfe von Interpolation werde die echten Feuchtewerte ausgerechnet und angezeigt - Die Werte sind jetzt (soweit) korrekt