NEWS
Tasmota - MQTT - CO2-Sensordaten
-
Hallo
Ich möchte den MH-Z19B CO2-Sensor der an einem ESP32 mit Tasmota hängt in ioBroker auswerten.
Ich habe den generischen mqtt Server und den Sonoff-Adapter installiert.
Wenn ich den mqtt-Server in Tasmota konfiguriere erhalte ich folgende Datenpunkte (also gar keine):
Mit dem generischen mqtt-Server sieht es leicht besser aus:
¨
Der einzig halbwegs sinnvolle Datenpunkt ist dann dieser hier der einfach JSON als Value hat:
{ "sn": { "Time": "1970-01-01T00:14:24", "MHZ19B": { "Model": "B", "CarbonDioxide": 400, "Temperature": 26 }, "TempUnit": "C" }, "ver": 1 }
Das bringt mir natürlich nicht viel, ich will ja die History-Funktion haben und den Wert in der Vis anzeigen.
Extra dafür ein Skript haben dass das JSON auspackt und einen separaten Wert abspeichert ist mir zu unsauber, das möchte ich nicht.
Kann Tasmota also nicht die Werte der Sensoren sauber als einzelne Datenpunkte an ioBroker liefern?
Muss ich ESPEasy nehmen? Da geht das nämlich.
-
@chrisprefect Nein - aber das JSON ist doch völlig OK. Erstell Dir einen Alias, der Dir den gewünschten Wert extrahiert.
Hier ein Beispiel, wie man so einen Alias anlegt und die gewünschte Eigenschaft extrahiert: https://forum.iobroker.net/post/980575
-
@mickym Uff, ok, dann muss ich ESPEasy installieren. Aliase finde ich extrem chaotisch und unschön und Werte extrahieren will ich auch nicht müssen, das ist wartungsintensiv und fehleranfällig.
Merci für die Antwort!
-
@chrisprefect Gib dich nicht auf! Lerne JSON! JSON ist dein Freund!
Der Vorteil von JSON ist ja gerade das in einem Rutsch mehrere Werte gesendet werden können, die zudem alle zeitgleich ankommen. Das man Ziel die Werte wieder auseinander bauen muss ist immer noch schneller als jeden Wert einzeln abzufragen. Ich nutze auch keine Aliase, Blockly kann das auch. Oder JavaScript. -
@chrisprefect
Sind doch auch nur ein paar Zeilen.
Und schon hast du die Werte in deine eigenen DP und kannst damit weiterarbeiten.// Wemos-Sauna hat sich geändert IP = 192.168.243.184 on({id: "mqtt.2.Wemos_Sauna_Klima.SENSOR"}, function(obj) { obj = JSON.parse(obj.state.val); if (stext.indexOf("BME280") != -1) { setState("javascript.0.Geräte.Wemos.Wemos-Sauna.BME280_Temperatur", obj.BME280.Temperature); }; if (stext.indexOf("BME280") != -1) { setState("javascript.0.Geräte.Wemos.Wemos-Sauna.BME280_Taupunkt", obj.BME280.DewPoint); }; if (stext.indexOf("BME280") != -1) { setState("javascript.0.Geräte.Wemos.Wemos-Sauna.BME280_Luftdruck", obj.BME280.SeaPressure); }; if (stext.indexOf("BME280") != -1) { setState("javascript.0.Geräte.Wemos.Wemos-Sauna.BME280_Luftfeuchtigkeit", obj.BME280.Humidity); }; if (stext.indexOf("BH1750") != -1) { setState("javascript.0.Geräte.Wemos.Wemos-Sauna.BH1750_Helligkeit", obj.BH1750.Illuminance); }; if (stext.indexOf("S8") != -1) { setState("javascript.0.Geräte.Wemos.Wemos-Sauna.CO2", obj.S8.CarbonDioxide); }; });
-
@bahnuhr Ja, geht natürlich alles
Aber ist halt alles sehr unschön. Ich habe dann die Werte nicht da wo ich sie erwarte, also z.B. nicht im mqtt-Ordner, sondern irgendwo anders zwischen all den anderen javascript-Variablen. Und ich muss mich daran erinnern, wenn ich irgendwas mit dem Gerät oder den Werten davon mache. Das wird in einem Jahr sicher wieder mühsam, wenn irgendwas nicht geht und ich mich erst erinnern muss, dass da irgendwo ein Skript rumliegt, dass die Werte manuell aus dem JSON extrahiert.
Dann doch lieber sauber mit ESPEasy. Schade, dass Tasmota und der Sonoff-Adapter das beide nicht iobroker-Kompatibel im Objektbaum speichern.
-
@chrisprefect Ich habe etwas ähnliches wie Du oben hier am laufen und er legt mir für jeden DP einen einzelnen Wert an. Verstehe ich richtig, dass Du sowas Dir wünschst?
Oder doch was anderes?
Danke
-
@alinaclg Hi! Ja, genau so sollte es aussehen. Kommt das aus Tasmota raus? Ev. kann man Tasmota ja dazu bringen die Daten korrekt per MQTT abzuliefern und nicht einfach nur als JSON-Blob.
-
@chrisprefect
Du hast 2 Möglichkeiten:-
Du verwendest statt Mqtt den Sonoff-Adapter für Tasmota-betriebene Geräte
Der fummelt das automatisch für Dich auseinander. -
Du verwendest den Mqtt-Adapter und legst Dir unter
alias.0
eine passende Struktur an.
Aus dem JSON kannst Du über die Konvertierungsfunktionen den jeweils passenden Wert in den Alias übernehmen.
Ist halt etwas Arbeit.
Möglichkeit 3 habe ich hier mal unterschlagen.
Das Ganze per Blockly/JS auseinanderzunehmen und unter0_userdata.0
abzulegen ist IMHO zu viel Aufwand. -
-
@codierknecht hmm also 1 klappt bei mir nicht, da kommen eben keine Werte aus dem Tasmota-Adapert. Screenshot im ersten Post. Nummer 2 und 3 will ich verhindern, das ist sehr unschön, wartungsintensiv und fehleranfällig.
-
@chrisprefect ,
zeig mal deine Einstellungen vom Sonoff-Adapter als Screenshot und ein Log von der Tasmotakonsole im Code-Tag . -
@chrisprefect sagte in Tasmota - MQTT - CO2-Sensordaten:
Nummer 2 ... will ich verhindern, das ist sehr unschön, wartungsintensiv und fehleranfällig
Das ist einmalig etwas Arbeit, aber danach stabil.
Meine Wasseruhr muss über Mqtt laufen, da das nicht mit Tasmota läuft.
Einmal den Alias angelegt und läuft.Aber wie @Wal schon schreibt: Zeig mal Deine Einstellungen.
-
@codierknecht ,
wenn ich mir die MQTT-Objekte ansehe, wird bei @ChrisPrefect nur der Haken bei aut. erz. /tele/sensor Objekte im Sonoff-Adapter fehlen.edit: habe in die Glaskugel geschaut.
-
@codierknecht sagte in Tasmota - MQTT - CO2-Sensordaten:
@chrisprefect sagte in Tasmota - MQTT - CO2-Sensordaten:
Nummer 2 ... will ich verhindern, das ist sehr unschön, wartungsintensiv und fehleranfällig
Das ist einmalig etwas Arbeit, aber danach stabil.
das gilt auch für 3, auch wenn du es nicht magst, mag es u.U. sogar einfacher sein, wenn man bei mehreren Werten die Blöcke "mal eben" kopiert und anpasst.
-
@wal JAAA!!
Danke! Genau das wars!
Ich konnte mir nicht vorstellen, dass der Adapter das nicht kann. Dass man das separat aktivieren muss, hätte ich nicht erwartet.
Zum Glück brauche ich so keine umständliche Aliase oder Skripte. Geht doch