V 1.5.2 Versionszeit anzeigen, Offsets per MQTT einstellbar

This commit is contained in:
rxf
2024-08-22 14:17:14 +02:00
parent e66633186b
commit c57572262f
8 changed files with 57 additions and 29 deletions

View File

@@ -1,6 +1,8 @@
# MQTT - Kommandos # 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/**. Das generelle Topic, auf das subscribed und das published wird ist **CYD/**.
@@ -24,10 +26,15 @@ Auch hier sind es Float-Zahlen
* **parameter/** * **parameter/**
Hiermit können divere Parameter des Gerätes gesetzt werden. Unterschieden werden sie in der Payload. Im Moment sind folgende Parameter möglich: 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). Einstellen der Einleserate des BME280-Sensors (in Sekunden).
* **{"updaterate": rrr}** * **{"updaterate":rrr}**
Einstellen der Updaterate der Grafik (in Sekunden). 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 ### get-Topic
@@ -35,12 +42,13 @@ Folgende daten werden aus dem Gerät heraus gesendet:
* **CYD/get/bme280** * **CYD/get/bme280**
mit der Payload: mit der Payload:
**{"temperature": tttt, "humidity": hhhh"}** **{"temperature":tttt,"tempmess":ttt,"humidity":hhhh,"hummess":hhh}**
Wieder mit Float-Zahlen. Dies sind die Werte, die mit dem lokalen BME280 gemessen werden. 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 ## Versionen
|Version | Datum | Bemerkung | |Version | Datum | Bemerkung |
|--------|-------|---------| |--------|-------|---------|
| 1.1| 2024-08-21 | PubSub client, weitere Parameter
|1.0 | 2024-07-22 | erste Version | |1.0 | 2024-07-22 | erste Version |

View File

@@ -339,8 +339,8 @@ void drawChart()
// Versionsnummer und Datum // Versionsnummer und Datum
lv_obj_t *version_label = lv_label_create(lv_screen_active()); lv_obj_t *version_label = lv_label_create(lv_screen_active());
char ver[20]; char ver[40];
sprintf(ver, "V %s %s", VERSION, VDATE); sprintf(ver, "V %s %s %s", VERSION, VDATE, VTIME);
lv_label_set_text(version_label, ver); lv_label_set_text(version_label, ver);
lv_obj_align(version_label, LV_ALIGN_BOTTOM_MID, 0, 0); lv_obj_align(version_label, LV_ALIGN_BOTTOM_MID, 0, 0);
lv_obj_add_style(version_label, &style_info_label, LV_PART_MAIN); lv_obj_add_style(version_label, &style_info_label, LV_PART_MAIN);

View File

@@ -4,6 +4,8 @@
// Feuchte immer deutlich zu niedrig. Mit Hilfe der Sättigungs-Tabelle wird nun die absolute Feuchte bei der // 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. // wahren Temperatur (Tmess - 3.2°C) ermittelt und dann die relative Feuchte berechnet.
#define INTERPOL
#include <math.h> #include <math.h>
#include "interpolation.h" #include "interpolation.h"

View File

@@ -13,9 +13,14 @@ const float dampftabelle[] = {
// 30, 31, 32, 33, 34, 35 36 // 30, 31, 32, 33, 34, 35 36
30.35, 32.05, 33, 85, 35.70, 37.65, 39.6, 41.7}; 30.35, 32.05, 33, 85, 35.70, 37.65, 39.6, 41.7};
const int indexOffset = 15; 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); float getDampfgehalt(float temp);
int getRelativeFeuchte(float temp, float hum); int getRelativeFeuchte(float temp, float hum);

View File

@@ -72,6 +72,7 @@ void setup() {
bmedata = readBME280(); bmedata = readBME280();
bmedata.hum = getRelativeFeuchte(bmedata.temp, bmedata.hum); bmedata.hum = getRelativeFeuchte(bmedata.temp, bmedata.hum);
bmedata.temp = bmedata.temp - tempOffset;
arcTemp.value = bmedata.temp; arcTemp.value = bmedata.temp;
arcHum.value = bmedata.hum; arcHum.value = bmedata.hum;
delay(1000); delay(1000);
@@ -126,8 +127,11 @@ void loop() {
if (millis() - bmeReadtimer > bmeReadTime) { if (millis() - bmeReadtimer > bmeReadTime) {
bmeReadtimer = millis(); bmeReadtimer = millis();
bmedata = readBME280(); bmedata = readBME280();
float tmess = bmedata.temp;
float hmess = bmedata.hum;
bmedata.hum = getRelativeFeuchte(bmedata.temp, 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) { if (millis() - updatetimer > updateTime) {
updatetimer = millis(); updatetimer = millis();
@@ -136,11 +140,12 @@ void loop() {
setValuetoArc(arcHum, bmedata.hum+arcHum.value_offset); setValuetoArc(arcHum, bmedata.hum+arcHum.value_offset);
} }
if (!client.connected()) checkMQTT();
{ // if (!client.connected())
reconnect(); // {
} // reconnect();
client.loop(); // }
// client.loop();
server.handleClient(); server.handleClient();

View File

@@ -3,6 +3,7 @@
#include "grafik.h" #include "grafik.h"
#include "main.h" #include "main.h"
#include "weifi.h" #include "weifi.h"
#include "interpolation.h"
#include "mqtt.h" #include "mqtt.h"
@@ -44,13 +45,13 @@ void onmessage(char *tp, byte *msg, unsigned int length)
setBMEreadtime(doc["updaterate"]); setBMEreadtime(doc["updaterate"]);
// showRate(doc["updaterate"]); // showRate(doc["updaterate"]);
} }
if(doc.containsKey("isttemp")) { if(doc.containsKey("tempoffset")) {
arcTemp.value_offset = (float)doc["isttemp"] - arcTemp.value; tempOffset = (float)doc["tempoffset"];
} }
if(doc.containsKey("isthum")) { if(doc.containsKey("humoffset")) {
arcHum.value_offset = (float)doc["isthum"] - arcHum.value; 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()) while (!client.connected())
{ {
Serial.print("Reconnecting..."); 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); 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("failed, rc=");
Serial.print(client.state()); Serial.print(client.state());
@@ -76,8 +78,8 @@ void reconnect(void)
} }
void doPublish(float temp, float hum, float tm, float hm) { void doPublish(float temp, float hum, float tm, float hm) {
char payload[50]; char payload[80];
sprintf(payload, "{\"temperature\":%.1f,\"tempmess\":%.1f,\"humidity\":%.1f,\"hummess\":%.1f}", temp, hum, tm, hm); sprintf(payload, "{\"temperature\":%.1f,\"tempmess\":%.1f,\"humidity\":%.1f,\"hummess\":%.1f}", temp, tm, hum, hm);
char * chipID = getChipID(); char * chipID = getChipID();
char topic[50]; char topic[50];
sprintf(topic, "CYD/get/%s/bme280", chipID); 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 // check MQTT in the loop
void checkMQTT(void) { void checkMQTT(void) {
Serial.println("Try connected ...");
if (!client.connected()) if (!client.connected())
{ {

View File

@@ -15,8 +15,6 @@
#define MQTT_TOPIC "CYD/set/" #define MQTT_TOPIC "CYD/set/"
#define MQTT_PUB_TEMP "CYD/get/bme280" #define MQTT_PUB_TEMP "CYD/get/bme280"
#define CLIENT_ID "ESP32Client7"
#ifdef MQTT #ifdef MQTT
WiFiClient espClient; WiFiClient espClient;
PubSubClient client(espClient); PubSubClient client(espClient);

View File

@@ -1,10 +1,20 @@
// Versionsgeschichte // Versionsgeschichte
#define VERSION "1.5.0" #define VERSION "1.5.2"
#define VDATE "2024-08-21" #define VDATE "2024-08-21"
#define VTIME "12:15 UTC"
/* /*
Version Date Author 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 1.5.0 2024-08-21 rxf
- Mit Hilfe von Interpolation werde die echten Feuchtewerte ausgerechnet und angezeigt - Mit Hilfe von Interpolation werde die echten Feuchtewerte ausgerechnet und angezeigt
- Die Werte sind jetzt (soweit) korrekt - Die Werte sind jetzt (soweit) korrekt