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. Bereich aus ASCII-String herausfiltern

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Bereich aus ASCII-String herausfiltern

    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      Patzelts last edited by

      Hallo Gemeinde,

      Ich bin ein absoluter Node-red Novize und scheitere wahrscheinlich deshalb an folgender Aufgabe.
      Ich habe einen ASCII-String den ich von einer recht alten PV-Anlage über serielle Schnittstelle auslese.

      Das sieht dann so aus.
      Unbenannt.JPG
      Eigentlich sollten die Daten alle 10 Sekunden kommen, tun sie aber nicht, das ist aber zweitrangig, hauptsache einmal pro Minute kommt was, was schon der Fall ist. Dennoch, vielleicht hat einer eine Idee woran das liegen kann. Der WR sendet alle 10 Sekunden, aber vom Node bekomme ich nicht alle Daten, warum auch immer.

      Das eigentliche Problem ist, ich brauche aus dem String nur die markierten 4 Stellen (hier die " 146". was die aktuelle Leistung des WR ist). Alles andere ist uninteresant. Wie komm ich an diese 4 Stellen?

      Für ein paar Tips wäre ich echt dankbar

      Grüße

      Stephan

      OliverIO P 2 Replies Last reply Reply Quote 0
      • OliverIO
        OliverIO @Patzelts last edited by OliverIO

        @patzelts

        Ich sehe 10 werte und du willst immer den 9.
        plus die Sekunden aus dem zeitstempel der Nachricht.
        Um den 9. wert zu extrahieren könnte man einmal mit regex arbeiten.
        Für diesen einfachen Fall würde ich einfach den String durch eine Split Funktion laufen lassen, die den String anhand von Leerzeichen in ein Array umwandelt und dann den 9. wert bzw. Index 8 entnehmen.

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

          Genau einfach mit einer ChangeNode und split in ein Array - allerdings vorher die überflüssigen Leerzeichen eliminieren, wie OliverIO gezeigt hat.

          Da es immer ein bestimmter Wert ist, kann man dann über den Index darauf zugreifen und gleich in eine Zahl wandeln.

          a1d4ee67-a78f-44d2-b816-a49be54d7ab1-image.png

          Die beiden Regeln kann man natürlich in einer ChangeNode zusammenfassen:

          Hier zum Import:

          [
             {
                 "id": "b1ddeea21469206c",
                 "type": "inject",
                 "z": "7e6af0015415146d",
                 "name": "",
                 "props": [
                     {
                         "p": "payload"
                     }
                 ],
                 "repeat": "",
                 "crontab": "",
                 "once": false,
                 "onceDelay": 0.1,
                 "topic": "",
                 "payload": "0.000    55   146     555",
                 "payloadType": "str",
                 "x": 470,
                 "y": 6080,
                 "wires": [
                     [
                         "b0cc0df2f2bd24e5",
                         "e49a1ac8e44c1faa"
                     ]
                 ]
             },
             {
                 "id": "b0cc0df2f2bd24e5",
                 "type": "debug",
                 "z": "7e6af0015415146d",
                 "name": "Wert",
                 "active": true,
                 "tosidebar": true,
                 "console": false,
                 "tostatus": false,
                 "complete": "payload",
                 "targetType": "msg",
                 "statusVal": "",
                 "statusType": "auto",
                 "x": 710,
                 "y": 6080,
                 "wires": []
             },
             {
                 "id": "e49a1ac8e44c1faa",
                 "type": "change",
                 "z": "7e6af0015415146d",
                 "name": "",
                 "rules": [
                     {
                         "t": "set",
                         "p": "payload",
                         "pt": "msg",
                         "to": "$split($trim(payload), \" \")\t",
                         "tot": "jsonata"
                     }
                 ],
                 "action": "",
                 "property": "",
                 "from": "",
                 "to": "",
                 "reg": false,
                 "x": 630,
                 "y": 6140,
                 "wires": [
                     [
                         "7abc9390f910cfd4",
                         "39ee8b428ecb601d"
                     ]
                 ]
             },
             {
                 "id": "7abc9390f910cfd4",
                 "type": "debug",
                 "z": "7e6af0015415146d",
                 "name": "Bearbeitet 1",
                 "active": true,
                 "tosidebar": true,
                 "console": false,
                 "tostatus": false,
                 "complete": "payload",
                 "targetType": "msg",
                 "statusVal": "",
                 "statusType": "auto",
                 "x": 850,
                 "y": 6140,
                 "wires": []
             },
             {
                 "id": "39ee8b428ecb601d",
                 "type": "change",
                 "z": "7e6af0015415146d",
                 "name": "",
                 "rules": [
                     {
                         "t": "set",
                         "p": "payload",
                         "pt": "msg",
                         "to": "$number(payload[2])",
                         "tot": "jsonata"
                     }
                 ],
                 "action": "",
                 "property": "",
                 "from": "",
                 "to": "",
                 "reg": false,
                 "x": 850,
                 "y": 6200,
                 "wires": [
                     [
                         "d2ea2ac7af47b798"
                     ]
                 ]
             },
             {
                 "id": "d2ea2ac7af47b798",
                 "type": "debug",
                 "z": "7e6af0015415146d",
                 "name": "Bearbeitet  2",
                 "active": true,
                 "tosidebar": true,
                 "console": false,
                 "tostatus": false,
                 "complete": "payload",
                 "targetType": "msg",
                 "statusVal": "",
                 "statusType": "auto",
                 "x": 1050,
                 "y": 6200,
                 "wires": []
             }
          ]
          

          Wenn Du es anhand Deiner Daten machen willst, dann kopiere die Daten (copy value) wie hier gezeigt in die Zwischenablage

          copy path.gif

          und dann im Thread hier in code tags:
          Code-Tags.gif

          P 3 Replies Last reply Reply Quote 0
          • P
            Patzelts @OliverIO last edited by

            @oliverio super Tipp. vielen dank!

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

              @mickym herzlichen dank, das probiere ich gleich.
              War jetzt ein paar tage beruflich weg, weshalb ich erst jetzt antworten kann

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

                @mickym Ich hab das jetzt mal so gelöst
                859f8e9d-0990-4da1-a882-b4353deac291-grafik.png

                Habe festgestellt, dass wenn ich den String in gleich große Strings a 6 Zeichen teile, bekomme ich eine Maeldung mit genau den daten die ich brauch. Ich mach dann ein Array draus und filtere den Block aus, den ich brauch.
                It vielleicht nicht die eleganteste Lösung, aber es scheint zu funktionieren.

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

                  @patzelts said in Bereich aus ASCII-String herausfiltern:

                  Hallo Gemeinde,

                  Ich bin ein absoluter Node-red Novize und scheitere wahrscheinlich deshalb an folgender Aufgabe.
                  Ich habe einen ASCII-String den ich von einer recht alten PV-Anlage über serielle Schnittstelle auslese.

                  Das sieht dann so aus.
                  Unbenannt.JPG
                  Eigentlich sollten die Daten alle 10 Sekunden kommen, tun sie aber nicht, das ist aber zweitrangig, hauptsache einmal pro Minute kommt was, was schon der Fall ist. Dennoch, vielleicht hat einer eine Idee woran das liegen kann. Der WR sendet alle 10 Sekunden, aber vom Node bekomme ich nicht alle Daten, warum auch immer.

                  Das eigentliche Problem ist, ich brauche aus dem String nur die markierten 4 Stellen (hier die " 146". was die aktuelle Leistung des WR ist). Alles andere ist uninteresant. Wie komm ich an diese 4 Stellen?

                  Für ein paar Tips wäre ich echt dankbar

                  Grüße

                  Stephan

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

                    @patzelts Na ja ich verstehe zwar nicht, was an meiner Lösung nicht funktioniert hat - aber wenn Du es gelöst hast, dann ist ja gut.

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

                      @mickym Ich hab nicht verstanden was du da geamcht hast. Wie gesagt ich bin absoluter Novize. Ich habe in meinem Studium Macro Assembler gelernt und ein wenig C++, aber das ist 30 Jahre her und ich kann mich an praktisch nichts erinnern.

                      Ich werde diene Lösung schon noc probieren, sobald ich im Ansatz vertanden habe was du da machst.

                      Ich bin ja total überrascht, dass meine geht.

                      Danke dir troztdem

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

                        @mickym oh man .... jetzt hab ich verstanden wie das mit den kopieren und einfügen geht.
                        is ja easy biesy.
                        Jetzt versteh ich auch deinen Flow.

                        Alles klar, funktioniert prima.

                        Danke dir für die Mühe.

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        727
                        Online

                        31.7k
                        Users

                        79.7k
                        Topics

                        1.3m
                        Posts

                        3
                        10
                        249
                        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