WLAN-Temperaturwert als Dimmy-1-Sensorwert

Ich habe das Tutorial „Anschließen von WLAN-Temperatursensoren“ abgeschlossen. Mein Sensor funktioniert und die Konsole zeigt Folgendes an:

Die Frage ist, wie ich diesen Wert nun unter ‘Dimmtemperatur 1’ erkennen kann?
Das vollständige topic lautet: „tele/WLANTEMP/SENSOR“
die payload: ‘msg.payload.DS18B20.Temperature’

Wo in Node Red soll ich diese Informationen eingeben/ändern?

Hey,

im Prinzip brauchst du nur eine MQTT-In Node, die du auf dein Topic einstellst. Dahinter eine JSon-Konvertierung (JSON-String → JSON-Objekt) und dann kannst du in einer Function Node den entsprechenden Wert in die globale Variable “dimmytemp1” schreiben.

global.set(“dimmytemp1”, msg.payload.DS18B20.Temperature)

Du findest die Nodes als Beispiel im Flow “TempSensor DS18B20” für die Dimmytemperatursensoren.

Danke.
Ich habe das jetzt so übersetzt:



Knipsel3

Daher erhalte ich im Debug eine Fehlermeldung…

Die letzte MQTT Node brauchst du nicht, das wird im schlechtesten Fall nur eine Endlosschelife. Was kommt hinter der JSON-Node raus?

OK danke. Geändert.
Funktioniert noch nicht. Bekomme immer noch die Meldung:
Knipsel3

Es scheint schief mit dieser Regel
‘global.set(“dimmytemp1”, msg.payload.DS18B20.Temperature)’
in meinem Funktionsblock zu gehen

Da steht dass der Wert “Temperature” undefined ist, also dass es diesen nicht gibt. deswegen meine Frage, was eigentlich als Payload übertragen wird.

Häng mal ein debug hinter den mqtt und poste nal was da rauskommt, und hinter den json auch

Das ist es, was ich bekomme. Debug 152 und 151 geben einen Wert zurück, 154 jedoch nicht.


Set topic and payload geeft een melding “TypeError: Cannot read properties of undefined (reading ‘Temperature’)”

Das ist es, was ich bekomme. Debug 152 und 151 geben einen Wert zurück, 154 jedoch nicht. 'Set tpoic und payload geben eine Meldung aus '“TypeError: Eigenschaften von undefiniert können nicht gelesen werden (liest ‘Temperatur’)”.

Dieser function node sieht folgendermaßen aus:
Knipsel2

Ich glaube dein Global.set ist verkehrt.
ich habe das mit 2 Funktion gelöst, im ersten löse ich den msg.paylod auf, und im 2. setze ich den Global.
geht sicher anders aber das funktioniert.
ich habe da 4 Sensoren dran daher das [“DS18B20-1”] -1,-2,-3-4

