NEWS
Wert und vorheriger wert??
-
Hallo,
Ich suche schon länger nach einer Lösung, ich will zwei werte vergleichen.
zb. wenn erster wert >12 soll was geschaltet werden, aber nur wenn vorheriger wert ==0 wie kann ich das realisieren??
Vielleicht habt ihr ein Paar beispiele??
In Blockly habe ich es hin bekommen,
Ich finde die Lösung nicht!!
Ich habe noch eine frage, wie ist der Eintrag in der Switch-Node vorheriger Wert zu verstehen und wie wird er angewendet???Ich hoffe ihr könnt mir weiter helfen!!!
Schon mal vielen Dank!!! -
@hotte123 der vorige Wert in der Switch Node hilft Dir nur in einem Vergleich, also msg.payload < oder == oder > oder ungleich != dem vorigen Wert.
In diesem Beispiel wird nur dann 0 durchgelassen, wenn vorher 24 gedrückt wurde, da dann der neue Wert < dem vorigen Wert ist:
Für Deinen Fall brauchst Du wirklich eine function Node, die Dir das im Context speichert, da Du ja nicht nur einen Vergleich sondern mit einem absoluten Wert vergleichen willst. Da kannst dann eine Switch Node dran hängen.
Den Wert der Variablen previous - kannst Du wenn Du die function Node anklickst unter den Kontext daten sehen:
Man kann aber auch den vorigen Wert der function Node - in eine andere Eigenschaft mitgeben und dann über die switch Node ausfiltern:
In diesem Fall wird der vorige Wert in einer Eigenschaft msg.previous gespeichert und kann dann in einer späteren switch Node abgefragt werden - um es damit übersichtlicher für den Flow zu gestalten.
Wenn Du nicht willst, dass der vorangegangene Wert mit 0 initialisiert wird, musst halt was anderes nehmen - sollte aber eine Zahl sein.
Hier mal die funtion-Node als Code:
vorherigerWert = context.get ('previous') || 0; context.set('previous',msg.payload); msg.previous= vorherigerWert; return msg;
-
Hallo mickym, vielen dank für die schnelle Antwort, ich bin echt beeindruckt von deiner Lösung!!!
Ich werde das jetzt in mein Flow einbauen und schauen wie es Funktioniert!!
Ich hätte noch eine Frage, ich habe einen wert zb. 1.70 wie kann ich den Punkt durch ein anderes Zeichen zb. euro ersetzen, ich möchte mir gerne den Sprit preis mit Alexa ansagen lasse, aber 1punkt siebennull ist nicht gerade schön, ein euro siebzig wäre schöner?? -
Wenn Du aber das ganze in einen größeren Textzusammenhang bringen möchtest empfehle ich die Template Node.
-
@mickym
Hallo mickym, nochmals vielen Dank für deine Hilfe, dir scheint das alles leicht von der Hand zu gehen!!!
Ich habe mich mit JSONata beschäftigt, aber den Durchblick habe ich nicht bekommen, alles auf English, deutsche Anleitung Fehlanzeige!!
Ich werde mich versuchen weiter durch zu kämpfen, aber ab einem gewissen alter ist das nicht mehr so einfach
Danke nochmals!!!! -
@hotte123 Hier nochmal ein Beispiel mit einer Template Node - wenn Du das ganze in einen größeren Textzusammenhang stellen möchtest:
-
@hotte123 sagte in Wert und vorheriger wert??:
@mickym
Hallo mickym, nochmals vielen Dank für deine Hilfe, dir scheint das alles leicht von der Hand zu gehen!!!
Ich habe mich mit JSONata beschäftigt, aber den Durchblick habe ich nicht bekommen, alles auf English, deutsche Anleitung Fehlanzeige!!
Ich werde mich versuchen weiter durch zu kämpfen, aber ab einem gewissen alter ist das nicht mehr so einfach
Danke nochmals!!!!Wenn Du auf die 3 Punkte klickst - die Anleitung ist zwar nicht besonders gut und ausführlich, aber hilft in den meisten Fällen.
Über das DropDown kannst verfügbare Funktionen auswählen und diese sind dann auch auf Deutsch beschreiben:Über das Testfenster kannst Du dann prüfen, wenn Du die payload zu dem von Dir erwarteten Werten abänderst, ob das Ergebnis rauskommt:
Ich hab auch mal mit den Format-Optionen bei den Zahlen etwas rumgespielt und die Syntax soweit rausbekommen, wie man Kommas als Dezimalzeichen bekommt - allerdings kann man damit nicht rechnen, aber für die Darstellung ggf. auch interessant:
Man muss dann aber schon in den Formatstring das Komma verwenden auch wenn die payload noch mit Punkt als Zahl rein kommt.
[ { "id": "eced96f2.ea9648", "type": "change", "z": "6e170384.60c96c", "name": "Zahlen mit 2 Dezimalzahlen und Komma", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "$formatNumber(payload, \"#.##0,00\", {'decimal-separator':',', 'grouping-separator':'.'} )\t", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 3680, "y": 4280, "wires": [ [ "bf7a7a83.a06298" ] ] } ]
-
Noch eine Ergänzug - mit der $formatNumber Funktion kann man sich auch die Stringverkettung sparen.
-
Du willst doch nur den neuen/aktuellen Wert mit dem alten Wert vergleichen. Warum nicht ein kleines Script?
Bei blockly und node bin ich raus.Anbei mal ein kleines Script:
on({id: "object-id", change: "ne"}, function(obj) { log ("ID geändert: alt= " + obj.oldState.val + "; neu= " + obj.state.val); if (obj.state.val > 12 && obj.oldState.val == 0) { // etwas ausführen } });
mfg