Temperatur von RuuviTag als Hauptemperatur

Hallo zusammen

Ich habe einen zweiten Raspberry auf welchem Venus OS läuft.
Über diesen habe ich einen RuuviTag angeschlossen.
Die Temperatur hole ich mir über MQTT.

Jetzt möchte ich diese Temperatur als Temp1 im Van Pi System haben.
Also dass sie mir auf dem Pekaway Display und auch für die Heizungssteuerung anzeigt.

Ich habe versucht den Temp1 Sensor im TempFlow zu deaktivieren und habe einen seperaten Flow mit MQTT in und einer Funktion Node für global.set temp1.

global.set(“temp1”,);

return msg

Mir zeigt es bei der Temperatur nichts an. Was mache ich falsch?
Bei dem debug kommt die Temperatur raus, jedoch mit sehr vielen Nachkommastellen. Wie kann ich diese kürzen?

Bin noch totaler Anfänger in NodeRed

Zeig mal bitte den Inhalt deiner Function Node.

Um die Zahl auf zwei Nachkommastellen zu runden schreibst du

msg.payload = msg.payload.value.toFixed(2)

Damit wird die Zahl gerundet und in msg.payload geschrieben.

Ich habe die Node mal ergänzt.
Jetzt kommt im Debug nichtmehr so viele Nachkommastellen, dafür nur noch zwei. Aber vorher war die Schrift blau mit value und jetzt ist sie rot?

Hier der Inhalt der Function Node:

Die ist jetzt rot, weil es jetzt ein String ist und vorher war es eine Zahl. Um das Ganze wieder in eine Zahl zu konvertieren, schreibst du jetzt noch

msg.payload = parseFloat(msg.payload)

Man kann das alles auch kombinieren und in eine Zeile schreiben.

Um eine globale Variable zu setzen schreibst du zuerst die Variable, die du setzen willst und hinter das Komma dann den Wert, den die Variable bekommen sollen, also

global.set(“xyz”, “123”)

In dem Fall hätten wir jetzt 123 in der variable xyz drin stehen. Bei dir brauchen wir jetzt

global.set(“temp1”, msg.payload)

Und zwar nachdem wir in msg.payload den Wert drin stehen haben, den wir haben wollen, also so ziemlich ans Ende. Du hättest dann in deiner Function Node stehen:

msg.payload = msg.payload.value.toFixed(2)
msg.payload = parseFloat(msg.payload)
global.set(“temp1”, msg.payload)
return msg

Super vielen Dank!
Funktioniert jetzt wunderbar.

Ich habe doch noch ein Problem…

Auf dem Pekaway Display und auf der Heizungsseite wird die korrekte Temperatur von aktuell 20.1 Grad angezeigt.

Im Dashboard steht seit gestern Abend 21 Grad (soviel war es als ich den Flow gespeichert hatte).

An was könnte dies liegen?

Weiter ist mir aufgefallen, dass der Temperaturwert auf der Heizungsseite alle ca 15 Sekunden verschwindet und NoTempSensor steht und danach wieder kommt.

Im Flow “Sensor Dashboard” werden alle 30s die globalen Variablen für die Temperaturen ausgelesen und im Dashboard dargestellt.

In DS18B20 Flow gibt es noch eine Function, in der alle globalen Temperatur variablen auf “” (leer) gesetzt, bevor sie neu geschrieben werden. Das ist so, damit man sehen kann, dass keine neuen Werte mehr gekommen sind und irgendein Problem vorliegt.

Deswegen wird bei dir die Variable regelmäßig geleert, bis dann über MQTT ein neuer Wert kommt und gesetzt wird.

EDIT: Du kannst in Node-RED mit STRG+F die Suchfunktion öffnen und dann nach

global.set(“temp1”

suchen, dann werden dir alle Nodes angezeigt, in denen die Variable geschrieben wird.