[{"id":"6d1a0f4579d0616d","type":"function","z":"8d5cf53ca5724f12","name":"Temperatur Filter","func":"//var r = msg.payload.DHT11.Temperature;\nvar r = msg.payload[\"DS18B20-1\"].Temperature;\nmsg.payload =  r;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":850,"y":800,"wires":[["27bcb02b9ea7ee9f"]]},{"id":"6c8ea32928a28aa1","type":"function","z":"8d5cf53ca5724f12","name":"Temperatur Filter","func":"//var r = msg.payload.DHT11.Temperature;\nvar r = msg.payload[\"DS18B20-2\"].Temperature;\nmsg.payload =  r;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":850,"y":840,"wires":[["fca20baa3fb29ce8"]]},{"id":"4931f9433069cacc","type":"function","z":"8d5cf53ca5724f12","name":"Temperatur Filter","func":"//var r = msg.payload.DHT11.Temperature;\nvar r = msg.payload[\"DS18B20-3\"].Temperature;\nmsg.payload =  r;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":850,"y":880,"wires":[["d5c4165ed19c162c"]]},{"id":"4b757f6d5384960e","type":"function","z":"8d5cf53ca5724f12","name":"Temperatur Filter","func":"//var r = msg.payload.DHT11.Temperature;\nvar r = msg.payload[\"DS18B20-4\"].Temperature;\nmsg.payload =  r;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":850,"y":920,"wires":[["5ea970e36578ec4c"]]},{"id":"27bcb02b9ea7ee9f","type":"function","z":"8d5cf53ca5724f12","name":"set global","func":"global.set(\"Dimmertemp1\", msg.payload);","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1120,"y":800,"wires":[["5920ebdcbbe0b031"]]},{"id":"fca20baa3fb29ce8","type":"function","z":"8d5cf53ca5724f12","name":"set global","func":"global.set(\"Dimmertemp2\", msg.payload);","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1120,"y":840,"wires":[["06ae0d2749dfe763"]]},{"id":"d5c4165ed19c162c","type":"function","z":"8d5cf53ca5724f12","name":"set global","func":"global.set(\"Dimmertemp3\", msg.payload);","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1120,"y":880,"wires":[["06df50feb47fb54b"]]},{"id":"5ea970e36578ec4c","type":"function","z":"8d5cf53ca5724f12","name":"set global","func":"global.set(\"Dimmertemp4\", msg.payload);","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1120,"y":920,"wires":[["97b943ee3a07a342"]]}]

Übrigens wenn du da auf die Pfeile klickst siehst du noch mehr.
grafik

Ich habe es jetzt genauso eingerichtet, erhalte aber immer noch eine Meldung bezüglich des Temperaturfilters. Ich habe es jetzt drin:

var r = msg.payload.DS18B20.Temperature;
msg.payload = r;
return msg;

die Fehlermeldung ist immer noch:
TypeError: Cannot read properties of undefined (reading ‘Temperature’)"

Setz mal ds18b20 in eckige klammern

dank.

jetzt genau das gleiche wie deine Einstellungen:

//var r = msg.payload.DHT11.Temperature;
var r = msg.payload[“DS18B20-1”].Temperature;
msg.payload = r;
return msg;

Leider immer noch die gleiche Meldung

Jetzt noch den richtigen Pfad, also “DS18B20” ohne das “-1”

//var r = msg.payload.DHT11.Temperature;
var r = msg.payload[“DS18B20”].Temperature;
msg.payload = r;
return msg;

gibt immer noch den Fehler aus
“TypeError: Cannot read properties of undefined (reading ‘Temperature’)”

Das Payload-Debug für die Funktion lautet:
Knipsel

Schick mal bitte den JSON-String (hinter der MQTT Node), sodass ich ihn kopieren kann

[{"id":"398d439a630b432b","type":"tab","label":"Flow 2","disabled":false,"info":"","env":[]},{"id":"552ec431803277d3","type":"mqtt in","z":"398d439a630b432b","name":"","topic":"tele/WLANTEMP/SENSOR","qos":"2","datatype":"json","broker":"0ddb07c65cbb68bc","nl":false,"rap":true,"rh":0,"inputs":0,"x":370,"y":540,"wires":[["4877ee31c5a6b93a","2cab0f1bcb7359f9"]]},{"id":"4877ee31c5a6b93a","type":"json","z":"398d439a630b432b","name":"","property":"payload","action":"","pretty":false,"x":570,"y":540,"wires":[["24becb5d4e301dbf","7da7230d85c8ee42"]]},{"id":"c85a6ac475068d88","type":"function","z":"398d439a630b432b","name":"set global","func":"global.set(\"Dimmertemp1\", msg.payload);","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":940,"y":540,"wires":[[]]},{"id":"24becb5d4e301dbf","type":"debug","z":"398d439a630b432b","name":"debug 156","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":710,"y":620,"wires":[]},{"id":"2cab0f1bcb7359f9","type":"debug","z":"398d439a630b432b","name":"debug 157","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":590,"y":440,"wires":[]},{"id":"7da7230d85c8ee42","type":"function","z":"398d439a630b432b","name":"Temperature filter","func":"//var r = msg.payload.DHT11.Temperature;\nvar r = msg.payload[\"DS18B20\"].Temperature;\nmsg.payload = r;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":540,"wires":[["c85a6ac475068d88","87817e0cb75717a3"]]},{"id":"87817e0cb75717a3","type":"debug","z":"398d439a630b432b","name":"debug 158","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":890,"y":460,"wires":[]},{"id":"0ddb07c65cbb68bc","type":"mqtt-broker","name":"","broker":"http://localhost","port":"1883","clientid":"","usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"sessionExpiry":""}]

Ich meine die Payload die per MQTT reinkommt :smiley:

Das hier, nur als Text und nicht als Bild:
image

so ähnlich??

26-9-2023 17:46:06node: debug 152tele/WLANTEMP/SENSOR : msg.payload : Object

object

Time: “2023-09-26T16:45:49”

DS18B20: object

Id: “02199245B411”

Temperature: 21.9

TempUnit: “C”

Naja, fast, ich meinte als JSON-String, damit ich es kopieren und testen kann.

Hab es selber nachgebaut:

Hier also die Payload emuliert:

msg.payload = {
    "Time": "2023-09-26T16:45:49",
    "DS18B20": {
        "Id": "02199245B411",
        "Temperature": 21.9
    },
    "TempUnit": "C"
}
return msg;

Und dann wieder die Temperatur geholt:

msg.payload = msg.payload["DS18B20"].Temperature;
return msg

Debug Ergebnis:
image

[{"id":"91473ef077d0e9f1","type":"inject","z":"b1e37bbc5f2fbaf3","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":200,"y":880,"wires":[["b520ce022492eb7d"]]},{"id":"b520ce022492eb7d","type":"function","z":"b1e37bbc5f2fbaf3","name":"set json","func":"msg.payload = {\n    \"Time\": \"2023-09-26T16:45:49\",\n    \"DS18B20\": {\n        \"Id\": \"02199245B411\",\n        \"Temperature\": 21.9\n    },\n    \"TempUnit\": \"C\"\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":360,"y":880,"wires":[["42a1dfb633613ea8","ec23b6b9d41d1d0d"]]},{"id":"42a1dfb633613ea8","type":"debug","z":"b1e37bbc5f2fbaf3","name":"debug 19","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":520,"y":880,"wires":[]},{"id":"ec23b6b9d41d1d0d","type":"function","z":"b1e37bbc5f2fbaf3","name":"get temp","func":"msg.payload = msg.payload[\"DS18B20\"].Temperature;\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":520,"y":920,"wires":[["262fbd8ef6b33ceb"]]},{"id":"262fbd8ef6b33ceb","type":"debug","z":"b1e37bbc5f2fbaf3","name":"debug 20","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":680,"y":920,"wires":[]}]