Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Praktische Anwendungen (Showcase)
  4. Material Design Widgets: Adapter Status

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Material Design Widgets: Adapter Status

Scheduled Pinned Locked Moved Praktische Anwendungen (Showcase)
material design widgetsvisiconlistviewview adapteradapterstatusanzeige
144 Posts 48 Posters 35.5k Views 60 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • B Do not disturb
    B Do not disturb
    bommel_030
    wrote on last edited by
    #9

    @Scrounger
    Ich hab nochmal ne Verständnisfrage zur Farbgestaltung. Bewusst grelle Farben gewählt ;-)
    farbe.png
    Grün und Pink stelle ich über das Widget ein, klappt einwandfrei. Den ursprünglich grauen Text habe ich im Skript weiß gefärbt.
    Kann oder soll der nicht über den Farbwert im Widget (hier #000000) eingestellt werden? Den Punkt ignoriert er bei mir komplett.

    ScroungerS 1 Reply Last reply
    0
    • B bommel_030

      @Scrounger
      Ich hab nochmal ne Verständnisfrage zur Farbgestaltung. Bewusst grelle Farben gewählt ;-)
      farbe.png
      Grün und Pink stelle ich über das Widget ein, klappt einwandfrei. Den ursprünglich grauen Text habe ich im Skript weiß gefärbt.
      Kann oder soll der nicht über den Farbwert im Widget (hier #000000) eingestellt werden? Den Punkt ignoriert er bei mir komplett.

      ScroungerS Offline
      ScroungerS Offline
      Scrounger
      Developer
      wrote on last edited by
      #10

      @bommel_030
      Nein das ist die Schriftfarbe für den Wert des Datenpunktes. Der wird hier gar nicht angezeigt.
      Die Farbe für die zweite Spalte kann nur über das Skript geändert werden.

      B Uwe ClementU 2 Replies Last reply
      0
      • ScroungerS Scrounger

        @bommel_030
        Nein das ist die Schriftfarbe für den Wert des Datenpunktes. Der wird hier gar nicht angezeigt.
        Die Farbe für die zweite Spalte kann nur über das Skript geändert werden.

        B Do not disturb
        B Do not disturb
        bommel_030
        wrote on last edited by
        #11

        @Scrounger
        Alles klar, danke. Dann brauch ich nicht weiter suchen und ändere den im Skript.
        Kann es nciht oft genug sagen, danke für die super Vorlagen....

        1 Reply Last reply
        0
        • P Offline
          P Offline
          PatrickFro
          wrote on last edited by
          #12

          Das Widget gefällt mir sehr gut, danke.

          Wie kann ich die markierte Textfarbe ändern? 4babc71d-4147-4975-89e2-051961220c9a-image.png

          Ich bin jede Textfarbe durchgegangen und habe nichts gefunden.

          sigi234S Homer.J.H 2 Replies Last reply
          0
          • P PatrickFro

            Das Widget gefällt mir sehr gut, danke.

            Wie kann ich die markierte Textfarbe ändern? 4babc71d-4147-4975-89e2-051961220c9a-image.png

            Ich bin jede Textfarbe durchgegangen und habe nichts gefunden.

            sigi234S Online
            sigi234S Online
            sigi234
            Forum Testing Most Active
            wrote on last edited by
            #13

            @PatrickFro

            Im Skript

            Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
            Immer Daten sichern!

            1 Reply Last reply
            0
            • P PatrickFro

              Das Widget gefällt mir sehr gut, danke.

              Wie kann ich die markierte Textfarbe ändern? 4babc71d-4147-4975-89e2-051961220c9a-image.png

              Ich bin jede Textfarbe durchgegangen und habe nichts gefunden.

              Homer.J.H Offline
              Homer.J.H Offline
              Homer.J.
              wrote on last edited by
              #14

              @PatrickFro nur im Script steht gleich 2 über deinem Post.

              1 Reply Last reply
              0
              • ScroungerS Offline
                ScroungerS Offline
                Scrounger
                Developer
                wrote on last edited by
                #15

                @Stephan-Schleich sagte in Test Adapter Material Design Widgets v0.2.x:

                @Scrounger Kannst du die Werte Schriftfarbe (MB, %, minuten etc) noch global setzbar machen? Du hast sie fix im Script hinterlegt. - siehe Glasfaser screen derzeit ist grau fix drin

                Bitte zukünftig darauf achten die Fragen im richtigen Thema posten!

                Hoffe das kann hier vielleicht jemand übernehmen, alles dazu kann man dem skript entnehmen.

                Stephan SchleichS 1 Reply Last reply
                0
                • ScroungerS Scrounger

                  @Stephan-Schleich sagte in Test Adapter Material Design Widgets v0.2.x:

                  @Scrounger Kannst du die Werte Schriftfarbe (MB, %, minuten etc) noch global setzbar machen? Du hast sie fix im Script hinterlegt. - siehe Glasfaser screen derzeit ist grau fix drin

                  Bitte zukünftig darauf achten die Fragen im richtigen Thema posten!

                  Hoffe das kann hier vielleicht jemand übernehmen, alles dazu kann man dem skript entnehmen.

                  Stephan SchleichS Offline
                  Stephan SchleichS Offline
                  Stephan Schleich
                  wrote on last edited by
                  #16

                  @Scrounger Ich meinte eig das es im Script angepassen werden könnte :)

                  Für alle die es selber machen wollen:

                  Setzt folgendes bei den Variablen oben und ersetzt alle Werte mit "grey" durch "farbeAdapterWerte"
                  let farbeAdapterWerte = '#000000';

                  ScroungerS 1 Reply Last reply
                  0
                  • Stephan SchleichS Stephan Schleich

                    @Scrounger Ich meinte eig das es im Script angepassen werden könnte :)

                    Für alle die es selber machen wollen:

                    Setzt folgendes bei den Variablen oben und ersetzt alle Werte mit "grey" durch "farbeAdapterWerte"
                    let farbeAdapterWerte = '#000000';

                    ScroungerS Offline
                    ScroungerS Offline
                    Scrounger
                    Developer
                    wrote on last edited by
                    #17

                    @Stephan-Schleich
                    Hab ich schon verstanden ;-)
                    Ich meinte das das sicher auch jemand anderes machen kann.
                    Und wenn du weißt wie das geht, dann Pass doch das skript an, poste es für die anderen und ich übernehme es dann in den ersten Post.

                    B 1 Reply Last reply
                    0
                    • ScroungerS Scrounger

                      @Stephan-Schleich
                      Hab ich schon verstanden ;-)
                      Ich meinte das das sicher auch jemand anderes machen kann.
                      Und wenn du weißt wie das geht, dann Pass doch das skript an, poste es für die anderen und ich übernehme es dann in den ersten Post.

                      B Do not disturb
                      B Do not disturb
                      bommel_030
                      wrote on last edited by bommel_030
                      #18

                      @Scrounger
                      Ich habs mal umgesetzt....
                      Variable farbeAdapterWerte hinzu und die grey-Definition durch die Variable ersetzt.

                      // Imports -> müssen im Javascript Adapter unter 'Zusätzliche NPM-Module' eingetragen sein
                      const moment = require("moment");
                      const momentDurationFormatSetup = require("moment-duration-format");
                      
                      
                      // Skript Einstellungen *************************************************************************************************************************************************
                      
                      let dpList = '0_userdata.0.vis.AdapterStatus.jsonList';                     // Datenpunkt für IconList Widget (Typ: Zeichenkette (String))
                      let dpAdapterRestart = '0_userdata.0.vis.AdapterStatus.restartTrigger';     // Datenpunkt für Adapter restart (Typ: Zeichenkette (String))
                      
                      let dpSortMode = '0_userdata.0.vis.AdapterStatus.sortMode';                 // Datenpunkt für Sortieren (Typ: Zeichenkette (String))
                      let dpFilterMode = '0_userdata.0.vis.AdapterStatus.filterMode';             // Datenpunkt für Filter (Typ: Zeichenkette (String))
                      
                      let adminUpdatesList = 'admin.0.info.updatesList';                          // Datenpunkt Admin Adapter für verfübare Updates der Adapter
                      
                      const checkInterval = 30;                                                   // Interval wie oft Status der Adapter aktualisiert werden soll (in Sekunden)
                      
                      let sprache = 'de';                                                         // Sprache für formatierung Dauer 
                      let formatierungDauer = "dd[T] hh[h] mm[m]";                                // Formatierung der Dauer -> siehe momentjs library
                      
                      let neustarten = true;                                                      // true: Adapter wird neugestartet, false: Adapter wird gestoppt oder gestartet
                      
                      let farbeAdapterAktiv = 'green';                                            // Status Bar Farbe wenn Adapter aktiv ist
                      let farbeAdapterNichtAktiv = 'FireBrick';                                   // Status Bar Farbe wenn Adapter nicht aktiv ist oder Fehler vorliegt
                      let farbeAdapterDeaktiviert = 'darkgrey';                                   // Status Bar Farbe wenn Adapter deaktiviert ist
                      let farbeAdapterNichtVerbunden = 'yellow';                                  // Status Bar Farbe wenn Adapter nicht verbunden ist
                      let farbeAdapterZeitgesteuert = 'lightgreen';                               // Status Bar Farbe wenn Adapter zeitgesteuert ist
                      let farbeAdapterErweiterung = '#44739e';                                    // Status Bar Farbe wenn Adapter Erweiterung ist
                      let farbeAdapterSystem = '#44739e';                                         // Status Bar Farbe wenn Adapter mit System gestartet wird
                      let farbeAdapterWerte = '#000000';                                       // Sekundärfarbe Adapterwerte, einer muss auskommentiert sein !
                      // let farbeAdapterWerte = getState('0_userdata.0.VIS.Farben.SecColor').val;   // Sekundärfarbe aus Datenpunkt, einer muss auskommentiert sein !
                      
                      let sortResetAfter = 120;                                                   // Sortierung nach X Sekunden auf sortReset zurücksetzen (0=deaktiviert)
                      let sortReset = 'name'                                               // Sortierung auf die zurückgesetzt werden soll
                      
                      let filterResetAfter = 120;                                                 // Filter nach X Sekunden zurücksetzen (0=deaktiviert)
                      
                      // **********************************************************************************************************************************************************************
                      
                      
                      // Fomate für moment Lib
                      moment.locale(sprache);
                      
                      // auf .alive Änderungen hören
                      let aliveSelector = `[id=system.adapter.*.alive]`;
                      let adapterAliveList = $(aliveSelector);
                      if (adapterAliveList.length === 0) {
                         // Fehlermeldung ausgeben, wenn selector kein result liefert
                         console.error(`no result for selector '${aliveSelector}'`)
                      } else {
                         // listener nur für Änderung bei alive
                         adapterAliveList.on(adapterStatus);
                      }
                      
                      // auf .connection Änderungen hören
                      let connectionSelector = `[id=*.info.connection]`;
                      let adapterConnectionList = $(connectionSelector);
                      if (adapterConnectionList.length === 0) {
                         // Fehlermeldung ausgeben, wenn selector kein result liefert
                         console.error(`no result for selector '${connectionSelector}'`)
                      } else {
                         // listener nur für Änderung bei alive
                         adapterConnectionList.on(adapterStatus);
                      }
                      
                      // auf .connected Änderungen hören
                      let connectedSelector = `[id=system.adapter.*.connected]`;
                      let adapterConnectedList = $(connectedSelector);
                      if (adapterConnectedList.length === 0) {
                         // Fehlermeldung ausgeben, wenn selector kein result liefert
                         console.error(`no result for selector '${connectedSelector}'`)
                      } else {
                         // listener nur für Änderung bei alive
                         adapterConnectedList.on(adapterStatus);
                      }
                      
                      // auf Änderungen der Sortieung hören
                      on({ id: dpSortMode, change: 'any' }, adapterStatus);
                      on({ id: dpSortMode, change: 'any' }, resetSort);
                      
                      // auf Änderungen der Filter hören
                      on({ id: dpFilterMode, change: 'any' }, adapterStatus);
                      on({ id: dpFilterMode, change: 'any' }, resetFilter);
                      
                      // Funktion adapterStatus alle x Sekunden ausführen
                      schedule('*/' + checkInterval + ' * * * * *', adapterStatus);
                      
                      function adapterStatus() {
                         // Funktion um Status der Adapter abzurufen und als JSON String für das Material Design Widget IconList aufbereiten
                         try {
                             let adapterList = [];
                             let updateList = myHelper().getStateValueIfExist(adminUpdatesList);
                      
                             for (var i = 0; i <= adapterAliveList.length - 1; i++) {
                                 let id = adapterAliveList[i].replace('.alive', '');
                                 let obj = getObject(adapterAliveList[i].replace('.alive', ''));
                      
                                 let nameArray = id.replace('system.adapter.', '').split(".");
                      
                                 let name = nameArray[0];
                                 name = name.charAt(0).toUpperCase() + name.slice(1);
                      
                                 let nameWithInstance = name;
                                 let adapterInstance = nameArray[1];
                                 if (parseInt(adapterInstance) > 0) {
                                     nameWithInstance = name + '.' + adapterInstance;
                                 }
                      
                                 let uptime = (existsState(id + '.uptime')) ? moment.duration(getState(id + '.uptime').val, 'seconds').format(formatierungDauer, 0) : '-';
                                 let image = (myHelper().checkCommonPropertyExist(obj, 'icon')) ? `/${nameArray[0]}.admin/${obj.common.icon}` : 'image-off-outline';
                      
                                 let hasUpdates = updateList && updateList.includes(nameArray[0]);
                                 let newVersion = (hasUpdates) ? '<span class="mdi mdi-update" style="color: #ec0909;"></span>' : '';
                      
                                 let text = `<div style="display: flex; flex-direction: row; line-height: 1.5; padding-right: 8px; align-items: center;">
                                                 <div style="flex: 1">${newVersion} ${nameWithInstance}</div>
                                                 <div style="color: ${farbeAdapterWerte}; font-size: 12px; font-family: RobotoCondensed-LightItalic;">${myHelper().getCommonPropertyIfExist(obj, 'version', '-', 'v', '')}</div>
                                             </div>`
                      
                                 let subText = `<div style="display: flex; flex-direction: row; line-height: 1.3; padding-left: 1px; padding-right: 8px; align-items: center;">
                                                     <div style="flex: 1;">CPU</div>
                                                     <div style="color: ${farbeAdapterWerte}; font-size: 14px; font-family: RobotoCondensed-LightItalic; text-align: right;">${myHelper().getStateValueIfExist(id + '.cpu', '-', '', ' %')}</div>
                                                 </div>
                                                 <div style="display: flex; flex-direction: row; line-height: 1.3; padding-left: 1px; padding-right: 8px; align-items: center;">
                                                     <div style="flex: 1;">RAM total</div>
                                                     <div style="color: ${farbeAdapterWerte}; font-size: 14px; font-family: RobotoCondensed-LightItalic; text-align: right;">${myHelper().getStateValueIfExist(id + '.memHeapTotal', '-', '', ' MB')}</div>
                                                 </div>
                                                 <div style="display: flex; flex-direction: row; line-height: 1.3; padding-left: 1px; padding-right: 8px; align-items: center;">
                                                     <div style="flex: 1;">RAM verwendet</div>
                                                     <div style="color: ${farbeAdapterWerte}; font-size: 14px; font-family: RobotoCondensed-LightItalic; text-align: right;">${myHelper().getStateValueIfExist(id + '.memHeapUsed', '-', '', ' MB')}</div>
                                                 </div>
                                                 <div style="display: flex; flex-direction: row; line-height: 1.3; padding-left: 1px; padding-right: 8px; align-items: center;">
                                                     <div style="flex: 1;">RAM reserviert</div>
                                                     <div style="color: ${farbeAdapterWerte}; font-size: 14px; font-family: RobotoCondensed-LightItalic; text-align: right;">${myHelper().getStateValueIfExist(id + '.memRss', '-', '', ' MB')}</div>
                                                 </div>
                                                 <div style="display: flex; flex-direction: row; line-height: 1.3; padding-left: 1px; padding-right: 8px; align-items: center;">
                                                     <div style="flex: 1;">Betriebszeit</div>
                                                     <div style="color: ${farbeAdapterWerte}; font-size: 14px; font-family: RobotoCondensed-LightItalic; text-align: right;">${uptime}</div>
                                                 </div>
                                                 <div style="display: flex; flex-direction: row; line-height: 1.3; padding-left: 1px; padding-right: 8px; align-items: center;">
                                                     <div style="flex: 1;">Modus</div>
                                                     <div style="color: ${farbeAdapterWerte}; font-size: 14px; font-family: RobotoCondensed-LightItalic; text-align: right;">${myHelper().getCommonPropertyIfExist(obj, 'mode', '-')}</div>
                                                 </div>`
                      
                                 let statusBarColor = farbeAdapterNichtAktiv;
                                 let status = 3;
                      
                                 if (myHelper().getStateValueIfExist(adapterAliveList[i]) === 'true') {
                                     statusBarColor = farbeAdapterAktiv;
                                     status = 0;
                      
                                     if (existsState(id.replace('system.adapter.', '') + '.info.connection')) {
                                         if (!getState(id.replace('system.adapter.', '') + '.info.connection').val) {
                                             statusBarColor = farbeAdapterNichtVerbunden;
                                             status = 4;
                                         }
                                     } else {
                                         if (myHelper().getStateValueIfExist(adapterAliveList[i].replace('.alive', '.connected')) === 'false') {
                                             statusBarColor = farbeAdapterNichtVerbunden;
                                             status = 4;
                                         }
                                     }
                                 }
                      
                                 if (myHelper().getCommonPropertyIfExist(obj, 'mode') === 'schedule') {
                                     // Adapter ist zeitgesteuert
                                     statusBarColor = farbeAdapterZeitgesteuert;
                                     status = 1;
                                 }
                      
                                 if (myHelper().getCommonPropertyIfExist(obj, 'mode') === 'extension') {
                                     // Adapter ist Extension
                                     statusBarColor = farbeAdapterErweiterung;
                                     status = 1;
                                 }
                      
                                 if (myHelper().getCommonPropertyIfExist(obj, 'mode') === 'once') {
                                     // Adapter wird mit System gestartet
                                     statusBarColor = farbeAdapterSystem;
                                     status = 1;
                                 }
                      
                                 if (myHelper().getCommonPropertyIfExist(obj, 'enabled', false).toString() === 'false') {
                                     // Adapter ist deaktiviert
                                     statusBarColor = farbeAdapterDeaktiviert;
                                     status = 2;
                                 }
                      
                                 adapterList.push({
                                     text: text,
                                     subText: subText,
                                     image: image,
                                     listType: "buttonState",
                                     objectId: dpAdapterRestart,
                                     buttonStateValue: id,
                                     statusBarColor: statusBarColor,
                                     showValueLabel: false,
                                     name: name,
                                     mode: myHelper().getCommonPropertyIfExist(obj, 'mode'),
                                     hasUpdates: hasUpdates,
                                     cpu: parseFloat(myHelper().getStateValueIfExist(id + '.cpu', '0')),
                                     memHeapTotal: parseFloat(myHelper().getStateValueIfExist(id + '.memHeapTotal', '0')),
                                     memHeapUsed: parseFloat(myHelper().getStateValueIfExist(id + '.memHeapUsed', '0')),
                                     memRss: parseFloat(myHelper().getStateValueIfExist(id + '.memRss', '0')),
                                     uptime: parseFloat(myHelper().getStateValueIfExist(id + '.uptime', 0)),
                                     status: status
                                 })
                             }
                      
                             let sortMode = myHelper().getStateValueIfExist(dpSortMode, 'name');
                      
                             if (sortMode === 'name' || sortMode === 'mode') {
                                 adapterList.sort(function (a, b) {
                                     return a[sortMode].toLowerCase() == b[sortMode].toLowerCase() ? 0 : +(a[sortMode].toLowerCase() > b[sortMode].toLowerCase()) || -1;
                                 });
                             } else if (sortMode === 'hasUpdates' || sortMode === 'cpu' || sortMode === 'memHeapTotal' || sortMode === 'memHeapUsed' || sortMode === 'memRss' || sortMode === 'uptime' || sortMode === 'status') {
                                 adapterList.sort(function (a, b) {
                                     return a[sortMode] == b[sortMode] ? 0 : +(a[sortMode] < b[sortMode]) || -1;
                                 });
                             } else {
                                 // default: nach name sortieren
                                 sortMode = 'name'
                                 adapterList.sort(function (a, b) {
                                     return a[sortMode].toLowerCase() == b[sortMode].toLowerCase() ? 0 : +(a[sortMode].toLowerCase() > b[sortMode].toLowerCase()) || -1;
                                 });
                             }
                      
                             // Filter: not connected, updates, deaktiviert, aktiviert
                      
                             let filterMode = myHelper().getStateValueIfExist(dpFilterMode, null);
                      
                             if (filterMode && filterMode !== null && filterMode !== '') {
                                 if (filterMode === 'hasUpdates') {
                                     adapterList = adapterList.filter(function (item) {
                                         return item.hasUpdates === true;
                                     });
                                 } else if (filterMode === 'notConnected') {
                                     adapterList = adapterList.filter(function (item) {
                                         return item.status === 4;
                                     });
                                 } else if (filterMode === 'deactivated') {
                                     adapterList = adapterList.filter(function (item) {
                                         return item.status === 2;
                                     });
                                 } else if (filterMode === 'activated') {
                                     adapterList = adapterList.filter(function (item) {
                                         return item.status <= 1;
                                     });
                                 }
                             }
                      
                             let result = JSON.stringify(adapterList);
                             if (getState(dpList) !== result) {
                                 setState(dpList, result, true);
                             }
                      
                         } catch (err) {
                             console.error(`[adapterStatus] error: ${err.message}, stack: ${err.stack}`);
                         }
                      }
                      
                      // Beim Staren des Skriptes Adapter Status abrufen
                      adapterStatus();
                      
                      // Funktion um Adapter zu starten / neu starten
                      on({ id: dpAdapterRestart }, function (obj) {
                         var adapter = getObject(obj.state.val.toString());
                      
                         if (neustarten) {
                             if (adapter.common && adapter.common.enabled === false) {
                                 // Adapter deaktiviert -> starten
                                 adapter.common.enabled = true;
                             }
                         } else {
                             if (adapter.common && adapter.common.enabled) {
                                 adapter.common.enabled = !adapter.common.enabled;
                             } else {
                                 adapter.common.enabled = true;
                             }
                         }
                      
                         setObject(obj.state.val, adapter);
                         console.log(`${obj.state.val.replace('system.adapter.', '')} neugestartet`);
                      });
                      
                      
                      function resetSort() {
                         let sortMode = myHelper().getStateValueIfExist(dpSortMode, null);
                      
                         if (sortResetAfter > 0) {
                             setTimeout(function () {
                                 if (sortMode !== null && sortMode === myHelper().getStateValueIfExist(dpSortMode, null)) {
                                     setState(dpSortMode, sortReset);
                                 }
                             }, sortResetAfter * 1000);
                         }
                      }
                      
                      function resetFilter() {
                         let filterMode = myHelper().getStateValueIfExist(dpFilterMode, null);
                      
                         if (filterResetAfter > 0) {
                             setTimeout(function () {
                                 if (filterMode !== null && filterMode === myHelper().getStateValueIfExist(dpFilterMode, null)) {
                                     setState(dpFilterMode, '');
                                 }
                             }, filterResetAfter * 1000);
                         }
                      }
                      
                      function myHelper() {
                         return {
                             getStateValueIfExist: function (id, nullValue = undefined, prepand = '', append = '') {
                                 if (existsState(id)) {
                                     return prepand + getState(id).val + append;
                                 } else {
                                     return nullValue;
                                 }
                             },
                             getCommonPropertyIfExist: function (object, prop, nullValue = undefined, prepand = '', append = '') {
                                 if (myHelper().checkCommonPropertyExist(object, prop)) {
                                     return prepand + object.common[prop] + append;
                                 } else {
                                     return nullValue;
                                 }
                             },
                             checkCommonPropertyExist: function (object, prop) {
                                 if (object && object.common && object.common[prop]) {
                                     return true;
                                 } else {
                                     return false;
                                 }
                             }
                         }
                      }
                      


                      Der Rest entspricht dem Stand aus deinem ersten Post.
                      Edit: gleiche noch ne Variable für Farbe aus Datenpunkt aufgenommen. Eine der beiden muss auskommentiert sein.

                      1 Reply Last reply
                      1
                      • ScroungerS Scrounger

                        Skript zur Anzeige des Adapter Status mit dem Material Design IconList Widget

                        Mit diesem Skript wird ein json string erzeugt mit dem Status aller installierten Adapter. Diese Daten (Datenpunkt) kann dann im Material Design IconList Widget verwendet werden, um den Status der Adapter im VIS anzuzeigen.

                        letzte Aktualierung: 04.03.2020

                        AdapterStatus.gif

                        Voraussetzung:

                        • Material Design Widgets v0.2.62

                        Funktionen:

                        • Anzeige des Status aller Adapter (Aktiviert, Deakitivert, nicht verbunden, update verfügbar, etc.)
                        • Anzeige von Werten der Adapter (Betriebszeit, Ram, etc.)
                        • Neustarten / Starten / Stoppen von Adaptern
                        • Sortier und Filter Funktion
                        • Einstellungen, siehe im Skript Sektion Einstellungen, Funktion der Einstellungen ist dort als Kommentar beschrieben.

                        Ist auch im Online Beispiel enthalten

                        View zum importieren:

                        {
                          "settings": {
                            "style": {
                              "background_class": ""
                            },
                            "theme": "redmond",
                            "sizex": "",
                            "sizey": "",
                            "gridSize": "",
                            "snapType": null
                          },
                          "widgets": {
                            "e00001": {
                              "tpl": "tplVis-materialdesign-Icon-List",
                              "data": {
                                "g_fixed": false,
                                "g_visibility": false,
                                "g_css_font_text": false,
                                "g_css_background": false,
                                "g_css_shadow_padding": false,
                                "g_css_border": false,
                                "g_gestures": false,
                                "g_signals": false,
                                "g_last_change": false,
                                "visibility-cond": "==",
                                "visibility-val": 1,
                                "visibility-groups-action": "hide",
                                "wrapItems": true,
                                "listItemDataMethod": "jsonStringObject",
                                "countListItems": "1",
                                "vibrateOnMobilDevices": "50",
                                "listLayout": "card",
                                "itemLayout": "horizontal",
                                "listType0": "text",
                                "showValueLabel0": "true",
                                "listType1": "text",
                                "showValueLabel1": "true",
                                "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,
                                "lc-type": "last-change",
                                "lc-is-interval": true,
                                "lc-is-moment": false,
                                "lc-format": "",
                                "lc-position-vert": "top",
                                "lc-position-horz": "right",
                                "lc-offset-vert": 0,
                                "lc-offset-horz": 0,
                                "lc-font-size": "12px",
                                "lc-font-family": "",
                                "lc-font-style": "",
                                "lc-bkg-color": "",
                                "lc-color": "",
                                "lc-border-width": "0",
                                "lc-border-style": "",
                                "lc-border-color": "",
                                "lc-border-radius": 10,
                                "lc-zindex": 0,
                                "json_string_oid": "0_userdata.0.vis.AdapterStatus.jsonList",
                                "maxItemsperRow": "6",
                                "iconItemMinWidth": "300",
                                "iconHeight": "60",
                                "buttonHeight": "100",
                                "labelFontSize": "22",
                                "subLabelFontSize": "14",
                                "subLabelFontColor": "#000000",
                                "labelFontFamily": "RobotoCondensed-Regular",
                                "subLabelFontFamily": "RobotoCondensed-Light",
                                "horizontalIconContainerWidth": "120"
                              },
                              "style": {
                                "left": "0px",
                                "top": "50px",
                                "width": "100%",
                                "height": "calc(100% - 50px)",
                                "overflow-x": "",
                                "overflow-y": "auto",
                                "z-index": "1"
                              },
                              "widgetSet": "materialdesign"
                            },
                            "e00002": {
                              "tpl": "tplHtml",
                              "data": {
                                "g_fixed": false,
                                "g_visibility": false,
                                "g_css_font_text": false,
                                "g_css_background": true,
                                "g_css_shadow_padding": false,
                                "g_css_border": false,
                                "g_gestures": false,
                                "g_signals": false,
                                "g_last_change": false,
                                "visibility-cond": "==",
                                "visibility-val": 1,
                                "visibility-groups-action": "hide",
                                "refreshInterval": "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,
                                "lc-type": "last-change",
                                "lc-is-interval": true,
                                "lc-is-moment": false,
                                "lc-format": "",
                                "lc-position-vert": "top",
                                "lc-position-horz": "right",
                                "lc-offset-vert": 0,
                                "lc-offset-horz": 0,
                                "lc-font-size": "12px",
                                "lc-font-family": "",
                                "lc-font-style": "",
                                "lc-bkg-color": "",
                                "lc-color": "",
                                "lc-border-width": "0",
                                "lc-border-style": "",
                                "lc-border-color": "",
                                "lc-border-radius": 10,
                                "lc-zindex": 0
                              },
                              "style": {
                                "left": "0",
                                "top": "0",
                                "width": "100%",
                                "height": "50px",
                                "background-color": "#44739e"
                              },
                              "widgetSet": "basic"
                            },
                            "e00003": {
                              "tpl": "tplVis-materialdesign-Select",
                              "data": {
                                "oid": "0_userdata.0.vis.AdapterStatus.sortMode",
                                "g_fixed": false,
                                "g_visibility": false,
                                "g_css_font_text": false,
                                "g_css_background": false,
                                "g_css_shadow_padding": false,
                                "g_css_border": false,
                                "g_gestures": false,
                                "g_signals": false,
                                "g_last_change": false,
                                "visibility-cond": "==",
                                "visibility-val": 1,
                                "visibility-groups-action": "hide",
                                "inputType": "text",
                                "inputLayout": "regular",
                                "showInputMessageAlways": "true",
                                "showInputCounter": false,
                                "clearIconShow": false,
                                "listDataMethod": "jsonStringObject",
                                "countSelectItems": "1",
                                "listPosition": "bottom",
                                "showSelectedIcon": "prepend-inner",
                                "showValue": false,
                                "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,
                                "lc-type": "last-change",
                                "lc-is-interval": true,
                                "lc-is-moment": false,
                                "lc-format": "",
                                "lc-position-vert": "top",
                                "lc-position-horz": "right",
                                "lc-offset-vert": 0,
                                "lc-offset-horz": 0,
                                "lc-font-size": "12px",
                                "lc-font-family": "",
                                "lc-font-style": "",
                                "lc-bkg-color": "",
                                "lc-color": "",
                                "lc-border-width": "0",
                                "lc-border-style": "",
                                "lc-border-color": "",
                                "lc-border-radius": 10,
                                "lc-zindex": 0,
                                "inputLabelText": "Sortieren nach",
                                "inputLabelColor": "#ffffff",
                                "inputLabelFontFamily": "RobotoCondensed-LightItalic",
                                "collapseIconColor": "#ffffff",
                                "collapseIconSize": "",
                                "jsonStringObject": "[\n\t{\n\t\t\"text\": \"Adaptername\",\n\t\t\"value\": \"name\",\n\t\t\"icon\": \"sort-alphabetical\"\n\t},\n\t{\n\t\t\"text\": \"Status\",\n\t\t\"value\": \"status\",\n\t\t\"icon\": \"information-variant\"\n\t},\t\n\t{\n\t\t\"text\": \"Modus\",\n\t\t\"value\": \"mode\",\n\t\t\"icon\": \"view-dashboard\"\n\t},\n\t{\n\t\t\"text\": \"Updates verfügbar\",\n\t\t\"value\": \"hasUpdates\",\n\t\t\"icon\": \"package-down\"\n\t},\n\t{\n\t\t\"text\": \"CPU\",\n\t\t\"value\": \"cpu\",\n\t\t\"icon\": \"cpu-64-bit\"\n\t},\n\t{\n\t\t\"text\": \"RAM total\",\n\t\t\"value\": \"memHeapTotal\",\n\t\t\"icon\": \"memory\"\n\t},\n\t{\n\t\t\"text\": \"RAM verwendet\",\n\t\t\"value\": \"memHeapUsed\",\n\t\t\"icon\": \"memory\"\n\t},\n\t{\n\t\t\"text\": \"RAM reserviert\",\n\t\t\"value\": \"memRss\",\n\t\t\"icon\": \"memory\"\n\t},\n\t{\n\t\t\"text\": \"Betriebszeit\",\n\t\t\"value\": \"uptime\",\n\t\t\"icon\": \"clock-check-outline\"\n\t}\n]",
                                "listPositionOffset": true,
                                "inputLayoutBackgroundColor": "transparent",
                                "inputLabelColorSelected": "#ffffff",
                                "inputTranslateX": "-15",
                                "clearIcon": "",
                                "inputLayoutBorderColorHover": "#ffffff",
                                "inputLayoutBorderColorSelected": "#ffffff",
                                "inputLayoutBorderColor": "#a1a1a1",
                                "listItemFontColor": "",
                                "inputTextColor": "#ffffff",
                                "inputTextFontFamily": "RobotoCondensed-LightItalic",
                                "prepandIcon": "",
                                "prepandIconColor": "",
                                "prepandIconSize": "",
                                "prepandInnerIcon": "",
                                "prepandInnerIconColor": "#ffffff",
                                "prepandInnerIconSize": "18",
                                "collapseIcon": "",
                                "inputTranslateY": "-12",
                                "listIconSelectedColor": "#44739e",
                                "listIconColor": "",
                                "appendOuterIcon": "",
                                "appendOuterIconSize": "2",
                                "listItemFont": "RobotoCondensed-Regular",
                                "listItemRippleEffectColor": "",
                                "inputLayoutBackgroundColorSelected": "",
                                "inputLayoutBackgroundColorHover": ""
                              },
                              "style": {
                                "left": "10px",
                                "top": "0px",
                                "z-index": "1",
                                "width": "calc(50% - 20px)",
                                "height": "40px"
                              },
                              "widgetSet": "materialdesign"
                            },
                            "e00004": {
                              "tpl": "tplVis-materialdesign-Select",
                              "data": {
                                "oid": "0_userdata.0.vis.AdapterStatus.filterMode",
                                "g_fixed": false,
                                "g_visibility": false,
                                "g_css_font_text": false,
                                "g_css_background": false,
                                "g_css_shadow_padding": false,
                                "g_css_border": false,
                                "g_gestures": false,
                                "g_signals": false,
                                "g_last_change": false,
                                "visibility-cond": "==",
                                "visibility-val": 1,
                                "visibility-groups-action": "hide",
                                "inputType": "text",
                                "inputLayout": "regular",
                                "showInputMessageAlways": "true",
                                "showInputCounter": false,
                                "clearIconShow": true,
                                "listDataMethod": "jsonStringObject",
                                "countSelectItems": "1",
                                "listPosition": "bottom",
                                "showSelectedIcon": "prepend-inner",
                                "showValue": false,
                                "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,
                                "lc-type": "last-change",
                                "lc-is-interval": true,
                                "lc-is-moment": false,
                                "lc-format": "",
                                "lc-position-vert": "top",
                                "lc-position-horz": "right",
                                "lc-offset-vert": 0,
                                "lc-offset-horz": 0,
                                "lc-font-size": "12px",
                                "lc-font-family": "",
                                "lc-font-style": "",
                                "lc-bkg-color": "",
                                "lc-color": "",
                                "lc-border-width": "0",
                                "lc-border-style": "",
                                "lc-border-color": "",
                                "lc-border-radius": 10,
                                "lc-zindex": 0,
                                "inputLabelText": "Filtern nach",
                                "inputLabelColor": "#ffffff",
                                "inputLabelFontFamily": "RobotoCondensed-LightItalic",
                                "collapseIconColor": "#ffffff",
                                "collapseIconSize": "",
                                "jsonStringObject": "[\n\t{\n\t\t\"text\": \"nicht verbunden\",\n\t\t\"value\": \"notConnected\",\n\t\t\"icon\": \"network-off\"\n\t},\n\t{\n\t\t\"text\": \"deaktiviert\",\n\t\t\"value\": \"deactivated\",\n\t\t\"icon\": \"checkbox-blank-outline\"\n\t},\t\n\t{\n\t\t\"text\": \"aktiviert\",\n\t\t\"value\": \"activated\",\n\t\t\"icon\": \"checkbox-intermediate\"\n\t},\n\t{\n\t\t\"text\": \"Updates verfügbar\",\n\t\t\"value\": \"hasUpdates\",\n\t\t\"icon\": \"package-down\"\n\t}\n]",
                                "listPositionOffset": true,
                                "inputLayoutBackgroundColor": "transparent",
                                "inputLabelColorSelected": "#ffffff",
                                "inputTranslateX": "-15",
                                "clearIcon": "",
                                "inputLayoutBorderColorHover": "#ffffff",
                                "inputLayoutBorderColorSelected": "#ffffff",
                                "inputLayoutBorderColor": "#a1a1a1",
                                "listItemFontColor": "",
                                "inputTextColor": "#ffffff",
                                "inputTextFontFamily": "RobotoCondensed-LightItalic",
                                "prepandIcon": "",
                                "prepandIconColor": "",
                                "prepandIconSize": "",
                                "prepandInnerIcon": "",
                                "prepandInnerIconColor": "#ffffff",
                                "prepandInnerIconSize": "18",
                                "collapseIcon": "",
                                "inputTranslateY": "-12",
                                "listIconSelectedColor": "#44739e",
                                "listIconColor": "",
                                "appendOuterIcon": "",
                                "appendOuterIconSize": "2",
                                "listItemFont": "RobotoCondensed-Regular",
                                "listItemRippleEffectColor": "",
                                "inputLayoutBackgroundColorSelected": "",
                                "inputLayoutBackgroundColorHover": "",
                                "clearIconColor": "#ffffff"
                              },
                              "style": {
                                "left": "calc(50% + 10px)",
                                "top": "0px",
                                "z-index": "1",
                                "width": "calc(50% - 20px)",
                                "height": "40px"
                              },
                              "widgetSet": "materialdesign"
                            }
                          },
                          "name": "AdapterStatus",
                          "filterList": []
                        }
                        

                        Hier hab ich beschrieben, wie man das layout am besten einstellt:
                        https://forum.iobroker.net/topic/30661/material-design-widgets-adapter-status/5

                        Skript

                        // Imports -> müssen im Javascript Adapter unter 'Zusätzliche NPM-Module' eingetragen sein
                        const moment = require("moment");
                        const momentDurationFormatSetup = require("moment-duration-format");
                        
                        
                        // Skript Einstellungen *************************************************************************************************************************************************
                        
                        let dpList = '0_userdata.0.vis.AdapterStatus.jsonList';                     // Datenpunkt für IconList Widget (Typ: Zeichenkette (String))
                        let dpAdapterRestart = '0_userdata.0.vis.AdapterStatus.restartTrigger';     // Datenpunkt für Adapter restart (Typ: Zeichenkette (String))
                        
                        let dpSortMode = '0_userdata.0.vis.AdapterStatus.sortMode';                 // Datenpunkt für Sortieren (Typ: Zeichenkette (String))
                        let dpFilterMode = '0_userdata.0.vis.AdapterStatus.filterMode';             // Datenpunkt für Filter (Typ: Zeichenkette (String))
                        
                        let adminUpdatesList = 'admin.0.info.updatesList';                          // Datenpunkt Admin Adapter für verfübare Updates der Adapter
                        
                        const checkInterval = 30;                                                   // Interval wie oft Status der Adapter aktualisiert werden soll (in Sekunden)
                        
                        let sprache = 'de';                                                         // Sprache für formatierung Dauer 
                        let formatierungDauer = "dd[T] hh[h] mm[m]";                                // Formatierung der Dauer -> siehe momentjs library
                        
                        let neustarten = true;                                                      // true: Adapter wird neugestartet, false: Adapter wird gestoppt oder gestartet
                        
                        let farbeAdapterAktiv = 'green';                                            // Status Bar Farbe wenn Adapter aktiv ist
                        let farbeAdapterNichtAktiv = 'FireBrick';                                   // Status Bar Farbe wenn Adapter nicht aktiv ist oder Fehler vorliegt
                        let farbeAdapterDeaktiviert = 'darkgrey';                                   // Status Bar Farbe wenn Adapter deaktiviert ist
                        let farbeAdapterNichtVerbunden = 'yellow';                                  // Status Bar Farbe wenn Adapter nicht verbunden ist
                        let farbeAdapterZeitgesteuert = 'lightgreen';                               // Status Bar Farbe wenn Adapter zeitgesteuert ist
                        let farbeAdapterErweiterung = '#44739e';                                    // Status Bar Farbe wenn Adapter Erweiterung ist
                        let farbeAdapterSystem = '#44739e';                                         // Status Bar Farbe wenn Adapter mit System gestartet wird
                        
                        let sortResetAfter = 120;                                                   // Sortierung nach X Sekunden auf sortReset zurücksetzen (0=deaktiviert)
                        let sortReset = 'memHeapUsed'                                               // Sortierung auf die zurückgesetzt werden soll
                        
                        let filterResetAfter = 120;                                                 // Filter nach X Sekunden zurücksetzen (0=deaktiviert)
                        
                        // **********************************************************************************************************************************************************************
                        
                        
                        // Fomate für moment Lib
                        moment.locale(sprache);
                        
                        // auf .alive Änderungen hören
                        let aliveSelector = `[id=system.adapter.*.alive]`;
                        let adapterAliveList = $(aliveSelector);
                        if (adapterAliveList.length === 0) {
                            // Fehlermeldung ausgeben, wenn selector kein result liefert
                            console.error(`no result for selector '${aliveSelector}'`)
                        } else {
                            // listener nur für Änderung bei alive
                            adapterAliveList.on(adapterStatus);
                        }
                        
                        // auf .connection Änderungen hören
                        let connectionSelector = `[id=*.info.connection]`;
                        let adapterConnectionList = $(connectionSelector);
                        if (adapterConnectionList.length === 0) {
                            // Fehlermeldung ausgeben, wenn selector kein result liefert
                            console.error(`no result for selector '${connectionSelector}'`)
                        } else {
                            // listener nur für Änderung bei alive
                            adapterConnectionList.on(adapterStatus);
                        }
                        
                        // auf .connected Änderungen hören
                        let connectedSelector = `[id=system.adapter.*.connected]`;
                        let adapterConnectedList = $(connectedSelector);
                        if (adapterConnectedList.length === 0) {
                            // Fehlermeldung ausgeben, wenn selector kein result liefert
                            console.error(`no result for selector '${connectedSelector}'`)
                        } else {
                            // listener nur für Änderung bei alive
                            adapterConnectedList.on(adapterStatus);
                        }
                        
                        // auf Änderungen der Sortieung hören
                        on({ id: dpSortMode, change: 'any' }, adapterStatus);
                        on({ id: dpSortMode, change: 'any' }, resetSort);
                        
                        // auf Änderungen der Filter hören
                        on({ id: dpFilterMode, change: 'any' }, adapterStatus);
                        on({ id: dpFilterMode, change: 'any' }, resetFilter);
                        
                        // Funktion adapterStatus alle x Sekunden ausführen
                        schedule('*/' + checkInterval + ' * * * * *', adapterStatus);
                        
                        function adapterStatus() {
                            // Funktion um Status der Adapter abzurufen und als JSON String für das Material Design Widget IconList aufbereiten
                            try {
                                let adapterList = [];
                                let updateList = myHelper().getStateValueIfExist(adminUpdatesList);
                        
                                for (var i = 0; i <= adapterAliveList.length - 1; i++) {
                                    let id = adapterAliveList[i].replace('.alive', '');
                                    let obj = getObject(adapterAliveList[i].replace('.alive', ''));
                        
                                    let nameArray = id.replace('system.adapter.', '').split(".");
                        
                                    let name = nameArray[0];
                                    name = name.charAt(0).toUpperCase() + name.slice(1);
                        
                                    let nameWithInstance = name;
                                    let adapterInstance = nameArray[1];
                                    if (parseInt(adapterInstance) > 0) {
                                        nameWithInstance = name + '.' + adapterInstance;
                                    }
                        
                                    let uptime = (existsState(id + '.uptime')) ? moment.duration(getState(id + '.uptime').val, 'seconds').format(formatierungDauer, 0) : '-';
                                    let image = (myHelper().checkCommonPropertyExist(obj, 'icon')) ? `/${nameArray[0]}.admin/${obj.common.icon}` : 'image-off-outline';
                        
                                    let hasUpdates = updateList && updateList.includes(nameArray[0]);
                                    let newVersion = (hasUpdates) ? '<span class="mdi mdi-update" style="color: #ec0909;"></span>' : '';
                        
                                    let text = `<div style="display: flex; flex-direction: row; line-height: 1.5; padding-right: 8px; align-items: center;">
                                                    <div style="flex: 1">${newVersion} ${nameWithInstance}</div>
                                                    <div style="color: grey; font-size: 12px; font-family: RobotoCondensed-LightItalic;">${myHelper().getCommonPropertyIfExist(obj, 'version', '-', 'v', '')}</div>
                                                </div>`
                        
                                    let subText = `<div style="display: flex; flex-direction: row; line-height: 1.3; padding-left: 1px; padding-right: 8px; align-items: center;">
                                                        <div style="flex: 1;">CPU</div>
                                                        <div style="color: grey; font-size: 14px; font-family: RobotoCondensed-LightItalic; text-align: right;">${myHelper().getStateValueIfExist(id + '.cpu', '-', '', ' %')}</div>
                                                    </div>
                                                    <div style="display: flex; flex-direction: row; line-height: 1.3; padding-left: 1px; padding-right: 8px; align-items: center;">
                                                        <div style="flex: 1;">RAM total</div>
                                                        <div style="color: grey; font-size: 14px; font-family: RobotoCondensed-LightItalic; text-align: right;">${myHelper().getStateValueIfExist(id + '.memHeapTotal', '-', '', ' MB')}</div>
                                                    </div>
                                                    <div style="display: flex; flex-direction: row; line-height: 1.3; padding-left: 1px; padding-right: 8px; align-items: center;">
                                                        <div style="flex: 1;">RAM verwendet</div>
                                                        <div style="color: grey; font-size: 14px; font-family: RobotoCondensed-LightItalic; text-align: right;">${myHelper().getStateValueIfExist(id + '.memHeapUsed', '-', '', ' MB')}</div>
                                                    </div>
                                                    <div style="display: flex; flex-direction: row; line-height: 1.3; padding-left: 1px; padding-right: 8px; align-items: center;">
                                                        <div style="flex: 1;">RAM reserviert</div>
                                                        <div style="color: grey; font-size: 14px; font-family: RobotoCondensed-LightItalic; text-align: right;">${myHelper().getStateValueIfExist(id + '.memRss', '-', '', ' MB')}</div>
                                                    </div>
                                                    <div style="display: flex; flex-direction: row; line-height: 1.3; padding-left: 1px; padding-right: 8px; align-items: center;">
                                                        <div style="flex: 1;">Betriebszeit</div>
                                                        <div style="color: grey; font-size: 14px; font-family: RobotoCondensed-LightItalic; text-align: right;">${uptime}</div>
                                                    </div>
                                                    <div style="display: flex; flex-direction: row; line-height: 1.3; padding-left: 1px; padding-right: 8px; align-items: center;">
                                                        <div style="flex: 1;">Modus</div>
                                                        <div style="color: grey; font-size: 14px; font-family: RobotoCondensed-LightItalic; text-align: right;">${myHelper().getCommonPropertyIfExist(obj, 'mode', '-')}</div>
                                                    </div>`
                        
                                    let statusBarColor = farbeAdapterNichtAktiv;
                                    let status = 3;
                        
                                    if (myHelper().getStateValueIfExist(adapterAliveList[i]) === 'true') {
                                        statusBarColor = farbeAdapterAktiv;
                                        status = 0;
                        
                                        if (existsState(id.replace('system.adapter.', '') + '.info.connection')) {
                                            if (!getState(id.replace('system.adapter.', '') + '.info.connection').val) {
                                                statusBarColor = farbeAdapterNichtVerbunden;
                                                status = 4;
                                            }
                                        } else {
                                            if (myHelper().getStateValueIfExist(adapterAliveList[i].replace('.alive', '.connected')) === 'false') {
                                                statusBarColor = farbeAdapterNichtVerbunden;
                                                status = 4;
                                            }
                                        }
                                    }
                        
                                    if (myHelper().getCommonPropertyIfExist(obj, 'mode') === 'schedule') {
                                        // Adapter ist zeitgesteuert
                                        statusBarColor = farbeAdapterZeitgesteuert;
                                        status = 1;
                                    }
                        
                                    if (myHelper().getCommonPropertyIfExist(obj, 'mode') === 'extension') {
                                        // Adapter ist Extension
                                        statusBarColor = farbeAdapterErweiterung;
                                        status = 1;
                                    }
                        
                                    if (myHelper().getCommonPropertyIfExist(obj, 'mode') === 'once') {
                                        // Adapter wird mit System gestartet
                                        statusBarColor = farbeAdapterSystem;
                                        status = 1;
                                    }
                        
                                    if (myHelper().getCommonPropertyIfExist(obj, 'enabled', false).toString() === 'false') {
                                        // Adapter ist deaktiviert
                                        statusBarColor = farbeAdapterDeaktiviert;
                                        status = 2;
                                    }
                        
                                    adapterList.push({
                                        text: text,
                                        subText: subText,
                                        image: image,
                                        listType: "buttonState",
                                        objectId: dpAdapterRestart,
                                        buttonStateValue: id,
                                        statusBarColor: statusBarColor,
                                        showValueLabel: false,
                                        name: name,
                                        mode: myHelper().getCommonPropertyIfExist(obj, 'mode'),
                                        hasUpdates: hasUpdates,
                                        cpu: parseFloat(myHelper().getStateValueIfExist(id + '.cpu', '0')),
                                        memHeapTotal: parseFloat(myHelper().getStateValueIfExist(id + '.memHeapTotal', '0')),
                                        memHeapUsed: parseFloat(myHelper().getStateValueIfExist(id + '.memHeapUsed', '0')),
                                        memRss: parseFloat(myHelper().getStateValueIfExist(id + '.memRss', '0')),
                                        uptime: parseFloat(myHelper().getStateValueIfExist(id + '.uptime', 0)),
                                        status: status,
                                        lockEnabled: true
                                    })
                                }
                        
                                let sortMode = myHelper().getStateValueIfExist(dpSortMode, 'name');
                        
                                if (sortMode === 'name' || sortMode === 'mode') {
                                    adapterList.sort(function (a, b) {
                                        return a[sortMode].toLowerCase() == b[sortMode].toLowerCase() ? 0 : +(a[sortMode].toLowerCase() > b[sortMode].toLowerCase()) || -1;
                                    });
                                } else if (sortMode === 'hasUpdates' || sortMode === 'cpu' || sortMode === 'memHeapTotal' || sortMode === 'memHeapUsed' || sortMode === 'memRss' || sortMode === 'uptime' || sortMode === 'status') {
                                    adapterList.sort(function (a, b) {
                                        return a[sortMode] == b[sortMode] ? 0 : +(a[sortMode] < b[sortMode]) || -1;
                                    });
                                } else {
                                    // default: nach name sortieren
                                    sortMode = 'name'
                                    adapterList.sort(function (a, b) {
                                        return a[sortMode].toLowerCase() == b[sortMode].toLowerCase() ? 0 : +(a[sortMode].toLowerCase() > b[sortMode].toLowerCase()) || -1;
                                    });
                                }
                        
                                // Filter: not connected, updates, deaktiviert, aktiviert
                        
                                let filterMode = myHelper().getStateValueIfExist(dpFilterMode, null);
                        
                                if (filterMode && filterMode !== null && filterMode !== '') {
                                    if (filterMode === 'hasUpdates') {
                                        adapterList = adapterList.filter(function (item) {
                                            return item.hasUpdates === true;
                                        });
                                    } else if (filterMode === 'notConnected') {
                                        adapterList = adapterList.filter(function (item) {
                                            return item.status === 4;
                                        });
                                    } else if (filterMode === 'deactivated') {
                                        adapterList = adapterList.filter(function (item) {
                                            return item.status === 2;
                                        });
                                    } else if (filterMode === 'activated') {
                                        adapterList = adapterList.filter(function (item) {
                                            return item.status <= 1;
                                        });
                                    }
                                }
                        
                                let result = JSON.stringify(adapterList);
                                if (existsState(dpList) && getState(dpList).val !== result) {
                                    setState(dpList, result, true);
                                } else {
                                    setState(dpList, result, true);
                                }
                        
                            } catch (err) {
                                console.error(`[adapterStatus] error: ${err.message}, stack: ${err.stack}`);
                            }
                        }
                        
                        // Beim Staren des Skriptes Adapter Status abrufen
                        adapterStatus();
                        
                        // Funktion um Adapter zu starten / neu starten
                        on({ id: dpAdapterRestart }, function (obj) {
                            var adapter = getObject(obj.state.val.toString());
                        
                            if (neustarten) {
                                if (adapter.common && adapter.common.enabled === false) {
                                    // Adapter deaktiviert -> starten
                                    adapter.common.enabled = true;
                                }
                            } else {
                                if (adapter.common && adapter.common.enabled) {
                                    adapter.common.enabled = !adapter.common.enabled;
                                } else {
                                    adapter.common.enabled = true;
                                }
                            }
                        
                            setObject(obj.state.val, adapter);
                            console.log(`${obj.state.val.replace('system.adapter.', '')} neugestartet`);
                        });
                        
                        
                        function resetSort() {
                            let sortMode = myHelper().getStateValueIfExist(dpSortMode, null);
                        
                            if (sortResetAfter > 0) {
                                setTimeout(function () {
                                    if (sortMode !== null && sortMode === myHelper().getStateValueIfExist(dpSortMode, null)) {
                                        setState(dpSortMode, sortReset);
                                    }
                                }, sortResetAfter * 1000);
                            }
                        }
                        
                        function resetFilter() {
                            let filterMode = myHelper().getStateValueIfExist(dpFilterMode, null);
                        
                            if (filterResetAfter > 0) {
                                setTimeout(function () {
                                    if (filterMode !== null && filterMode === myHelper().getStateValueIfExist(dpFilterMode, null)) {
                                        setState(dpFilterMode, '');
                                    }
                                }, filterResetAfter * 1000);
                            }
                        }
                        
                        function myHelper() {
                            return {
                                getStateValueIfExist: function (id, nullValue = undefined, prepand = '', append = '') {
                                    if (existsState(id)) {
                                        return prepand + getState(id).val + append;
                                    } else {
                                        return nullValue;
                                    }
                                },
                                getCommonPropertyIfExist: function (object, prop, nullValue = undefined, prepand = '', append = '') {
                                    if (myHelper().checkCommonPropertyExist(object, prop)) {
                                        return prepand + object.common[prop] + append;
                                    } else {
                                        return nullValue;
                                    }
                                },
                                checkCommonPropertyExist: function (object, prop) {
                                    if (object && object.common && object.common[prop]) {
                                        return true;
                                    } else {
                                        return false;
                                    }
                                }
                            }
                        }
                        

                        Benötigte libraries & Einstellungen im Javascript Adapter:
                        09332102-f89f-4189-bbd7-ba62e1752f54-grafik.png

                        Die Idee dazu kommt von @sigi234, seine Version findet ihr hier.
                        Vielen Dank für die Inspiration :+1:

                        sigi234S Online
                        sigi234S Online
                        sigi234
                        Forum Testing Most Active
                        wrote on last edited by sigi234
                        #19

                        @Scrounger

                        Hallo, kann man so eine Liste auch für die FritzBox machen?
                        IP, Gerätename, Mac, Online/Offline, usw...RSSI

                        Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                        Immer Daten sichern!

                        D 1 Reply Last reply
                        0
                        • sigi234S sigi234

                          @Scrounger

                          Hallo, kann man so eine Liste auch für die FritzBox machen?
                          IP, Gerätename, Mac, Online/Offline, usw...RSSI

                          D Online
                          D Online
                          darkiop
                          Most Active
                          wrote on last edited by
                          #20

                          @sigi234 Schau mal hier: https://forum.iobroker.net/topic/30812/material-design-widets-netzwerk-status

                          Proxmox-ioBroker-Redis-HA Doku: https://forum.iobroker.net/topic/47478/dokumentation-einer-proxmox-iobroker-redis-ha-umgebung

                          sigi234S 1 Reply Last reply
                          0
                          • D darkiop

                            @sigi234 Schau mal hier: https://forum.iobroker.net/topic/30812/material-design-widets-netzwerk-status

                            sigi234S Online
                            sigi234S Online
                            sigi234
                            Forum Testing Most Active
                            wrote on last edited by sigi234
                            #21

                            @darkiop sagte in Material Design Widgets: Adapter Status:

                            @sigi234 Schau mal hier: https://forum.iobroker.net/topic/30812/material-design-widets-netzwerk-status

                            Das kenne ich, diese liest aber nur den tr-064 aus.

                            Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                            Immer Daten sichern!

                            D 1 Reply Last reply
                            0
                            • sigi234S sigi234

                              @darkiop sagte in Material Design Widgets: Adapter Status:

                              @sigi234 Schau mal hier: https://forum.iobroker.net/topic/30812/material-design-widets-netzwerk-status

                              Das kenne ich, diese liest aber nur den tr-064 aus.

                              D Online
                              D Online
                              darkiop
                              Most Active
                              wrote on last edited by
                              #22

                              @sigi234 sagte in Material Design Widgets: Adapter Status:

                              Das kenne ich, diese liest aber nur den tr-064 aus.

                              Ok :) Sowas auf Basis Ping-Adapter oder Unifi wäre noch Interessant.

                              Proxmox-ioBroker-Redis-HA Doku: https://forum.iobroker.net/topic/47478/dokumentation-einer-proxmox-iobroker-redis-ha-umgebung

                              sigi234S ScroungerS 2 Replies Last reply
                              0
                              • D darkiop

                                @sigi234 sagte in Material Design Widgets: Adapter Status:

                                Das kenne ich, diese liest aber nur den tr-064 aus.

                                Ok :) Sowas auf Basis Ping-Adapter oder Unifi wäre noch Interessant.

                                sigi234S Online
                                sigi234S Online
                                sigi234
                                Forum Testing Most Active
                                wrote on last edited by
                                #23

                                @darkiop sagte in Material Design Widgets: Adapter Status:

                                @sigi234 sagte in Material Design Widgets: Adapter Status:

                                Das kenne ich, diese liest aber nur den tr-064 aus.

                                Ok :) Sowas auf Basis Ping-Adapter oder Unifi wäre noch Interessant.

                                Genau. :relaxed:

                                Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                                Immer Daten sichern!

                                1 Reply Last reply
                                0
                                • D darkiop

                                  @sigi234 sagte in Material Design Widgets: Adapter Status:

                                  Das kenne ich, diese liest aber nur den tr-064 aus.

                                  Ok :) Sowas auf Basis Ping-Adapter oder Unifi wäre noch Interessant.

                                  ScroungerS Offline
                                  ScroungerS Offline
                                  Scrounger
                                  Developer
                                  wrote on last edited by
                                  #24

                                  @darkiop sagte in Material Design Widgets: Adapter Status:

                                  @sigi234 sagte in Material Design Widgets: Adapter Status:

                                  Das kenne ich, diese liest aber nur den tr-064 aus.

                                  Ok :) Sowas auf Basis Ping-Adapter oder Unifi wäre noch Interessant.

                                  Für unifi erstell ich gerade das Skript, müsst euch aber noch gedulden;-)

                                  D 1 Reply Last reply
                                  1
                                  • ScroungerS Scrounger

                                    @darkiop sagte in Material Design Widgets: Adapter Status:

                                    @sigi234 sagte in Material Design Widgets: Adapter Status:

                                    Das kenne ich, diese liest aber nur den tr-064 aus.

                                    Ok :) Sowas auf Basis Ping-Adapter oder Unifi wäre noch Interessant.

                                    Für unifi erstell ich gerade das Skript, müsst euch aber noch gedulden;-)

                                    D Online
                                    D Online
                                    darkiop
                                    Most Active
                                    wrote on last edited by
                                    #25

                                    @Scrounger sagte in Material Design Widgets: Adapter Status:

                                    Für unifi erstell ich gerade das Skript, müsst euch aber noch gedulden;-)

                                    Super, das wäre dann mal wieder ein Grund den Adapter zu installieren - auch wenn er gut 25.000 States erzeugt ... :D

                                    Proxmox-ioBroker-Redis-HA Doku: https://forum.iobroker.net/topic/47478/dokumentation-einer-proxmox-iobroker-redis-ha-umgebung

                                    1 Reply Last reply
                                    0
                                    • ScroungerS Offline
                                      ScroungerS Offline
                                      Scrounger
                                      Developer
                                      wrote on last edited by
                                      #26

                                      Hab noch einen kleinen Fehler gefunden und das skript in Post 1 eins aktualisiert.

                                      O 1 Reply Last reply
                                      0
                                      • ScroungerS Scrounger

                                        Hab noch einen kleinen Fehler gefunden und das skript in Post 1 eins aktualisiert.

                                        O Online
                                        O Online
                                        Oli
                                        wrote on last edited by
                                        #27

                                        @Scrounger

                                        ich bekomme folgende Warmeldungen, wenn ein Adapter deinstalliert wurde.
                                        Kann sowas per Script abgefangen werden?

                                        javascript.0	2020-03-26 12:52:30.141	warn	(17092) Object "system.adapter.coronavirus-statistics.0" does not exist
                                        javascript.0	2020-03-26 12:52:15.053	warn	(17092) Object "system.adapter.coronavirus-statistics.0" does not exist
                                        javascript.0	2020-03-26 12:52:14.462	warn	(17092) Object "system.adapter.coronavirus-statistics.0" does not exist
                                        javascript.0	2020-03-26 12:52:14.285	warn	(17092) Object "system.adapter.coronavirus-statistics.0" does not exist
                                        

                                        Gruß
                                        Oliver

                                        manuxiM 1 Reply Last reply
                                        0
                                        • M Offline
                                          M Offline
                                          Michi68
                                          wrote on last edited by
                                          #28

                                          @Scrounger
                                          Hallo,
                                          erst mal vielen Dank für die tolle Arbeit, habe Heute erst gesehen das es eine neue Version des Scripts gibt und direkt gegen das alte ausgetauscht.
                                          Dabei ist mir dann das hier aufgefallen, diese roten wellen Linien

                                          script.png

                                          Habe aber alles so wie es vorne steht im Javascript Adapter eingetragen

                                          js.png

                                          Script läuft auch ohne Fehler, steht zumindest nichts im Log und die View auch, Sortieren, Filtern Neustarten oder auch An und Aus geht alles.

                                          view.png

                                          Also die wellen Linien waren letztens noch nicht da, kommen aber auch nicht durch das neue Script da ich sie noch vor dem Austauschen entdeckt habe. Irgend wer eine Idee, muss ich noch was Installieren was ich vergessen oder übersehen habe?

                                          Raspberry 4 4GB
                                          admin 3.7.8
                                          javascript 4.3.4
                                          Material Design Widgets 2.66
                                          Node.js v10.19.0
                                          NPM 6.13.4
                                          JS-Controller 2.2.9

                                          Gruß Michael

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          667

                                          Online

                                          32.6k

                                          Users

                                          82.1k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Home
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe