Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Beispiel alle ioBroker Prozesse / Speicherverbrauch

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Beispiel alle ioBroker Prozesse / Speicherverbrauch

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

      @looxer01:

      Hi Ruhr,

      super - vielen Dank

      wenn ich das richtig sehe, dann verwendest du das Widget "json table"

      Das habe ich auch versucht, allerdings schaffe ich es nicht die Spaltenbreiten zu definieren.

      Ergebnis ist, dass die ersten Spalten zu schmal sind und die letzten zu breit. Width scheint nicht mit Px-Angaben zu funktionieren.

      Wie hast du die Einstellungen vorgenommen ?

      vG Looxer `

      Doch, ich habe einfach die Pixel unter Width eingetragen (unter Headers[0], Headers[1], …).

      Du kannst auch einstellen, wieviele und welche Spalten angezeigt werden

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

        Neue Version des Skripts:

        • zusätzliche Parameter im JSON (CPU-Last, Speicher Prozentual)

        Zusätzliche Datenpunkte werden angelegt:

        • Datenpunkt: Anzahl Prozesse ist hinzugekommen

        • Datenpunkt: Speicherverbrauch ioBroker physikalisch absolut

        • Datenpunkt: Speicherverbrauch ioBroker in Prozent vom Gesamtsystem

        • Datenpunkt: CPU Last ioBroker vom Gesamtsystem

        Das neue Skript:

        ! ```
        `var pfad = "Systeminfos.ioBroker.Prozesse" + "."; // Pfad in dem die Datenpunkte angelegt werden
        ! // Datenpunktnamen:
        var idProzesse = pfad + 'ioBroker_Prozesse';
        var idMemAll = pfad + 'ioBroker_Speicher_gesamt';
        var idAnzProzesse = pfad + 'ioBroker_Anzahl_Prozesse';
        var idCpuAll = pfad + 'ioBroker_CPU_Gesamt';
        var idMemPercent = pfad + 'ioBroker_Speicher_prozentual';
        ! // regelmässige Wiederholungen der Abfrage
        var cronStr = "*/10 * * * ";
        ! var abfrage = 'ps -A aux --sort -pmem | grep " [i]o.
        "';
        ! createState(idProzesse, "", {
        name: 'ioBroker laufende Prozesse Objekt',
        desc: 'ioBroker laufende Prozesse Objekt, Speicherverbrauch',
        type: 'string',
        unit: '',
        role: 'object'
        });
        ! createState(idMemAll, 0, {
        name: 'ioBroker Speicherverbrauch gesamt',
        desc: 'ioBroker Speicherverbrauch gesamt (RSS)',
        type: 'number',
        unit: 'MB',
        role: 'value'
        });
        ! createState(idAnzProzesse, 0, {
        name: 'ioBroker Anzahl Prozesse',
        desc: 'ioBroker Anzahl aktiver Prozesse',
        type: 'number',
        unit: '',
        role: 'value'
        });
        ! createState(idCpuAll, 0.0, {
        name: 'ioBroker CPU-Last gesamt',
        desc: 'ioBroker CPU-Last gesamt',
        type: 'number',
        unit: '%',
        role: 'value'
        });
        ! createState(idMemPercent, 0.0, {
        name: 'Speicherverbrauch prozentual',
        desc: 'Speicherverbrauch prozentual',
        type: 'number',
        unit: '%',
        role: 'value'
        });
        ! function writeJson(json) {
        return JSON.stringify(json); // JSON in String umwandeln, damit das JSON in einem Datenpunkt geschrieben werden kann
        }
        ! function getMemAbsolut (json) {
        var anzProzesse = (json.length);
        var mem = 0;
        for (var i = 0; i < anzProzesse; i++) {
        mem = mem + json[i].rss;
        }
        return mem;
        }

        function getCpu (json) {
        var anzProzesse = (json.length);
        var cpu = 0.0;
        for (var i = 0; i < anzProzesse; i++) {
        cpu = cpu + json[i].cpu;
        }
        return cpu;
        }

        ! function getMem (json) {
        var anzProzesse = (json.length);
        var mem = 0.0;
        for (var i = 0; i < anzProzesse; i++) {
        mem = mem + json[i].mem;
        }
        return mem;
        }
        ! function createArrayJson (arr) {
        var jsonArr = [];
        var anzDP = 11; // Anzahl Datenreihen in der Abfrage
        var anzProzesse = (arr.length-1)/anzDP;
        ! for (var i = 0; i < anzProzesse; i++) {
        jsonArr.push({
        command: arr[10 + ianzDP], // ioBroker Prozess (COMMAND = Kommando, mit dem der Prozess gestartet wurde)
        pid: arr[ 1 + i
        anzDP], // Prozess ID
        cpu: parseFloat(arr[ 2 + ianzDP]), // aktueller CPU-Last in %
        mem: parseFloat(arr[ 3 + i
        anzDP]), // aktueller Verbrauch physikalischer Speicher %
        vmem: parseInt(arr[ 4 + ianzDP]), //
        rss: parseInt(arr[ 5 + i
        anzDP]), // physikalische Speichernutzung
        start: arr[ 8 + ianzDP], // Startzeitpunkt des Prozesses
        time: arr[ 9 + i
        anzDP] // bisher verbrauchte CPU Zeit
        });
        }
        return jsonArr;
        }
        ! function abfrageConsole() {
        exec(abfrage, function(err, stdout, stderr) {
        if (err) {
        log(err,"error");
        return;
        }
        stdout = stdout.replace(/\n+/g, " "); // neue Zeile gegen Leerzeichen ersetzen
        stdout = stdout.split(/ +/g); // array erstellen, Lerzeichen als Trenner

            var anzProzesse = (stdout.length-1) / 11;
        
            //log(stdout);
            //log("Anzahl laufender ioBroker Prozesse: " + anzProzesse);
        
            var jsonArr = createArrayJson(stdout);
            var mem         = Math.floor(getMemAbsolut(jsonArr)/1024);
            var cpu         = Math.floor(getCpu(jsonArr)*10)/10;
            var memPercent  = Math.floor(getMem(jsonArr)*10)/10;
        

        ! setState(idProzesse ,writeJson(jsonArr));
        setState(idMemAll ,mem);
        setState(idAnzProzesse ,anzProzesse);
        setState(idCpuAll ,cpu);
        setState(idMemPercent ,memPercent);
        });
        }
        ! function abfragen() {
        abfrageConsole();
        }
        ! // regelmässige Wiederholungen
        // -----------------------------------------------------------------------------
        schedule(cronStr, abfragen);
        ! // main
        // -----------------------------------------------------------------------------
        function main() {
        abfragen();
        }
        ! // Start Skript:
        // -----------------------------------------------------------------------------
        ! setTimeout(main, 500);`
        ! 327_iobroker_prozesse.png [/i][/i][/i][/i]

        1 Reply Last reply Reply Quote 0
        • L
          looxer01 last edited by

          jap - hab ich genau so gemacht.

          sieht dann so aus:

          305_table.jpg

          die 10 sind nur Testeinstellungen. Hier würde ich eben 6 10Px Spalten erwarten

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

            @looxer01:

            jap - hab ich genau so gemacht.

            sieht dann so aus: `

            Ich habe 100px unter Width eingetragen.

            Keine Ahnung, was VIS nimmt, wenn Du px weglässt. Wahrscheinlich Prozent und dann kommst Du über 100%

            1 Reply Last reply Reply Quote 0
            • L
              looxer01 last edited by

              alles klar - hab die px vergessen - joah - so gehts - danke dir

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

                Bei mir sieht es so aus:
                144_prozesse_002.jpg

                Habe aber nicht viel gemacht.

                Skript kopiert, gestartet.

                in vis json-Tabelle eingefügt und Datenpunkt verknüpft.

                Gruß

                Rainer

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

                  Trag mal "200px" ein. dann geht es

                  Gruß

                  Jürgen

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

                    327_system_bersicht.png

                    Ich hab das bisher so in meine Systemübersicht eingebaut.

                    Links sieht man die neuen Datenpunkte umrahmt.

                    Die Prozessliste öffnet sich als Dialog.

                    1 Reply Last reply Reply Quote 0
                    • T
                      thomassch last edited by

                      @ruhr70:

                      filename="Systemübersicht.png" index="0">~~

                      Ich hab das bisher so in meine Systemübersicht eingebaut.

                      Links sieht man die neuen Datenpunkte umrahmt.

                      Die Prozessliste öffnet sich als Dialog. `

                      Wie hast du die ESX Leistung ermittelt?

                      Nur mit hm Strommessung oder mit Script Abfrage des Nucs (insofern das überhaupt geht)

                      Gruß

                      Thomassch

                      Gesendet von iPhone mit Tapatalk

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

                        @thomassch:

                        Nur mit hm Strommessung oder mit Script Abfrage des Nucs (insofern das überhaupt geht) `

                        Zwischen USV und ESXi hängt ein Homematic Leistungsmesser.

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

                          (Wie) Muss ich das json table widget konfigurieren.

                          Ich habe nichts gemacht, lediglich den Datenpunkt angegeben.

                          (oder ist das widget bsic-table vielleicht das falsche)

                          Unter Objects wird folgendes angegzeigt:
                          144_prozesse_003.jpg
                          In der Tabell erscheinen jedoch die Prozessnamen nicht.

                          Gruß

                          Rainer

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

                            @Homoran:

                            (Wie) Muss ich das json table widget konfigurieren.

                            Ich habe nichts gemacht, lediglich den Datenpunkt angegeben.

                            (oder ist das widget bsic-table vielleicht das falsche)

                            Unter Objects wird folgendes angegzeigt:

                            In der Tabell erscheinen jedoch die Prozessnamen nicht.

                            Gruß

                            Rainer `

                            Hi Rainer,

                            das Widget ist: basic - table (JSON table)

                            Das Beispiel-Widget mit 3 Spalten (Datenpunkt-ID anpassen) zum Import:

                            ! ````
                            [{"tpl":"tplTableBody","data":{"visibility-cond":"==","visibility-val":1,"static_value":"[{"Title": "first", "Value": 1, "_Description": "Value1"}, {"Title": "second", "Value": 2, "_Description": "Value2"}]","gestures-offsetX":0,"gestures-offsetY":0,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"table_oid":"javascript.1.Systeminfos.ioBroker.Prozesse.ioBroker_Prozesse","colCount":"3","colWidth1":"200px","colWidth2":"100px","detailed_wid":"","max_rows":"10","colAttr2":"rss","colName2":"Speicher(kB)","colAttr3":"mem","colName3":"Speicher(%)","colWidth3":"100px","colName1":"ioBroker Prozess","colAttr1":"command"},"style":{"left":"120px","top":"170px","width":"500px","height":"270px"},"widgetSet":"basic"}]

                            
                             ![327_json_table.jpg](/assets/uploads/files/327_json_table.jpg) 
                            
                            1.) entweder der JSON-Attribut Name (wenn das Feld leer bleibt) oder ein frei vergebener Name, wie im Beispiel
                            
                            2.) Das JSON-Attribut (Spalte) gezielt ausgewählt. Sonst geht es nach der Reihenfolge
                            
                            3.) Breite, z.B. in Pixel (px)
                            
                            Im aktuellen Skript sind die möglichen Attribute:
                            
                            
                                    command:    arr[10 + i*anzDP],              // ioBroker Prozess (COMMAND = Kommando, mit dem der Prozess gestartet wurde)
                                    pid:        arr[ 1 + i*anzDP],              // Prozess ID
                                    cpu:        parseFloat(arr[ 2 + i*anzDP]),  // aktueller CPU-Last in %
                                    mem:        parseFloat(arr[ 3 + i*anzDP]),  // aktueller Verbrauch physikalischer Speicher %
                                    vmem:       parseInt(arr[ 4 + i*anzDP]),    // 
                                    rss:        parseInt(arr[ 5 + i*anzDP]),    // physikalische Speichernutzung
                                    start:      arr[ 8 + i*anzDP],              // Startzeitpunkt des Prozesses
                                    time:       arr[ 9 + i*anzDP]               // bisher verbrauchte CPU Zeit
                            
                            
                            Mit der JSON-Tabelle kann man ganz schnell Tabellen herstellen. Wenn alle Attribute eines JSONs gewünscht sind, dann muss man gar nichts einstellen, ggf. nur die einzelnen Breiten anpassen. Ansonsten kann man ncoh gezielt aussuchen, was man anzeigen lassen will. In dem Beispiel-Widget hier sind es drei Attribute, die gezielt angegeben werden.
                            
                            Das Beispiel-Widget wurde auf die ersten 10 Prozesse begrenzt (das JSON ist von größten zum niedrigsten physikalischen Speicherverbrauch sortiert). Bei mir sind 37 Prozesse aktiv.
                            
                            Gruß
                            
                            Michael
                            1 Reply Last reply Reply Quote 0
                            • Homoran
                              Homoran Global Moderator Administrators last edited by

                              Danke,

                              muss ich mich mal ranmachen.

                              Synchronosieren sich dann die Header und Spaltenbreiten wieder?

                              Habe übrigens die Prozessnamen gefunden.

                              Sie sind unsichtbar 😉 Bei doppelklick auf ein Feld sieht man sie ???

                              PS ist das beispielwidget das, was unter der ID bereits eingefügt ist ("wenn keine ID")?

                              Gruß

                              Rainer

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

                                @Homoran:

                                Synchronosieren sich dann die Header und Spaltenbreiten wieder? `

                                Bei mir sind die Breiten im Header und bei den Daten darunter immer gleich.

                                Keine Ahnung, wie Du das hinbekommen hast 😉

                                @Homoran:

                                Habe übrigens die Prozessnamen gefunden.

                                Sie sind unsichtbar 😉 Bei doppelklick auf ein Feld sieht man sie ??? `

                                Liegt wahrscheinlich dran, dass keine Breite zur Verfügung steht.

                                Spiel mal ein bisschen mit dem Werten.

                                @Homoran:

                                PS ist das beispielwidget das, was unter der ID bereits eingefügt ist ("wenn keine ID")? `

                                Hier verstehe ich nicht, was Du meinst.

                                Das Beispiel-Widget ist das aus dem Post oben, mit den drei Spalten.

                                Dort ist die ID: javascript.1.Systeminfos.ioBroker.Prozesse.ioBroker_Prozesse angegeben.

                                Wenn Du eine andere Instanz nutzt, den Pfad oder den Datenpunktnamen im Skript angepasst hast, dann musst Du Deine ID mit dem JSON Objekt dort auswählen.

                                Oder was meintest Du?

                                Gruß

                                Michael

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

                                  Bin anscheinend doch nicht so doof, wie ich befürchtet hatte.

                                  Es klappt einfach nicht!

                                  Der Header der ersten Spalte erscheint nicht, der Inhalt ist unsichtbar, dadurch auch die Verschiebung.
                                  144_prozesse_004.jpg

                                  und bei doppelklick in die erste Spalte sieht man auch den Text:
                                  144_prozesse_005.jpg

                                  Wenn ich jetzt das zweite Feld so formatiere, wie ich das erste hätte haben wollen, erscheint tatsächlich die Spaltenbeschriftung und der Inhalt.

                                  Allerdings erster Header und zweite Spalte.

                                  Hat es damit zu tun, dass da Headers[0], aber Name [1] steht?

                                  Gruß

                                  Rainer

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

                                    Lösch das alte Widget doch bitte mal.

                                    Dann würde ich zum testen einmal das Beispiel-Widget importieren und dann es noch einmal an ein leeres Widget wagen.

                                    Das mit dem Header [0], Name [1] ist mir auch aufgefallen. Ich denke, dass ist nur ein Bezeichnungsfehler im Widget.

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

                                      P.S.:

                                      ggf. liegt es auch noch an einer Deinen CSS Einstellungen?

                                      Normalerweise hat das Widget andere Farben. Im Standard so, wie in meinen Screenshots.

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

                                        @ruhr70:

                                        ggf. liegt es auch noch an einer Deiner CSS Einstellungen? `
                                        Treffer!

                                        Das sind die Einstellungen für den TV-Spielfilm Adapter von pix.

                                        Jetzt muss ich emich auch noch in CSS reinarbeiten, wie ich das beim Fernsehprogramm hinbekomme MIT diesen Einstellungen und bei allen anderen ohne.

                                        Tippe mal auf "global/projekt"

                                        Danke

                                        Rainer

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

                                          FYI.

                                          Ich bin an ähnlicher Funktionalität dran.
                                          48_2016-05-27_21_39_04-iobroker.admin.png

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

                                            @Bluefox:

                                            FYI.

                                            Ich bin an ähnlicher Funktionalität dran. `

                                            cool!

                                            Warum sind die Werte dort so bescheiden?

                                            Nimmst Du nicht RSS? Oder gibt es Optimierungen 😉

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            944
                                            Online

                                            31.9k
                                            Users

                                            80.2k
                                            Topics

                                            1.3m
                                            Posts

                                            14
                                            60
                                            6728
                                            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