Ankündigung

Einklappen
Keine Ankündigung bisher.

String zerlegen mit Separator "Zeilensprung", wie?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    String zerlegen mit Separator "Zeilensprung", wie?

    Moin,

    hab ein Problem mit dem Zerlegen eines Strings, wie kann ich den Separator "Zeilensprung" (Enter) beim LBS 18000003 String zerteilen 10-fach eintragen?

    Über die Liveansicht und Wert setzen(!) ist dies möglich und komme zum gewünschten Ergebnis!

    HTML-Code:
    MASTATUS
    <BODY>
    MV=v1.7.0
    PC=XXX.XXX.XXX.XXX
    MA=00 C0 B7 7B XX XX
    DT=12/02/2018
    TM=13:24:41
    SR=2D
    SU=A3384707
    RD=BF3D
    TA=XXX.XXX.XXX.XXX
    UC=1
    SD=0
    SM=2
    4F=232.7
    51=08
    7E=00
    3E=000
    4C=232.7
    50=005.2
    43=032.4
    78=07/25/00
    6A=0184:
    47=S
    63=UPS_IDEN
    66=100.0
    58=NO
    56=IWI
    39=FF
    27=00
    38=00
    6E=GS0031001895
    6D=07/25/00
    01=SMART-UPS 1000
    46=50.00
    4D=235.3
    4E=228.8
    45=336
    75=253
    6C=196
    65=00
    6F=230
    71=02
    70=020
    72=000
    42=27.60
    67=024
    62=60.11.I
    6B=0
    73=H
    MC=0
    I0=0
    SH=3D73BEB9664A16CFDD0113E77CA03315
    MD=19c8c49c3c2f5a379f6741e9b7fdd60b
    </BODY>
    Den String bekomme ich via UDP von meiner USV-1000 Smart mit Netzwerkkarte APC AP9617.

    Kann mir hier jemand auf die Sprünge helfen, gerne auch wie ich sonst an die einzelnen Werte komme?

    Gruß Timo


    Zuletzt geändert von MatthiasS; 02.12.2018, 13:36.

    #2
    Wenn ich die Daten in Home-Connect erhalte, dann sehen die in etwa so aus:
    Code:
    $string = data:[LF]event:KEEP-ALIVE
    Mit ...
    PHP-Code:
    $array explode ("\n"$string); 
    ... werden die durch [LF] getrennten Werte, in den Array geschrieben, danach sollte es einfacher gehen ...

    Ich hoffe ich habe dich richtig verstanden ...
    Danke und LG, Dariusz
    GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

    Kommentar


      #3
      Danke für die Antwort, ich bin nicht beim Erstellen eines LBS in PHP (übersteigt auch meine Möglicheiten) ich nutze lediglich die Vorhanden LBS`s!

      Kommentar


        #4
        Ich vermute fast, dass es nicht funktionieren wird. Du könntest es mal mit \n versuchen, aber ich denke, dass dies als String interpretiert wird.

        Kommentar


          #5
          Nein \n funktioniert leider auch nicht!?

          Kommentar


            #6
            Wenn es HTML ist, dann vllt ein "<br>"?

            Kommentar


              #7
              Nee leider auch nicht, die HTML Befehle hatte ich schon versucht!

              Kommentar


                #8
                Und ein "<br />\n" ?
                Danke und LG, Dariusz
                GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                Kommentar


                  #9
                  Der LBS macht ein explode(). Das wird nicht funktionieren da edomi die Eingänge als strings verarbeitet. Dazu müsste man den LBS pimpen.
                  Hast du mal geschaut ob es einen User LBS gibt, der das vielleicht macht?
                  Zuletzt geändert von jonofe; 03.12.2018, 00:50.

                  Kommentar


                    #10
                    Ich werde nächste Woche so einen User LBS schreiben... ;-)

                    Kommentar


                      #11
                      Das wäre klasse! Bei den User LBS hab ich auch nix gefunden!
                      Zuletzt geändert von Inventor; 02.12.2018, 19:56.

                      Kommentar


                        #12
                        Der hier auch nicht?

                        Kommentar


                          #13
                          Anbei mein LBS, den ich dafür nutze.

                          Ernn Du den Input auf e1 legst, e2 mit /\n/i belegst, e3 zB mit | oder einem beliebigen neuen Trenner legst, kannst du den Output davon
                          wieder an "String zerteilen 10-fach" weiterreichen.
                          tmp.jpg

                          Code:
                          ###[DEF]###
                          [name        =    PREG_REPLACE - String ersetzen v0.1    ]
                          
                          [e#1        =    String    ]
                          [e#2        =    regulärer Ausdruck(pattern) ]
                          [e#3        =    ersetzung ]
                          [e#4        =    Limit #init=-1    ]
                          
                          [a#1        =    Ergebnisstring    ]
                          [a#2        =    Count]
                          ###[/DEF]###
                          
                          
                          ###[HELP]###
                          Mit diesem LBS kann man die PHP-Funktion preg_replace auf Zeichenketten anwenden.
                          Als Ausgabe bekommt man an A1 den String mit den Ersetzungen.
                          
                          Die Funktion preg_match ist hier genau beschrieben:
                          http://php.net/manual/de/function.preg-replace.php
                          
                          
                          E1: String (mit den zu ersetzenden Werten) Bsp: "Montag, 8. Januar"  (ohne ")
                          E2:    regulärer Ausdruck (Syntax wie für preg_replace)  Bsp: "/Montag/i" (ohne ")
                          E3: Ersetzungsausdruck Bsp: "Dienstag" (ohne ")
                          E4: Limit: gibt an, wie oft er Ausdruck ersetzt wird. (-1 bedeutet unendlich oft)
                          
                          A1: E1 mit ersetzten Strings
                          A2: Count: Ausgabe, wie obt der String ersetzt wurde.
                          
                          Version:
                          v0.1 initiale Version, noch nicht veröffentlicht.
                          
                          ###[/HELP]###
                          
                          
                          ###[LBS]###
                          <?
                          function LB_LBSID($id) {
                              if ($E=logic_getInputs($id)) {
                          
                                  if ($E[1]['value']!='' && $E[1]['refresh']==1 ||
                                      $E[2]['value']!='' && $E[2]['refresh']==1 ||
                                      $E[3]['value']!='' && $E[1]['refresh']==3
                                  ) {
                                      $limit=-1;
                                      $count=-1;
                                      $limit= $E[4]['value'];
                                      $ergebnis = preg_replace($E[2]['value'], $E[3]['value'], $E[1]['value'], $limit ,$count);
                          
                                      logic_setOutput($id,1,$ergebnis);
                                      logic_setOutput($id,2,$count);
                                  }
                              }
                          }
                          ?>
                          ###[/LBS]###
                          
                          
                          ###[EXEC]###
                          <?
                          ?>
                          ###[/EXEC]###

                          Kommentar


                            #14
                            givemeone Danke, hat Super geklappt!

                            Jetzt kann Edomi bei einem Netzausfall auch sicher herunterfahren!!!

                            Kommentar


                              #15
                              Schön ;-)
                              Ich habe den LBS unter
                              https://service.knx-user-forum.de/?c...ad&id=19001720
                              freigegeben, damit nicht zu viele unterschiedliche Versionsstände davon "herumschwirren"...

                              Kommentar

                              Lädt...
                              X