NEWS
Mqtt Wert +/- in 2 Werte Schreiben
-
Hallo ich fange einen Mqtt Wert ab und dieser ist mal Positiv und mal negativ.
Bisher habe ich ihn in Blockly in 2 positive Werte geschrieben
In dem Blockly script habe ich immer bei einer Veränderung des Wertes die Logik ausgeführt, dadurch stoppte aber immer das script wegen zu vieler abfragen. Jetzt wollte ich es per Node Red machen da bin ich aber ein kompletter Trottel drin. -
@jacke sagte: Bisher habe ich ihn in Blockly in 2 positive Werte geschrieben
Weshalb nicht einfach zwei Alias-DP mit Lesekonvertierung?
Wie sieht der MQTT-Wert aus? -
@paul53 In Mqtt sieht es so aus
Mit Alias geht das auch wäre dann die Konvertierungsfunktion?
Ich versuche gerade die Syntax dafür zu finden
-
@jacke sagte: die Konvertierungsfunktion?
Mit dem eigenen Datenpunkt, der Zahlen enthält:
val > 0 ? val : 0
und
val < 0 ? -val : 0
-
@jacke nimm einfach eine changenode.JSONATA hat eine absolut Funktion.
-
da bekomme ich die Meldung code kann nicht analysiert werden.
-
@mickym
ok invertiert bekommen habe ich es.
jetzt bräuchte ich noch die logik dadrinpayload < 0 then payload *-1 else 0
ich habe halt keine Ahnung von der Syntax
gibt es einen Empfehlenswerten blog oder youtuber dazu? -
@jacke Nochmal wenn Du JSONATA hast, dann hast Du doch eine Funktionsreferenz und abs ist gleich die erste Funktion
und gut ist.
-
@jacke sagte: code kann nicht analysiert werden.
Nur Lesekonvertierung und mit Fragezeichen (sorry, war mein Fehler).
-
@paul53 sagte in Mqtt Wert +/- in 2 Werte Schreiben:
@jacke sagte: code kann nicht analysiert werden.
Nur Lesekonvertierung und mit Fragezeichen (sorry, war mein Fehler).
Hat mit NodeRed nur nicht wirklich was zu tun, wenn er die Werte direkt in NodeRed via mqtt abgreift und nicht über einen Adapter.
-
@paul53
hat funktioniert ich hate es beim lesen und schreiben versucht jetzt klappt es.@mickym
ja ist kein NodeRed funktioniert hat es jetzt möchte ich es trotzdem über NodeRed noch schaffen.
$abs(payload) konvertiert denn negativen Wert in einen positiven habe es gerade getestet hat geklappt. Aber ich muss den Wert der negativ und positiv ist in 2 Datenpunkte schreiben- wenn negativ in DP1 als positiven Wert (abs(payload) und DP2 dann 0
- wenn positiv DP1 = 0 und DP2 = wert (payload)
-
@jacke sagte in Mqtt Wert +/- in 2 Werte Schreiben:
@mickym
ja ist kein NodeRed funktioniert hat es jetzt möchte ich es trotzdem über NodeRed noch schaffen.
$abs(payload) konvertiert denn negativen Wert in einen positiven habe es gerade getestet hat geklappt. Aber ich muss den Wert der negativ und positiv ist in 2 Datenpunkte schreibenwenn negativ in DP1 als positiven Wert (abs(payload) und DP2 dann 0
wenn positiv DP1 = 0 und DP2 = wert (payload)Nun dann ist das ja keine mathematische Funktion, sondern Du willst 2 Fälle unterscheiden und in unterschiedliche Datenpunkte dann entweder die payload direkt oder den invertierten Wert schreiben. Klassisch wie mit dem falls in Deinem Blockly untersuchst Du unterschiedliche Fälle mit einer Switch Node.
Hier zum Import:
Man kann das Ganze aber auch in eine Change Node packen. Da Du die topics in der iobroker out dynamisch setzen kannst.
So hier noch um die Kurzversion ergänzt:
Auch hier wieder zum Import:
Gleiche Farben bedeuten identische Ausgaben, sowohl mit dem Flow 1 als auch Flow 2.
In der ersten Change Node wird also 0 in einen Datenpunkt geschrieben, der mit topic spezifiziert wird.
Wenn payload <0 dann wird in eine payload mit dem Wert 0 in den Datenpunkt 2 (=topic) geschrieben, wenn die payload >=0 ist dann in Datenpunkt1 (=topic)
Umgekehrt
war die payload > 0 dann wird der Absolutwert in Datenpunkt 1, sonst in Datenpunkt 2 geschrieben.
Wenn man in der iobroker-Out Node kein topic einträgt, wird das topic automatisch vom Nachrichtenobjekt genommen. Du musst also
DP1 noch gegen Deinen Pfad der Datenpunkte ersetzen, also "0_userdata.0.DP1" bzw.
DP2 gegen "0_userdata.0.DP2" - also wohin Du die beiden Werte auch immer Du schreiben willst.