Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. [geloest] Parser - Systemdatei auswerten

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    17
    1
    455

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    5.1k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.4k

[geloest] Parser - Systemdatei auswerten

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
12 Beiträge 2 Kommentatoren 876 Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • HomoranH Nicht stören
    HomoranH Nicht stören
    Homoran
    Global Moderator Administrators
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen,

    ich versuche es schon wieder ;-)

    ich möchte meine Systeminformationen weiter ausbauen um Hardwareplattformen besser vergleichen zu können.

    Nach Wikipedia zeigt die System Load average zwar, dass das System ausgelastet ist:
    ~~@[url=https://de.wikipedia.org/wiki/Load#Der_Load_Average_auf_Unix-Systemen:~~

    ~~Wikipedia"]~~Der Load Average (frei übersetzt durchschnittliche Systemlast) ist per Definition die (durchschnittliche) Länge der Run Queue der CPU sowie die Anzahl der Prozesse, die auf dieser laufen oder auf IO warten (Status D). Je nach System variiert die Zusammensetzung, genauso wie die üblichen Werte. Generell jedoch gilt: Je niedriger der Load-Wert, desto unbelasteter ist ein System, d. h. es stehen mehr Ressourcen zur Verfügung. Die untere Grenze beträgt Null. Ein Load Average von 0 sagt zum Beispiel aus, dass sämtliche Betriebsmittel zur Verfügung stehen und das System die Aufgaben eines Benutzers mit maximaler Geschwindigkeit bearbeiten kann.

    Eine obere Grenze für den Load-Wert gibt es nicht. Das System wird jedoch (je nach Anzahl der CPUs und anderer Betriebsmittel z. B. RAM, I/O) mit steigender Systemlast immer schlechter benutzbar, weil alle Ressourcen permanent in Benutzung sind. `
    Gibt jedoch nicht an, woran das genau liegt.

    Seit ich mit den ersten Tinkerboards bei identischen Installationen extrem niedrige System Load hatte, vermutete ich, dass es eben nicht an der CPU sondern wohl eher an den I/O Vorgängen liegt, dass das System bei anderen Einplatinenrechnern ausgelastet ist. Insbesondere scheint dies bei meinem Cubietruck, der mit einer HDD als Master einer Multihost-Umgebung arbeitet der Fall zu sein.

    Also wollte ich jetzt endlich mal daran gehen die tatsächliche CPU-Belastung auszuwerten. (Wenn die niedrig ist bestätigt sich der Verdacht mit den I/O Vorgängen, die beim Tinkerboard aufgrund der Speicherarchitektur wahrscheinlich deutlich leistungsfähiger ist)

    Wiederum Gemäß Wikipedia
    ~~@[url=https://de.wikipedia.org/wiki/Load#Prozentuale_Auslastungswerte_bei_Linux:~~

    ~~Wikipedia"]~~Um in Linux einen prozentualen Auslastungswert zu erhalten, muss die Datei /proc/stat aus dem Proc-Dateisystem ausgelesen werden. Sie enthält in den cpu-Zeilen Werte für User, Nice, System und Idle-Zeiten seit Systemstart. Diese bedeuten:

    …

    Die CPU-Auslastung entspricht dem invertierten prozentualen Anteil, den Idle in der Gesamtkalkulation einnimmt. Ein Beispiel für die Datei /proc/stat:

    cpu 35421 0 4092 158570 3325 408 6 0

    cpu0 35421 0 4092 158570 3325 408 6 0

    ...

    Relevant sind jeweils die ersten vier Zahlen, die für User, Nice, System und Idle stehen. Zusammengerechnet geben sie im Beispiel 198'083, wovon der Idle-Wert 158'570 ausmacht, was etwa 80 % des Gesamtwerts entspricht. Die effektive CPU-Auslastung seit Systemstart liegt also bei gerade 20 %. Um eine prozentuale CPU-Auslastung über einen bestimmten Zeitraum zu erhalten, muss die Veränderung dieser Werte über diesen Zeitraum durch zweimaliges Auslesen der Datei ermittelt werden. `

    Jetzt wollte ich diese Werte mit dem Parser Adapter auswerten, da dieser auch Dateien auswerten können soll.

    Mein erster Versuch sieht wie folgt aus:
    144_parser_cpu_last_user.jpg

    Die Ausgabe von cat proc/stat ergibt:

    cpu  1103136 0 193253 20711802 55007 0 29357 0 0 0
    cpu0 314504 0 81619 5083851 18207 0 10904 0 0 0
    cpu1 243059 0 37300 5225373 14759 0 4952 0 0 0
    cpu2 279078 0 37981 5195837 8558 0 6997 0 0 0
    cpu3 266495 0 36353 5206741 13483 0 6504 0 0 0
    intr 19550797 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6553652 0 0 0 0 0 0 0 0 0 0 203 0 3948639 2013753 0 0 0 3 0 0 4133 0 0 0 0 0 353019 10910 84 0 908259 54 0 0 0 0 0 0 151956 0 559878 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
    ctxt 22755049
    btime 1498938433
    processes 48478
    procs_running 1
    procs_blocked 0
    softirq 19796186 10473 4102700 11138 5346541 0 0 5399548 2670915 0 2254871
    
    

    Das RegEx auf der Seite https://regex101.com liest damit das folgende Ergebnis aus:

    Match 1
    Full match	0-12	`cpu  1103136`
    Group 1.	n/a	`1103136`
    
    

    Und da verlassen mich meine "Kenntnisse"

    Wer kann mir einen Tritt in die richtige Richtung geben, bitte.

    Gruß

    Rainer

    kein Support per PN! - Fragen im Forum stellen -
    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
    Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton im Header. Danke!
    der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

    1 Antwort Letzte Antwort
    0
    • paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2

      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.

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Antwort Letzte Antwort
      0
      • HomoranH Nicht stören
        HomoranH Nicht stören
        Homoran
        Global Moderator Administrators
        schrieb am zuletzt editiert von
        #3

        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

        kein Support per PN! - Fragen im Forum stellen -
        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
        Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton im Header. Danke!
        der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

        1 Antwort Letzte Antwort
        0
        • HomoranH Nicht stören
          HomoranH Nicht stören
          Homoran
          Global Moderator Administrators
          schrieb am zuletzt editiert von
          #4

          @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

          kein Support per PN! - Fragen im Forum stellen -
          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
          Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton im Header. Danke!
          der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

          1 Antwort Letzte Antwort
          0
          • paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von
            #5

            @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 :!:

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            1 Antwort Letzte Antwort
            0
            • HomoranH Nicht stören
              HomoranH Nicht stören
              Homoran
              Global Moderator Administrators
              schrieb am zuletzt editiert von
              #6

              @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

              kein Support per PN! - Fragen im Forum stellen -
              Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
              Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton im Header. Danke!
              der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

              1 Antwort Letzte Antwort
              0
              • HomoranH Nicht stören
                HomoranH Nicht stören
                Homoran
                Global Moderator Administrators
                schrieb am zuletzt editiert von
                #7

                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

                kein Support per PN! - Fragen im Forum stellen -
                Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton im Header. Danke!
                der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                1 Antwort Letzte Antwort
                0
                • HomoranH Nicht stören
                  HomoranH Nicht stören
                  Homoran
                  Global Moderator Administrators
                  schrieb am zuletzt editiert von
                  #8

                  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

                  kein Support per PN! - Fragen im Forum stellen -
                  Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                  Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton im Header. Danke!
                  der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                  1 Antwort Letzte Antwort
                  0
                  • paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von
                    #9

                    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.

                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                    1 Antwort Letzte Antwort
                    0
                    • HomoranH Nicht stören
                      HomoranH Nicht stören
                      Homoran
                      Global Moderator Administrators
                      schrieb am zuletzt editiert von
                      #10

                      @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

                      kein Support per PN! - Fragen im Forum stellen -
                      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                      Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton im Header. Danke!
                      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                      1 Antwort Letzte Antwort
                      0
                      • paul53P Offline
                        paul53P Offline
                        paul53
                        schrieb am zuletzt editiert von
                        #11

                        @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

                        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                        1 Antwort Letzte Antwort
                        0
                        • paul53P Offline
                          paul53P Offline
                          paul53
                          schrieb am zuletzt editiert von
                          #12

                          @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.

                          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                          1 Antwort Letzte Antwort
                          0
                          Antworten
                          • In einem neuen Thema antworten
                          Anmelden zum Antworten
                          • Älteste zuerst
                          • Neuste zuerst
                          • Meiste Stimmen


                          Support us

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

                          612

                          Online

                          32.7k

                          Benutzer

                          82.5k

                          Themen

                          1.3m

                          Beiträge
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                          ioBroker Community 2014-2025
                          logo
                          • Anmelden

                          • Du hast noch kein Konto? Registrieren

                          • Anmelden oder registrieren, um zu suchen
                          • Erster Beitrag
                            Letzter Beitrag
                          0
                          • Home
                          • Aktuell
                          • Tags
                          • Ungelesen 0
                          • Kategorien
                          • Unreplied
                          • Beliebt
                          • GitHub
                          • Docu
                          • Hilfe