V 1.5.2 Versionszeit anzeigen, Offsets per MQTT einstellbar
This commit is contained in:
18
doc/mqtt.md
18
doc/mqtt.md
@@ -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 |
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
17
src/main.cpp
17
src/main.cpp
@@ -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();
|
||||||
|
|||||||
22
src/mqtt.cpp
22
src/mqtt.cpp
@@ -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())
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user