Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Node-Red
    5. String aufteilen

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    String aufteilen

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

      @hafo Wie gesagt - Du bist nicht meiner Empfehlung gefolgt und hast die Stringkonvertierung in dem Adapter ausgeschaltet.

      Du kannst das entweder jetzt machen - musst halt aufpassen, ob Du nicht schon viel konvertiert hast oder musst halt immer weiter konvertieren.

      Wenn Du weiter konvertieren willst, dann musst halt alles mit $number() in JSONATA umwandeln oder Du liest Zahlen, die im iobroker als Zahl definiert sind auch als Zahl aus und machst diesen unsäglichen Haken raus!!!

      Ansonsten kannst Du auch in JSONATA weiterhin Zahlen konvertieren:

      2576f1a2-0448-4b1c-8e0c-c7ae17f21dec-image.png

      e165e145-1937-4806-83fd-60223bba1011-image.png

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

        @mickym Nein, der Haken ist bei mir gesetzt. Aber vielleicht habe ich bei den Objekten etwas falsches eingestellt.

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

          @hafo sagte in String aufteilen:

          @mickym Nein, der Haken ist bei mir gesetzt. 😠 😡 Aber vielleicht habe ich bei den Objekten etwas falsches eingestellt.

          Das ist doch das Problem!!!! Haken raus!!!!

          Mit gesetztem Haken kann im Datenpunkt stehen was will - es wird alles in Strings gewandelt!

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

            @mickym Ich glaub ich bin schon zu lange am Computer 🤦

            Jedenfalls triggert er nun wieder in alle unendlichkeit
            1.jpg

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

              @hafo Nein - Du hast nun umgestellt und nun kommen auch Deine booleans als booleans und nicht mehr als String.

              Das ist jetzt vielleicht leider Umstellungsaufwand - deswegen empfehle ich den Haken von Beginn an rauszunehmen, sonst kannst halt weiter konvertieren.

              Du kannst den Haken ja erst mal wieder rein nehmen und dann anfangen zu suchen:

              Wenn Du im JSONATA konvertieren willst, dann geht das schon

              520f3d62-e5ff-4d71-a31e-a7c3872c32a0-image.png

              d980f38b-030d-4e70-83b9-92876f073a02-image.png

              Ich finde es auf Dauer umständlich, aber wie gesagt nun musst Du erst mal schauen, wo Deine Datentypen nicht mehr passen.

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

                @hafo Der switch hinter Deinen Trigger wird wahrscheinlich nicht mehr passen, da der auf String und nicht auf Boolean abprüft.

                den musst mit Sicherheit umstellen:

                704ffd63-61bb-4097-8217-590b8fab4c97-image.png

                Einfach alle Eingänge überprüfen, ob der richtige Datentyp nun im weiteren Verlauf verwendet wird. Ansonsten zurück kannst immer. Aber ich denke lieber einmal Schmerzen, als dauernd konvertieren. 😉

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

                  @mickym das habe ich zuerst geändert. Beim oberen Beispiel ist dieser Switch gar nicht angehängt, und der untere sollte sämtliche Nachrichten in Boolean false ändern.
                  Da muss ich noch ein bisschen suchen.
                  OK, es läuft wieder. Ich musste natürlich beim Trigger einstellen dass er nur auf geänderte Nachrichten reagiert.

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

                    @hafo Na gut - 🙂 Du wirst erleichtert sein, dass Du Dir nun eine Menge Konvertiererei sparst. Das Rechnen sollte nun ohne den JSONATA Fehler funktionieren, wenn die Datenpunkte vom Typ Zahl sind.

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

                      @mickym sagte in String aufteilen:

                      @hafo

                      Ich habe noch ein bisschen mit der sort Node rumgespielt und dabei ein paar ganz gute Erkenntnisse gewonnen. Wenn Du willst dann poste ich sie hier mal im Thread - später. 😉

                      So ich habe nun auch herausgefunden, wie man mit den Sort Nodes ggf. auch selbst eine Sortierreihenfolge definieren kann, selbst wenn man das nicht so vorab so vorbildlich gemacht hat, wie Du und immer eine Zahl vorangestellt hat. Das hat zwar bisschen Tüftelei gekostet, aber vielleicht ist das für den einen oder anderen interessant:

                      d1b2e512-a187-4ceb-8d7e-7d1dd2f2560d-image.png

                      Also was sieht man:

                      1. Das Array mit durcheinandergewürfelten Wochentagen.
                      2. Mit Standardeinstellungen wird das Array natürlich alphabetisch sortiert:
                        7b25d282-5173-493c-8b1d-f97cb589395b-image.png
                      3. Um nun eine eigene Reihenfolge festzulegen, kann man ein Objekt erstellen und den Begriffen, in diesem Fall Zahlenwerte zuordnen.
                        In der letzten Node sieht man werden die Wochentage nun auch in dem Array richtig sortiert.
                        Dies erfolgt über eine JSONATA Funktion - Kopfzerbrechen hat mir das $ Zeichen gemacht, dass von der Node als Platzhalter für die Arrayelemente verwendet.
                        39b74ea3-ea16-4235-80f9-3549de6f760c-image.png
                      $lookup(
                         {
                             "Mo":0,
                             "Di":1,
                             "Mi":2,
                             "Do":3,
                             "Fr":4,
                             "Sa":5,
                             "So":6
                         },
                         $
                      )
                      

                      Grundsätzlich kann man auch nur mit einer JSONATA Funktion in einer Change Node ein Array sortieren:

                      580a44b7-dfc0-4165-9979-b303c98fa750-image.png

                      Das ist aber bissi komplizierter - hier mal die JSONATA Defintion:

                      $sort(payload,function($l, $r){
                         $lookup(
                             {
                                 "Mo":0,
                                 "Di":1,
                                 "Mi":2,
                                 "Do":3,
                                 "Fr":4,
                                 "Sa":5,
                                 "So":6
                             },
                             $l
                         ) > $lookup(
                             {
                                 "Mo":0,
                                 "Di":1,
                                 "Mi":2,
                                 "Do":3,
                                 "Fr":4,
                                 "Sa":5,
                                 "So":6
                             },
                             $r
                         ) 
                      })
                      

                      Hat man kein Objekt sondern splittet ein Array - dann kann man ebenfalls anstelle von dem topic bzw. key zum Beispiel nach der Payload sortieren:

                      a2ee2f3d-a2dd-4fa0-9766-851afe9c3c00-image.png

                      8391b6ce-a560-4499-ba0a-fd6d559a6e27-image.png

                      3706772a-107b-4ddc-9830-c65950152efe-image.png

                      $lookup(
                         {
                             "Mo":0,
                             "Di":1,
                             "Mi":2,
                             "Do":3,
                             "Fr":4,
                             "Sa":5,
                             "So":6
                         },
                         payload
                      )
                      

                      Hier muss ich dann die payload, statt der $ eingeben, da hier die payload ja bereits den skalaren Wert enthalten.

                      Jedenfalls habe ich heute auch wieder einiges gelernt und vielleicht hilft das auch dem einen oder anderen.

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

                        @hafo Ich habe übrigens nun auch mal Deinen Scheduler Node installiert. Den finde ich ganz gut - allerdings wundert mich, dass Du den verwendest, da Du ja das NodeRed Dashboard gar nicht nutzt. 😉

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

                          @mickym Das war beim einstellen ganz nützlich.
                          Ich habe gerade etwas Mühe alle strings in Zahlen zu ändern. Auch wenn das Objekt eine Zahl enthalten sollte, wird manchmal ein String ausgelesen. Bei den Stunden klappt es, bei den Minuten nicht. Irgendwie macht das Vis teilweise strings.

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

                            @hafo sagte in String aufteilen:

                            @mickym Das war beim einstellen ganz nützlich.
                            Ich habe gerade etwas Mühe alle strings in Zahlen zu ändern. Auch wenn das Objekt eine Zahl enthalten sollte, wird manchmal ein String ausgelesen. Bei den Stunden klappt es, bei den Minuten nicht. Irgendwie macht das Vis teilweise strings.

                            Wenn der Datentyp des Datenpunktes passt (ggf. nochmals checken), dann ist es vielleicht wirklich vis - aber dann kannst wie ich ja unten gepostet habe auch in JSONATA einen String der eine Zahl enthält konvertieren. Das ist nun halt ein Nachteil, weil Du vorher nur Strings hattest, aber insgesamt erspart es Dir denke ich Arbeit.

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

                              @mickym Ich habe im Vis nun die Minutenauswahl neu gemacht. Nun läuft es endlich.

                              Mit den Change Nod Rechner hatte ich etwas Mühe. Mein Problem war dass ich es mit dem falschen msg. wert habe rechnen lassen. Aber nun läufts. 👯
                              Das war eine lehrreiche Erfahrung, VIELEN DANK für deine Geduld.

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

                                @hafo sagte in String aufteilen:

                                @mickym Ich habe im Vis nun die Minutenauswahl neu gemacht. Nun läuft es endlich.

                                Mit den Change Nod Rechner hatte ich etwas Mühe. Mein Problem war dass ich es mit dem falschen msg. wert habe rechnen lassen. Aber nun läufts. 👯
                                Das war eine lehrreiche Erfahrung, VIELEN DANK für deine Geduld.

                                Ich habe ja heute auch was gelernt (s. sort-Nodes). Und hab ich gerne gemacht.
                                Ich hoffe Dir macht das auch etwas Spass, auch wenn es manchmal Detektivarbeit ist.

                                Aber ich hoffe, Du hast gerade bei der Fehlersuche auch die Stärken von NodeRed entdeckt, da man hier eben den"Programmflow" grafisch nachverfolgen kann.

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

                                  @mickym Natürlich, ohne wäre es noch schwieriger geworden mit der Fehlersuche.
                                  Ich bin von Beruf Weinbauer, da macht man in der Freizeit auch gerne einmal etwas anderes, daher hat es auch Spass gemacht. Dieser Flow ist allerdings erst der Anfang.
                                  Wie bereits erwähnt möchte ich noch Feuchtigkeitssensoren einbauen. Zudem hängt am Wasserhan ein Zähler. Da ist das Ziel dass ich einen Schlauchbruch erkenne, das Ventil schliesse und eine Meldung bekomme. Das schwierige wird sein dass ich bei jedem Ventil ein Wert hinterlegen muss welcher nicht überschritten werden sollte. Diese müssen teilweise summiert werden wenn mehrere Ventile offen sind. Zudem muss ich berücksichtigen dass beim öffnen eines Ventils mehr Wasser fliesst bis der Schlauch voll ist....
                                  Falls das alles einmal läuft, könnte ich auch noch den Wetterbericht einbinden. Aber bis dann ist Winter.

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

                                    @hafo sagte in String aufteilen:

                                    @mickym Natürlich, ohne wäre es noch schwieriger geworden mit der Fehlersuche.
                                    ...
                                    Falls das alles einmal läuft, könnte ich auch noch den Wetterbericht einbinden. Aber bis dann ist Winter.

                                    Mache ich gerade mit der AccuWeather API aber nicht mit vis sondern dem NodeRed Dashbord. 😉

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

                                      @mickym Hier ist noch der abgeänderte Flow mit den Rechner falls es jemandem hilft.
                                      bew3.json

                                      Das Vis funktioniert nun perfekt, auch wenn es optisch noch besser geht.
                                      1.jpg

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

                                        @hafo Na das schaut doch ganz gut aus. Und die sich mit der Materie beschäftigen, wissen wieviel Arbeit da drin steckt. 😉

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

                                          @mickym So, meine flows sind nun fast fertig, ich habe alles noch ein bisschen überarbeitet.
                                          -anzeige der Restlaufzeit
                                          -einschalten eines Ventils für eine bestimmte Zeit ohne das Programm zu beeinflussen
                                          -eingeschaltete Ventile sind gut Sichtbar und können beim draufklicken ausgeschaltet werden
                                          -es können verschiedene Programme zugewiesen werden, aktuell gibt es:
                                          -Timer (normale Steuerung über Zeitschaltuhr)
                                          -Timer+Sensor (die Bewässerung wird nur gestartet wenn der Sensor auf true)
                                          -Stundentimer (Sensoren werden Stündlich abgelesen)
                                          2.jpg
                                          Es ist nun auch einfach möglich zusätzliche Programme zu machen, z.B für Wettervorhersagen...
                                          Dafür habe ich zwei Tabs gut gefüllt
                                          3.jpg
                                          4.jpg

                                          Falls jemand an den Flows interessiert ist, einfach melden. Ich kann dann auch Tips zum einbauen geben. Es sollte relativ einfach übertragbar sein sofern ich alles richtig gemacht habe 😬

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

                                            @hafo Na herzlichen Glückwunsch!!!

                                            Nachdem alles nun gut läuft - hätte ich noch einen kleinen Punkt zur Optimierung der Flows. Ich hatte am Anfang auch lange Bäume, aber man kann die ggf. noch vereinfachen, indem man den msg.topic dynamisch zusammenstellt.
                                            So bleibt ja bei jedem Flow Stardzeit, Laufzeit immer gleich.
                                            So könnten man das quasi etwas vereinfachen in dem man dies nochmal hierarchisch aufbaut. Aber das kannst Dir ja mal für später im Auge behalten.

                                            H 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            818
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            3
                                            141
                                            8096
                                            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