Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. Visualisierung mit Node Red erstellen

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Visualisierung mit Node Red erstellen

    This topic has been deleted. Only users with topic management privileges can see it.
    • mickym
      mickym Most Active @Damrak2022 last edited by mickym

      @damrak2022 Ja aber Du siehst, dass zuviel im ersten gematched wird - da alles in der Gruppe ist bis zu zweiten Schrägstrich.

      Wir brauchen also quasi einen "lazy" faulen Quantifier - damit nicht bis zu letzen Schrägstrich der Gruppe drin ist. 😉

      036376e9-ce10-47d5-a2a6-f4274aaf180c-image.png

      Damrak2022 2 Replies Last reply Reply Quote 0
      • Damrak2022
        Damrak2022 @mickym last edited by

        @mickym Ja, ich denke auch das die Kennung zum Schluss separat in einer anderen Farbe dargestellt wird.

        mickym 1 Reply Last reply Reply Quote 0
        • Damrak2022
          Damrak2022 @mickym last edited by

          @mickym Aha und was muss ich für den lazy eingeben?

          1 Reply Last reply Reply Quote 0
          • mickym
            mickym Most Active @Damrak2022 last edited by

            @damrak2022 sagte in Visualisierung mit Node Red erstellen:

            @mickym Ja, ich denke auch das die Kennung zum Schluss separat in einer anderen Farbe dargestellt wird.

            Wir machen in die Klammer noch das Fragezeichen.

            58e0d88a-eb5f-444f-8544-b6b34bbeeae5-image.png

            Damrak2022 2 Replies Last reply Reply Quote 0
            • Damrak2022
              Damrak2022 @mickym last edited by

              @mickym Stimmt jetzt passt es

              mickym 1 Reply Last reply Reply Quote 0
              • Damrak2022
                Damrak2022 @mickym last edited by

                @mickym Sorgt praktisch das Fragezeichen dafür, das er das nur bis zum Backslash liest?

                mickym 1 Reply Last reply Reply Quote 0
                • mickym
                  mickym Most Active @Damrak2022 last edited by

                  @damrak2022 sagte in Visualisierung mit Node Red erstellen:

                  @mickym Stimmt jetzt passt es

                  Na noch nicht ganz weil unser gesamtes topic matchen muss - deshalb müssen wir den Rest hinter unserer Kennung auch noch mit einbeziehen:

                  1 Reply Last reply Reply Quote 0
                  • mickym
                    mickym Most Active @Damrak2022 last edited by

                    @damrak2022 sagte in Visualisierung mit Node Red erstellen:

                    @mickym Sorgt praktisch das Fragezeichen dafür, das er das nur bis zum Backslash liest?

                    Nur bis zum ersten Backslash genau. 😉

                    Damrak2022 1 Reply Last reply Reply Quote 0
                    • Damrak2022
                      Damrak2022 @mickym last edited by

                      @mickym Ich habe dahinter nochmal einen .* eingefügt

                      mickym 1 Reply Last reply Reply Quote 0
                      • mickym
                        mickym Most Active @Damrak2022 last edited by mickym

                        @damrak2022 sagte in Visualisierung mit Node Red erstellen:

                        @mickym Ich habe dahinter nochmal einen .* eingefügt

                        Super!!!

                        Vollständig sieht es nun also so aus:

                        63b2b3ce-1baa-402e-a190-86415dc0a0d7-image.png

                        Auf die Gruppe kannst Du dann später mit $1 zugreifen.

                        Damrak2022 1 Reply Last reply Reply Quote 1
                        • Damrak2022
                          Damrak2022 @mickym last edited by

                          @mickym Sieht bei mir auch so aus. Jetzt fahre ich testen

                          mickym 1 Reply Last reply Reply Quote 0
                          • mickym
                            mickym Most Active @Damrak2022 last edited by mickym

                            @damrak2022 sagte in Visualisierung mit Node Red erstellen:

                            @mickym Sieht bei mir auch so aus. Jetzt fahre ich testen

                            Noch einen kurzen Augenblick. Speichere Dir diesen regulären Ausdruck ab bzw. ich mach das in dem ich es hier nochmal poste:

                            .*-(.*?)\/.*
                            

                            So sieht also unser regulärer Ausdruck aus, um aus dem topic die Kennung zu extrahieren. Morgen werden wir das mit einer Change Node machen.

                            EDIT: Mit dem Dach (brauchst nicht - da habe ich nur was getestet).

                            G Damrak2022 2 Replies Last reply Reply Quote 0
                            • G
                              Garf @mickym last edited by

                              @mickym sagte in Visualisierung mit Node Red erstellen:

                              Speichere Dir diesen regulären Ausdruck ab bzw. ich mach das in dem ich es hier nochmal poste

                              Schon kurios. Gestern habe ich mich mit dem Thema ebenfalls beschäftigt. Ich ziehe momentan meine Flows von einem RasPi3 auf einen RasPi4 um. Damit es auch nicht zu einfach wird, habe ich vor, die auf dem Raspi3 laufenden function-Nodes (ca. 130 Stück) zu reduzieren. Angefangen habe ich mit den function-Nodes um Modbusdaten in lesbare Zahlen umzuwandeln.

                              Alt:
                              9ba815d5-ebb0-4d94-bb16-dc5e1b151b04-grafik.png

                              Neu:
                              71a55c27-f900-463a-b041-f11b2bfb4322-grafik.png

                              Dann stand dieser Flow an, ich lese damit die CPU Temp. des Raspi aus.
                              e462dd1b-5c27-45f6-8cf5-6d8796e28e58-grafik.png

                              Ich habe es dann mit JSONata versucht und bin auf folgendem Lösung gekommen:
                              3871e32d-ddd2-4a81-9fd0-991a59e238b9-grafik.png

                              c1decab1-12ab-4be3-b0a0-90316f833ac0-grafik.png

                              Das Ergebnis passt soweit. Dann habe ich es, wie von dir beschrieben, mit regex versucht.
                              Das Ergebnis pass leider nicht, aber Du bist ja auch noch nicht mit deinen Erklärungen zu Ende.

                              So sieht das Ergebnis in regex101 aus:
                              11b0196c-112d-41cd-9203-a4f794a0de65-grafik.png
                              e7875a19-7bcb-45df-9741-66ea6e9ab26a-grafik.png

                              Und so das Ergebnis im debug Node:
                              f39163b2-6880-4c4a-abbd-e6ef110fd4dc-grafik.png
                              049c2deb-cee3-42e2-a54e-431e86058180-grafik.png
                              d7fb5c6f-7284-4006-89cf-73d1e1cbc8bf-grafik.png
                              Da habe ich wohl noch etwas nicht vollständig verstanden.

                              Ich will allerdings auch nicht deinen weiteren Ausführungen schon vorgreifen. Ich bin schon sehr gespannt wie es weiter geht.

                              mickym 1 Reply Last reply Reply Quote 0
                              • mickym
                                mickym Most Active @Garf last edited by mickym

                                @garf Wir werden es heute abend zwar nicht mit der $replace Funktion von JSONATA machen, sondern mit den Standardmitteln der Change Node. Lies Dir im Vorfeld aber noch einmal den Hilfetext zur Change Node durch. 😉

                                Ich hab es aber mal so wie Du hier gemacht hast, mit der $replace Funktion implementiert, das funktioniert auch - du musst nur den Platzhalter für die Gruppe in Gänsefüsschen packen. Du hattest es also schon fast gehabt.

                                Schau Dir einfach nochmal mein Posting hierzu an: https://forum.iobroker.net/post/911819

                                Kannst ja mal schreiben, ob Dir meine Tipps geholfen haben - ansonsten gehts heute abend weiter, falls Andy weiter machen will. 😉

                                4056a5b1-2d44-482e-a94f-154a15e97e28-image.png

                                Du musst also nur eine Winzigkeit in Deiner Funktion ändern. 😉

                                Da Du das Ganze ja also Zahl brauchst, aber das Ergebnis von regulären Ausdrücken immer Strings sind und natürlich auch die $replace() Funktion eine Stringfunktion ist, musst Du immer das Gesamtergebnis in eine Zahl umwandeln. 😉

                                G 2 Replies Last reply Reply Quote 0
                                • G
                                  Garf @mickym last edited by

                                  @mickym sagte in Visualisierung mit Node Red erstellen:

                                  Du musst also nur eine Winzigkeit in Deiner Funktion ändern.

                                  Die Winzigkeit wird durch einen schwarzen Punkt verdeckt. Ich komme nicht drauf. Da fehlt wohl noch etwas Hintergrundwissen. Vielleicht magst Du es ja auflösen wollen. Ich habe mir den Hilfetext der change Node mal bzgl. regulärern Ausdruck angesehen. Damit habe ich noch nicht gearbeitet. Bin aber schon ganz gespannt, was deine nächsten Lehrstundn dazu bringen wird. Du siehst, es liest mindestens noch einer mit und ist auch sehr interessiert. Allerdings nicht zu den Uhrzeiten oder besser Unzeiten wo ihr euch hier tummelt. Ist bei mir die Morgenlektüre. Ob man sich daß alles dauerhaft merken kann, weiß ich noch nicht. Im Moment speichere ich mir viel in OneNote zu den Themen ab.

                                  1 Reply Last reply Reply Quote 0
                                  • G
                                    Garf @mickym last edited by

                                    @mickym sagte in Visualisierung mit Node Red erstellen:

                                    Funktion eine Stringfunktion ist, musst Du immer das Gesamtergebnis in eine Zahl umwandeln.

                                    Daß ist mir schon klar und habe ich in meiner eigenen Lösung es ja auch so bereits gemacht. Vorher habe ich den Wert an den MQTT Broker übergeben, da konnte es auch gut ein Stringwert bleiben.

                                    mickym 1 Reply Last reply Reply Quote 0
                                    • mickym
                                      mickym Most Active @Garf last edited by mickym

                                      @garf Na gut - nachdem ich mit Andy heute abend die andere Lösung durchsprechen werde, so wie sie in der Beschreibung zur Change Node steht und Du mit meinem Link, den ich gepostet habe anscheinend doch nichts anfangen konntest (obwohl ich dachte dass der Zaunpfahl darin schon enthalten sei 😉 ) - Hier dann alles offengelegt. 😉

                                      2103e8ac-5213-4615-a373-0631d8a581f4-image.png

                                      G 1 Reply Last reply Reply Quote 0
                                      • G
                                        Garf @mickym last edited by Garf

                                        @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:
                                        1b89e2e5-7c18-40a1-9e8d-570f6b5e3ace-grafik.png

                                        mickym 2 Replies Last reply Reply Quote 0
                                        • mickym
                                          mickym Most Active @Garf last edited by mickym

                                          @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.

                                          f86f03da-d690-4f6d-a80f-5400a544bef3-image.png

                                          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.

                                          2782da3e-e4c6-4065-afba-fa6b0b395eb2-image.png f28b46de-baa3-43f1-9058-b1fbf70abef4-image.png

                                          Zeilenvorschübe sind also nicht im "Punkt" als beliebiges Zeichen enthalten.

                                          Ist auch so definiert - habe es gerade nochmal nachgeschaut:

                                          71566849-c154-46b7-9e44-24e4f6d78b64-image.png

                                          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:

                                          ef5b89a6-58df-4aeb-931c-d46dae1a85ea-image.png

                                          Leider wird diese Option aber nicht von JSONATA unterstützt -
                                          56ae68d1-bef6-4f2a-ab1f-2388cd2975f6-image.png

                                          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"))
                                          
                                          1 Reply Last reply Reply Quote 1
                                          • mickym
                                            mickym Most Active @Garf last edited by mickym

                                            @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. 😉

                                            1. Gruppe: die Temperatur (35.9)
                                            2. Gruppe: die Einheit (C)
                                            3. Gruppe: quasi das Topic - also um welche Temperatur es sich handelt. (CPU-Temperatur)

                                            Mit der Replacefunktion können wir das nun komplett anders zusammensetzen:

                                            af69d90f-eb35-4a80-8623-6da4c71b665d-image.png

                                            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:

                                            51a896e3-92e7-4419-a1f4-5c3c0d99a678-image.png

                                            G Damrak2022 2 Replies Last reply Reply Quote 1
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            645
                                            Online

                                            31.6k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

                                            4
                                            4845
                                            2091147
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo