Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. gibt es mittlerweile ein regex für ein result?

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    gibt es mittlerweile ein regex für ein result?

    This topic has been deleted. Only users with topic management privileges can see it.
    • Homoran
      Homoran Global Moderator Administrators last edited by

      Ich hab mal wieder versucht Daten auszulesen.

      Screenshot_20240420-205918_Firefox.jpg

      Ich komme so zwar auf Ergebnisse, aber da scheinen Tabulatoren oder mehrere Leerzeichen zwischen den Werten im result vorzukommen.
      Am liebsten wäre mir mit einem RegEx wie gezeigt die Werte zu extrahieren.

      gibt es diese Möglichkeit mittlerweile und ich hab sie nur noch nicht gefunden?

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

        @homoran Dann stell halt mal die Quelle oder was Du willst hier in CodeTags ein oder speichere Deinen String in der regex Seite ab.
        Dann solltest noch sagen, was Du für Daten Du haben willst.

        Homoran 1 Reply Last reply Reply Quote 0
        • Homoran
          Homoran Global Moderator Administrators @mickym last edited by Homoran

          @mickym sagte in gibt es mittlerweile ein regex für ein result?:

          Dann stell halt mal die Quelle oder was Du willst hier in CodeTags ein

          gerne

          Filesystem      Size  Used Avail Use% Mounted on
          udev            3.8G     0  3.8G   0% /dev
          tmpfs           806M  5.3M  800M   1% /run
          /dev/mmcblk0p2  235G   59G  164G  27% /
          tmpfs           4.0G     0  4.0G   0% /dev/shm
          tmpfs           5.0M   48K  5.0M   1% /run/lock
          /dev/mmcblk0p1  510M   63M  448M  13% /boot/firmware
          /dev/sda1       137G  2.6G  127G   3% /media/usbplatte
          tmpfs           806M     0  806M   0% /run/user/1000
          

          und daraus die Werte für die sda1

          jetzt komm mir nicht mit JSONATA 😁

          EDIT:
          Alternativ mit dem result

          Filesystem     1M-blocks  Used Available Use% Mounted on
          udev                3859     0      3859   0% /dev
          tmpfs                806     6       800   1% /run
          /dev/mmcblk0p2    239742 59801    167751  27% /
          tmpfs               4027     0      4027   0% /dev/shm
          tmpfs                  5     1         5   1% /run/lock
          /dev/mmcblk0p1       510    63       448  13% /boot/firmware
          /dev/sda1         139752  2662    129920   3% /media/usbplatte
          tmpfs                806     0       806   0% /run/user/1000
          
          1 Reply Last reply Reply Quote 0
          • Ro75
            Ro75 @Homoran last edited by

            @homoran habe mir was mit JS gebaut, das genau alle Daten holt. So mache ich es für Speicher und HDD Daten.

            Ro75.

            Homoran bahnuhr 2 Replies Last reply Reply Quote 0
            • Homoran
              Homoran Global Moderator Administrators @Ro75 last edited by

              @ro75 sagte in gibt es mittlerweile ein regex für ein result?:

              habe mir was mit JS gebaut

              wenn ich js könnte, hätte ich das auch gemacht 😢
              Ich hab schon zu viele js-scripte, die ich nur marginal modifizieren kann.

              Wenn jetzt z.b. require durch axios ersetzt werden muss bin ich aufgeschmissen.
              Will deshalb bei Blocly bleiben.

              @haus-automatisierung hat gerade so viel neues für Blockly gebastelt, da hatte ich gehofft dass auch ein regex Baustein für Texte dabei gewesen wäre

              bahnuhr Ro75 2 Replies Last reply Reply Quote 0
              • bahnuhr
                bahnuhr Forum Testing Most Active @Homoran last edited by

                @homoran
                schau es dir mal an:

                // Gesamt Speicher auslesen von Proxmox: PVE und speichern des Wertes
                
                function GB_pve_holen() {
                   const { Client } = require('ssh2');
                    const conn = new Client();
                    conn.on('ready', () => {
                        //log('Client :: ready');
                            conn.exec('free -m', function(err, stream) {
                                if (err) throw err;
                                stream.on('close', function(code, signal) {
                                    conn.end();
                                }).on('data', function(data) {
                                    //log('Ausgabe: ' + data);
                                    var wert = data.toString(); var arr2 = wert.split("Mem: "); arr2 = arr2[1].split(" "); 
                                    var avai = arr2[50]; avai = parseInt(avai.replace(/Swap:/g, ''));
                                    //for (x=1; x<arr2.length; x++) { log ("x= " + x + " ; " + arr2[x]); }
                                    var gesamt = Number(arr2[10]);
                                    var used = Number(arr2[17]);
                                    if (gesamt > 0) { setState("javascript.0.System.Proxmox.PVE_Ram_gesamt", gesamt); log('Proxmox.PVE: ' + gesamt + " MB Ram gesamt (ohne Swap)"); }
                                    if (used > 0) { setState("javascript.0.System.Proxmox.PVE_Ram_used", used); log('Proxmox.PVE: ' + used + " MB Ram used (ohne Swap)"); }
                                    if (avai > 0) { setState("javascript.0.System.Proxmox.PVE_Ram_available", avai); log('Proxmox.PVE: ' + avai + " MB Ram available (ohne Swap)"); }
                                }).stderr.on('data', function(data) {
                                    log('Fehler: ' + data);
                                });
                            });
                    }).connect({
                        host: '192.168.243.9',
                        port: 22,
                        username: 'root',
                        password: 'xxx'
                    });
                }
                
                
                schedule('*/5 * * * *', function () {
                    GB_pve_holen();
                }); 
                
                

                Musste du nur anpassen.
                Müsste eigentlich funktionieren.

                1 Reply Last reply Reply Quote 0
                • bahnuhr
                  bahnuhr Forum Testing Most Active @Ro75 last edited by

                  @ro75 sagte in gibt es mittlerweile ein regex für ein result?:

                  habe mir was mit JS gebaut,

                  stell doch mal hier ein.

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

                    Ich versuche es nur noch intelligenter zu machen - bissi Geduld und natürlich wäre JSONATA noch besser mit regEx. Deswegen gibts einmal mit JSONATA einmal versuche ich es ohne.

                    So bekommst Du erst mal alles in 4 Gruppen:

                    (?<=sda1)\s+(\d+.?\d*[G,M.L]?)\s+(\d+.?\d*[G,M.L]?)\s+(\d+.?\d*[G,M.L]?)\s+(\d+.?\d*[G,M.L]?)
                    
                    1 Reply Last reply Reply Quote 0
                    • Ro75
                      Ro75 @Homoran last edited by Ro75

                      @homoran

                      ich teile meinen JS-Code trotzdem mal. Vielleicht ja doch zu gebrauchen. Die Funktionen "SPlitter" und "Formatierer" bereiten nur die Daten auf.

                      Unten sind 3 Beispiele für die Daten. Bei mir hier einfach mal den RAM, SDA und SWAP. Über free und df bekommst du ja die Daten. Anstatt der festen Daten setzt du deine Datenpunkte halt ein, zeitlich oder via Trigger gesteuert.

                      function SPlitter(Datablock,StringReplaced='') {
                          var text = Datablock;
                          text = text.replace(StringReplaced,'');
                          text = text.split(' ');
                          text = Formatierer(text);
                          return text;
                      }
                      
                      function Formatierer(sValue) {
                          var text='';
                          for(let i = 0; i < sValue.length; i++) {
                              if (sValue[i] != '') {
                                  if (text=='') {
                                      text=sValue[i];
                                  } else {
                                      text=text+','+sValue[i];
                                  }
                              }
                          }
                          return text;
                      }
                      
                      //Aufruf
                          var Ergebnis=SPlitter('Auslager:    4194300      319232     3875068','Auslager: ');
                          Ergebnis = Ergebnis.split(',');
                          log(Ergebnis[0]);
                          log(Ergebnis[1]);
                      //...
                      
                          var Ergebnis=SPlitter('Speicher:   16147708     8393912      316456       54536     7437340     7356696','Speicher: ');
                          Ergebnis = Ergebnis.split(',');
                          log(Ergebnis[0]);
                          log(Ergebnis[1]);
                      //...
                      
                          var Ergebnis=SPlitter('/dev/sda2      490048472 96476256 368605612   21% /','/dev/sda2');
                          Ergebnis = Ergebnis.split(',');
                          log(Ergebnis[0]);
                          log(Ergebnis[1]);
                      //...
                      
                      

                      Die Daten kommen über den Linux-Control - Adapter.
                      6d168c9d-4169-4d8d-94b7-e43bc398ce74-image.png

                      Ro75.

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

                        Auch wenn Du kein JSONATA magst - ist es einfach genial:

                        187379de-5392-47b0-8833-136b9a911f7b-image.png

                        hier mal zum Import - aber ich schau - ob man mit der regEx in Blockly irgendwie was ähnliches erreicht:

                        <xml xmlns="https://developers.google.com/blockly/xml">
                         <variables>
                           <variable id="Zz(+DtU$uPpEY:Mgo{C~">input</variable>
                         </variables>
                         <block type="variables_set" id="ini!G1eo#^TYc^So12?E" x="-1387" y="-912">
                           <field name="VAR" id="Zz(+DtU$uPpEY:Mgo{C~">input</field>
                           <value name="VALUE">
                             <block type="text" id="U=D)$(9e{=xF0.,r6h]/">
                               <field name="TEXT">Filesystem      Size  Used Avail Use% Mounted on udev            3.8G     0  3.8G   0% /dev tmpfs           806M  5.3M  800M   1% /run /dev/mmcblk0p2  235G   59G  164G  27% / tmpfs           4.0G     0  4.0G   0% /dev/shm tmpfs           5.0M   48K  5.0M   1% /run/lock /dev/mmcblk0p1  510M   63M  448M  13% /boot/firmware /dev/sda1       137G  2.6G  127G   3% /media/usbplatte tmpfs           806M     0  806M   0% /run/user/1000</field>
                             </block>
                           </value>
                           <next>
                             <block type="debug" id="=K,M79lA:8R~~FIurW[M">
                               <field name="Severity">log</field>
                               <value name="TEXT">
                                 <shadow type="text" id="j-k)$a*m.0f!(:xP=yLm">
                                   <field name="TEXT">test</field>
                                 </shadow>
                                 <block type="convert_jsonata" id="kjJ`h~PiU-|MpYYqQCD1">
                                   <value name="EXPRESSION">
                                     <shadow type="text" id="*}~f`^]R^as-R%G):BK1">
                                       <field name="TEXT">$match($, /(?&lt;=sda1)\s+(\d+.?\d*[G,M.L]?)\s+(\d+.?\d*[G,M.L]?)\s+(\d+.?\d*[G,M.L]?)\s+(\d+.?\d*[G,M.L]?)/).groups</field>
                                     </shadow>
                                   </value>
                                   <value name="TARGET">
                                     <block type="variables_get" id="A~y`32qC+VgOkyrn(XQm">
                                       <field name="VAR" id="Zz(+DtU$uPpEY:Mgo{C~">input</field>
                                     </block>
                                   </value>
                                 </block>
                               </value>
                             </block>
                           </next>
                         </block>
                        </xml>
                        

                        Wobei ich diesen RegEx Block im Blockly nicht verstehe - da ich denke der ist nur zur Selektion von Objekten gedacht

                        Homoran mickym 2 Replies Last reply Reply Quote 0
                        • Homoran
                          Homoran Global Moderator Administrators @mickym last edited by

                          @mickym sagte in gibt es mittlerweile ein regex für ein result?:

                          Auch wenn Du kein JSONATA magst - ist es einfach genial:

                          ich mag es, weil es so genal ist, aber ich komm damit einfach nicht klar.
                          hab eben lange auf try.jsonata.org probiert. ohne erfolg

                          @mickym sagte in gibt es mittlerweile ein regex für ein result?:

                          Wobei ich diesen RegEx Block im Blockly nicht verstehe - da ich denke der ist nur zur Selektion von Objekten gedacht

                          das ist es ja!
                          deswegen suche ich einen RegEx Block für das parsen von Texten.

                          ich probier mal dein jsonata, danke

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

                            Wenn Du die Einheiten nicht haben willst - dann hier noch mal ohne Einheiten:

                            6d2e954b-bb46-4b82-84b3-f1d662e89a1c-image.png

                            <xml xmlns="https://developers.google.com/blockly/xml">
                             <variables>
                               <variable id="Zz(+DtU$uPpEY:Mgo{C~">input</variable>
                             </variables>
                             <block type="variables_set" id="ini!G1eo#^TYc^So12?E" x="-1387" y="-912">
                               <field name="VAR" id="Zz(+DtU$uPpEY:Mgo{C~">input</field>
                               <value name="VALUE">
                                 <block type="text" id="U=D)$(9e{=xF0.,r6h]/">
                                   <field name="TEXT">Filesystem      Size  Used Avail Use% Mounted on udev            3.8G     0  3.8G   0% /dev tmpfs           806M  5.3M  800M   1% /run /dev/mmcblk0p2  235G   59G  164G  27% / tmpfs           4.0G     0  4.0G   0% /dev/shm tmpfs           5.0M   48K  5.0M   1% /run/lock /dev/mmcblk0p1  510M   63M  448M  13% /boot/firmware /dev/sda1       137G  2.6G  127G   3% /media/usbplatte tmpfs           806M     0  806M   0% /run/user/1000</field>
                                 </block>
                               </value>
                               <next>
                                 <block type="debug" id="=K,M79lA:8R~~FIurW[M">
                                   <field name="Severity">log</field>
                                   <value name="TEXT">
                                     <shadow type="text" id="j-k)$a*m.0f!(:xP=yLm">
                                       <field name="TEXT">test</field>
                                     </shadow>
                                     <block type="convert_jsonata" id="kjJ`h~PiU-|MpYYqQCD1">
                                       <value name="EXPRESSION">
                                         <shadow type="text" id="*}~f`^]R^as-R%G):BK1">
                                           <field name="TEXT">$match($, /(?&lt;=sda1)\s+(\d+.?\d+[G,M.L]?)\s+(\d+.?\d*[G,M.L]?)\s+(\d+.?\d*[G,M.L]?)\s+(\d+.?\d*[G,M.L]?)/).groups</field>
                                         </shadow>
                                       </value>
                                       <value name="TARGET">
                                         <block type="variables_get" id="A~y`32qC+VgOkyrn(XQm">
                                           <field name="VAR" id="Zz(+DtU$uPpEY:Mgo{C~">input</field>
                                         </block>
                                       </value>
                                     </block>
                                   </value>
                                   <next>
                                     <block type="debug" id="-pR}owC3MW^~3q+2Na=C">
                                       <field name="Severity">log</field>
                                       <value name="TEXT">
                                         <shadow type="text" id="Ev6*;zv+MdFZQI@3heE{">
                                           <field name="TEXT">test</field>
                                         </shadow>
                                         <block type="convert_jsonata" id="M]yE!bPAM1V[?5u-@ej8">
                                           <value name="EXPRESSION">
                                             <shadow type="text" id="O+:Kdaa6%T4r`e*;qZs?">
                                               <field name="TEXT">$match($, /(?&lt;=sda1)\s+(\d+.?\d+)[G,M.L]?\s+(\d+.?\d+)[G,M.L]?\s+(\d+.?\d+)[G,M.L]?\s+(\d+)%/).groups</field>
                                             </shadow>
                                           </value>
                                           <value name="TARGET">
                                             <block type="variables_get" id="D_nhs]fCwsHlbh4|l}F5">
                                               <field name="VAR" id="Zz(+DtU$uPpEY:Mgo{C~">input</field>
                                             </block>
                                           </value>
                                         </block>
                                       </value>
                                     </block>
                                   </next>
                                 </block>
                               </next>
                             </block>
                            </xml>
                            

                            Der JSONATA Editor hat Problemen mit Text mit Zeilenvorschub. Wenn Du nur die Zeile nimmst kannst Du den Code ausprobieren.

                            Hier zum Ausprobieren: https://try.jsonata.org/y8wLpDzC9

                            Ohne Einheiten:

                            $match($, /(?<=sda1)\s+(\d+.?\d+)[G,M.L]?\s+(\d+.?\d+)[G,M.L]?\s+(\d+.?\d+)[G,M.L]?\s+(\d+)%/).groups
                            

                            Mit Einheiten:

                            $match($, /(?<=sda1)\s+(\d+.?\d+)[G,M.L]?\s+(\d+.?\d+)[G,M.L]?\s+(\d+.?\d+)[G,M.L]?\s+(\d+)%/).groups
                            

                            Die regulären Ausdrücke kannst Du hier testen: https://regex101.com/r/OBgEsJ/1

                            Was ich nicht rausgefunden habe, ob man die Gruppen automatisch vervielfältigen kann. Das geht wahrscheinlich, aber da muss jemand mit mehr Kenntnissen zu Hilfe kommen.

                            Homoran 1 Reply Last reply Reply Quote 0
                            • Homoran
                              Homoran Global Moderator Administrators @mickym last edited by

                              @mickym Danke, hab schon gespielt

                              Screenshot_20240420-230709_Firefox.jpg

                              wird korrekt zerlegt.

                              muss noch Datenpunkte anlegen und reinschreiben.
                              mach ich morgen.

                              Danke, nochmals

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

                                @homoran Es kommt automatisch ein Liste raus, so dass Du auf die Elemente direkt zugreifen kannst.

                                Homoran 1 Reply Last reply Reply Quote 0
                                • Homoran
                                  Homoran Global Moderator Administrators @mickym last edited by

                                  @mickym sagte in gibt es mittlerweile ein regex für ein result?:

                                  @homoran Es kommt automatisch ein Liste raus, so dass Du auf die Elemente direkt zugreifen kannst.

                                  so ist es!
                                  das hab ich mir mit dem ersten debug als erstes angesehen was da raus komnt

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

                                    @homoran sagte in gibt es mittlerweile ein regex für ein result?:

                                    @mickym sagte in gibt es mittlerweile ein regex für ein result?:

                                    @homoran Es kommt automatisch ein Liste raus, so dass Du auf die Elemente direkt zugreifen kannst.

                                    so ist es!
                                    das hab ich mir mit dem ersten debug als erstes angesehen was da raus komnt

                                    429b022e-f211-4f17-b54c-af29c56cbba2-image.png

                                    Du kannst das JSONATA Ergebnis aber anscheinend nicht direkt nutzen, sondern musst es erst einer Variablen zuweisen, um auf die Elemente zuzugreifen.

                                    Homoran 1 Reply Last reply Reply Quote 0
                                    • Homoran
                                      Homoran Global Moderator Administrators @mickym last edited by

                                      @mickym sagte in gibt es mittlerweile ein regex für ein result?:

                                      Du kannst das JSONATA Ergebnis aber anscheinend nicht direkt nutzen, sondern musst es erst einer Variablen zuweisen, um auf die Elemente zuzugreifen.

                                      ja, das hatte ich auch erst ohne Variable versucht.
                                      Aber Variable macht den Rest dann kompakter

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

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      401
                                      Online

                                      32.0k
                                      Users

                                      80.4k
                                      Topics

                                      1.3m
                                      Posts

                                      4
                                      17
                                      466
                                      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