NEWS
Visualisierung mit Node Red erstellen
-
@mickym sagte in Visualisierung mit Node Red erstellen:
Hier dann alles offengelegt.
Mir geht es ja nicht um fertige Lösungen, sondern um das Verstehen. Schon schwierig genug sich alles zu behalten. Auf die $1 wäre ich nie gekommen. Obwohl es ja überall steht. Jetzt verstehe ich vermutlich auch wie es über den regulären Ausdruck bei der change Node funktionieren wird. Aber woher kommt die $1. Ist das der Wert der Group 1?
Bei mir schleppt er aber noch ein unbeliebtes Zeichen mit:
-
@garf Genau - mit den Klammer gruppierst Du reguläre Ausdrücke - also neben dem insgesamten Match kannst Du solche Gruppen eben über die Klammern bilden und nach der Reihe die 1. Gruppe mit $1, die 2. Gruppe mit $2 etc. ansprechen.
Im folgenden Bild hellblau markiert.
Wenn Du also noch eine zweite Klammer hättest könntest Du die mit $2 ansprechen.
So Du hast aber noch einen Zeilenvorschub drin. Da der nicht gemached hat - wird dieser Zeilenvorschub mit übernommen - da der nicht matched - um den noch mit in das matching pattern aufzunehmen, musst du noch den Zeilenvorschub am Ende Deines regEx Ausdrucks anhängen - orange markiert.
Um also den Zeilenvorschub wegzubekommen, musst Du den LineBreak noch in dein Matching Pattern aufnehmen.
Zeilenvorschübe sind also nicht im "Punkt" als beliebiges Zeichen enthalten.
Ist auch so definiert - habe es gerade nochmal nachgeschaut:
Also ein Punkt definiert alle Zeichen - außer dem Zeilenvorschub.
- Deswegen hat das bei Dir nicht bis zum Ende gemached.
EDIT:
Der korrekte Ausdruck muss also
$replace(payload,/.*=(.*)\'.*\n/,"$1")
heißen bzw. Dein RegEx Ausdruck eben noch den Zeilenvorschub enthalten:
.*=(.*)\'.*\n
Hier nochwas zu Ergänzung. Im RegEx kann man auch Parameter mitgeben, in dem der Punkt auch den Zeilenvorschub als beliebiges Zeichen akzeptiert:
Leider wird diese Option aber nicht von JSONATA unterstützt -
Es wird also nur i und m unterstützt. Im Prinzip bekommst Du aber auch im Nachhinein solche Zeichen ggf. wenn Du den Zeilenvorschub nicht in das search patter aufnehmen willst über die $trim Funktion weg.
$trim($replace(payload,/.*=(.*)\'.*/,"$1"))
-
@garf Ein schönes Beispiel mit der Replace Funktion und den Gruppen möchte ich Dir hier mal verdeutlichen.
Ich hab Deinen String mal etwas aufgebohrt - und wenn es nicht darum geht, den Zahlenwert zu extrahieren - habe ich nun mal 3 Gruppen gebildet.
- Gruppe: die Temperatur (35.9)
- Gruppe: die Einheit (C)
- Gruppe: quasi das Topic - also um welche Temperatur es sich handelt. (CPU-Temperatur)
Mit der Replacefunktion können wir das nun komplett anders zusammensetzen:
Sting:
temp=35.9'C ist die CPU-Temperatur
RegEx
.*=(.*)\'(.)?.*\s(.*)
So kannst Du dann die eingefangenen Gruppen beliebig neu anordnen und einen neuen String bilden:
-
@mickym sagte in Visualisierung mit Node Red erstellen:
So kannst Du dann die eingefangenen Gruppen beliebig neu anordnen und einen neuen String bilden:
Auch nicht übel und alles direkt in die richtige Form gebracht. Du solltest Online Schulungen abhalten. Vielleicht wirst Du damit steinreich.
Schon außergwöhnlich wie Du einem hilfst Probleme zu lösen und sein Wissen auszubauen.
Danke dafür. Freue mich jetzt schon auf eure nächtlichen Beiträge.
-
@mickym So, was möchtest Du jetzt mit der Change Node anstellen, wenn Du Lust hast?
-
@damrak2022 Hab ich was von einer Change Node geschrieben?
- Wie sieht es denn erst mal aus, ob Du prüfst, ob dein regulärer Ausdruck funktioniert? - Was wollen wir denn überhaupt machen? - Hast Du das Ziel noch vor Augen?
-
@mickym sagte in Visualisierung mit Node Red erstellen:
Morgen werden wir das mit einer Change Node machen.
Ja, hier.
Äh das Ziel habe ich wohl etwas aus den Augen verloren. Wie frage ich denn mit dem $1 ab. Das weiß ich auch noch nicht -
@damrak2022 OK - das hab ich da tatsächlich geschrieben. Gut dann werden wir mal kurz zusammenfassen, was wir erreichen wollen.
- Nun wir haben ja eine iobroker-IN Node aus dem Du alle Status des Ein- und Ausschaltzustandes raus bekommst.
- Nun siehst Du ja, dass aus jeder Nachricht jeder Shelly meldet, das topic den Datenpunkt des Gerätes enthält, das den Status meldet.
- Aus diesem Topic wollen wir die Geräte Kennung (also aus dem Pfad des Datenpunktes) extrahieren
- Die Gerätekennung wollen wir dann in einen sprechenden Namen übersetzen
- Schließlich wollen wir den Zustand der Shellies in einem Objekt zusammenfassen.
-
@mickym Ja
-
@damrak2022 sagte in Visualisierung mit Node Red erstellen:
@mickym Ja
Das heißt wir sind in unserem Kochbuch in der Mitte gelandet. Dann lass uns doch mal da weiter machen, wo wir gestern aufgefhört haben. Du machst nochmal die regEx Seite auf und kopierst ein Topic rein und schaust, ob Du mit Deinem RegEx Ausdruck, die Kennung extrahieren kannst.
-
@mickym Moment
-
@mickym Habe ich:
-
@damrak2022 dann prüfe auch, ob das mit einem anderen topic funktioniert, der aus der iobroker-In Node rauskommt, bei der das Relay0/Switch der Shellies abgefragt wird.
-
@mickym Ja, klappt
-
@damrak2022 Na das ist doch schön. Dann hängst Du jetzt mal eine Change Node an dein iobroker In Node und ein Debug Node dahinter. In der ChangeNode löschst Du erst mal alle Regeln raus - weil wir im ersten Schritt noch nichts ändern.
-
@mickym Habe ich, dann bekomme ich diesen Debug:
-
@damrak2022 Gut Du siehst also dass die Change Node nichts verändert, wenn keine Regeln drin stehen.
Also erstes wollen wir ja nun den topic ändern und wir ändern mal zum Testen in dem wir die "/" durch "." in dem Pfad ersetzen.
Dies dient erst mal der Demonstration wie die Ändern Regeln in der Change Node funktionieren.
-
@mickym So?
-
@damrak2022 Na stimmt das Ergebnis?
Wenn ja - ist es doch perfekt.
, wenn Nein dann stimmt was nicht.
-
@mickym Sieht gut aus