NEWS
MQTT String aufteilen
-
Hy Leute
Wie kann ich folgenden String, welcher mir per mqtt an mein IoBroker gesendet wird, in einzelnen Datenpunkten darstellen?

Im Detail sieht der String so aus:
{"Time":"2020-06-11T18:15:24","DS18B20":{"Temperature":25.8},"DHT11":{"Temperature":26.7,"Humidity":47.0},"SR04":{"Distance":23.088},"TempUnit":"C"}Ich hätte jetzt gerne je einen Datenpunkt für:
DS18B20 Temperatur
DHT11 Temperatur
DHT11 Humidity
SR04 DistanceDanke für euer Feedback
@albi_63 sagte:
Ich hätte jetzt gerne je einen Datenpunkt für:
DS18B20 Temperatur
DHT11 Temperatur
DHT11 Humidity
SR04 Distanceconst idSensor = 'mqtt.0.Smarthome.Wassertank.tele.SENSOR'; const idDSTemp = '...'; const idDHTemp = '...'; const idDHHum = '...'; const idDist = '...'; on(idSensor, function(dp) { // triggert bei Wertänderung let obj = JSON.parse(dp.state.val); setState(idDSTemp, obj.DS18B20.Temperature, true); setState(idDHTemp, obj.DHT11.Temperature, true); setState(idDHHum, obj.DHT11.Humidity, true); setState(idDist, obj.SR04.Distance, true); }); -
Hallo paul
Besten Dank für dein script. Ich habe dieses in JS implementiert, allerdings sehe ich im IoBroker keine weiteren Datenpunkte und das script sendet mir fortlaufend falsche Werte:
22:00:15.124 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:17:4) 22:00:15.128 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:19:4) 22:00:15.133 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:21:4) 22:00:15.138 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:23:4) 22:00:25.118 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:17:4) 22:00:25.126 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:19:4) 22:00:25.140 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:21:4) 22:00:25.150 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:23:4) 22:00:35.159 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:17:4) 22:00:35.167 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:19:4) 22:00:35.175 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:21:4) 22:00:35.178 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:23:4) 22:00:45.126 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:17:4) 22:00:45.132 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:19:4) 22:00:45.137 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:21:4) 22:00:45.142 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:23:4) 22:00:55.101 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:17:4) 22:00:55.108 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:19:4) 22:00:55.114 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:21:4) 22:00:55.120 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:23:4)Das sind die aktuellen Werte:

Leider stehe ich hier voll an......
Was muss ich anpassen damit das script funktioniert?Danke dir
-
Hallo paul
Besten Dank für dein script. Ich habe dieses in JS implementiert, allerdings sehe ich im IoBroker keine weiteren Datenpunkte und das script sendet mir fortlaufend falsche Werte:
22:00:15.124 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:17:4) 22:00:15.128 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:19:4) 22:00:15.133 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:21:4) 22:00:15.138 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:23:4) 22:00:25.118 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:17:4) 22:00:25.126 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:19:4) 22:00:25.140 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:21:4) 22:00:25.150 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:23:4) 22:00:35.159 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:17:4) 22:00:35.167 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:19:4) 22:00:35.175 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:21:4) 22:00:35.178 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:23:4) 22:00:45.126 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:17:4) 22:00:45.132 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:19:4) 22:00:45.137 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:21:4) 22:00:45.142 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:23:4) 22:00:55.101 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:17:4) 22:00:55.108 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:19:4) 22:00:55.114 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:21:4) 22:00:55.120 warn javascript.0 (768) at Object.<anonymous> (script.js.common.Wassertank.WemosD1:23:4)Das sind die aktuellen Werte:

Leider stehe ich hier voll an......
Was muss ich anpassen damit das script funktioniert?Danke dir
-
Hoi Paul
Jetzt habe ich es geschnallt, hat ein weilchen gedauert. Habe null Ahnung von JS.......
Hier ein Datenpunkt:

Vielen Dank dir.
:+1: :laughing: -
Hallo Jan
Ich habe ein Wemos D1 mit Sonos geflasht auf welchem ich die Zustände des Wassertanks abfrage, ansonsten habe ich gar keine Sonosgeräte am laufen.
Gruss Albi
-
Hallo Jan
Wenn ich die Sonoff Instanz starte bleibt die Rot. Wenn ich den Port von 1883 auf 1884 ändere und in den MQTT Einstellungungen des NodeMCU die Einstellungen vom Port und Passwort ändere geht der Adapter auf grün, allerdings sehe ich unter Objekte nur:
und keine weiteren Datenpunkte.
Temperatur, Distanz , Humidity ect nicht vorhanden.Das kommt vom Nodemcu:

Was mache ich falsch?
Brauche ich die MQTT Instanz nicht mehr? -
@paul53
Hallo Paul
Wie definiere ich dein Script wenn ich zwei Temperatursensoren am laufen habe?
Ich habe da was versucht allerdings geht das in die Hose....const idSensor = 'mqtt.0.Smarthome.Wassertank.tele.SENSOR'; // const idDSTemp1 = '0_userdata.0.Objekte.Wassertank.Temp_DS18B20-1'; // const idDSTemp2 = '0_userdata.0.Objekte.Wassertank.Temp_DS18B20-2'; const idDHTemp = '0_userdata.0.Objekte.Wassertank.idDHTemp'; const idDHHum = '0_userdata.0.Objekte.Wassertank.idDSTemp'; const idDist = '0_userdata.0.Objekte.Wassertank.SR04_Distance'; on(idSensor, function(dp) { // triggert bei Wertänderung let obj = JSON.parse(dp.state.val); // setState(idDSTemp1, obj.DS18B20-1.Temperature, true); // setState(idDSTemp2, obj.DS18B20-2.Temperature, true); setState(idDHTemp, obj.DHT11.Temperature, true); setState(idDHHum, obj.DHT11.Humidity, true); setState(idDist, obj.SR04.Distance, true);Der String kommt folgendermassen an:
{"Time":"2020-06-12T18:56:00","DS18B20-1":{"Id":"01192A390A6C","Temperature":24.8},"DS18B20-2":{"Id":"0301A279895F","Temperature":22.4},"DHT11":{"Temperature":27.2,"Humidity":44.0},"SR04":{"Distance":30.000},"TempUnit":"C"}Danke für dein Feedback
-
@paul53
Hallo Paul
Wie definiere ich dein Script wenn ich zwei Temperatursensoren am laufen habe?
Ich habe da was versucht allerdings geht das in die Hose....const idSensor = 'mqtt.0.Smarthome.Wassertank.tele.SENSOR'; // const idDSTemp1 = '0_userdata.0.Objekte.Wassertank.Temp_DS18B20-1'; // const idDSTemp2 = '0_userdata.0.Objekte.Wassertank.Temp_DS18B20-2'; const idDHTemp = '0_userdata.0.Objekte.Wassertank.idDHTemp'; const idDHHum = '0_userdata.0.Objekte.Wassertank.idDSTemp'; const idDist = '0_userdata.0.Objekte.Wassertank.SR04_Distance'; on(idSensor, function(dp) { // triggert bei Wertänderung let obj = JSON.parse(dp.state.val); // setState(idDSTemp1, obj.DS18B20-1.Temperature, true); // setState(idDSTemp2, obj.DS18B20-2.Temperature, true); setState(idDHTemp, obj.DHT11.Temperature, true); setState(idDHHum, obj.DHT11.Humidity, true); setState(idDist, obj.SR04.Distance, true);Der String kommt folgendermassen an:
{"Time":"2020-06-12T18:56:00","DS18B20-1":{"Id":"01192A390A6C","Temperature":24.8},"DS18B20-2":{"Id":"0301A279895F","Temperature":22.4},"DHT11":{"Temperature":27.2,"Humidity":44.0},"SR04":{"Distance":30.000},"TempUnit":"C"}Danke für dein Feedback
@albi_63 sagte:
zwei Temperatursensoren am laufen habe?
DS18B20-1 und DS18B20-2 enthalten unzulässige Zeichen (-) für die Punkt-Notation. Der Zugriff muss dann anders erfolgen:
setState(idDSTemp1, obj['DS18B20-1'].Temperature, true); setState(idDSTemp2, obj['DS18B20-2'].Temperature, true); -
Hallo Jan
Wenn ich die Sonoff Instanz starte bleibt die Rot. Wenn ich den Port von 1883 auf 1884 ändere und in den MQTT Einstellungungen des NodeMCU die Einstellungen vom Port und Passwort ändere geht der Adapter auf grün, allerdings sehe ich unter Objekte nur:
und keine weiteren Datenpunkte.
Temperatur, Distanz , Humidity ect nicht vorhanden.Das kommt vom Nodemcu:

Was mache ich falsch?
Brauche ich die MQTT Instanz nicht mehr? -
@Jan-S100
Hy Jan
Hatte alles schon so angeklickt wie du mir gesendet hast. Bekomme keine Daten.
Kann es an der alten Firmware "Sonoff-Tasmota 6.7.1" liegen? Wenn ich die aktuellste mit "8.x.x" aufspiele, bekomme ich meinen SR04 Sensor nicht mehr zur Auswahl. Allerdings habe ich mit der neusten Firmware jetzt noch nicht getestet, ob mir die Daten übermittelt werden. -
@Jan-S100
Hy Jan
Hatte alles schon so angeklickt wie du mir gesendet hast. Bekomme keine Daten.
Kann es an der alten Firmware "Sonoff-Tasmota 6.7.1" liegen? Wenn ich die aktuellste mit "8.x.x" aufspiele, bekomme ich meinen SR04 Sensor nicht mehr zur Auswahl. Allerdings habe ich mit der neusten Firmware jetzt noch nicht getestet, ob mir die Daten übermittelt werden. -
@Jan-S100
Hy Jan
Hatte alles schon so angeklickt wie du mir gesendet hast. Bekomme keine Daten.
Kann es an der alten Firmware "Sonoff-Tasmota 6.7.1" liegen? Wenn ich die aktuellste mit "8.x.x" aufspiele, bekomme ich meinen SR04 Sensor nicht mehr zur Auswahl. Allerdings habe ich mit der neusten Firmware jetzt noch nicht getestet, ob mir die Daten übermittelt werden. -
@harrym
Hy harrim
Danke für dein Feedback.
Ich hatte die 8.3.1 zu Anfang aufgespielt, bekam allerdings nicht mehr meinen Sensor SR04, danach ging ich Version um Version zurück bis mein Sensor wieder auftauchte und das bei der 6.7.1.
Wenn ich jetzt die aktuellste wieder aufspiele funktioniert es vielleicht mit dem Sonos. Allerdings bringt mir das nichts, da ja die Werte vom SR04 nicht abesetzt werden können. Somit arbeite ich mit MQTT und dem Script von Paul. Das funktioniert soweit.
Danke euch allen für die Unterstützung.

