Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. [Vorstellung] Meine zweite Visualisierung

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Vorstellung] Meine zweite Visualisierung

    This topic has been deleted. Only users with topic management privileges can see it.
    • K
      Kuddel @Negalein last edited by

      @Negalein habe gerade beide Datein neu heruntergeladen.

      1. Import ohne Icons: Funzt
      2. Neues Archiv mit VIS und Icons erstell und importiert: Funzt auch
      Negalein 1 Reply Last reply Reply Quote 0
      • Negalein
        Negalein Global Moderator @Kuddel last edited by

        @Kuddel sagte in [Vorstellung] Meine zweite Visualisierung:

        @Negalein habe gerade beide Datein neu heruntergeladen.

        1. Import ohne Icons: Funzt
        2. Neues Archiv mit VIS und Icons erstell und importiert: Funzt auch

        dürfte beim Download was schief gegangen sein.
        Jetzt hat es geklappt.

        1 Reply Last reply Reply Quote 0
        • Nashra
          Nashra Most Active Forum Testing last edited by

          Hallo @Kuddel
          zu Ram in Prozent finde ich leider keinen Datenpunkt im Info-Adapter.
          Wie hast Du das gemacht?

          K 1 Reply Last reply Reply Quote 0
          • K
            Kuddel @Nashra last edited by

            @Nashra das habe ich eben per Blocky aus den Daten vom Info Adapter errechnet. Man benötigt ja nur gesamt RAM und aktuell verwendeten

            Nashra 1 Reply Last reply Reply Quote 0
            • Nashra
              Nashra Most Active Forum Testing @Kuddel last edited by

              @Kuddel sagte in [Vorstellung] Meine zweite Visualisierung:

              @Nashra das habe ich eben per Blocky aus den Daten vom Info Adapter errechnet. Man benötigt ja nur gesamt RAM und aktuell verwendeten

              Achduje, in Blockly mal reingesehen aber keinen Plan wie sowas geht 🤔
              Wärst Du so nett... 😀

              crunchip K 2 Replies Last reply Reply Quote 0
              • crunchip
                crunchip Forum Testing Most Active @Nashra last edited by

                @Nashra vllt hilft dir sowas

                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';
                var idInstanzenEinmal   = pfad + 'ioBroker_Instanzen_einmal_aktiv';
                
                
                // regelmässige Wiederholungen der Abfrage
                var cronStr         = "*/2 * * * *";
                
                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'
                });
                
                createState(idInstanzenEinmal, true, {
                     name: 'keine Instanzen doppelt aktiv',
                     desc: 'jeder aktive ioBroker Prozess ist nur einmal aktiv',
                     type: 'boolean',
                     unit: '',
                     role: 'value'
                });
                
                
                
                // -----------------------------------------------------------------------------
                
                
                function doppelteProzesse(arr) {
                    var mehrfacheProzesse = [];
                    var anzProzesse = (arr.length);
                    var anzProzessAktiv = 0;
                    for (var i = 0; i < anzProzesse; i++) {
                        if (mehrfacheProzesse.indexOf(arr[i].command) == -1) {
                            anzProzessAktiv = zaehleProzesse(arr,arr[i].command);
                            if (anzProzessAktiv > 1) {
                                log("Prozess: " + arr[i].command+", mehrfach aktiv: " + anzProzessAktiv +" mal","warn");
                                mehrfacheProzesse.push(arr[i].command);
                                mehrfacheProzesse.push(anzProzessAktiv);
                            }
                        }
                    }    
                    return mehrfacheProzesse;
                }
                
                function zaehleProzesse(arr,command) {
                    var count = 0;
                    var anzProzesse = (arr.length);
                    for (var i = 0; i < anzProzesse; i++) {
                        if(arr[i].command === command) {
                            count++;
                        }
                    }    
                    return count;
                }
                
                
                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 + 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
                        });
                    }
                    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, Leerzeichen 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;
                
                        var doppeltArr = doppelteProzesse(jsonArr);
                        
                        if(doppeltArr.length === 0) {
                            setState(idInstanzenEinmal,true);
                        } else {
                            setState(idInstanzenEinmal,false);
                        }
                
                        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);
                
                
                Nashra 1 Reply Last reply Reply Quote 0
                • Nashra
                  Nashra Most Active Forum Testing @crunchip last edited by

                  @crunchip sagte in [Vorstellung] Meine zweite Visualisierung:

                  @Nashra vllt hilft dir sowas

                  Klasse, läuft, ich Danke dir 👍

                  1 Reply Last reply Reply Quote 0
                  • K
                    Kuddel @Nashra last edited by

                    @Nashra in Blocky sieht es dann so aus:

                    48dc24e3-cbb6-41c9-bb58-447e2b8aa392-grafik.png

                    Nashra M 2 Replies Last reply Reply Quote 2
                    • Nashra
                      Nashra Most Active Forum Testing @Kuddel last edited by

                      @Kuddel sagte in [Vorstellung] Meine zweite Visualisierung:

                      @Nashra in Blocky sieht es dann so aus:

                      48dc24e3-cbb6-41c9-bb58-447e2b8aa392-grafik.png

                      👍

                      1 Reply Last reply Reply Quote 0
                      • M
                        markus-now @Kuddel last edited by

                        @Kuddel
                        Hallo Kuddel,
                        Erst auch mal von mir ein Dankeschön für so eine geniale Arbeit und das du, dass Projekt zur Verfügung gestellt hast.
                        Ich arbeite mich gerade durch das Briefkasten Skript und versuche zu verstehen, warum du mit post 0 falsch beginnt.
                        kannst du mir da den ablauf etwas schildern arbeite noch nicht so lange mit ioBroker aber versuche intensiv zu lernen da kommt natürlisch so ein super projekt genau richtig.
                        Kannst du mir da den Ablauf etwas schildern arbeite noch nicht so lange mit ioBroker aber versuche intensiv zu lernen da kommt natürlich so ein super Projekt genau richtig.

                        K 1 Reply Last reply Reply Quote 0
                        • K
                          Kuddel @markus-now last edited by

                          @markus-now in meinem Briefkasten sitz ein Homematic Fensterkontakt, der auslöst, wenn der Postbote den Deckel vom Breifkasten öffnet.

                          Dann wird das Datenobjekt "Post" auf wahr geschaltet (wahr = post eingeworfen).

                          Ebenso bekomme ich direkt eine Mail, dass die Post da ist.

                          Das Ganze ist in meinen Augen total simpel.

                          K M 2 Replies Last reply Reply Quote 0
                          • A
                            Alero @Kuddel last edited by Alero

                            @Kuddel
                            Hallo Kuddel,
                            erste einmal Daumen hoch für die mega geile Arbeit.
                            ich möchte hier noch einmal einhaken (waschmaschine).
                            Dein Projekt habe ich importiert und habe mir aus der View Haushalt die Icons geschnappt. Wenn ich das jetzt richtig verstanden habe, soll ich zusätzlich noch ein Script unter Javascript.0 was anlegen. Was muss in dem Script drin stehen?
                            Sorry aber ich bin erst seit kurzem mit IObroker dran.
                            Gruß
                            Alero

                            K 1 Reply Last reply Reply Quote 0
                            • K
                              Kuddel @Alero last edited by

                              @Alero damit der ioBroker den Status der Waschmaschine erkennt, benötigst du zunächst eine Steckdose, die den aktuellen Verbrauch der Waschmaschine an den ioBroker übergibt.

                              Anhand des Verbrauchs kannst du du dann per Skript einen Status definieren: an, fertig, aus

                              Hier ein Biespiel für den Status "Aus"

                              31f0abe4-d84b-452b-aa06-c8d74ef0c26f-grafik.png

                              SD_Waschmaschine ist der Name der Steckdose
                              SD_Waschmaschine-Messwert.Power ist der aktuelle Verbauch
                              waschmaschine ist das Datenobjekt mit dem aktuellen Status

                              A 1 Reply Last reply Reply Quote 0
                              • K
                                Kaiman55 @Kuddel last edited by

                                @Kuddel sagte in [Vorstellung] Meine zweite Visualisierung:

                                @markus-now in meinem Briefkasten sitz ein Homematic Fensterkontakt, der auslöst, wenn der Postbote den Deckel vom Breifkasten öffnet.

                                Dann wird das Datenobjekt "Post" auf wahr geschaltet (wahr = post eingeworfen).

                                Ebenso bekomme ich direkt eine Mail, dass die Post da ist.

                                Das Ganze ist in meinen Augen total simpel.

                                Das ganze funktioniert auch gut mit den Xiaomi Kontakten.
                                Ich habe das kleine Gegenstück (den Magnet) noch aus dem Gehäuse genommen.
                                Dann in meiner Klappe vom Briefkasten eine kleine Nut gefräst und den Magneten dort eingelassen und mit 2k Kleber montiert.
                                Hält bombenfest und kostet nicht viel.

                                1 Reply Last reply Reply Quote 0
                                • M
                                  markus-now @Kuddel last edited by markus-now

                                  @Kuddel
                                  Danke ich schaue mir das heute Abend, wenn ich nach Hause komme nochmal an. 👍
                                  Ich war ein bisschen irritiert, weil du am Anfang den, falls mit wert falsch getriggert hast.
                                  (wenn ich mich richtig erinnere sitze gerate nicht vor ioBroker bin Arbeiten)

                                  1 Reply Last reply Reply Quote 0
                                  • A
                                    Alero @Kuddel last edited by

                                    @Kuddel
                                    Hi Kuddel,

                                    Jo die Steckdose mit Messwetrterfassung habe ich. HMIP-PSM
                                    Dein Script habe ich auch importiert und meine Steckdose eingefügt. Was ich nicht verstehe ist das mit dem Javascript.0 wo du wohl sagst Waschmaschine an = 1 usw.

                                    Gru0ß
                                    Alero

                                    K 1 Reply Last reply Reply Quote 0
                                    • K
                                      Kuddel @Alero last edited by

                                      @Alero was genau verstehst du daran nicht ?

                                      Den Datenpunkt verwende ich ja in meiner VIS:

                                      Waschmaschine = 0 -> Kein Rahmen
                                      Waschmaschine = 1 -> Rahmen Gelb + Icon blinken
                                      Waschmaschine = 2 -> Rahmen Grün + Icon blinken

                                      A 1 Reply Last reply Reply Quote 0
                                      • A
                                        Alero @Kuddel last edited by Alero

                                        @Kuddel
                                        Hi,

                                        ich meinen in deinem Blockly Script das:
                                        javascript.0.haushalt.waschmaschine.
                                        Hier handelt es sich doch um ein javascript,oder bin ich da auf dem Holzweg?
                                        Steh hier auf dem Schlauch. 😞
                                        Gruß
                                        Alero

                                        K 1 Reply Last reply Reply Quote 0
                                        • K
                                          Kuddel @Alero last edited by Kuddel

                                          @Alero nein das ist ein Datenobjekt:

                                          0b2da2d9-5652-4ece-90f1-d299b530f560-grafik.png

                                          Habe es gestern von haushalt.waschmaschine auf waschmaschine umbenannt. daher passt der Screenshot nicht mehr so ganz ^^

                                          A 1 Reply Last reply Reply Quote 0
                                          • SWE1008
                                            SWE1008 last edited by

                                            Hallo Kuddel,

                                            könntest du mir verraten wie du es hinbekommst dass bei den Dialogen (z. B. Regenradar) der Rahmen schwarz ist?
                                            Ich finde keine Einstellung um das Design bzw. die Farbe des Rahmen zu ändern.

                                            Gruß
                                            Simon

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            507
                                            Online

                                            31.7k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

                                            template vis
                                            148
                                            1324
                                            443608
                                            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