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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Praktische Anwendungen (Showcase)
  4. View Adapter Status

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

View Adapter Status

Geplant Angeheftet Gesperrt Verschoben Praktische Anwendungen (Showcase)
view adapterview
212 Beiträge 31 Kommentatoren 36.9k Aufrufe 52 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • ScroungerS Offline
    ScroungerS Offline
    Scrounger
    Developer
    schrieb am zuletzt editiert von Scrounger
    #141

    Sodele nochmal eine neue Version des Skriptes

    Voraussetzung Material Design Widgets v0.2.62 (demnächst im latest) !!!

    • mehr Farbeinstellung
    • Sortier Funktion
    • Filter Funktion - wäre sicher als nächster Wunsch gekommen, deshalb hab ich es schon mal eingebaut 😉
      (Benötigt ihr weitere schaut ins skript und passt es auf eure Bedürfnisse an)
    • Adapter Modus wird angezeigt
    • Fehler behoben

    AdapterStatus.gif

    Ist auch im Online Beispiel enthalten

    View:

    {
      "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": []
    }
    

    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
        let adapterList = [];
        let updateList = myHelper().getStateValueIfExist(adminUpdatesList);
    
        try {
            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;">${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;">${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;">${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;">${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;">${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;">${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
                })
            }
    
        } catch (err) {
            console.error(`[adapterStatus] error: ${err.message}, stack: ${err.stack}`);
        }
    
        let sortMode = myHelper().getStateValueIfExist(dpSortMode, 'name');
    
        if (sortMode === 'name' || sortMode === 'mode') {
            adapterList.sort(function (a, b) {
                return a[sortMode] == b[sortMode] ? 0 : +(a[sortMode] > b[sortMode]) || -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] == b[sortMode] ? 0 : +(a[sortMode] > b[sortMode]) || -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;
                });
            }
        }
    
        // adapterList = adapterList.filter(function(item){
        //     return item.status === 4;
        // })
    
        let result = JSON.stringify(adapterList);
        if (getState(dpList) !== result) {
            setState(dpList, result, true);
        }
    
    
    }
    
    // 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;
                }
            }
        }
    }
    

    <a href="https://github.com/Scrounger/ioBroker.linkeddevices">LinkedDevices Adapter</a>

    <a href="https://github.com/Scrounger/ioBroker.vis-materialdesign">Material Design Widgets</a>

    sigi234S ub.privatU S 4 Antworten Letzte Antwort
    6
    • ScroungerS Scrounger

      Sodele nochmal eine neue Version des Skriptes

      Voraussetzung Material Design Widgets v0.2.62 (demnächst im latest) !!!

      • mehr Farbeinstellung
      • Sortier Funktion
      • Filter Funktion - wäre sicher als nächster Wunsch gekommen, deshalb hab ich es schon mal eingebaut 😉
        (Benötigt ihr weitere schaut ins skript und passt es auf eure Bedürfnisse an)
      • Adapter Modus wird angezeigt
      • Fehler behoben

      AdapterStatus.gif

      Ist auch im Online Beispiel enthalten

      View:

      {
        "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": []
      }
      

      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
          let adapterList = [];
          let updateList = myHelper().getStateValueIfExist(adminUpdatesList);
      
          try {
              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;">${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;">${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;">${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;">${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;">${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;">${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
                  })
              }
      
          } catch (err) {
              console.error(`[adapterStatus] error: ${err.message}, stack: ${err.stack}`);
          }
      
          let sortMode = myHelper().getStateValueIfExist(dpSortMode, 'name');
      
          if (sortMode === 'name' || sortMode === 'mode') {
              adapterList.sort(function (a, b) {
                  return a[sortMode] == b[sortMode] ? 0 : +(a[sortMode] > b[sortMode]) || -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] == b[sortMode] ? 0 : +(a[sortMode] > b[sortMode]) || -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;
                  });
              }
          }
      
          // adapterList = adapterList.filter(function(item){
          //     return item.status === 4;
          // })
      
          let result = JSON.stringify(adapterList);
          if (getState(dpList) !== result) {
              setState(dpList, result, true);
          }
      
      
      }
      
      // 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;
                  }
              }
          }
      }
      
      sigi234S Online
      sigi234S Online
      sigi234
      Forum Testing Most Active
      schrieb am zuletzt editiert von
      #142

      @Scrounger

      Das ist MEGA Geil!👍

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

      C 1 Antwort Letzte Antwort
      0
      • sigi234S sigi234

        @Scrounger

        Das ist MEGA Geil!👍

        C Offline
        C Offline
        Conquest
        schrieb am zuletzt editiert von
        #143

        @sigi234 sagte in View Adapter Status:

        @Scrounger

        Das ist MEGA Geil!👍

        Das ist aber weit untertrieben 😂
        Ich fang wieder bei null an wenn ich die ganzen neuen Sachen hier sehe.

        1 Antwort Letzte Antwort
        0
        • ScroungerS Scrounger

          Sodele nochmal eine neue Version des Skriptes

          Voraussetzung Material Design Widgets v0.2.62 (demnächst im latest) !!!

          • mehr Farbeinstellung
          • Sortier Funktion
          • Filter Funktion - wäre sicher als nächster Wunsch gekommen, deshalb hab ich es schon mal eingebaut 😉
            (Benötigt ihr weitere schaut ins skript und passt es auf eure Bedürfnisse an)
          • Adapter Modus wird angezeigt
          • Fehler behoben

          AdapterStatus.gif

          Ist auch im Online Beispiel enthalten

          View:

          {
            "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": []
          }
          

          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
              let adapterList = [];
              let updateList = myHelper().getStateValueIfExist(adminUpdatesList);
          
              try {
                  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;">${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;">${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;">${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;">${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;">${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;">${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
                      })
                  }
          
              } catch (err) {
                  console.error(`[adapterStatus] error: ${err.message}, stack: ${err.stack}`);
              }
          
              let sortMode = myHelper().getStateValueIfExist(dpSortMode, 'name');
          
              if (sortMode === 'name' || sortMode === 'mode') {
                  adapterList.sort(function (a, b) {
                      return a[sortMode] == b[sortMode] ? 0 : +(a[sortMode] > b[sortMode]) || -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] == b[sortMode] ? 0 : +(a[sortMode] > b[sortMode]) || -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;
                      });
                  }
              }
          
              // adapterList = adapterList.filter(function(item){
              //     return item.status === 4;
              // })
          
              let result = JSON.stringify(adapterList);
              if (getState(dpList) !== result) {
                  setState(dpList, result, true);
              }
          
          
          }
          
          // 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;
                      }
                  }
              }
          }
          
          sigi234S Online
          sigi234S Online
          sigi234
          Forum Testing Most Active
          schrieb am zuletzt editiert von
          #144

          @Scrounger

          Screenshot (1837).png

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

          ScroungerS 1 Antwort Letzte Antwort
          0
          • sigi234S sigi234

            @Scrounger

            Screenshot (1837).png

            ScroungerS Offline
            ScroungerS Offline
            Scrounger
            Developer
            schrieb am zuletzt editiert von Scrounger
            #145

            @sigi234
            Du brauchst Version 0.2.62!
            Und die scheinst du nicht zu haben, da der JSON-String noch als html input im Editor ist, man aber ab der Version 0.2.62 eine Objekt Id angeben muss.

            siehe Online Beispiel

            <a href="https://github.com/Scrounger/ioBroker.linkeddevices">LinkedDevices Adapter</a>

            <a href="https://github.com/Scrounger/ioBroker.vis-materialdesign">Material Design Widgets</a>

            1 Antwort Letzte Antwort
            0
            • NegaleinN Offline
              NegaleinN Offline
              Negalein
              Global Moderator
              schrieb am zuletzt editiert von
              #146

              @Scrounger

              läuft 🙂
              vis (34).png

              ° Node.js: 20.17.0 NPM: 10.8.2
              ° Proxmox, Ubuntu 22.04.3 LTS
              ° Fixer ---> iob fix

              GlasfaserG 1 Antwort Letzte Antwort
              0
              • NegaleinN Negalein

                @Scrounger

                läuft 🙂
                vis (34).png

                GlasfaserG Offline
                GlasfaserG Offline
                Glasfaser
                schrieb am zuletzt editiert von Glasfaser
                #147

                @Scrounger

                Mein View geht im Popup Widget auf ... kann aber nichts anwählen über die Select , dort geht nichts auf.

                1.JPG

                Normaler View geht :

                2.JPG

                Geht das nicht über ein Popup !?

                Synology 918+ 16GB - ioBroker in Docker v9 , VISO auf Trekstor Primebook C13 13,3" , Hikvision Domkameras mit Surveillance Station .. CCU RaspberryMatic in Synology VM .. Zigbee CC2538+CC2592 .. Sonoff .. KNX .. Modbus ..

                ScroungerS 1 Antwort Letzte Antwort
                0
                • GlasfaserG Glasfaser

                  @Scrounger

                  Mein View geht im Popup Widget auf ... kann aber nichts anwählen über die Select , dort geht nichts auf.

                  1.JPG

                  Normaler View geht :

                  2.JPG

                  Geht das nicht über ein Popup !?

                  ScroungerS Offline
                  ScroungerS Offline
                  Scrounger
                  Developer
                  schrieb am zuletzt editiert von
                  #148

                  @Glasfaser sagte in View Adapter Status:

                  Mein View geht im Popup Widget auf ... kann aber nichts anwählen über die Select , dort geht nichts auf.

                  Was meinst du mit Popup? Welches Widget?
                  Mach am besten mal nen export.

                  <a href="https://github.com/Scrounger/ioBroker.linkeddevices">LinkedDevices Adapter</a>

                  <a href="https://github.com/Scrounger/ioBroker.vis-materialdesign">Material Design Widgets</a>

                  GlasfaserG 1 Antwort Letzte Antwort
                  0
                  • ScroungerS Scrounger

                    @Glasfaser sagte in View Adapter Status:

                    Mein View geht im Popup Widget auf ... kann aber nichts anwählen über die Select , dort geht nichts auf.

                    Was meinst du mit Popup? Welches Widget?
                    Mach am besten mal nen export.

                    GlasfaserG Offline
                    GlasfaserG Offline
                    Glasfaser
                    schrieb am zuletzt editiert von
                    #149

                    @Scrounger

                    Sorry habe ich vergessen .. Container Dialog

                    [{"tpl":"tplContainerDialog","data":{"g_fixed":true,"g_visibility":false,"g_css_font_text":false,"g_css_background":true,"g_css_shadow_padding":false,"g_css_border":true,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","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,"contains_view":"AdapterStatus","dialog_width":"1400","dialog_height":"782","title":"Adapter Status","dialog_top":"0","dialog_left":"0","modal":false,"noHeader":false,"class":"","name":"Adapterstatus Popup","comment":"transparent Layout"},"style":{"left":"881px","top":"378px","background":"transparent","width":"197px","height":"90px","z-index":"20","border-color":"transparent","font-family":"Jura-DemiBold","font-size":"14px"},"widgetSet":"jqui"}]
                    

                    Synology 918+ 16GB - ioBroker in Docker v9 , VISO auf Trekstor Primebook C13 13,3" , Hikvision Domkameras mit Surveillance Station .. CCU RaspberryMatic in Synology VM .. Zigbee CC2538+CC2592 .. Sonoff .. KNX .. Modbus ..

                    1 Antwort Letzte Antwort
                    0
                    • ScroungerS Offline
                      ScroungerS Offline
                      Scrounger
                      Developer
                      schrieb am zuletzt editiert von Scrounger
                      #150

                      Hab das skript oben nochmal geupdated
                      https://forum.iobroker.net/topic/26533/view-adapter-status/142

                      und folgende Funktionen hinzugefügt:

                      • Sortierung nach x Sekunden zurücksetzen
                      • Filter nach x Sekunden zurücksetzen

                      Timer startet jedesmal, wenn man die Auswahl für Sortierung oder Filter ändert. Konfigurierbar / Deaktivierbar über

                      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)
                      

                      @Glasfaser sagte in View Adapter Status:

                      @Scrounger

                      Sorry habe ich vergessen .. Container Dialog

                      Muss ich mir in Ruhe anschauen, tippe auf einen Bug im Select Widget. Bitte erstellt dazu einen issue auf git, dann vergesse ich es nicht.

                      <a href="https://github.com/Scrounger/ioBroker.linkeddevices">LinkedDevices Adapter</a>

                      <a href="https://github.com/Scrounger/ioBroker.vis-materialdesign">Material Design Widgets</a>

                      ScroungerS NegaleinN 2 Antworten Letzte Antwort
                      0
                      • ScroungerS Scrounger

                        Hab das skript oben nochmal geupdated
                        https://forum.iobroker.net/topic/26533/view-adapter-status/142

                        und folgende Funktionen hinzugefügt:

                        • Sortierung nach x Sekunden zurücksetzen
                        • Filter nach x Sekunden zurücksetzen

                        Timer startet jedesmal, wenn man die Auswahl für Sortierung oder Filter ändert. Konfigurierbar / Deaktivierbar über

                        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)
                        

                        @Glasfaser sagte in View Adapter Status:

                        @Scrounger

                        Sorry habe ich vergessen .. Container Dialog

                        Muss ich mir in Ruhe anschauen, tippe auf einen Bug im Select Widget. Bitte erstellt dazu einen issue auf git, dann vergesse ich es nicht.

                        ScroungerS Offline
                        ScroungerS Offline
                        Scrounger
                        Developer
                        schrieb am zuletzt editiert von
                        #151

                        @Glasfaser sagte in View Adapter Status:

                        @Scrounger

                        Sorry habe ich vergessen .. Container Dialog

                        Muss ich mir in Ruhe anschauen, tippe auf einen Bug im Select Widget. Bitte erstellt dazu einen issue auf git, dann vergesse ich es nicht.

                        Ok ist nur ein z-index problem. Musst für die beiden Select Widgets nur den z-index erhöhen, hab ihn einfach mal auf 1000 gesetzt, dann wirds angezeigt.

                        <a href="https://github.com/Scrounger/ioBroker.linkeddevices">LinkedDevices Adapter</a>

                        <a href="https://github.com/Scrounger/ioBroker.vis-materialdesign">Material Design Widgets</a>

                        GlasfaserG 1 Antwort Letzte Antwort
                        0
                        • ScroungerS Scrounger

                          Hab das skript oben nochmal geupdated
                          https://forum.iobroker.net/topic/26533/view-adapter-status/142

                          und folgende Funktionen hinzugefügt:

                          • Sortierung nach x Sekunden zurücksetzen
                          • Filter nach x Sekunden zurücksetzen

                          Timer startet jedesmal, wenn man die Auswahl für Sortierung oder Filter ändert. Konfigurierbar / Deaktivierbar über

                          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)
                          

                          @Glasfaser sagte in View Adapter Status:

                          @Scrounger

                          Sorry habe ich vergessen .. Container Dialog

                          Muss ich mir in Ruhe anschauen, tippe auf einen Bug im Select Widget. Bitte erstellt dazu einen issue auf git, dann vergesse ich es nicht.

                          NegaleinN Offline
                          NegaleinN Offline
                          Negalein
                          Global Moderator
                          schrieb am zuletzt editiert von
                          #152

                          @Scrounger sagte in View Adapter Status:

                          und folgende Funktionen hinzugefügt:

                          Muss das ganze Script ausgetauscht werden, oder reicht es die besagten Zeilen einzufügen?

                          ° Node.js: 20.17.0 NPM: 10.8.2
                          ° Proxmox, Ubuntu 22.04.3 LTS
                          ° Fixer ---> iob fix

                          ScroungerS 1 Antwort Letzte Antwort
                          0
                          • NegaleinN Negalein

                            @Scrounger sagte in View Adapter Status:

                            und folgende Funktionen hinzugefügt:

                            Muss das ganze Script ausgetauscht werden, oder reicht es die besagten Zeilen einzufügen?

                            ScroungerS Offline
                            ScroungerS Offline
                            Scrounger
                            Developer
                            schrieb am zuletzt editiert von
                            #153

                            @Negalein sagte in View Adapter Status:

                            @Scrounger sagte in View Adapter Status:

                            und folgende Funktionen hinzugefügt:

                            Muss das ganze Script ausgetauscht werden, oder reicht es die besagten Zeilen einzufügen?

                            Das ganze Skript

                            <a href="https://github.com/Scrounger/ioBroker.linkeddevices">LinkedDevices Adapter</a>

                            <a href="https://github.com/Scrounger/ioBroker.vis-materialdesign">Material Design Widgets</a>

                            1 Antwort Letzte Antwort
                            0
                            • ScroungerS Scrounger

                              @Glasfaser sagte in View Adapter Status:

                              @Scrounger

                              Sorry habe ich vergessen .. Container Dialog

                              Muss ich mir in Ruhe anschauen, tippe auf einen Bug im Select Widget. Bitte erstellt dazu einen issue auf git, dann vergesse ich es nicht.

                              Ok ist nur ein z-index problem. Musst für die beiden Select Widgets nur den z-index erhöhen, hab ihn einfach mal auf 1000 gesetzt, dann wirds angezeigt.

                              GlasfaserG Offline
                              GlasfaserG Offline
                              Glasfaser
                              schrieb am zuletzt editiert von Glasfaser
                              #154

                              @Scrounger

                              Sorry ... habe alles gemacht auch mal auf 9999 Z-Index gesetzt ....immer das gleiche

                              Habe auch ein ContainerIconDialog genommen , dort auch das gleiche ,

                              [{"tpl":"tplContainerIconDialog","data":{"g_fixed":true,"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,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis.0/negalein/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.0/negalein/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.0/negalein/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,"src":"/vis.0/negalein/Akkuleer.png","class":"","contains_view":"AdapterStatus","modal":true,"dialog_width":"1400","dialog_height":"782","dialog_top":"0","dialog_left":"0","overflowX":"hidden","overflowY":"hidden","visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide"},"style":{"left":"791px","top":"403px","width":"36px","height":"23px","z-index":"2"},"widgetSet":"jqui"}]
                              

                              das merkwürdige ist , wenn man den Select-Widget im Popup aufklappt sieht man den weißen Rand der runtergeht und schließt man den Popup ist die Auflistung im Hintergrund noch auf .

                              5.JPG

                              Synology 918+ 16GB - ioBroker in Docker v9 , VISO auf Trekstor Primebook C13 13,3" , Hikvision Domkameras mit Surveillance Station .. CCU RaspberryMatic in Synology VM .. Zigbee CC2538+CC2592 .. Sonoff .. KNX .. Modbus ..

                              ScroungerS 1 Antwort Letzte Antwort
                              0
                              • GlasfaserG Glasfaser

                                @Scrounger

                                Sorry ... habe alles gemacht auch mal auf 9999 Z-Index gesetzt ....immer das gleiche

                                Habe auch ein ContainerIconDialog genommen , dort auch das gleiche ,

                                [{"tpl":"tplContainerIconDialog","data":{"g_fixed":true,"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,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis.0/negalein/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.0/negalein/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.0/negalein/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,"src":"/vis.0/negalein/Akkuleer.png","class":"","contains_view":"AdapterStatus","modal":true,"dialog_width":"1400","dialog_height":"782","dialog_top":"0","dialog_left":"0","overflowX":"hidden","overflowY":"hidden","visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide"},"style":{"left":"791px","top":"403px","width":"36px","height":"23px","z-index":"2"},"widgetSet":"jqui"}]
                                

                                das merkwürdige ist , wenn man den Select-Widget im Popup aufklappt sieht man den weißen Rand der runtergeht und schließt man den Popup ist die Auflistung im Hintergrund noch auf .

                                5.JPG

                                ScroungerS Offline
                                ScroungerS Offline
                                Scrounger
                                Developer
                                schrieb am zuletzt editiert von
                                #155

                                @Glasfaser
                                Das dropdown wird hinter dem popup nach dem öffnen angezeigt.
                                Bin mir sicher das des ein z-index thema ist.

                                Bei mir gehts, auch mit ContainerIconDialog

                                AdapterStatus_popup.gif

                                <a href="https://github.com/Scrounger/ioBroker.linkeddevices">LinkedDevices Adapter</a>

                                <a href="https://github.com/Scrounger/ioBroker.vis-materialdesign">Material Design Widgets</a>

                                GlasfaserG 1 Antwort Letzte Antwort
                                1
                                • ScroungerS Scrounger

                                  @Glasfaser
                                  Das dropdown wird hinter dem popup nach dem öffnen angezeigt.
                                  Bin mir sicher das des ein z-index thema ist.

                                  Bei mir gehts, auch mit ContainerIconDialog

                                  AdapterStatus_popup.gif

                                  GlasfaserG Offline
                                  GlasfaserG Offline
                                  Glasfaser
                                  schrieb am zuletzt editiert von
                                  #156

                                  @Scrounger

                                  Danke ... dein Popup Video hat mich gerade darauf gebracht ...

                                  Ich habe ein anderes Design von Material Design CSS V1 ,
                                  dort ist mir gerade aufgefallen , das im Skript der Fehler liegt , da wenn ich es entferne dann wird der Select-Widget richtig geöffnet .

                                  1.JPG

                                  Habe mal zum Test das neue Material Design CSS V2 Skript eingefügt , dort ist der Fehler auch

                                  Hast du eine Idee wo der Fehler sein könnte ??
                                  .
                                  SKRIPT :

                                  /* -----
                                    Material Design JS for ioBroker.vis
                                    (c) 2017 Uhula, MIT License
                                    https://github.com/Uhula/ioBroker-Material-Design-Style
                                    V1.7 28.12.2017
                                    o Korrektur mdui-lnav/rnav. Funktionierte mit mdui-toggle nicht korrekt  
                                    V1.6 16.10.2017 
                                    O _toggleFullscreen geändert, damit die function auch im ioBroker
                                                    fullscreen Mode funktioniert
                                    o Delegator-Eventhandler für body gesetzt (bisher #vis_container, wirkten dann aber in Dialogen nicht)
                                    V1.5 11.10.2017 
                                    o MDUI.handleTables fertig
                                    V1.3 24.09.2017 
                                    + MDUI.handleTables hinzu (in Entwicklung)
                                    V1.0 01.09.2017
                                    ----- */
                                  
                                  // Zur sicheren CSS-Erkennung der Runtime eine CSS-Klasse anlegen
                                  document.documentElement.className +=  " mdui-runtime";
                                  
                                  // Überprüfen ob touch zur Verfügung steht und entsprechend eine 
                                  // CSS Klasse touch bzw no-touch erzeugen 
                                  document.documentElement.className += 
                                     (("ontouchstart" in document.documentElement) ? " mdui-touch" : " mdui-notouch");
                                  
                                  
                                  /* -----
                                    MDUI
                                    ----- 
                                    Sammlung von JS-Funktionen für das Material Design
                                    (c) 2017 Uhula, MIT License
                                  */
                                  
                                  var MDUI = (function () {
                                  
                                  
                                  var isSubtreeModified = false;
                                  
                                  // liefert den suffix einer gegeben class zurück-Navigieren
                                  // Bsp: mdui-target-w00002 -> w00002
                                  //      mdui-zoom-to-200 -> 200
                                  function _getClassSuffix( $ele, classname ) {
                                     var suf = "";
                                     if ($ele) {
                                         var c = $ele.attr( "class" );
                                         suf = c.substr(c.indexOf(classname)+classname.length,1000)+" ";
                                         suf = suf.substr(0,suf.indexOf(" "));
                                     }
                                     return suf;    
                                  }
                                  
                                  //
                                  function _getGroupID( ele ) { return _getClassSuffix(ele, "mdui-group-" ); }
                                  //
                                  function _getTargetID( ele ) { return _getClassSuffix(ele, "mdui-target-" ); }
                                  
                                  //
                                  function _getScrollbarWidth() {
                                     var $outer = $('<div>').css({visibility: 'hidden', width: 100, overflow: 'scroll'}).appendTo('body'),
                                         widthWithScroll = $('<div>').css({width: '100%'}).appendTo($outer).outerWidth();
                                     $outer.remove();
                                     return 100 - widthWithScroll;
                                  }
                                  //
                                  function _getScrollbarHeight() {
                                     var $outer = $('<div>').css({visibility: 'hidden', height: 100, overflow: 'scroll'}).appendTo('body'),
                                         heightWithScroll = $('<div>').css({height: '100%'}).appendTo($outer).outerHeight();
                                     $outer.remove();
                                     return 100 - heightWithScroll;
                                  }
                                  
                                  function _formatDatetime(date, format) {
                                     function fill(comp) {
                                         return ((parseInt(comp) < 10) ? ('0' + comp) : comp)
                                     }
                                         
                                     var months = ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'];
                                     var d = format;
                                     var o = {
                                             "y+": date.getFullYear(), // year
                                             "m+": fill(date.getMonth()+1), //month
                                             "M+": months[date.getMonth()], //month
                                             "d+": fill(date.getDate()), //day
                                             "H+": fill((date.getHours() > 12) ? date.getHours() % 12 : date.getHours()), //hour
                                             "h+": fill(date.getHours()), //hour
                                             "n+": fill(date.getMinutes()), //minute
                                             "s+": fill(date.getSeconds()), //second
                                             "S+": fill(date.getMilliseconds()), //millisecond,
                                             "b+": (date.getHours() >= 12) ? 'PM' : 'AM'
                                         };
                                     for (var k in o) {
                                         if (new RegExp("(" + k + ")").test(format)) {
                                             d = d.replace(RegExp.$1, o[k]);
                                         }
                                     }
                                     return d;
                                  }
                                  
                                  
                                  
                                  // alle Elemente mit class "mdui-group-XXX" togglen, in denen 
                                  // XXX aus class "mdui-group-XXX" des ele ist UND
                                  // alle Elemente mit class "mdui-target-XXX" togglen, in denen 
                                  // XXX aus class "mdui-target-XXX" des ele ist
                                  function _toggleVisibility( $ele ) {
                                     $ele.toggleClass("ui-state-active");
                                     var id = _getGroupID( $ele );
                                     if (id!=="") 
                                         $("[class*='mdui-group-"+id+"']").not("[class*='mdui-toggle']").each( function (index) {
                                             $(this).toggleClass("mdui-hide");
                                         });    
                                     id = _getTargetID( $ele );
                                     if (id!=="") 
                                         $( "[class*='mdui-target-"+id+"']").not("[class*='mdui-toggle']").each( function (index) {
                                             $(this).toggleClass("mdui-hide");
                                         });
                                  }
                                  
                                  // das in ele class \"mdui-target-XXX\" angegeben Element mit der id \"XXX\"  wird 
                                  // - fullscreen angezeigt, wenn es noch nicht fullscreen ist
                                  // - wieder normal angezeigt, wenn es fullscreen ist
                                  function _toggleFullscreen( $ele ){
                                     if (!$ele) return;
                                     var $target = $ele.closest(".vis-view");
                                     if (!$target) return;
                                     var styleold = $target.attr("styleold");
                                     if (styleold) {
                                         $target.attr("style",styleold);
                                         $target.removeAttr("styleold");
                                         $target.appendTo(".mdui-id-"+$target.attr("id"));
                                         } else {
                                             $target.parent().addClass("mdui-id-"+$target.attr("id"));
                                             $target.attr("styleold",$target.attr("style"));
                                             $target.attr("style","position:fixed; left:0; top:0; width:100%; height:100%; z-index: 2147483647 !important;background:#212121 !important; ");
                                             $target.appendTo( "body" );
                                             //$target.appendTo( "body #vis_container" );
                                             }
                                  }
                                  
                                  
                                  // ele muss class Einträge für das Target und den Skalierungsmodus haben
                                  // "mdui-target-(id) mdui-scale-(scalemode)" 
                                  // id: Ziel-Element mit id=id, welches ein zu skalierendes img enthält
                                  // scalemode: fit / hfit / vfit / in / out / (number)
                                  // number: Zahl in %
                                  function _scale( ele ) {
                                     var id = _getTargetID( ele );
                                     var $img = $( "#"+id+" img" );
                                     if ($img) {
                                         var scale = _getClassSuffix(ele, "mdui-scale-" );
                                         $img.width("1px"); // Scrollbars entfernen um die echte Höhe zu bekommen
                                         $img.height("1px");
                                         var dim = {
                                             pw : $img.parent().width(), 
                                             ph : $img.parent().height(), 
                                             w  : $img[0].naturalWidth, 
                                             h  : $img[0].naturalHeight
                                         };
                                         switch(scale) {
                                             case "fit":
                                                 if (dim.pw / dim.w < dim.ph / dim.h ) scale = dim.pw / dim.w;  
                                                 else scale = dim.ph / dim.h;
                                                 break;
                                             case "hfit":
                                                 if (dim.pw / dim.w < dim.ph / dim.h ) scale = dim.pw / dim.w;
                                                 else scale = (dim.pw - _getScrollbarWidth() - 4  ) / dim.w;
                                                 break;
                                             case "vfit":
                                                 if ( dim.pw / dim.w > dim.ph / dim.h ) scale = dim.ph / dim.h;
                                                 else scale = (dim.ph - _getScrollbarHeight() - 4  ) / dim.h;
                                                 break;
                                             case "in":
                                             case "out":
                                                 var old = $img.attr( "style" );
                                                 old = old.substr(old.indexOf("scale(")+6,20);  
                                                 old = old.substr(0,old.indexOf(")"));  
                                                 if (old * 1==0) scale = 1;
                                                 else if (scale=="in") scale = old * 1.41;
                                                      else scale = old / 1.41;
                                                 break;
                                             default:
                                                 if (scale<=0 || scale>10000)
                                                     scale = 100;
                                                 scale = scale/100;
                                         }
                                         scale = Math.round(scale*100)/100;
                                         $img.attr( "style", "position:absolute;top:0;left:0;transform-origin:0 0;transition: transform 0.3s ease-out; transform:scale("+scale+");" );
                                         }
                                  }
                                  
                                  // ersetzt im src-Attribute des Unter-Elements von (id) den "&range=& 
                                  // durch den Wert des in ele angegebenen (span). Für flot-Diagramme
                                  // "mdui-target-(id) mdui-timespan-(span)" 
                                  // id: Ziel-Element mit id=id, welches das flot (src) enthält
                                  // span: inc / dec / (number)
                                  // number: Zahl in Minuten
                                  function _timespan( ele ) {
                                     var id = _getTargetID( ele );
                                     var target = $( "#"+id+" [src]" );
                                     if (target) {
                                         var timespan = _getClassSuffix(ele, "mdui-timespan-" );
                                         var src = target.attr( "src" );
                                         var min = src.substr(src.indexOf("&range=")+7,20);  
                                         min = min.substr(0,min.indexOf("&"));  
                                         switch(timespan) {
                                             case "inc":
                                                 min = min * 2;
                                                 break;
                                             case "dec":
                                                 min = min / 2;
                                                 break;
                                             default:
                                                 if ( timespan<=0 )
                                                     timespan = 1440;
                                                 min = timespan;
                                         }
                                         src = src.replace(/&range=[0-9]*&/g, "&range="+min+"&");
                                         target.attr("src",src);
                                     }
                                  }
                                  
                                  /*  */
                                  function _resetTable( $ele, $table ) {
                                     $ele.removeClass("mdui-table-tile");
                                     $ele.removeClass("mdui-table-card");
                                     $ele.removeClass("mdui-table-list");
                                     $table.find("tbody>tr").each( function(index) {
                                         $(this).width("auto");
                                         $(this).height("auto");
                                         $(this).find("td").each( function(index) {
                                             $(this).attr("labelth","");
                                         });  
                                     });
                                  }
                                  
                                  /*  */
                                  function _handleTable( $ele, $table, opt ) {
                                  
                                     function setColWidth( colwidth ) {
                                         $table.find("tbody>tr").each( function(index) {
                                             $(this).outerWidth(colwidth);
                                         });
                                     }
                                     function setColHeight() {
                                         var height = 0;
                                         $table.find("tbody>tr").each( function(index) {
                                             if ($(this).height() > height ) height = $(this).height();
                                         });
                                         if ( height > 0 )
                                             $table.find("tbody>tr").each( function(index) {
                                                 $(this).height( height );
                                             });
                                     }
                                     
                                     var innerWidth = $ele.innerWidth();
                                  
                                     _resetTable($ele, $table);
                                     $ele.addClass("mdui-table-"+opt.type);
                                     if (opt.label) {
                                         // Zellen mit Labels aus <th> ergänzen ?    
                                         var labels = [];
                                         $table.find("thead>tr>th").each( function(index) {
                                             labels[index] = $(this).text();
                                         });
                                         $table.find("tbody>tr").each( function(index) {
                                             $(this).find("td").each( function(index) {
                                                 if (index < labels.length) 
                                                     $(this).attr("labelth",labels[index]);
                                             });  
                                         });
                                     }
                                  
                                     if (opt.colwidth>1) setColWidth(opt.colwidth);
                                     if (opt.colwidth>2) setColHeight();
                                  
                                     return true;    
                                  }
                                  
                                  
                                  /* Alle mdui-table durchlaufen und überprüfen, ob die minimale Width erreicht
                                  wurde um sie in den responsive State zu überführen 
                                  mdui-table-(mode)(-opt1)(-opt2)...(-optn)
                                  mdui-table-ascard-r600-w200-l */
                                  function _handleTables( ) {
                                     $("[class*='mdui-table ']").each( function (index) {
                                         var $ele = $(this);
                                         var $table;
                                         $table = $ele;
                                         if (!$table.is("table")) $table=$table.find("table");
                                         if (!$table.is("table")) return true; // next each 
                                         
                                         var innerWidth = $ele.innerWidth();
                                         var classes = $ele.attr("class")
                                             .split(" ")
                                             .filter( function ( ele ) { 
                                                     return  (ele.indexOf("mdui-table-ascard") > -1)
                                                          || (ele.indexOf("mdui-table-astile") > -1)
                                                          || (ele.indexOf("mdui-table-aslist") > -1); });
                                         var opts = [];
                                         var opt;
                                         for (var i = 0; i < classes.length; i++) {
                                             opts[i] = [];
                                             opts[i].reswidth = 9999;
                                             opts[i].colwidth = 0;
                                             opts[i].label = false;
                                             opts[i].type = classes[i].substr(13,4); 
                                             opt = classes[i].substr(18,200).split("-"); 
                                             for (var j = 0; j < opt.length; j++) {
                                                 switch(opt[j][0]) {
                                                 case "r":
                                                     opts[i].reswidth = parseInt(opt[j].substr(1,5));
                                                     break;
                                                 case "w":
                                                     opts[i].colwidth = parseInt(opt[j].substr(1,5));
                                                     break;
                                                 case "c":
                                                     opts[i].colwidth = parseInt(opt[j].substr(1,5));
                                                     if (opts[i].colwidth>0) opts[i].colwidth = (innerWidth-_getScrollbarWidth()-8) / opts[i].colwidth;
                                                     break;
                                                 case "l":
                                                     opts[i].label = true;
                                                     break;
                                                 default:    
                                                 }                       
                                             }
                                         }
                                         opts.sort(function(a, b){return a.reswidth-b.reswidth});
                                  //console.log(opts);
                                         if (opts.length === 0) return true; // next each 
                                         var handled = false;
                                         for (i = 0; i < opts.length; i++) {
                                             if ( innerWidth < opts[i].reswidth )
                                                handled = _handleTable( $ele, $table, opts[i]);
                                             if (handled) break;   
                                         }
                                         if (!handled) _resetTable($ele, $table);
                                     }); 
                                  
                                  }
                                  
                                  
                                  
                                  
                                  // DOM SubTree-Änderungen einmalig alle 500ms auswerten (diese Events werden 
                                  // u.U. 1000-fach gefeuert und müssen deswegen verzögert ausgeführt werden)
                                  function _onSubTreeModified( $ele ) {
                                     if (!isSubtreeModified) {
                                         isSubtreeModified = true;
                                         setTimeout(function () {
                                             _handleTables();
                                             isSubtreeModified=false;
                                         }, 500);
                                     }
                                  }
                                  
                                  return {
                                     toggleVisibility: _toggleVisibility,
                                     toggleFullscreen: _toggleFullscreen,
                                     scale: _scale,
                                     timespan: _timespan,
                                     handleTables: _handleTables,
                                     onSubTreeModified : _onSubTreeModified
                                  };
                                  
                                  })();
                                  
                                  
                                  // Eventhandler für body-Delegators setzen (früher:#vis_container) 
                                  setTimeout(function () {
                                     // click-Event für das left-nav Element zum Öffnen
                                     $("body").on( "click", ".mdui-lnavbutton", function() { 
                                         $( ".mdui-lnav" ).addClass( "mdui-lnav-open" );
                                     } );
                                     // click-Event für die left-nav zum Schließen
                                     $("body").on( "click", ".mdui-lnav", function() { 
                                         $( ".mdui-lnav" ).removeClass( "mdui-lnav-open" ); 
                                     } );
                                     // click-Event für das right-nav Element zum Öffnen
                                     $("body").on( "click", ".mdui-rnavbutton", function() { 
                                         $( ".mdui-rnav" ).addClass( "mdui-rnav-open" );
                                     } );
                                     // click-Event für die right-nav zum Schließen
                                     $("body").on( "click", ".mdui-rnav", function() { 
                                         $( ".mdui-rnav" ).removeClass( "mdui-rnav-open" ); 
                                     } );
                                  
                                     // click-Eventhandler für "mdui-scale-" setzen
                                     $("body").on( "click", "[class*='mdui-scale-']", function(event) { 
                                         MDUI.scale( $(this) );
                                     } );
                                  
                                     // click-Handler für "mdui-toggle"  
                                     $("body").on( "click", ".mdui-toggle", function(event) { 
                                         event.preventDefault();
                                         event.stopImmediatePropagation();
                                         MDUI.toggleVisibility( $(this) );
                                     } );
                                  
                                     // click-Handler für "mdui-fullscreen" 
                                     $("body").on( "click", ".mdui-fullscreen", function(event) { 
                                         MDUI.toggleFullscreen( $(this) );
                                     } );
                                  
                                     // click-Handler für "mdui-timepsan-" 
                                     $("body").on( "click", "[class*='mdui-timespan-']", function(event) { 
                                         MDUI.timespan( $(this) );
                                     } );
                                  
                                     $( window ).on("resize", function() {
                                       MDUI.handleTables();
                                     });
                                  
                                     // Überwachen des #vis_containers auf Änderungen (z.B. wenn views nachgeladen
                                     // werden)
                                     $( "#vis_container" ).on( "DOMSubtreeModified", function(event) { 
                                         MDUI.onSubTreeModified( $(this) );
                                     } );
                                     // für den ersten load einmal aufrufen
                                     MDUI.onSubTreeModified( );
                                  
                                  }, 1000); 
                                  
                                  
                                  
                                  

                                  Synology 918+ 16GB - ioBroker in Docker v9 , VISO auf Trekstor Primebook C13 13,3" , Hikvision Domkameras mit Surveillance Station .. CCU RaspberryMatic in Synology VM .. Zigbee CC2538+CC2592 .. Sonoff .. KNX .. Modbus ..

                                  ScroungerS 1 Antwort Letzte Antwort
                                  0
                                  • GlasfaserG Glasfaser

                                    @Scrounger

                                    Danke ... dein Popup Video hat mich gerade darauf gebracht ...

                                    Ich habe ein anderes Design von Material Design CSS V1 ,
                                    dort ist mir gerade aufgefallen , das im Skript der Fehler liegt , da wenn ich es entferne dann wird der Select-Widget richtig geöffnet .

                                    1.JPG

                                    Habe mal zum Test das neue Material Design CSS V2 Skript eingefügt , dort ist der Fehler auch

                                    Hast du eine Idee wo der Fehler sein könnte ??
                                    .
                                    SKRIPT :

                                    /* -----
                                      Material Design JS for ioBroker.vis
                                      (c) 2017 Uhula, MIT License
                                      https://github.com/Uhula/ioBroker-Material-Design-Style
                                      V1.7 28.12.2017
                                      o Korrektur mdui-lnav/rnav. Funktionierte mit mdui-toggle nicht korrekt  
                                      V1.6 16.10.2017 
                                      O _toggleFullscreen geändert, damit die function auch im ioBroker
                                                      fullscreen Mode funktioniert
                                      o Delegator-Eventhandler für body gesetzt (bisher #vis_container, wirkten dann aber in Dialogen nicht)
                                      V1.5 11.10.2017 
                                      o MDUI.handleTables fertig
                                      V1.3 24.09.2017 
                                      + MDUI.handleTables hinzu (in Entwicklung)
                                      V1.0 01.09.2017
                                      ----- */
                                    
                                    // Zur sicheren CSS-Erkennung der Runtime eine CSS-Klasse anlegen
                                    document.documentElement.className +=  " mdui-runtime";
                                    
                                    // Überprüfen ob touch zur Verfügung steht und entsprechend eine 
                                    // CSS Klasse touch bzw no-touch erzeugen 
                                    document.documentElement.className += 
                                       (("ontouchstart" in document.documentElement) ? " mdui-touch" : " mdui-notouch");
                                    
                                    
                                    /* -----
                                      MDUI
                                      ----- 
                                      Sammlung von JS-Funktionen für das Material Design
                                      (c) 2017 Uhula, MIT License
                                    */
                                    
                                    var MDUI = (function () {
                                    
                                    
                                    var isSubtreeModified = false;
                                    
                                    // liefert den suffix einer gegeben class zurück-Navigieren
                                    // Bsp: mdui-target-w00002 -> w00002
                                    //      mdui-zoom-to-200 -> 200
                                    function _getClassSuffix( $ele, classname ) {
                                       var suf = "";
                                       if ($ele) {
                                           var c = $ele.attr( "class" );
                                           suf = c.substr(c.indexOf(classname)+classname.length,1000)+" ";
                                           suf = suf.substr(0,suf.indexOf(" "));
                                       }
                                       return suf;    
                                    }
                                    
                                    //
                                    function _getGroupID( ele ) { return _getClassSuffix(ele, "mdui-group-" ); }
                                    //
                                    function _getTargetID( ele ) { return _getClassSuffix(ele, "mdui-target-" ); }
                                    
                                    //
                                    function _getScrollbarWidth() {
                                       var $outer = $('<div>').css({visibility: 'hidden', width: 100, overflow: 'scroll'}).appendTo('body'),
                                           widthWithScroll = $('<div>').css({width: '100%'}).appendTo($outer).outerWidth();
                                       $outer.remove();
                                       return 100 - widthWithScroll;
                                    }
                                    //
                                    function _getScrollbarHeight() {
                                       var $outer = $('<div>').css({visibility: 'hidden', height: 100, overflow: 'scroll'}).appendTo('body'),
                                           heightWithScroll = $('<div>').css({height: '100%'}).appendTo($outer).outerHeight();
                                       $outer.remove();
                                       return 100 - heightWithScroll;
                                    }
                                    
                                    function _formatDatetime(date, format) {
                                       function fill(comp) {
                                           return ((parseInt(comp) < 10) ? ('0' + comp) : comp)
                                       }
                                           
                                       var months = ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'];
                                       var d = format;
                                       var o = {
                                               "y+": date.getFullYear(), // year
                                               "m+": fill(date.getMonth()+1), //month
                                               "M+": months[date.getMonth()], //month
                                               "d+": fill(date.getDate()), //day
                                               "H+": fill((date.getHours() > 12) ? date.getHours() % 12 : date.getHours()), //hour
                                               "h+": fill(date.getHours()), //hour
                                               "n+": fill(date.getMinutes()), //minute
                                               "s+": fill(date.getSeconds()), //second
                                               "S+": fill(date.getMilliseconds()), //millisecond,
                                               "b+": (date.getHours() >= 12) ? 'PM' : 'AM'
                                           };
                                       for (var k in o) {
                                           if (new RegExp("(" + k + ")").test(format)) {
                                               d = d.replace(RegExp.$1, o[k]);
                                           }
                                       }
                                       return d;
                                    }
                                    
                                    
                                    
                                    // alle Elemente mit class "mdui-group-XXX" togglen, in denen 
                                    // XXX aus class "mdui-group-XXX" des ele ist UND
                                    // alle Elemente mit class "mdui-target-XXX" togglen, in denen 
                                    // XXX aus class "mdui-target-XXX" des ele ist
                                    function _toggleVisibility( $ele ) {
                                       $ele.toggleClass("ui-state-active");
                                       var id = _getGroupID( $ele );
                                       if (id!=="") 
                                           $("[class*='mdui-group-"+id+"']").not("[class*='mdui-toggle']").each( function (index) {
                                               $(this).toggleClass("mdui-hide");
                                           });    
                                       id = _getTargetID( $ele );
                                       if (id!=="") 
                                           $( "[class*='mdui-target-"+id+"']").not("[class*='mdui-toggle']").each( function (index) {
                                               $(this).toggleClass("mdui-hide");
                                           });
                                    }
                                    
                                    // das in ele class \"mdui-target-XXX\" angegeben Element mit der id \"XXX\"  wird 
                                    // - fullscreen angezeigt, wenn es noch nicht fullscreen ist
                                    // - wieder normal angezeigt, wenn es fullscreen ist
                                    function _toggleFullscreen( $ele ){
                                       if (!$ele) return;
                                       var $target = $ele.closest(".vis-view");
                                       if (!$target) return;
                                       var styleold = $target.attr("styleold");
                                       if (styleold) {
                                           $target.attr("style",styleold);
                                           $target.removeAttr("styleold");
                                           $target.appendTo(".mdui-id-"+$target.attr("id"));
                                           } else {
                                               $target.parent().addClass("mdui-id-"+$target.attr("id"));
                                               $target.attr("styleold",$target.attr("style"));
                                               $target.attr("style","position:fixed; left:0; top:0; width:100%; height:100%; z-index: 2147483647 !important;background:#212121 !important; ");
                                               $target.appendTo( "body" );
                                               //$target.appendTo( "body #vis_container" );
                                               }
                                    }
                                    
                                    
                                    // ele muss class Einträge für das Target und den Skalierungsmodus haben
                                    // "mdui-target-(id) mdui-scale-(scalemode)" 
                                    // id: Ziel-Element mit id=id, welches ein zu skalierendes img enthält
                                    // scalemode: fit / hfit / vfit / in / out / (number)
                                    // number: Zahl in %
                                    function _scale( ele ) {
                                       var id = _getTargetID( ele );
                                       var $img = $( "#"+id+" img" );
                                       if ($img) {
                                           var scale = _getClassSuffix(ele, "mdui-scale-" );
                                           $img.width("1px"); // Scrollbars entfernen um die echte Höhe zu bekommen
                                           $img.height("1px");
                                           var dim = {
                                               pw : $img.parent().width(), 
                                               ph : $img.parent().height(), 
                                               w  : $img[0].naturalWidth, 
                                               h  : $img[0].naturalHeight
                                           };
                                           switch(scale) {
                                               case "fit":
                                                   if (dim.pw / dim.w < dim.ph / dim.h ) scale = dim.pw / dim.w;  
                                                   else scale = dim.ph / dim.h;
                                                   break;
                                               case "hfit":
                                                   if (dim.pw / dim.w < dim.ph / dim.h ) scale = dim.pw / dim.w;
                                                   else scale = (dim.pw - _getScrollbarWidth() - 4  ) / dim.w;
                                                   break;
                                               case "vfit":
                                                   if ( dim.pw / dim.w > dim.ph / dim.h ) scale = dim.ph / dim.h;
                                                   else scale = (dim.ph - _getScrollbarHeight() - 4  ) / dim.h;
                                                   break;
                                               case "in":
                                               case "out":
                                                   var old = $img.attr( "style" );
                                                   old = old.substr(old.indexOf("scale(")+6,20);  
                                                   old = old.substr(0,old.indexOf(")"));  
                                                   if (old * 1==0) scale = 1;
                                                   else if (scale=="in") scale = old * 1.41;
                                                        else scale = old / 1.41;
                                                   break;
                                               default:
                                                   if (scale<=0 || scale>10000)
                                                       scale = 100;
                                                   scale = scale/100;
                                           }
                                           scale = Math.round(scale*100)/100;
                                           $img.attr( "style", "position:absolute;top:0;left:0;transform-origin:0 0;transition: transform 0.3s ease-out; transform:scale("+scale+");" );
                                           }
                                    }
                                    
                                    // ersetzt im src-Attribute des Unter-Elements von (id) den "&range=& 
                                    // durch den Wert des in ele angegebenen (span). Für flot-Diagramme
                                    // "mdui-target-(id) mdui-timespan-(span)" 
                                    // id: Ziel-Element mit id=id, welches das flot (src) enthält
                                    // span: inc / dec / (number)
                                    // number: Zahl in Minuten
                                    function _timespan( ele ) {
                                       var id = _getTargetID( ele );
                                       var target = $( "#"+id+" [src]" );
                                       if (target) {
                                           var timespan = _getClassSuffix(ele, "mdui-timespan-" );
                                           var src = target.attr( "src" );
                                           var min = src.substr(src.indexOf("&range=")+7,20);  
                                           min = min.substr(0,min.indexOf("&"));  
                                           switch(timespan) {
                                               case "inc":
                                                   min = min * 2;
                                                   break;
                                               case "dec":
                                                   min = min / 2;
                                                   break;
                                               default:
                                                   if ( timespan<=0 )
                                                       timespan = 1440;
                                                   min = timespan;
                                           }
                                           src = src.replace(/&range=[0-9]*&/g, "&range="+min+"&");
                                           target.attr("src",src);
                                       }
                                    }
                                    
                                    /*  */
                                    function _resetTable( $ele, $table ) {
                                       $ele.removeClass("mdui-table-tile");
                                       $ele.removeClass("mdui-table-card");
                                       $ele.removeClass("mdui-table-list");
                                       $table.find("tbody>tr").each( function(index) {
                                           $(this).width("auto");
                                           $(this).height("auto");
                                           $(this).find("td").each( function(index) {
                                               $(this).attr("labelth","");
                                           });  
                                       });
                                    }
                                    
                                    /*  */
                                    function _handleTable( $ele, $table, opt ) {
                                    
                                       function setColWidth( colwidth ) {
                                           $table.find("tbody>tr").each( function(index) {
                                               $(this).outerWidth(colwidth);
                                           });
                                       }
                                       function setColHeight() {
                                           var height = 0;
                                           $table.find("tbody>tr").each( function(index) {
                                               if ($(this).height() > height ) height = $(this).height();
                                           });
                                           if ( height > 0 )
                                               $table.find("tbody>tr").each( function(index) {
                                                   $(this).height( height );
                                               });
                                       }
                                       
                                       var innerWidth = $ele.innerWidth();
                                    
                                       _resetTable($ele, $table);
                                       $ele.addClass("mdui-table-"+opt.type);
                                       if (opt.label) {
                                           // Zellen mit Labels aus <th> ergänzen ?    
                                           var labels = [];
                                           $table.find("thead>tr>th").each( function(index) {
                                               labels[index] = $(this).text();
                                           });
                                           $table.find("tbody>tr").each( function(index) {
                                               $(this).find("td").each( function(index) {
                                                   if (index < labels.length) 
                                                       $(this).attr("labelth",labels[index]);
                                               });  
                                           });
                                       }
                                    
                                       if (opt.colwidth>1) setColWidth(opt.colwidth);
                                       if (opt.colwidth>2) setColHeight();
                                    
                                       return true;    
                                    }
                                    
                                    
                                    /* Alle mdui-table durchlaufen und überprüfen, ob die minimale Width erreicht
                                    wurde um sie in den responsive State zu überführen 
                                    mdui-table-(mode)(-opt1)(-opt2)...(-optn)
                                    mdui-table-ascard-r600-w200-l */
                                    function _handleTables( ) {
                                       $("[class*='mdui-table ']").each( function (index) {
                                           var $ele = $(this);
                                           var $table;
                                           $table = $ele;
                                           if (!$table.is("table")) $table=$table.find("table");
                                           if (!$table.is("table")) return true; // next each 
                                           
                                           var innerWidth = $ele.innerWidth();
                                           var classes = $ele.attr("class")
                                               .split(" ")
                                               .filter( function ( ele ) { 
                                                       return  (ele.indexOf("mdui-table-ascard") > -1)
                                                            || (ele.indexOf("mdui-table-astile") > -1)
                                                            || (ele.indexOf("mdui-table-aslist") > -1); });
                                           var opts = [];
                                           var opt;
                                           for (var i = 0; i < classes.length; i++) {
                                               opts[i] = [];
                                               opts[i].reswidth = 9999;
                                               opts[i].colwidth = 0;
                                               opts[i].label = false;
                                               opts[i].type = classes[i].substr(13,4); 
                                               opt = classes[i].substr(18,200).split("-"); 
                                               for (var j = 0; j < opt.length; j++) {
                                                   switch(opt[j][0]) {
                                                   case "r":
                                                       opts[i].reswidth = parseInt(opt[j].substr(1,5));
                                                       break;
                                                   case "w":
                                                       opts[i].colwidth = parseInt(opt[j].substr(1,5));
                                                       break;
                                                   case "c":
                                                       opts[i].colwidth = parseInt(opt[j].substr(1,5));
                                                       if (opts[i].colwidth>0) opts[i].colwidth = (innerWidth-_getScrollbarWidth()-8) / opts[i].colwidth;
                                                       break;
                                                   case "l":
                                                       opts[i].label = true;
                                                       break;
                                                   default:    
                                                   }                       
                                               }
                                           }
                                           opts.sort(function(a, b){return a.reswidth-b.reswidth});
                                    //console.log(opts);
                                           if (opts.length === 0) return true; // next each 
                                           var handled = false;
                                           for (i = 0; i < opts.length; i++) {
                                               if ( innerWidth < opts[i].reswidth )
                                                  handled = _handleTable( $ele, $table, opts[i]);
                                               if (handled) break;   
                                           }
                                           if (!handled) _resetTable($ele, $table);
                                       }); 
                                    
                                    }
                                    
                                    
                                    
                                    
                                    // DOM SubTree-Änderungen einmalig alle 500ms auswerten (diese Events werden 
                                    // u.U. 1000-fach gefeuert und müssen deswegen verzögert ausgeführt werden)
                                    function _onSubTreeModified( $ele ) {
                                       if (!isSubtreeModified) {
                                           isSubtreeModified = true;
                                           setTimeout(function () {
                                               _handleTables();
                                               isSubtreeModified=false;
                                           }, 500);
                                       }
                                    }
                                    
                                    return {
                                       toggleVisibility: _toggleVisibility,
                                       toggleFullscreen: _toggleFullscreen,
                                       scale: _scale,
                                       timespan: _timespan,
                                       handleTables: _handleTables,
                                       onSubTreeModified : _onSubTreeModified
                                    };
                                    
                                    })();
                                    
                                    
                                    // Eventhandler für body-Delegators setzen (früher:#vis_container) 
                                    setTimeout(function () {
                                       // click-Event für das left-nav Element zum Öffnen
                                       $("body").on( "click", ".mdui-lnavbutton", function() { 
                                           $( ".mdui-lnav" ).addClass( "mdui-lnav-open" );
                                       } );
                                       // click-Event für die left-nav zum Schließen
                                       $("body").on( "click", ".mdui-lnav", function() { 
                                           $( ".mdui-lnav" ).removeClass( "mdui-lnav-open" ); 
                                       } );
                                       // click-Event für das right-nav Element zum Öffnen
                                       $("body").on( "click", ".mdui-rnavbutton", function() { 
                                           $( ".mdui-rnav" ).addClass( "mdui-rnav-open" );
                                       } );
                                       // click-Event für die right-nav zum Schließen
                                       $("body").on( "click", ".mdui-rnav", function() { 
                                           $( ".mdui-rnav" ).removeClass( "mdui-rnav-open" ); 
                                       } );
                                    
                                       // click-Eventhandler für "mdui-scale-" setzen
                                       $("body").on( "click", "[class*='mdui-scale-']", function(event) { 
                                           MDUI.scale( $(this) );
                                       } );
                                    
                                       // click-Handler für "mdui-toggle"  
                                       $("body").on( "click", ".mdui-toggle", function(event) { 
                                           event.preventDefault();
                                           event.stopImmediatePropagation();
                                           MDUI.toggleVisibility( $(this) );
                                       } );
                                    
                                       // click-Handler für "mdui-fullscreen" 
                                       $("body").on( "click", ".mdui-fullscreen", function(event) { 
                                           MDUI.toggleFullscreen( $(this) );
                                       } );
                                    
                                       // click-Handler für "mdui-timepsan-" 
                                       $("body").on( "click", "[class*='mdui-timespan-']", function(event) { 
                                           MDUI.timespan( $(this) );
                                       } );
                                    
                                       $( window ).on("resize", function() {
                                         MDUI.handleTables();
                                       });
                                    
                                       // Überwachen des #vis_containers auf Änderungen (z.B. wenn views nachgeladen
                                       // werden)
                                       $( "#vis_container" ).on( "DOMSubtreeModified", function(event) { 
                                           MDUI.onSubTreeModified( $(this) );
                                       } );
                                       // für den ersten load einmal aufrufen
                                       MDUI.onSubTreeModified( );
                                    
                                    }, 1000); 
                                    
                                    
                                    
                                    

                                    ScroungerS Offline
                                    ScroungerS Offline
                                    Scrounger
                                    Developer
                                    schrieb am zuletzt editiert von
                                    #157

                                    @Glasfaser
                                    Nee sorry, hab mich mit Material Design CSS noch nie beschäftigt.

                                    <a href="https://github.com/Scrounger/ioBroker.linkeddevices">LinkedDevices Adapter</a>

                                    <a href="https://github.com/Scrounger/ioBroker.vis-materialdesign">Material Design Widgets</a>

                                    GlasfaserG 1 Antwort Letzte Antwort
                                    1
                                    • ScroungerS Scrounger

                                      @Glasfaser
                                      Nee sorry, hab mich mit Material Design CSS noch nie beschäftigt.

                                      GlasfaserG Offline
                                      GlasfaserG Offline
                                      Glasfaser
                                      schrieb am zuletzt editiert von Glasfaser
                                      #158

                                      @Scrounger

                                      Kein Problem , aber trotzdem wurde der Fehler dadurch eingekreißt .

                                      Danke ....für deine Mühe 🙂

                                      Synology 918+ 16GB - ioBroker in Docker v9 , VISO auf Trekstor Primebook C13 13,3" , Hikvision Domkameras mit Surveillance Station .. CCU RaspberryMatic in Synology VM .. Zigbee CC2538+CC2592 .. Sonoff .. KNX .. Modbus ..

                                      1 Antwort Letzte Antwort
                                      0
                                      • ub.privatU Offline
                                        ub.privatU Offline
                                        ub.privat
                                        schrieb am zuletzt editiert von
                                        #159

                                        @Scrounger

                                        Guten entspannten Guten Abend!

                                        Mit meinem langsam wachsendem Verständnis in der Anwendung deiner MEISTERWERKE versuche ich mich wieder mal.
                                        Der Adapter-View ist ganz großes Kino. Leider verende ich beim "Trailer".
                                        Was habe ich bisher gemacht:

                                        1. notwendige Einstellungen im JS Adapter vorgenommen:
                                          636f2623-a41a-4cb3-9d92-74154a05890a-grafik.png

                                        2. Script eingestellt:
                                          8dc9c5a6-9444-406b-9893-ff3085e48816-grafik.png
                                          Leider mit Warnungen...

                                        3. Datenpunkte angelegt:
                                          e43630b0-51fd-45da-bb06-73d650def20c-grafik.png
                                          f1a758b3-22cb-45af-a95f-02f71bbb4c93-grafik.png
                                          Leider werden keine Werte erzeugt.

                                        4. View importiert:
                                          70e9844b-fb88-4b82-b2d1-0696d71594e4-grafik.png
                                          Mit entsprechender Warnung.

                                        5. NUN IST GUTER RAT TEUER - wo mache ich wie weiter????
                                          Lesse den Tread hoch und runter, aber die Erleeuchtung will sich nicht einstellen...

                                        sigi234S ScroungerS GlasfaserG 3 Antworten Letzte Antwort
                                        0
                                        • ub.privatU ub.privat

                                          @Scrounger

                                          Guten entspannten Guten Abend!

                                          Mit meinem langsam wachsendem Verständnis in der Anwendung deiner MEISTERWERKE versuche ich mich wieder mal.
                                          Der Adapter-View ist ganz großes Kino. Leider verende ich beim "Trailer".
                                          Was habe ich bisher gemacht:

                                          1. notwendige Einstellungen im JS Adapter vorgenommen:
                                            636f2623-a41a-4cb3-9d92-74154a05890a-grafik.png

                                          2. Script eingestellt:
                                            8dc9c5a6-9444-406b-9893-ff3085e48816-grafik.png
                                            Leider mit Warnungen...

                                          3. Datenpunkte angelegt:
                                            e43630b0-51fd-45da-bb06-73d650def20c-grafik.png
                                            f1a758b3-22cb-45af-a95f-02f71bbb4c93-grafik.png
                                            Leider werden keine Werte erzeugt.

                                          4. View importiert:
                                            70e9844b-fb88-4b82-b2d1-0696d71594e4-grafik.png
                                            Mit entsprechender Warnung.

                                          5. NUN IST GUTER RAT TEUER - wo mache ich wie weiter????
                                            Lesse den Tread hoch und runter, aber die Erleeuchtung will sich nicht einstellen...

                                          sigi234S Online
                                          sigi234S Online
                                          sigi234
                                          Forum Testing Most Active
                                          schrieb am zuletzt editiert von sigi234
                                          #160

                                          @ub-privat

                                          Hast du die Aktuelle Version? 0.2.62

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

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


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          672

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          Themen

                                          1.3m

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

                                          • Du hast noch kein Konto? Registrieren

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