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

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Visualisierung mit Node Red erstellen

    This topic has been deleted. Only users with topic management privileges can see it.
    • 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
                    • G
                      Garf @mickym last edited by

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

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

                        @mickym So, was möchtest Du jetzt mit der Change Node anstellen, wenn Du Lust hast?

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

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

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

                            @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

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

                              @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.
                              Damrak2022 1 Reply Last reply Reply Quote 1
                              • Damrak2022
                                Damrak2022 @mickym last edited by

                                @mickym Ja

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

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

                                    @mickym Moment

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

                                      @mickym Habe ich:
                                      Bildschirm­foto 2022-12-19 um 00.07.18.png

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

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

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

                                          @mickym Ja, klappt

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

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

                                            Damrak2022 1 Reply Last reply Reply Quote 1
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            405
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

                                            4
                                            4845
                                            2315274
                                            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