Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Scrounger

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Profile
    • Following 1
    • Followers 40
    • Topics 67
    • Posts 1563
    • Best 311
    • Groups 4

    Scrounger

    @Scrounger

    Developer

    476
    Reputation
    2167
    Profile views
    1563
    Posts
    40
    Followers
    1
    Following
    Joined Last Online
    Website github.com/sponsors/Scrounger Location Stuttgart

    Scrounger Follow
    Developer Pro Starter Most Active

    Best posts made by Scrounger

    • Material Design Widgets: Wetter View

      Ein Beispiel Projekt für eine responsiv VIS View mit Wetter Daten.

      Tablet Phone

      Alle Informationen und Anleitung findet ihr im Material Design Widgets repo auf github

      Sollte out of the box funktionieren - hoffentlich 😉

      Vielen Dank an

      • @sigi234: für die Insperation, als Basis hab ich mich an seinem Wetter Projekt orientiert
      • @Mic: für sein Skript um Datenpunkte unter 0_userdata.0 zu ereugen. Das Skript findet ihr hier
      posted in Praktische Anwendungen (Showcase)
      Scrounger
      Scrounger
    • Test Adapter Linux Control v1.x.x
      Aktuelle Test Version 1.1.2
      Veröffentlichungsdatum 12.08.2020
      Github Link https://github.com/Scrounger/ioBroker.linux-control

      Hallo zusammen,

      ich habe einen kleinen Adapter geschrieben, mit dem Ihr Eure Linux Geräte / VMs / LXCs mittels ssh Zugriff steuern und Informationen auslesen.

      Folgende Funktionen bietet der Adapter:

      • ssh login über Benutzer und Passwort oder per RSA Key (empfohlen!)

      • vordefinierte Datenpunkte, um das System zu steuern (Stopp, Reboot, Updates starten, etc.) und Informationen (Services, Updates, Neustart notwendig, etc.) auszulesen
        Wichtig: Da es viele verschiedene Linux Distrubutionen gibt, ist es mir nicht möglich diese Funktionen für alle bereitzustellen, Support und Test von mir gibt es nur für Debian 10 und Ubuntu 18 / 20 LTS!

      • Informationen zu Ordner (Größe, Anzahl Dateien, letzte Änderung) auslesen

      • Meine Befehle - hier könnt Ihr Eure eigenen ganz individuellen Befehle ausführen lassen und z.B. einen Befehl ausführen oder Informationen in einen selbstdefinierten Datenpunkt zu schreiben.

      Alle notwendigen Informationen findet ihr in der Dokumentation.

      Vielen Dank fürs Testen!

      P.S.: Sollte die Tage auch im Latest sein.

      posted in Tester
      Scrounger
      Scrounger
    • Material Design Widgets: Proxmox

      Ein weiters Beispiel Projekt für eine responsiv VIS View mit Proxmox Adapter Daten und wenn benötigt weitere individuell konfigurierbaren Daten.

      Tablet Phone

      Alle Informationen und Anleitung findet ihr im Material Design Widgets repo auf github

      posted in Praktische Anwendungen (Showcase)
      Scrounger
      Scrounger
    • [Neuer VIS-Adpater] Material Design Widgets

      Hallo zusammen,
      ich arbeite aktuell an einem VIS-Adapter, der auf Google material components web Bibliothek basiert und "echte" Material Widgets zur Verfügung stellt inkl. der entsprechenden Effekt, wie Overlay, ripple, etc.

      Aktuell ist der Adapter noch nicht im latest, da ich noch sehr viel daran arbeitet. Wer testen möchte muss direkt von github installieren: https://github.com/Scrounger/iobroker.vis-materialdesign

      Folgende Elemente sind bereits enthalten:
      tmp.png

      Da das mein erster VIS Adapter ist, benötige ich etwas Unterstützung bei der weiteren Entwicklung und natürlich Euer Feedback vom testen.

      Aktuelle hab ich folgende Probleme:

      • Wie muss ich den Pfad <link rel="stylesheet" href="widgets/materialdesign/css/material-components-web.css" /> ändern, so das er direkt auf node_modules/material-components-web geht und ich nicht die dateien bei einem update manuell kopieren muss?
      • Gibt es eine Möglichkeit programatisch die styling felder im vis zu befüllen? Also ich würde gerne z.B. Font color und text-align vorbefüllen. font.png
      • Kann einer der Pros hier den vertikalen Slider bauen, da ich es leider nicht hinbekomme?

      paypal

      posted in Entwicklung
      Scrounger
      Scrounger
    • [Neuer Adapter] LinkedDevices

      Hallo zusammen,

      ich möchte euch meinen neuen Adapter an dem ich aktuell arbeite vorstellen - LinkedDevices.
      Die Idee und insperation kommen aus dem Virtual Devices Skript von @Pman.

      https://github.com/Scrounger/ioBroker.linkeddevices

      Funktionsweise:
      Ihr könnt euch verlinkte Objekte (Datenpunkte) für all eure verwendeten Objekte (Datenpunkte) anlegen und dafür individuelle IDs vergeben, um Euch eine Struktur anzulegen, wie Ihr sie gerne haben möchtet.
      Vorteil ist, dass es nur noch einen Ort gibt, wo alle Objekte die Ihr im vis oder Skripten verwendet, definert sind. Weiterer Vorteil ist, wenn ihr mal die Hardware tauschen müsst, dann müsst ihr nur die verlinkten Objekte auf die neue Hardware anpassen und die Skripte und vis funktionieren sofort wieder.
      Später sollen noch Funktionen wie z.B. umrechnungen etc. dazu kommen, wie es im Virtual Devices Skript auch möglich ist

      Aktuell findet ihr im Repository einen Arbeitsstand (Alpha version!), deshalb bitte nicht im produktiv einsetzen, weil ich aktuell daran noch arbeite.

      Hier mal ein Beispiel wie eine selbstdefinierte Struktur aussehen kann:

      Bild Text

      paypal

      posted in Tester
      Scrounger
      Scrounger
    • Test Adapter Material Design Widgets v0.5.x
      Aktuelle Test Version 0.5.0-beta
      Veröffentlichungsdatum 13.02.2020
      Github Link https://github.com/Scrounger/ioBroker.vis-materialdesign

      Version 0.5.0-beta zum Testen freigegeben.
      Installation müsst ihr direkt von github machen. Ins Latest kommt es sobald die groben Schnitzer raus sind.

      Was gibts neues bzw. was sind die größten Änderungen:

      1. zwei Breaking Changes gibt es:

      • Table Widget: Control Elements enfernt, verwendet anstatt dessen die neuen HTML Widgets
      • List Widget: bei Verwendung eines json strings, muss dieser jetzt über einen datenpunkt geliefert werden - Eingabe per VIS Editor wurde entfernt.

      2. Theme Editor: Bindings Methode geändert
      Da die Performance mit vielen Bindings nicht gut ist, hab ich die Methode geändert. D.h. es werden jetzt nur noch die Theme Datenpunkte geladen bzw. abonnierte, die ihr auch wirklich verwendet. Diese Methode funktioniert aber nur mit den MD-Widgets. Für alle anderen Widgets könnt ihr nach wie vor Bindings verwenden.

      Um Eure existierenden Widgets umzustellen, einfach im Vis Editor den Button c0e6e77b-9acc-4405-909e-0bcf86ae8b77-grafik.png drücken.

      Danach steht dann z.B. beim HTML Card Hintergrund nicht mehr {mode:vis-materialdesign.0.colors.darkTheme;light:vis-materialdesign.0.colors.light.card.background;dark:vis-materialdesign.0.colors.dark.card.background; mode === "true" ? dark : light} sondern #mdwTheme:vis-materialdesign.0.colors.card.background

      D.h. jede Wigdet-Eigenschaft (Farbe, Schriftart, Schriftgröße) sollte danach mit #mdwTheme: beginnen, daran erkennt ihr das die neue Technik verwendet wird.

      Wenn sich jetzt die Datenpunkte vis-materialdesign.0.colors.darkTheme oder vis-materialdesign.0.lastchange ändern, dann werden auch die Änderungen an den Widgets sichtbar.

      Mehr dazu wie immer in der Dokumentation

      3. HTML Widgets
      Ihr könnt jetzt jedes Control Widget (Button, Slider, Progess, etc.) als HTML Widget nutzen. D.h. ihr könnt überall wo Widgets HTML Eingaben erlauben, ganz individuell buttons, slider, etc. einfügen.

      Beispielsweise könnt ihr damit Euer ganz individuelles List Widget mit verschiedenen Controls erstellen:
      html_widget_example_list.gif

      Oder es fehlen Euch weitere Control Elemente in der IconList, einfach per HTML Widgets hinzufügen:
      526e4f45-defc-424c-b1ee-c73d8e51663f-grafik.png
      (Update zum AdapterStatus Skript kommt 😉 )

      Oder Controls in nicht Material Design Widgets integrieren:
      html_widget_example_non_mdw_widget.gif

      Weiterer Vorteil ist - wenn ihr ein bissle html könnt - könnt ihr ein noch besseres resposiv layout erstellen, z.B. pakt verschiedene Controls in eine HTML Card.

      Oder man kann damit Vorlagen für z.B. Heizungs-, Lichtsteuerung, etc. erstellen, die Ihr mit der Community teilen könnt.

      Entwickler können diese Technik z.B. benutzen um relativ einfach Widgets für Ihre Adapter zu bauen ohne Control Elemente selbst programmieren zu müssen. Wer hier Infos braucht einfach auf mich zu kommen.

      Mehr dazu wie immer in der Dokumentation

      4. Neues Widget: Value
      value.gif

      Sehr simples Widget mit dem Ihr euch Werte anzeigen lassen, umrechnen oder umwandeln könnt. Kombiniert als HTML Widget, kann dieses als Alternative für Bindings genutzt werden, vorteil ist eine bessere performance.
      Allerdings sind die Umwandlungsmöglichkeiten / Bedingung nicht so umfangreich wie das mit Bindings geht. Wenn Euch hier was fehlt, dann einfach bescheid geben und ich schau ob man das integrieren kann.

      Mehr dazu wie immer in der Dokumentation

      5. Dokumentation überarbeitet
      Ich hab die Dokumentation komplett überarbeitet - war natürlich wie immer mega ätzend 😉

      Es gibt jetzt ein Inhaltsverzeichnis und die Struktur ist fast immer gleich aufgebaut.

      Das sind die Hauptpunkte, bin auf Euer Feedback gespannt! 🙂

      posted in Tester
      Scrounger
      Scrounger
    • RE: View Adapter Status

      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;
                  }
              }
          }
      }
      
      posted in Praktische Anwendungen (Showcase)
      Scrounger
      Scrounger
    • Material Design Widgets: JSON Chart Widget

      JSON Chart Widget

      e76d0b43-fa38-4294-8327-767d86fe6b6d-grafik.pngjsonChart2.png

      Sämtliche Fragen zu Einstellungen (VIS Editor, Bedienung, JSON strings, etc.) des Widgets hier stellen

      Das ist sicher besser für die Übersichtlichkeit und Dokumentation.

      • Dokumentation
      • Online Beispiel
      posted in Visualisierung
      Scrounger
      Scrounger
    • Test Adapter Material Design Widgets v0.2.x
      Aktuelle Test Version 0.2.x
      Veröffentlichungsdatum 19.11.2019
      Github Link https://github.com/Scrounger/iobroker.vis-materialdesign

      Ich bitte Euch zukünftig alle Fragen bzgl. Einstellungen, Verständnis, Skripte, etc. im entsprechenden Thema des zugehörigen Widgets zu posten!

      • siehe Material Design Widgets Themen

      Hallo zusammen,
      ich arbeite aktuell an einem VIS-Adapter, der auf Google material components web Bibliothek basiert und "echte" Material Widgets zur Verfügung stellt inkl. der entsprechenden Effekt, wie Overlay, ripple, etc.

      Der Adapter befindet sich bereits im latest repository.
      Neue Funktionen (Widgets) werde ich zu erst hier vorstellen - wer dieses testen möchte muss direkt von github installieren: https://github.com/Scrounger/iobroker.vis-materialdesign.
      Nach erfolgreichem Feedback mach ich eine neue Version für das latest.

      Folgende Elemente sind bereits enthalten:

      review.gif

      Gemäß den Forumsrichtlinien ist das Thema in die Kategorie 'Test' umgezogen und ein neuer Thread wegen Anhebung Version aufgemacht worden.

      Die alten Threads findet ihr hier:

      • https://forum.iobroker.net/topic/26199/test-adapter-material-design-widgets-v0-1-x
      • https://forum.iobroker.net/topic/25374/neuer-vis-adpater-material-design-widgets

      Bitte bei Fragen zu den Widget Einstellungen diese zuerst durchlesen, da dort viele Fragen zu den Widget Einstellungen beantwortet wurden!

      paypal

      posted in Tester
      Scrounger
      Scrounger
    • Material Design Widgets: Skript Status

      Skript zur Anzeige des Status aller Skripte mit dem Material Design IconList Widget

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

      letzte Aktualierung: 04.03.2020

      Skript_Status.gif

      Voraussetzung:

      • Material Design Widgets v0.2.62

      Funktionen:

      • Anzeige des Status aller Skripte (Aktiviert, Deakitivert, Fehler)
      • Anzeige von Werten der Skripte(Sprache, letzte Änderung, Ordner)
      • Neustarten / Starten / Stoppen von Skripten
      • Sortier und Filter Funktion
      • Einstellungen, siehe im Skript Sektion Einstellungen, Funktion der Einstellungen ist dort als Kommentar beschrieben.

      Ist auch im Online Beispiel enthalten

      View zum importieren:

      {
        "settings": {
          "style": {
            "background_class": ""
          },
          "theme": "redmond",
          "sizex": "",
          "sizey": "",
          "gridSize": "",
          "snapType": null
        },
        "widgets": {
          "e00001": {
            "tpl": "tplVis-materialdesign-Icon-List",
            "data": {
              "g_fixed": false,
              "g_visibility": false,
              "g_css_font_text": false,
              "g_css_background": false,
              "g_css_shadow_padding": false,
              "g_css_border": false,
              "g_gestures": false,
              "g_signals": false,
              "g_last_change": false,
              "visibility-cond": "==",
              "visibility-val": 1,
              "visibility-groups-action": "hide",
              "wrapItems": true,
              "listItemDataMethod": "jsonStringObject",
              "countListItems": "1",
              "vibrateOnMobilDevices": "50",
              "listLayout": "card",
              "itemLayout": "horizontal",
              "listType0": "text",
              "showValueLabel0": "true",
              "listType1": "text",
              "showValueLabel1": "true",
              "signals-cond-0": "==",
              "signals-val-0": true,
              "signals-icon-0": "/vis/signals/lowbattery.png",
              "signals-icon-size-0": 0,
              "signals-blink-0": false,
              "signals-horz-0": 0,
              "signals-vert-0": 0,
              "signals-hide-edit-0": false,
              "signals-cond-1": "==",
              "signals-val-1": true,
              "signals-icon-1": "/vis/signals/lowbattery.png",
              "signals-icon-size-1": 0,
              "signals-blink-1": false,
              "signals-horz-1": 0,
              "signals-vert-1": 0,
              "signals-hide-edit-1": false,
              "signals-cond-2": "==",
              "signals-val-2": true,
              "signals-icon-2": "/vis/signals/lowbattery.png",
              "signals-icon-size-2": 0,
              "signals-blink-2": false,
              "signals-horz-2": 0,
              "signals-vert-2": 0,
              "signals-hide-edit-2": false,
              "lc-type": "last-change",
              "lc-is-interval": true,
              "lc-is-moment": false,
              "lc-format": "",
              "lc-position-vert": "top",
              "lc-position-horz": "right",
              "lc-offset-vert": 0,
              "lc-offset-horz": 0,
              "lc-font-size": "12px",
              "lc-font-family": "",
              "lc-font-style": "",
              "lc-bkg-color": "",
              "lc-color": "",
              "lc-border-width": "0",
              "lc-border-style": "",
              "lc-border-color": "",
              "lc-border-radius": 10,
              "lc-zindex": 0,
              "json_string_oid": "0_userdata.0.vis.SkriptStatus.jsonList",
              "maxItemsperRow": "6",
              "iconItemMinWidth": "280",
              "iconHeight": "35",
              "buttonHeight": "70",
              "labelFontSize": "22",
              "subLabelFontSize": "14",
              "subLabelFontColor": "#000000",
              "labelFontFamily": "RobotoCondensed-Regular",
              "subLabelFontFamily": "RobotoCondensed-Light",
              "horizontalIconContainerWidth": "70"
            },
            "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.SkriptStatus.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\": \"Skriptname\",\n\t\t\"value\": \"name\",\n\t\t\"icon\": \"sort-alphabetical\"\n\t},\n\t{\n\t\t\"text\": \"letzte Änderung\",\n\t\t\"value\": \"lastChange\",\n\t\t\"icon\": \"clock-outline\"\n\t},\n\t{\n\t\t\"text\": \"Status\",\n\t\t\"value\": \"status\",\n\t\t\"icon\": \"information-variant\"\n\t},\n\t{\n\t\t\"text\": \"Ordner\",\n\t\t\"value\": \"folder\",\n\t\t\"icon\": \"folder\"\n\t}\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.SkriptStatus.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\": \"Fehler\",\n\t\t\"value\": \"error\",\n\t\t\"icon\": \"alert-box-outline\"\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]",
              "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": "SkriptStatus",
        "filterList": []
      }
      

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

      Skript:

      const moment = require("moment");
      
      // Skript Einstellungen *************************************************************************************************************************************************
      
      let dpList = '0_userdata.0.vis.SkriptStatus.jsonList';                      // Datenpunkt für IconList Widget (Typ: Zeichenkette (String))
      let dpskriptRestart = '0_userdata.0.vis.SkriptStatus.restart';              // Datenpunkt für Skript restart (Typ: Zeichenkette (String))
      
      let dpSortMode = '0_userdata.0.vis.SkriptStatus.sortMode';                  // Datenpunkt für Sortieren (Typ: Zeichenkette (String))
      let dpFilterMode = '0_userdata.0.vis.SkriptStatus.filterMode';              // Datenpunkt für Filter (Typ: Zeichenkette (String))
      
      const checkInterval = 30;                                                   // Interval wie oft Status der Skripte aktualisiert werden soll (in Sekunden)
      
      let sprache = 'de';                                                         // Sprache für formatierung letzte Änderung
      let formatierungLastChange = "ddd DD.MM - HH:mm";                           // Formatierung letzte Änderung -> siehe momentjs library
      
      let neustarten = true;                                                      // true: Skript wird neugestartet, false: Skript wird gestoppt oder gestartet
      
      let farbeSkriptAktiv = 'green';                                             // Status Bar Farbe wenn Skript aktiv ist
      let farbeSkriptDeaktiviert = 'darkgrey';                                    // Status Bar Farbe wenn Skript deaktiviert ist
      let farbeSkriptProblem = 'FireBrick';                                       // Status Bar Farbe wenn Skript Problem hat
      
      let sortResetAfter = 120;                                                   // Sortierung nach X Sekunden auf sortReset zurücksetzen (0=deaktiviert)
      let sortReset = 'name'                                                      // Sortierung auf die zurückgesetzt werden soll
      
      let filterResetAfter = 120;                                                 // Filter nach X Sekunden zurücksetzen (0=deaktiviert)
      
      // **********************************************************************************************************************************************************************
      
      // Fomate für moment Lib
      moment.locale(sprache);
      
      // auf Änderungen aktiver Skripts hören
      let enableSelector = `[id=javascript.*.scriptEnabled.*]`;
      let skriptEnableList = $(enableSelector);
      if (skriptEnableList.length === 0) {
          // Fehlermeldung ausgeben, wenn selector kein result liefert
          console.error(`no result for selector '${enableSelector}'`)
      } else {
          // listener nur für Änderung bei alive
          skriptEnableList.on(skriptStatus);
      }
      
      // auf Änderungen Skripts mit Problemen hören
      let problemSelector = `[id=javascript.*.scriptProblem.*]`;
      let skriptProblemList = $(problemSelector);
      if (skriptProblemList.length === 0) {
          // Fehlermeldung ausgeben, wenn selector kein result liefert
          console.error(`no result for selector '${problemSelector}'`)
      } else {
          // listener nur für Änderung bei alive
          skriptProblemList.on(skriptStatus);
      }
      
      
      // auf Änderungen der Sortieung hören
      on({ id: dpSortMode, change: 'any' }, skriptStatus);
      on({ id: dpSortMode, change: 'any' }, resetSort);
      
      // auf Änderungen der Filter hören
      on({ id: dpFilterMode, change: 'any' }, skriptStatus);
      on({ id: dpFilterMode, change: 'any' }, resetFilter);
      
      
      // Funktion adapterStatus alle x Sekunden ausführen
      schedule('*/' + checkInterval + ' * * * * *', skriptStatus);
      
      function skriptStatus() {
          try {
              skriptList = [];
      
              for (var i = 0; i <= skriptEnableList.length - 1; i++) {
                  let id = skriptEnableList[i];
                  let obj = getObject(id);
      
                  let scriptObj = undefined;
                  let scriptName = '';
                  let engineType = '';
                  let lastChangeText = '';
                  let lastChange = 0;
                  let image = 'image-off-outline';
                  let imageColor = '';
                  let statusBarColor = farbeSkriptDeaktiviert;
                  let status = 1;
      
      
                  if (obj && obj !== null && obj.native && obj.native.script) {
                      scriptObj = getObject(obj.native.script);
      
                      if (scriptObj && scriptObj.common) {
                          if (scriptObj.common.name) {
                              scriptName = scriptObj.common.name;
                          }
      
                          if (scriptObj.common.engineType) {
                              engineType = scriptObj.common.engineType.replace('/js', '').replace('/ts', '');
      
                              if (engineType.toLowerCase() === 'Javascript'.toLowerCase()) {
                                  image = 'language-javascript';
                                  imageColor = '#ffca28';
                              } else if (engineType.toLowerCase() === 'TypeScript'.toLowerCase()) {
                                  image = 'language-typescript';
                                  imageColor = '#007acc';
                              } else if (engineType.toLowerCase() === 'Blockly'.toLowerCase()) {
                                  image = 'puzzle';
                                  imageColor = '#5a80a6';
                              }
                          }
      
                          if (scriptObj.ts) {
                              lastChange = scriptObj.ts;
                              lastChangeText = moment(scriptObj.ts).format(formatierungLastChange);
                          }
      
                          if (scriptObj.common.enabled) {
                              statusBarColor = farbeSkriptAktiv;
                              status = 0;
                          }
      
                          if (myHelper().getStateValueIfExist(id) === 'true') {
                              statusBarColor = farbeSkriptAktiv;
                              status = 0;
                          }
      
                          if (myHelper().getStateValueIfExist(id.replace('.scriptEnabled.', '.scriptProblem.'), false) === 'true') {
                              statusBarColor = farbeSkriptProblem;
                              status = 2;
                          }
      
                          let folder = '-';
                          let folderList = id.replace('javascript.0.scriptEnabled.').split(".");
                          if (folderList.length > 1) {
                              folder = id.replace('javascript.0.scriptEnabled.', '').replace('.' + folderList[folderList.length - 1], '');
                          }
      
                          let text = scriptName;
                          if (status === 2) {
                              text = `<span class="mdi mdi-alert-box-outline" style="color: #ec0909;"></span> ${scriptName}`
                          }
      
                          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;">Sprache</div>
                                              <div style="color: grey; font-size: 14px; font-family: RobotoCondensed-LightItalic; text-align: right;">${engineType}</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;">letzte Änderung</div>
                                              <div style="color: grey; font-size: 14px; font-family: RobotoCondensed-LightItalic; text-align: right;">${lastChangeText}</div>
                                          </div>
                                          <div style="display: flex; flex-direction: row; line-height: 1.3; padding-left: 1px; padding-right: 8px;">
                                              <div style="flex: 1;">Ordner</div>
                                              <div style="color: grey; font-size: 14px; font-family: RobotoCondensed-LightItalic; text-overflow: ellipsis; white-space: normal; text-align: right;">${folder}</div>
                                          </div>`
      
                          skriptList.push({
                              text: text,
                              subText: subText,
                              statusBarColor: statusBarColor,
                              image: image,
                              imageColor: imageColor,
                              listType: "buttonState",
                              objectId: dpskriptRestart,
                              buttonStateValue: (obj && obj !== null && obj.native && obj.native.script) ? obj.native.script : '',
                              showValueLabel: false,
                              name: scriptName,
                              lastChange: lastChange,
                              status: status,
                              folder: folder
                          });
                      }
                  }
              }
      
              let sortMode = myHelper().getStateValueIfExist(dpSortMode, 'name');
      
              if (sortMode === 'name') {
                  skriptList.sort(function (a, b) {
                      return a[sortMode].toLowerCase() == b[sortMode].toLowerCase() ? 0 : +(a[sortMode].toLowerCase() > b[sortMode].toLowerCase()) || -1;
                  });
              } else if (sortMode === 'lastChange' || sortMode === 'status' || sortMode === 'folder') {
                  skriptList.sort(function (a, b) {
                      return a[sortMode] == b[sortMode] ? 0 : +(a[sortMode] < b[sortMode]) || -1;
                  });
              } else {
                  // default: nach name sortieren
                  sortMode = 'name'
                  skriptList.sort(function (a, b) {
                      return a[sortMode].toLowerCase() == b[sortMode].toLowerCase() ? 0 : +(a[sortMode].toLowerCase() > b[sortMode].toLowerCase()) || -1;
                  });
              }
      
      
              let filterMode = myHelper().getStateValueIfExist(dpFilterMode, null);
      
              if (filterMode && filterMode !== null && filterMode !== '') {
                  if (filterMode === 'error') {
                      skriptList = skriptList.filter(function (item) {
                          return item.status === 2;
                      });
                  } else if (filterMode === 'deactivated') {
                      skriptList = skriptList.filter(function (item) {
                          return item.status === 1;
                      });
                  } else if (filterMode === 'activated') {
                      skriptList = skriptList.filter(function (item) {
                          return item.status === 0;
                      });
                  }
              }
      
      
              let result = JSON.stringify(skriptList);
              if (existsState(dpList) && getState(dpList).val !== result) {
                  setState(dpList, result, true);
              } else {
                  setState(dpList, result, true);
              }
      
          } catch (err) {
              console.error(`[skriptStatus] error: ${err.message}, stack: ${err.stack}`);
          }
      }
      
      
      // // Funktion um Skript starten / Stoppen
      on({ id: dpskriptRestart }, function (obj) {
          var scriptObj = getObject(obj.state.val.toString());
      
          if (neustarten) {
              scriptObj.common.enabled = true;
              setObject(obj.state.val.toString(), scriptObj);
          }
          else {
              if (scriptObj && scriptObj.common) {
      
                  if (scriptObj.common.enabled) {
                      scriptObj.common.enabled = false;
                  } else {
                      scriptObj.common.enabled = true;
                  }
      
                  setObject(obj.state.val.toString(), scriptObj);
              }
          }
      });
      
      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);
          }
      }
      
      // Beim Staren des Skriptes Adapter Status abrufen
      skriptStatus();
      
      function myHelper() {
          return {
              getStateValueIfExist: function (id, nullValue = undefined, prepand = '', append = '') {
                  if (existsState(id)) {
                      return prepand + getState(id).val + append;
                  } else {
                      return nullValue;
                  }
              },
              getCommonPropertyIfExist: function (object, prop, nullValue = undefined, prepand = '', append = '') {
                  if (myHelper().checkCommonPropertyExist(object, prop)) {
                      return prepand + object.common[prop] + append;
                  } else {
                      return nullValue;
                  }
              },
              checkCommonPropertyExist: function (object, prop) {
                  if (object && object.common && object.common[prop]) {
                      return true;
                  } else {
                      return false;
                  }
              }
          }
      }
      

      Benötigte libraries & Einstellungen im Javascript Adapter:
      6222b915-4e9e-4025-98ec-0baedcaed5b1-grafik.png

      posted in Praktische Anwendungen (Showcase)
      Scrounger
      Scrounger

    Latest posts made by Scrounger

    • RE: Test Adapter shuttercontrol v2.0.x

      @axel-koeneke
      Genau so ist das umgesetzt, aber der manu_modus bleibt nach dem fahren aktiv.

      posted in Tester
      Scrounger
      Scrounger
    • RE: Test Adapter shuttercontrol v2.0.x

      @homoran
      Und das muss funktionieren ohne das Blockieren des Manu-Modus für bekannte Rolladenhöhen aktiviert ist, korrekt?

      posted in Tester
      Scrounger
      Scrounger
    • RE: Test Adapter shuttercontrol v2.0.x

      @homoran sagte in Test Adapter shuttercontrol v1.7.x:

      @scrounger sagte in Test Adapter shuttercontrol v1.7.x:

      aber ist dann immer im Manu-Modus.

      auch, wenn Sunprotect beendet wird?
      und vorher die Bedingungen für Sunprotect galten!

      Nee das geht.
      Ich glaub ich erkläre mal im Detail um welche Szenario bei mir geht 😉

      Rollladen ist im SunProtect Modus (shuttercontrol.0.shutters.autoState.X = sunProtect, level = 40%). Dann wird manuell ganz geschlossen wg. Mittagsschläfchen des Kleinen (shuttercontrol.0.shutters.autoState.X = Manu_Mode). Sobald der wach ist fährt man den Rollladen wieder hoch (shuttercontrol.0.shutters.autoState.X = Manu_Mode).
      Wenn ich in jetzt auf die Position des SunProtect Modus fahre (mittels Skript getriggert durch Schalter, level = 40%) steht der halt weiter im Manu_Mode (shuttercontrol.0.shutters.autoState.X = Manu_Mode).
      Wenn jetzt sunProtect beendet wird, fährt der natürlich nicht mit hoch.

      posted in Tester
      Scrounger
      Scrounger
    • RE: Test Adapter shuttercontrol v2.0.x

      @homoran sagte in Test Adapter shuttercontrol v1.7.x:

      fahren

      Die Buttons für die Gruppen sind mir bekannt, ich brauche das aber für einen einzelnen Rollladen.

      @homoran sagte in Test Adapter shuttercontrol v1.7.x:

      oder über einen Wandtaster per Skript auf die Beschattungshöhe fahren (=SunProtect), danach ist auch der Manu_Mode beendet

      Aber das geht doch nur wenn Blockieren des Manu-Modus für bekannte Rolladenhöhen aktiviert ist?
      Weil genau das versuche ich ja, aber ist dann immer im Manu-Modus.

      posted in Tester
      Scrounger
      Scrounger
    • RE: Test Adapter shuttercontrol v2.0.x

      @homoran
      Oh jeee, das gibt Ärger mit der Frau 😁

      Ich bräuchte eigentlich nur das ich ihn manuell in die sunProtect Position fahre und der dann im sunProtect Mode ist.
      Gibts das auch zufälligerweise?

      posted in Tester
      Scrounger
      Scrounger
    • RE: Test Adapter shuttercontrol v2.0.x

      @homoran
      ja top endlich gefunden, steht auch in der Doku, shame on me 😉

      dc5643f2-79bc-42e1-a626-d7587fa7f022-image.png

      @homoran sagte in Test Adapter shuttercontrol v1.7.x:

      das gilt für alle Positionen die shuttercontrol bekannt sind.
      Wenn man eine dafür anfährt wird der Manu_Mode beendet.

      Heißt das wenn ich einen Rollladen manuell runter fahre und dann die Bedingung für SunProtect erfüllt sind, das er dann auch wieder automatisch hoch fährt?

      posted in Tester
      Scrounger
      Scrounger
    • RE: Test Adapter shuttercontrol v2.0.x

      @_fuf_
      Kannst übergangsweise ein Objekt für Alarm2 hinterlegen, dann crasht der adapter nicht mehr.
      Issue hab ich gerade angelegt:
      https://github.com/simatec/ioBroker.shuttercontrol/issues/763

      Mal noch eine andere Frage.
      Ich hatte hier mal gelesen, dass wenn man einen Rollladen manuell wieder auf die Sonnenschutzposition fährt, dass dann wieder der Status (.autoState.xxxx) auf sunProtect gehen soll. Glaub das kam in irgendeiner Version rein. Leider geht das bei mir nicht.
      Gibt's die Funktion, wenn ja muss man das irgendwo konfigurieren?

      Scrounger created this issue in simatec/ioBroker.shuttercontrol

      closed v1.8.2 - Adapter crash #763

      posted in Tester
      Scrounger
      Scrounger
    • RE: Modbus & Fronius GEN24

      @legro
      Vielen Dank für die Info.
      Seit paar Tagen is der Gen24 WR bei mir jetzt am werkeln und ohne die ganzen Infos von Dir hätte ich sicher wesentlich länger gebraucht. Akutell bin ich auch dran die ganzen Werte zu interpretieren, vor allem die Energiezähler.
      Zum Glück hat mein Nachbar exakt die gleiche Anlage auf dem Dach mit meinem alten SMA WR. Somit kann ich das sehr gut vergleichen. Werde demnächst meine Erkenntnisse teilen, sobald ich mehr Daten habe.

      Warum nutzt du bei Modbus (lt. deiner *.tsv datei) die Skalierungsfaktoren nicht direkt im adapter?

      @alex303

      Ich nutze auch INT&SF, verwende aber die Skalierungsfaktoren direkt im modbus adapter:
      9e1398a0-c05f-4485-8b00-2ccf8671f129-image.png

      Die Werte stimmen aber auch nicht mir den Werten von solar web überein. Bzw. die ersten drei tage, die letzten zwei passt es exakt und passt auch mit meiner Referenzanlage.

      posted in ioBroker Allgemein
      Scrounger
      Scrounger
    • RE: Modbus & Fronius GEN24

      @ste_glei
      Super danke, hab ich einfach in der Doku nicht gesehen...

      posted in ioBroker Allgemein
      Scrounger
      Scrounger
    • RE: Modbus & Fronius GEN24

      @legro
      Gibt es eine Adresse die mir die heutige Energie (kWh) die in den Speicher geflossen bzw entnommen wurde liefert bzw. total Werte wurden auch gehen?
      Falls nicht wie macht ihr das, raus zu finden wie viel Energie pro Tag von der PV oder dem Speicher kamen?

      posted in ioBroker Allgemein
      Scrounger
      Scrounger
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo