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

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

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Praktische Anwendungen (Showcase)
  4. View Adapter Status

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

View Adapter Status

Scheduled Pinned Locked Moved Praktische Anwendungen (Showcase)
view adapterview
212 Posts 31 Posters 40.3k Views 52 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • GlasfaserG Glasfaser

    @ub-privat sagte in View Adapter Status:

    f1a758b3-22cb-45af-a95f-02f71bbb4c93-grafik.png
    Leider werden keine Werte erzeugt.

    Die Datenpunkte sind im Skript :

    0_userdata.0.vis.AdapterStatus.jsonList
    

    deine sind :

    0_userdata.0.AdapterStatus.jsonList
    

    EDIT : @Scrounger war schneller :)

    ub.privatU Offline
    ub.privatU Offline
    ub.privat
    wrote on last edited by
    #171

    @Glasfaser
    @Scrounger

    Vielen Dank! dieses kleine "vis" :angry: hat so eine riesige Wirkung.
    Tata... es funzt!
    a2c28e35-904e-4e01-8d29-4ebe391dbe1b-grafik.png
    Vielen Dank!

    Nun noch schick und schön alá @sigi234 und die Visu ist wieder um einen View reicher!

    DANKE :+1: :+1:

    1 Reply Last reply
    0
    • smartboartS Offline
      smartboartS Offline
      smartboart
      wrote on last edited by
      #172

      Tolle Sache!!! Danke für view und script...Wie wäre es das Script noch um einen Filter und Sortierung nach Instanz zu erweitern?

      ScroungerS 1 Reply Last reply
      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;
                    }
                }
            }
        }
        
        S Offline
        S Offline
        skokarl
        wrote on last edited by
        #173

        @Scrounger

        Jetzt hast Du aber wieder einen rausgehauen mit der View und dem Script ... :grinning:

        Super klasse !!!

        IOBroker mit Proxmox auf Celeron Nuc mit 16 GB und Debian11, Sonos API, Echo Show 15 als Wandtablet, Homematic IP, HUE, Sonos, Echos, DS718+ als Backup

        H 1 Reply Last reply
        0
        • smartboartS smartboart

          Tolle Sache!!! Danke für view und script...Wie wäre es das Script noch um einen Filter und Sortierung nach Instanz zu erweitern?

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

          @smartboart sagte in View Adapter Status:

          Tolle Sache!!! Danke für view und script...Wie wäre es das Script noch um einen Filter und Sortierung nach Instanz zu erweitern?

          Filter gibt es doch schon?
          Und was meinst du mit Sortierung nach Instanz, also was sollte nach Auswahl angezeigt werden?

          O smartboartS 2 Replies Last reply
          0
          • ScroungerS Scrounger

            @smartboart sagte in View Adapter Status:

            Tolle Sache!!! Danke für view und script...Wie wäre es das Script noch um einen Filter und Sortierung nach Instanz zu erweitern?

            Filter gibt es doch schon?
            Und was meinst du mit Sortierung nach Instanz, also was sollte nach Auswahl angezeigt werden?

            O Offline
            O Offline
            Oli
            wrote on last edited by
            #175

            @Scrounger

            Ist es möglich am Ende des Widget eine Fußzeile einzufügen?

            Inhalt könnte die letzte Ausführung und Farblegende sein.

            Gruß
            Oliver

            ScroungerS 1 Reply Last reply
            0
            • O Oli

              @Scrounger

              Ist es möglich am Ende des Widget eine Fußzeile einzufügen?

              Inhalt könnte die letzte Ausführung und Farblegende sein.

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

              @Oli
              Natürlich ist das möglich. Kann man mit den basic widgets sehr einfach realisieren, z.B. html widget für legenden farben und last change widget für letzte Änderung / Ausführung.

              1 Reply Last reply
              0
              • ScroungerS Scrounger

                @smartboart sagte in View Adapter Status:

                Tolle Sache!!! Danke für view und script...Wie wäre es das Script noch um einen Filter und Sortierung nach Instanz zu erweitern?

                Filter gibt es doch schon?
                Und was meinst du mit Sortierung nach Instanz, also was sollte nach Auswahl angezeigt werden?

                smartboartS Offline
                smartboartS Offline
                smartboart
                wrote on last edited by
                #177

                @Scrounger sagte in View Adapter Status:

                @smartboart sagte in View Adapter Status:

                Tolle Sache!!! Danke für view und script...Wie wäre es das Script noch um einen Filter und Sortierung nach Instanz zu erweitern?

                Filter gibt es doch schon?
                Und was meinst du mit Sortierung nach Instanz, also was sollte nach Auswahl angezeigt werden?

                z.B instanz .0 oder .1
                habe diverse Adapter mit mehreren Instanzen laufen.

                ScroungerS 1 Reply Last reply
                0
                • smartboartS smartboart

                  @Scrounger sagte in View Adapter Status:

                  @smartboart sagte in View Adapter Status:

                  Tolle Sache!!! Danke für view und script...Wie wäre es das Script noch um einen Filter und Sortierung nach Instanz zu erweitern?

                  Filter gibt es doch schon?
                  Und was meinst du mit Sortierung nach Instanz, also was sollte nach Auswahl angezeigt werden?

                  z.B instanz .0 oder .1
                  habe diverse Adapter mit mehreren Instanzen laufen.

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

                  @smartboart sagte in View Adapter Status:

                  z.B instanz .0 oder .1
                  habe diverse Adapter mit mehreren Instanzen laufen.

                  Wird doch nach instanz sortiert - siehe ical:
                  f8ccebef-dfbc-4a95-b09e-5ecc0d43c750-grafik.png

                  smartboartS 1 Reply Last reply
                  0
                  • ScroungerS Scrounger

                    @smartboart sagte in View Adapter Status:

                    z.B instanz .0 oder .1
                    habe diverse Adapter mit mehreren Instanzen laufen.

                    Wird doch nach instanz sortiert - siehe ical:
                    f8ccebef-dfbc-4a95-b09e-5ecc0d43c750-grafik.png

                    smartboartS Offline
                    smartboartS Offline
                    smartboart
                    wrote on last edited by smartboart
                    #179

                    @Scrounger ja aber nicht gefiltert...
                    Ist ja kein Muss...finde es super wie es ist...Aber wenn ich nach instanz 1 filter, sollte dann nur instanz 1 angezeigt werden. Hab mich vlt. ungenau ausgedrückt... Also einen zusätzlichen Filter für instanzen...

                    1 Reply Last reply
                    0
                    • W Offline
                      W Offline
                      wasi
                      wrote on last edited by wasi
                      #180

                      Hallo, ich krieg das ding nicht zum laufen.
                      0. js einstellung
                      95b78675-5af1-48ec-91e8-57b5af256d87-image.png

                      1.Objekte als zeichenkette mit der rolle string unter 0_userdata.0 angelegt
                      8fe64d0f-89e3-4f60-91ac-01a42112b0d1-image.png
                      2. script

                      
                      // 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 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 = 'darkgreen';                                // Status Bar Farbe wenn Adapter zeitgesteuert ist
                       
                      // **********************************************************************************************************************************************************************
                       
                       
                       
                      // 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 .connected Änderungen hören
                      let connectedSelector = `[id=*.info.connection]`;
                      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);
                      }
                       
                      // 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 newVersion = (updateList && updateList.includes(nameArray[0])) ? '<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>`
                       
                                  adapterList.push({
                                      text: text,
                                      subText: subText,
                                      image: image,
                                      listType: "buttonState",
                                      objectId: dpAdapterRestart,
                                      buttonStateValue: id,
                                      statusBarColor: getStatusColor(),
                                      showValueLabel: false,
                                      name: name
                                  })
                       
                                  function getStatusColor() {
                                      let statusBarColor = farbeAdapterNichtAktiv;
                       
                                      if (myHelper().getStateValueIfExist(adapterAliveList[i]) === 'true') {
                                          statusBarColor = farbeAdapterAktiv;
                       
                                          if (existsState(id.replace('system.adapter.', '') + '.info.connection')) {
                                              if (!getState(id.replace('system.adapter.', '') + '.info.connection').val) {
                                                  statusBarColor = farbeAdapterNichtVerbunden;
                                              }
                                          } else {
                                              if (myHelper().getStateValueIfExist(adapterAliveList[i].replace('.alive', '.connected')) === 'false') {
                                                  statusBarColor = farbeAdapterNichtVerbunden;
                                              }
                                          }
                                      }
                              
                                      if (myHelper().getCommonPropertyIfExist(obj, 'enabled', false).toString() === 'false') {
                                          // Adapter ist deaktiviert
                                          statusBarColor = farbeAdapterDeaktiviert;
                                      }
                       
                                      if (myHelper().getCommonPropertyIfExist(obj, 'mode') === 'schedule') {
                                          // Adapter ist zeitgesteuert
                                          statusBarColor = farbeAdapterZeitgesteuert;
                                      }
                       
                                      return statusBarColor;
                                  }
                              }
                       
                          } catch (err) {
                              console.error(`[adapterStatus] error: ${err.message}, stack: ${err.stack}`);
                          }
                       
                          adapterList.sort(function (a, b) {
                              return a.name == b.name ? 0 : +(a.name > b.name) || -1;
                          });
                       
                          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 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;
                                  }
                              }
                          }
                      }
                      
                      

                      js-protokoll
                      660a47d3-39e1-42ca-b142-b16b2bc35d2f-image.png
                      3. widget

                      [{"tpl":"tplVis-materialdesign-Icon-List","data":{"g_fixed":true,"g_visibility":true,"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","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.0/main/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/main/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/main/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,"jsonStringObject":"{0_userdata.0.vis.AdapterStatus.jsonList}","maxItemsperRow":"6","iconHeight":"60","verticalIconContainerWidth":"100","labelFontSize":"20","labelFontFamily":"RobotoCondensed-Regular","iconItemMinWidth":"290","labelFontColor":"#ffffff","valueFontFamily":"","subLabelFontFamily":"RobotoCondensed-Regular","subLabelFontSize":"14","subLabelFontColor":"#ffffff","oid":"0_userdata.0.AdapterStatus.jsonList","label0":"","valueFontSize":"-10","valueFontColor":"#ffffff","itemBackgroundColor":"#202020"},"style":{"left":"28px","top":"79px","width":"812px","height":"655px","overflow-y":"auto","background":"","opacity":"","z-index":"99"},"widgetSet":"materialdesign"}]
                      
                      1. ergebnis
                        6c3a4e56-6e08-4115-a00c-b62fc44923b3-image.png

                      mir ist aber aufgefallen, wenn ich im vis-editor den objekt-id-dialog öffne, dann fehlen die unter 0_userdata.0, obwohl ich sie ja offensichtlich angelegt habe.

                      GlasfaserG 1 Reply Last reply
                      0
                      • W wasi

                        Hallo, ich krieg das ding nicht zum laufen.
                        0. js einstellung
                        95b78675-5af1-48ec-91e8-57b5af256d87-image.png

                        1.Objekte als zeichenkette mit der rolle string unter 0_userdata.0 angelegt
                        8fe64d0f-89e3-4f60-91ac-01a42112b0d1-image.png
                        2. script

                        
                        // 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 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 = 'darkgreen';                                // Status Bar Farbe wenn Adapter zeitgesteuert ist
                         
                        // **********************************************************************************************************************************************************************
                         
                         
                         
                        // 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 .connected Änderungen hören
                        let connectedSelector = `[id=*.info.connection]`;
                        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);
                        }
                         
                        // 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 newVersion = (updateList && updateList.includes(nameArray[0])) ? '<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>`
                         
                                    adapterList.push({
                                        text: text,
                                        subText: subText,
                                        image: image,
                                        listType: "buttonState",
                                        objectId: dpAdapterRestart,
                                        buttonStateValue: id,
                                        statusBarColor: getStatusColor(),
                                        showValueLabel: false,
                                        name: name
                                    })
                         
                                    function getStatusColor() {
                                        let statusBarColor = farbeAdapterNichtAktiv;
                         
                                        if (myHelper().getStateValueIfExist(adapterAliveList[i]) === 'true') {
                                            statusBarColor = farbeAdapterAktiv;
                         
                                            if (existsState(id.replace('system.adapter.', '') + '.info.connection')) {
                                                if (!getState(id.replace('system.adapter.', '') + '.info.connection').val) {
                                                    statusBarColor = farbeAdapterNichtVerbunden;
                                                }
                                            } else {
                                                if (myHelper().getStateValueIfExist(adapterAliveList[i].replace('.alive', '.connected')) === 'false') {
                                                    statusBarColor = farbeAdapterNichtVerbunden;
                                                }
                                            }
                                        }
                                
                                        if (myHelper().getCommonPropertyIfExist(obj, 'enabled', false).toString() === 'false') {
                                            // Adapter ist deaktiviert
                                            statusBarColor = farbeAdapterDeaktiviert;
                                        }
                         
                                        if (myHelper().getCommonPropertyIfExist(obj, 'mode') === 'schedule') {
                                            // Adapter ist zeitgesteuert
                                            statusBarColor = farbeAdapterZeitgesteuert;
                                        }
                         
                                        return statusBarColor;
                                    }
                                }
                         
                            } catch (err) {
                                console.error(`[adapterStatus] error: ${err.message}, stack: ${err.stack}`);
                            }
                         
                            adapterList.sort(function (a, b) {
                                return a.name == b.name ? 0 : +(a.name > b.name) || -1;
                            });
                         
                            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 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;
                                    }
                                }
                            }
                        }
                        
                        

                        js-protokoll
                        660a47d3-39e1-42ca-b142-b16b2bc35d2f-image.png
                        3. widget

                        [{"tpl":"tplVis-materialdesign-Icon-List","data":{"g_fixed":true,"g_visibility":true,"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","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.0/main/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/main/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/main/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,"jsonStringObject":"{0_userdata.0.vis.AdapterStatus.jsonList}","maxItemsperRow":"6","iconHeight":"60","verticalIconContainerWidth":"100","labelFontSize":"20","labelFontFamily":"RobotoCondensed-Regular","iconItemMinWidth":"290","labelFontColor":"#ffffff","valueFontFamily":"","subLabelFontFamily":"RobotoCondensed-Regular","subLabelFontSize":"14","subLabelFontColor":"#ffffff","oid":"0_userdata.0.AdapterStatus.jsonList","label0":"","valueFontSize":"-10","valueFontColor":"#ffffff","itemBackgroundColor":"#202020"},"style":{"left":"28px","top":"79px","width":"812px","height":"655px","overflow-y":"auto","background":"","opacity":"","z-index":"99"},"widgetSet":"materialdesign"}]
                        
                        1. ergebnis
                          6c3a4e56-6e08-4115-a00c-b62fc44923b3-image.png

                        mir ist aber aufgefallen, wenn ich im vis-editor den objekt-id-dialog öffne, dann fehlen die unter 0_userdata.0, obwohl ich sie ja offensichtlich angelegt habe.

                        GlasfaserG Offline
                        GlasfaserG Offline
                        Glasfaser
                        wrote on last edited by
                        #181

                        @wasi

                        Das ist aber nur ein von 4 Widget !!!
                        Hast du nicht den View von Scrounger importiert !?

                        hier fehlt schonmal der Datenpunkt , deshalb hast du die Fehlermeldung !

                        1.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 ..

                        W 1 Reply Last reply
                        0
                        • Basti97B Offline
                          Basti97B Offline
                          Basti97
                          Most Active
                          wrote on last edited by Basti97
                          #182

                          Muss man das als View einfügen?
                          Da bei mir nur ein weißes Bild kommt.

                          Iobroker läuft als VM auf Proxmoxserver x folgende Hersteller im Einsatz Sonoff, Gosund, Siemens x Aofo über Tasmota x Zigbee x das Smarthome wächst und wächst

                          GlasfaserG 1 Reply Last reply
                          0
                          • Basti97B Basti97

                            Muss man das als View einfügen?
                            Da bei mir nur ein weißes Bild kommt.

                            GlasfaserG Offline
                            GlasfaserG Offline
                            Glasfaser
                            wrote on last edited by Glasfaser
                            #183

                            @Basti97

                            Das View enthält die Widget´s und ist auch schon alles eingestellt

                            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 ..

                            Basti97B 1 Reply Last reply
                            0
                            • GlasfaserG Glasfaser

                              @Basti97

                              Das View enthält die Widget´s und ist auch schon alles eingestellt

                              Basti97B Offline
                              Basti97B Offline
                              Basti97
                              Most Active
                              wrote on last edited by Negalein
                              #184

                              @Glasfaser Ich habe zurzeit das Problem das er nur 3 Zeilen speichert und demzufolge die vis weiß bleibt.15829155402184208735713527064168.jpg

                              Iobroker läuft als VM auf Proxmoxserver x folgende Hersteller im Einsatz Sonoff, Gosund, Siemens x Aofo über Tasmota x Zigbee x das Smarthome wächst und wächst

                              GlasfaserG 1 Reply Last reply
                              0
                              • Basti97B Basti97

                                @Glasfaser Ich habe zurzeit das Problem das er nur 3 Zeilen speichert und demzufolge die vis weiß bleibt.15829155402184208735713527064168.jpg

                                GlasfaserG Offline
                                GlasfaserG Offline
                                Glasfaser
                                wrote on last edited by
                                #185

                                @Basti97
                                Mache mal erstmal im Browser STRG+F5

                                wenn´s nichts bringt dann

                                cd /opt/iobroker
                                
                                iobroker stop vis
                                
                                iobroker upload vis
                                
                                iobroker start vis
                                

                                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 ..

                                Basti97B 1 Reply Last reply
                                0
                                • GlasfaserG Glasfaser

                                  @wasi

                                  Das ist aber nur ein von 4 Widget !!!
                                  Hast du nicht den View von Scrounger importiert !?

                                  hier fehlt schonmal der Datenpunkt , deshalb hast du die Fehlermeldung !

                                  1.JPG

                                  W Offline
                                  W Offline
                                  wasi
                                  wrote on last edited by
                                  #186

                                  @Glasfaser oh man...Du hast mich vor meiner Verzweiflung gerettet. DANKE!
                                  Dein Hinweis hat mir weiter geholfen.

                                  Habe es nun am Laufen.

                                  1 Reply Last reply
                                  0
                                  • GlasfaserG Glasfaser

                                    @Basti97
                                    Mache mal erstmal im Browser STRG+F5

                                    wenn´s nichts bringt dann

                                    cd /opt/iobroker
                                    
                                    iobroker stop vis
                                    
                                    iobroker upload vis
                                    
                                    iobroker start vis
                                    
                                    Basti97B Offline
                                    Basti97B Offline
                                    Basti97
                                    Most Active
                                    wrote on last edited by
                                    #187

                                    @Glasfaser Ich habe es gerade noch mal mit Edge getesteter. Es kommt immer die Meldung
                                    "reagiert nicht und muss beendet werden". Kurz sehe ich dann die View aber sobald ich die richtig öffnen bzw auf eine andere wechsle ist der Bildschirm weiß.
                                    Werde es dann nochmal mit deinen anderen weg probieren.

                                    Iobroker läuft als VM auf Proxmoxserver x folgende Hersteller im Einsatz Sonoff, Gosund, Siemens x Aofo über Tasmota x Zigbee x das Smarthome wächst und wächst

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

                                      In Abstimmung mit @sigi234 hab ich ein eigenes Thema für meine Varainte erstellt.

                                      Bitte ab sofort Fragen dazu in diesem Thema posten:
                                      https://forum.iobroker.net/topic/30661/material-design-widgets-adapter-status

                                      1 Reply Last reply
                                      0
                                      • S skokarl

                                        @Scrounger

                                        Jetzt hast Du aber wieder einen rausgehauen mit der View und dem Script ... :grinning:

                                        Super klasse !!!

                                        H Offline
                                        H Offline
                                        Hundefreund
                                        wrote on last edited by Negalein
                                        #189

                                        @scrounger
                                        erst mal vielen Dank für das tolle Adapter script !:+1:
                                        hat soweit erst mal geklappt.
                                        Wie bekomme ich die Bildlaufleiste eingeblendet., wenn ich den Adapter auf eine Subseite als view in Widget einbinde?
                                        adapter-view-in-widget.png


                                        Mod-Edit: bitte keine externen Bildhoster verwenden. Verwendet die Uploadfunktion --> View Adapter Status.png

                                        INTEL-Nuc I3 CPU,16GB RAM
                                        Promox/Iobroker /Zwave Aero-Stick
                                        PI4 incl. piVCCU3 /Deconz
                                        Vis im Aufbau...
                                        Gartenbewässerung im Aufbau mit Sonoff 4CH...

                                        GlasfaserG H 2 Replies Last reply
                                        0
                                        • H Hundefreund

                                          @scrounger
                                          erst mal vielen Dank für das tolle Adapter script !:+1:
                                          hat soweit erst mal geklappt.
                                          Wie bekomme ich die Bildlaufleiste eingeblendet., wenn ich den Adapter auf eine Subseite als view in Widget einbinde?
                                          adapter-view-in-widget.png


                                          Mod-Edit: bitte keine externen Bildhoster verwenden. Verwendet die Uploadfunktion --> View Adapter Status.png

                                          GlasfaserG Offline
                                          GlasfaserG Offline
                                          Glasfaser
                                          wrote on last edited by
                                          #190

                                          @hundefreund sagte in View Adapter Status:

                                          Bildlaufleiste eingeblendet.

                                          1.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 ..

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


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          409

                                          Online

                                          32.7k

                                          Users

                                          82.3k

                                          Topics

                                          1.3m

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

                                          • Don't have an account? Register

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