Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. [geloest] Parser - Systemdatei auswerten

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    [geloest] Parser - Systemdatei auswerten

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

      Das würde ich nicht mit dem Parser machen, sondern in Javascript die Datei mit https://github.com/ioBroker/ioBroker.javascript#readfile einlesen und anschließend mit .split('\n') in ein Array wandeln.

      var lines = text.split('\n');  // einzelne Zeilen der Datei (text) separieren
      var cpu = lines[0].split(' ');  // einzelne Werte separieren
      var cpuUser = parseFloat(cpu[1]);
      var cpuNice = parseFloat(cpu[2]);
      ...
      var cpu0 = lines[1].split(' ');
      ...
      

      Mit diesen Werten kann dann gerechnet werden.

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

        Ich habe den Fehler:

        Typ musste einfach "number" sein. Jetzt läuft es - ich bekomme meine Daten, die muss ich jetzt noch aufarbeiten.

        Gruß

        Rainer

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

          @paul53:

          Das würde ich nicht mit dem Parser machen, sondern in Javascript die Datei mit readFile() einlesen und anschließend mit .split('\n') in ein Array wandeln. `

          Danke Paul,

          ich hatte von dir genau so etwas erwartet 😉

          Als js-Legastheniker wollte ich jedoch für mich (und später in der Doku auch für andere) Wege finden, wie man so etwas auch ohne js hinbekommt.

          Die Berechnung der echten CPU-Belastung (alle 4 Werte addieren und dne relativen Anteil von idle berechnen und von 100 subtrahieren) wäre für dich wahrscheinlich auch ein Klacks.

          Ich muss mal sehen, wie ich da mit Blockly mache.

          Ich liebe diese Herausforderungen! (Wenn es lösbar ist 😉 )

          Gruß

          Rainer

          1 Reply Last reply Reply Quote 0
          • paul53
            paul53 last edited by

            @Homoran:

            Ich muss mal sehen, wie ich da mit Blockly mache.

            Ich liebe diese Herausforderungen! (Wenn es lösbar ist 😉 ) `
            Wolltest Du nicht JS lernen ? Das hier ist doch wunderbar zum Üben geeignet 🙂

            Viel Erfolg :!:

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

              @paul53:

              Wolltest Du nicht JS lernen ? `
              Hau nur immer in die gleiche Kerbe 😉

              Oder wolltest du hören:

              Ja, ich will!

              Aber ich bin doch sooo träge. Und sooo viele Baustellen.

              Lesen kann ich es ja schon fast, aber sprechen noch nicht.

              Danke für den A..tritt!

              Gruß

              Rainer

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

                Habe das Blockly fast hinbekommen, aber ich finde da keine Klammerung:

                on({id: 'parser.0.CPU_Last_Idle', change: "ne"}, function (obj) {
                  var value = obj.state.val;
                  var oldValue = obj.oldState.val;
                  setState("Eigene_Datenpunkte.Rechenwerte.HardwareDaten.Master.CPU_Last.CPU_Belastung"/*CPU_Belastung*/, ((1 - getState("parser.0.CPU_Last_Idle").val / (getState("parser.0.CPU_Last_User").val + getState("parser.0.CPU_Last_Nice").val + getState("parser.0.CPU_Last_System").val + getState("parser.0.CPU_Last_Idle").val)) * 100), true);
                });
                
                

                Der aktuell errechnete Wert ist 6.124594881719913 % Auslastung, was hoffentlich richtig ist.

                Zusatzinfo, die System Load average 5 Min ist 0,25 (bei 4 Kernen entspräche das in etwa 6,25%)

                Gruß

                Rainer

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

                  So letzter Eintrag von mir hier (wahrscheinlich 😉 )

                  Die Auswertung passt zu meinem Verdacht:

                  Cubietruck:
                  144_cpu_auslastung_cubie.jpg
                  Obwohl die CPU nur zu gut 30% ausgelastet ist, ist die gesamte System load über dem "zulässigen" Wert von 2 (bei einem Dualcore Prozessor). Hier scheinen also die I/O Vorgänge das ganze System zu blockieren.

                  Tinkerboard
                  144_cpu_auslastung_tinker.jpg
                  Die CPU Auslastung liegt bei gut 6%, die System Load bei 0,45 (von 4) also etwa 11%

                  Das Tinkerboard hat die beste mir bekannte Speicherhardware bei Einplatinencomputern.

                  Gruß

                  Rainer

                  1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 last edited by

                    Die CPU-Last meines RPi 2 lasse ich mir nun auch in einem Datenpunkt anzeigen. So sieht das Skript dazu aus:

                    // CPU-Last aus Datei /proc/stat ermitteln
                    
                    var fs = require('fs');
                    var idLast = getIdByName('Service.CPU-Last');
                    var fn = '/proc/stat';
                    
                    var cpuUser = 0;
                    var cpuNice = 0;
                    var cpuSystem = 0;
                    var cpuIdle = 0;
                    
                    function cpuLast(text) {
                        var lines = text.split('\n');
                        var cpu = lines[0].split(' '); 
                        var cUser = parseFloat(cpu[2]) - cpuUser;
                        var cNice = parseFloat(cpu[3]) - cpuNice;
                        var cSystem = parseFloat(cpu[4]) - cpuSystem;
                        var cIdle = parseFloat(cpu[5])- cpuIdle;
                        var last = 100 * (1 - cIdle / (cUser + cNice + cSystem + cIdle));
                        setState(idLast, runden(last, 1), true);
                        cpuUser = parseFloat(cpu[2]);
                        cpuNice = parseFloat(cpu[3]);
                        cpuSystem = parseFloat(cpu[4]);
                        cpuIdle = parseFloat(cpu[5]);
                    }
                    
                    function getStat() {
                        fs.readFile(fn, 'utf8',  function(err, text) {
                            if(err) log('Fehler beim Lesen von /proc/stat', 'error');
                            else cpuLast(text);
                        });
                    }
                    
                    schedule('*/10 * * * * *', getStat);
                    
                    

                    Die CPU-Last schwankt zwischen 0,5 und 11,5 % (Durchschnitt 1,5 %). Die Werte in der Datei /proc/stat sind kumulative Werte.

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

                      @paul53:

                      Die Werte in der Datei /proc/stat sind kumulative Werte. `
                      und zwar sehr kumuliert! Weisst du über welchen Zeitraum? (rot)

                      Jetzt habe ich zusätzlich mal die Werte, die im Header von top erscheinen abgegriffen, nach dem Skript von ruhr70

                      ! ````
                      var pfad = "Systeminfos.host" + ".";
                      var cronStr = "*/1 * * * *";
                      ! var abfrage = "top -d 1 -b -n2 | grep 'CPU(s)'|tail -n 1 | awk '{print $2 + $3 + $4}'";
                      ! var idCPUlast = pfad + 'CPU_Last';
                      ! createState(idCPUlast, 0, {
                      name: 'CPU Last',
                      desc: 'CPU Last',
                      type: 'number',
                      unit: '%',
                      role: 'value'
                      });

                      ! function abfrageCPU() {
                      exec(abfrage, function(err, stdout, stderr) {
                      if (err) {
                      log(err,"error");
                      return;
                      }
                      //log(stdout);
                      setStateDelayed(idCPUlast,parseInt(stdout),100);
                      });
                      }
                      ! function abfragen() {
                      abfrageCPU();
                      }
                      ! // regelmässige Wiederholungen
                      // -----------------------------------------------------------------------------
                      schedule(cronStr, abfragen);
                      ! // main
                      // -----------------------------------------------------------------------------
                      function main() {
                      abfragen();
                      }
                      ! // Start Skript:
                      // -----------------------------------------------------------------------------
                      ! setTimeout(main, 500);
                      ! ````
                      http://forum.iobroker.net/viewtopic.php … =20#p56796 (grün)

                      Zusätzlich der load average 1min (blau):
                      144_lastvergleich.jpg

                      Die Werte von /proc/stat sind sehr statisch, ändern sich ab der zweiten Nachkommastelle.

                      Gruß

                      Rainer

                      1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 last edited by

                        @Homoran:

                        und zwar sehr kumuliert! Weisst du über welchen Zeitraum? `
                        Nein, leider nicht.
                        @Homoran:

                        Die Werte von /proc/stat sind sehr statisch, ändern sich ab der zweiten Nachkommastelle. `
                        Deshalb verwende ich in meinem Skript die Differenzen zu den vorhergehenden Werten (10 s älter).
                        493_cpu-last.jpg

                        1 Reply Last reply Reply Quote 0
                        • paul53
                          paul53 last edited by

                          @Homoran:

                          Jetzt habe ich zusätzlich mal die Werte, die im Header von top erscheinen abgegriffen, `
                          Das sind aber sehr zufällige Werte, da die Ausgabe von top viel öfter aktualisiert wird als jede Minute.

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate
                          FAQ Cloud / IOT
                          HowTo: Node.js-Update
                          HowTo: Backup/Restore
                          Downloads
                          BLOG

                          579
                          Online

                          32.0k
                          Users

                          80.5k
                          Topics

                          1.3m
                          Posts

                          2
                          12
                          856
                          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