Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. MQTT Antwort parsen

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    MQTT Antwort parsen

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

      Moin,

      ich möchte einen Datenpunkt parsen welcher leider kein Json ist.
      Ich lese per MQTT einen Marstek B2500 Speicher aus und bekomme nur einen Datenpunkt mit dem Wert z.B.

      p1=1,p2=1,w1=100,w2=101,usw
      

      w1 ist hier die Leistung des 1. PV Eingang des Speichers, also 100Watt.

      Das ganze möchte ich nun in einzelne Datenpunkte schreiben, aber alle Beispiele die ich finde haben keine = Zeichen sondern :.

      Scripten ist nicht meine Lieblingsbaustelle 😉.

      BananaJoe J M 3 Replies Last reply Reply Quote 0
      • BananaJoe
        BananaJoe Most Active @Andre 6 last edited by BananaJoe

        @andre-6 die .split() Methode wäre dein Freund:
        https://www.w3schools.com/jsref/jsref_split.asp

        Du könntest erst an den , splitten, dann hättest du ein Array mit den einzelnen p1=1 Strings.
        Die kannst du wiederum splitten anhand des =

        Womit Skriptes du denn bisher? JavaScript? Blockly? NodeRed?

        Andre 6 paul53 2 Replies Last reply Reply Quote 0
        • Andre 6
          Andre 6 @BananaJoe last edited by

          @bananajoe derzeit nur mit Blockly

          Marc Berg 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @BananaJoe last edited by paul53

            @bananajoe sagte: , splitten, dann hättest du ein Array mit den einzelnen p1=1 Strings. Die kannst du wiederum splitten anhand des =

            Etwa so, wenn nur Zahlenwerte enthalten sind:

            Blockly_temp.JPG

            Andre 6 1 Reply Last reply Reply Quote 1
            • Marc Berg
              Marc Berg Most Active @Andre 6 last edited by Marc Berg

              @andre-6

              p1=1,p2=1,w1=100,w2=101,usw

              Ich würde es ohne Skripting mit Aliasen machen und einer Read-Konvertierung:

              val.split(',').find(p => p.startsWith('w1=')).split('=')[1]
              

              oder mit regulären Ausdrücken:

              value.match(/w1=(\d+)/)[1]
              

              Dabei das "w1" jeweils um den Parameter ersetzen, der gefragt ist.

              426cb3a1-093d-46b8-8a3f-d45594d8b0c9-grafik.png

              EDIT: Dabei nicht von Fehlermeldungen des Read-Konverters irritieren lassen, nach dem erstmaligen Speichern sind die weg.

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

                Oder Du kombinierst Blockly mit regulären Ausdrücken:

                8235100c-ec78-47f0-b077-3d207fd2eb43-image.png

                <xml xmlns="https://developers.google.com/blockly/xml">
                 <variables>
                   <variable id="$%$5rI0yxpvMs4%k|yC4">Liste</variable>
                 </variables>
                 <block type="variables_set" id="M5y-_xkzw7p$o;Nh}70$" x="37" y="37">
                   <field name="VAR" id="$%$5rI0yxpvMs4%k|yC4">Liste</field>
                   <value name="VALUE">
                     <block type="convert_jsonata" id=".^AH}C!F%:rI)h:V,4!.">
                       <value name="EXPRESSION">
                         <shadow type="text" id="c-[Ca!mn22wn^I5^+3sJ">
                           <field name="TEXT">$match($,/=(\d*)/).groups.$number($)</field>
                         </shadow>
                       </value>
                       <value name="TARGET">
                         <block type="text" id="rbq*`zu)B|tNn]Rv=Qa/">
                           <field name="TEXT">p1=1,p2=1,w1=100,w2=101</field>
                         </block>
                       </value>
                     </block>
                   </value>
                   <next>
                     <block type="debug" id="(r7g2sJ.-~jcZ[my26u~">
                       <field name="Severity">info</field>
                       <value name="TEXT">
                         <shadow type="text" id="Dk0A6{beL/b)S0Kg}q9N">
                           <field name="TEXT">rr</field>
                         </shadow>
                         <block type="lists_getSublist" id="BmlvS7-lwJ_{e%+$NyJ@">
                           <mutation at1="false" at2="false"></mutation>
                           <field name="WHERE1">FIRST</field>
                           <field name="WHERE2">LAST</field>
                           <value name="LIST">
                             <block type="variables_get" id="kN6v1wMR.Pg{zEHu8Uaa">
                               <field name="VAR" id="$%$5rI0yxpvMs4%k|yC4">Liste</field>
                             </block>
                           </value>
                         </block>
                       </value>
                     </block>
                   </next>
                 </block>
                </xml>
                

                ...und wandelst auch gleich in Zahlenwerte um.

                Andre 6 1 Reply Last reply Reply Quote 1
                • Andre 6
                  Andre 6 @paul53 last edited by Andre 6

                  @paul53 wo / wie hast du diesen Bausteinen her ? 5c8f76ba-592f-4de3-b23f-e971b8b5e4ae-image.png

                  ich finde nur den 1570a9fc-cd1c-47dc-bde4-2a60dec2ef5f-image.png

                  paul53 1 Reply Last reply Reply Quote 0
                  • Andre 6
                    Andre 6 @mickym last edited by

                    @mickym ich hätte das schon gerne direkt als einzelne Datenpunkte
                    2fa65ce6-ad8e-43dd-a262-3f7125efad24-image.png

                    1 Reply Last reply Reply Quote 0
                    • paul53
                      paul53 @Andre 6 last edited by

                      @andre-6 sagte: wo / wie hast du diesen Bausteinen her ?

                      Zwei Text-Elemente und interne Eingänge:

                      Blockly_temp.JPG

                      1 Reply Last reply Reply Quote 0
                      • Andre 6
                        Andre 6 last edited by

                        @paul53 aha...
                        07451f45-06aa-412f-b273-d6ff04b0d817-image.png
                        und an die Stelle muss doch der Datenpunkt mit der zu zerlegenden Zeichenkette?

                        Andre 6 paul53 2 Replies Last reply Reply Quote 0
                        • Andre 6
                          Andre 6 @Andre 6 last edited by Andre 6

                          @andre-6 602cca23-90c0-4679-a5df-c54748da47af-image.png

                          ich bitte um Nachsicht, aber das ist echt nicht meins....
                          Ich möchte ja nicht nur den einen Wert haben

                          mein erster Ansatz war es so zu lösen, aber da es ja kein Json ist geht das nicht

                          31ac23c1-ee87-4a85-b2ba-bc3da0e13ad6-image.png

                          1 Reply Last reply Reply Quote 0
                          • paul53
                            paul53 @Andre 6 last edited by paul53

                            @andre-6 sagte: und an die Stelle muss doch der Datenpunkt mit der zu zerlegenden Zeichenkette?

                            An diese Stelle muss der Beginn der Datenpunkt-ID. Beispiel: "0_userdata.0.PV.Speicher." ergibt mit "w1" die Datenpunkt-ID "0_userdata.0.PV.Speicher.w1". Die Datenpunkte vom Typ "Zahl" müssen alle bereits erstellt sein.

                            Andre 6 1 Reply Last reply Reply Quote 0
                            • Andre 6
                              Andre 6 @paul53 last edited by

                              @paul53 ok, also müssen alle Werte die ich in dem Quelldatenpunkt habe zwingend auch als einzelne Datenpunkte existieren.
                              Kann ich mir auch nur meine Rosinen raus picken?

                              paul53 1 Reply Last reply Reply Quote 0
                              • paul53
                                paul53 @Andre 6 last edited by paul53

                                @andre-6 sagte: Kann ich mir auch nur meine Rosinen raus picken?

                                Kannst du.

                                Blockly_temp.JPG

                                Andre 6 1 Reply Last reply Reply Quote 0
                                • Andre 6
                                  Andre 6 @paul53 last edited by

                                  @paul53 vielen Dank, zwar noch nicht verstanden was wie und wo aber es läuft

                                  1 Reply Last reply Reply Quote 0
                                  • J
                                    Jeba @Andre 6 last edited by

                                    @andre-6 Hallo Andre, kannst Du mir bitte sagen, wie du den Speicher ausliest.
                                    Ich habe mir auch einen bestellt und möchte den einbinden.
                                    Kann man in der App MQTT konfigurieren

                                    1 Reply Last reply Reply Quote 0
                                    • M
                                      manrum1 @Andre 6 last edited by

                                      @andre-6 Könntest du mir bitte sagen wie du es geschafft hast MQTT überhaupt einzuschalten? Ich habe seit ein paar Wochen den Marstek B2500, der funktioniert auch ganz gut, nur komme ich nicht an die Daten ran.
                                      Vor kurzem gab es noch die WEB-Seite: https://eu.hamedata.com/app/AfterSales/index.html
                                      Dort konnte man den Punkt MQTT zwar enablen, auch wenn sich hinterher nichts getan hat.
                                      Bei mir geht seit einigen Tagen dei o.a. WEB-Seite gar nicht mehr (kommt dauernd eine Maintenance-Seite.).

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

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      973
                                      Online

                                      31.7k
                                      Users

                                      79.7k
                                      Topics

                                      1.3m
                                      Posts

                                      7
                                      17
                                      713
                                      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