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.
    • eric2905
      eric2905 last edited by

      Klasse!

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

        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

        1 Reply Last reply Reply Quote 0
        • 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
                                            • 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