Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. (gelöst) mehrere DP toggeln

NEWS

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    1.2k

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    10
    1
    663

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    1.2k

(gelöst) mehrere DP toggeln

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
6 Beiträge 3 Kommentatoren 449 Aufrufe 2 Beobachtet
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • ice987I Offline
    ice987I Offline
    ice987
    schrieb am zuletzt editiert von ice987
    #1

    Hallo zusammen,

    aktuell setzte ich das Widget "materialdesign - Icon List" ein um Farben in einer Tabelle wählen zu können. Jede Farbe darf nur einmal vorkommen, d.h. wenn ein Button gedrückt wird (true) sollen alle anderen Farben (Button) auf "false" springen:

    Widget-Export

    [{"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","vibrateOnMobilDevices":"","listLayout":"standard","itemLayout":"vertical","buttonLayout":"full","listItemDataMethod":"inputPerEditor","countListItems":"3","listType0":"buttonToggle","showValueLabel0":false,"listType1":"buttonToggle","showValueLabel1":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,"maxItemsperRow":"5","itemGaps":"2","labelFontSize":"10","labelFontFamily":"Arial, Helvetica, sans-serif","labelFontColor":"#ffffff","g_listItemCardBackground":false,"titleLayout":"headline6","g_lock":false,"autoLockAfter":"10","lockIconTop":"5","lockIconLeft":"5","lockFilterGrayscale":"30","lockApplyOnlyOnImage":"true","listType2":"text","showValueLabel2":"true","listType3":"text","showValueLabel3":false,"oid0":"0_userdate.0.farbe.gelb","typeButtonToggleValueTrue0":"true","typeButtonToggleValueFalse0":"false","itemBackgroundColor0":"#f59c00","label0":"gelb","listImage0":"check","listImageColor0":"#f59c00","listImageActive0":"check","listImageActiveColor0":"#ff0000","oid1":"0_userdate.0.farbe.orange","typeButtonToggleValueTrue1":"true","typeButtonToggleValueFalse1":"false","label1":"orange","listImage1":"check","listImageActive1":"check","listImageActiveColor1":"#ff0000","listImageActive2":"check","listImageActiveColor2":"#ff0000","typeButtonToggleValueTrue2":"true","typeButtonToggleValueFalse2":"false","label2":"pink","listImageActive3":"check","listImageActiveColor3":"#ff0000","typeButtonToggleValueTrue3":"true","typeButtonToggleValueFalse3":"false","buttonBgColor1":"","listImageColor1":"#ff6600","itemBackgroundColor1":"#ff6600","itemBackgroundColor2":"#e4a7a6","listImageColor2":"#e4a7a6","listImage2":"check","itemBackgroundColor3":"#03933e","label3":"grün","listImage3":"check","listImageColor3":"#03933e","oid2":"0_userdate.0.farbe.pink","oid3":"0_userdate.0.farbe.gruen"},"style":{"left":"52px","top":"341px","width":"275px","height":"55px","z-index":"1"},"widgetSet":"materialdesign"}]
    

    als JS-Script habe ich das nun bisher sehr umständlich umgesetzt:

    on({id: "0_userdata.0.farbe.gelb", val: true}, function (obj) {
        setState("0_userdata.0.farbe.orange", false);
        setState("0_userdata.0.farbe.pink", false);
        setState("0_userdata.0.farbe.gruen", false);
    });
    
    on({id: "0_userdata.0.farbe.orange", val: true}, function (obj) {
        setState("0_userdata.0.farbe.gelb", false);
        setState("0_userdata.0.farbe.pink", false);
        setState("0_userdata.0.farbe.gruen", false);
    });
    
    on({id: "0_userdata.0.farbe.pink", val: true}, function (obj) {
        setState("0_userdata.0.farbe.gelb", false);
        setState("0_userdata.0.farbe.orange", false);
        setState("0_userdata.0.farbe.gruen", false);
    });
    
    on({id: "0_userdata.0.farbe.gruen", val: true}, function (obj) {
        setState("0_userdata.0.farbe.gelb", false);
        setState("0_userdata.0.farbe.orange", false);
        setState("0_userdata.0.farbe.pink", false);
    });
    

    welches ist die eleganteste Lösung um dies einfacher zu gestalten? Evtl. hat jemand einen guten Input/Denkanstoss?

    husqvarna-automower, meteoblue, wiserbyfeller, spritmonitor

    AsgothianA 1 Antwort Letzte Antwort
    0
    • ice987I ice987

      Hallo zusammen,

      aktuell setzte ich das Widget "materialdesign - Icon List" ein um Farben in einer Tabelle wählen zu können. Jede Farbe darf nur einmal vorkommen, d.h. wenn ein Button gedrückt wird (true) sollen alle anderen Farben (Button) auf "false" springen:

      Widget-Export

      [{"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","vibrateOnMobilDevices":"","listLayout":"standard","itemLayout":"vertical","buttonLayout":"full","listItemDataMethod":"inputPerEditor","countListItems":"3","listType0":"buttonToggle","showValueLabel0":false,"listType1":"buttonToggle","showValueLabel1":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,"maxItemsperRow":"5","itemGaps":"2","labelFontSize":"10","labelFontFamily":"Arial, Helvetica, sans-serif","labelFontColor":"#ffffff","g_listItemCardBackground":false,"titleLayout":"headline6","g_lock":false,"autoLockAfter":"10","lockIconTop":"5","lockIconLeft":"5","lockFilterGrayscale":"30","lockApplyOnlyOnImage":"true","listType2":"text","showValueLabel2":"true","listType3":"text","showValueLabel3":false,"oid0":"0_userdate.0.farbe.gelb","typeButtonToggleValueTrue0":"true","typeButtonToggleValueFalse0":"false","itemBackgroundColor0":"#f59c00","label0":"gelb","listImage0":"check","listImageColor0":"#f59c00","listImageActive0":"check","listImageActiveColor0":"#ff0000","oid1":"0_userdate.0.farbe.orange","typeButtonToggleValueTrue1":"true","typeButtonToggleValueFalse1":"false","label1":"orange","listImage1":"check","listImageActive1":"check","listImageActiveColor1":"#ff0000","listImageActive2":"check","listImageActiveColor2":"#ff0000","typeButtonToggleValueTrue2":"true","typeButtonToggleValueFalse2":"false","label2":"pink","listImageActive3":"check","listImageActiveColor3":"#ff0000","typeButtonToggleValueTrue3":"true","typeButtonToggleValueFalse3":"false","buttonBgColor1":"","listImageColor1":"#ff6600","itemBackgroundColor1":"#ff6600","itemBackgroundColor2":"#e4a7a6","listImageColor2":"#e4a7a6","listImage2":"check","itemBackgroundColor3":"#03933e","label3":"grün","listImage3":"check","listImageColor3":"#03933e","oid2":"0_userdate.0.farbe.pink","oid3":"0_userdate.0.farbe.gruen"},"style":{"left":"52px","top":"341px","width":"275px","height":"55px","z-index":"1"},"widgetSet":"materialdesign"}]
      

      als JS-Script habe ich das nun bisher sehr umständlich umgesetzt:

      on({id: "0_userdata.0.farbe.gelb", val: true}, function (obj) {
          setState("0_userdata.0.farbe.orange", false);
          setState("0_userdata.0.farbe.pink", false);
          setState("0_userdata.0.farbe.gruen", false);
      });
      
      on({id: "0_userdata.0.farbe.orange", val: true}, function (obj) {
          setState("0_userdata.0.farbe.gelb", false);
          setState("0_userdata.0.farbe.pink", false);
          setState("0_userdata.0.farbe.gruen", false);
      });
      
      on({id: "0_userdata.0.farbe.pink", val: true}, function (obj) {
          setState("0_userdata.0.farbe.gelb", false);
          setState("0_userdata.0.farbe.orange", false);
          setState("0_userdata.0.farbe.gruen", false);
      });
      
      on({id: "0_userdata.0.farbe.gruen", val: true}, function (obj) {
          setState("0_userdata.0.farbe.gelb", false);
          setState("0_userdata.0.farbe.orange", false);
          setState("0_userdata.0.farbe.pink", false);
      });
      

      welches ist die eleganteste Lösung um dies einfacher zu gestalten? Evtl. hat jemand einen guten Input/Denkanstoss?

      AsgothianA Offline
      AsgothianA Offline
      Asgothian
      Developer
      schrieb am zuletzt editiert von
      #2

      @ice987

      Zumindest ein Denkanstoß, mehr ggf. Später, bin gerade unterwegs.

      Ein Array mit allen gewünschten Datenpunkten definieren.
      Ein trigger auf alle dp‘s, mit change:“gt“ um nur den Wechsel false->true zu fangen.

      In der Funktion durch das Array durch gehen. Wenn Eintrag gleich dem Objekt welches den trigger ausgelöst hat nix tun, sonst value auf True setzen.

      ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
      "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

      paul53P 1 Antwort Letzte Antwort
      0
      • AsgothianA Asgothian

        @ice987

        Zumindest ein Denkanstoß, mehr ggf. Später, bin gerade unterwegs.

        Ein Array mit allen gewünschten Datenpunkten definieren.
        Ein trigger auf alle dp‘s, mit change:“gt“ um nur den Wechsel false->true zu fangen.

        In der Funktion durch das Array durch gehen. Wenn Eintrag gleich dem Objekt welches den trigger ausgelöst hat nix tun, sonst value auf True setzen.

        paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von
        #3

        @Asgothian sagte:

        In der Funktion durch das Array durch gehen. Wenn Eintrag gleich dem Objekt welches den trigger ausgelöst hat nix tun, sonst

        Etwa so:

        const ids = [
            "0_userdata.0.farbe.gelb",
            "0_userdata.0.farbe.orange",
            "0_userdata.0.farbe.pink",
            "0_userdata.0.farbe.gruen"
        ];
        
        on({id: ids, change: 'gt'}, function (dp) {
            for(let i = 0; i < ids.length; i++) {
                if(dp.id != ids[i]) setState(ids[i], false, true);
            }
        });
        

        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
        Produktiv: Asus PN 42 / N100 / 8 GB / 500 GB

        AsgothianA ice987I 2 Antworten Letzte Antwort
        2
        • paul53P paul53

          @Asgothian sagte:

          In der Funktion durch das Array durch gehen. Wenn Eintrag gleich dem Objekt welches den trigger ausgelöst hat nix tun, sonst

          Etwa so:

          const ids = [
              "0_userdata.0.farbe.gelb",
              "0_userdata.0.farbe.orange",
              "0_userdata.0.farbe.pink",
              "0_userdata.0.farbe.gruen"
          ];
          
          on({id: ids, change: 'gt'}, function (dp) {
              for(let i = 0; i < ids.length; i++) {
                  if(dp.id != ids[i]) setState(ids[i], false, true);
              }
          });
          
          AsgothianA Offline
          AsgothianA Offline
          Asgothian
          Developer
          schrieb am zuletzt editiert von
          #4

          @paul53 sagte in mehrere DP toggeln:

          Etwa so:

          genau so. Danke @paul53

          A.

          ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
          "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

          1 Antwort Letzte Antwort
          0
          • paul53P paul53

            @Asgothian sagte:

            In der Funktion durch das Array durch gehen. Wenn Eintrag gleich dem Objekt welches den trigger ausgelöst hat nix tun, sonst

            Etwa so:

            const ids = [
                "0_userdata.0.farbe.gelb",
                "0_userdata.0.farbe.orange",
                "0_userdata.0.farbe.pink",
                "0_userdata.0.farbe.gruen"
            ];
            
            on({id: ids, change: 'gt'}, function (dp) {
                for(let i = 0; i < ids.length; i++) {
                    if(dp.id != ids[i]) setState(ids[i], false, true);
                }
            });
            
            ice987I Offline
            ice987I Offline
            ice987
            schrieb am zuletzt editiert von ice987
            #5

            @paul53
            @Asgothian

            Vielen Dank für eure Unterstützung!

            zu meinem Verständnis (kopieren kann ja jeder):
            Es wird ein Array generiert mit dem Namen ids, welches alle DP's beinhaltet. Der Inhalt dieses Arrays dient als Wert für den Trigger. Change: 'gt' (gem. Definition: "(greater) New value must be greater than old value (state.val > oldState.val)"): ist somit "true" grösser als "false". Der auslösende DP wird der Funktion mit "dp" übergeben. In der Schlaufe "for" wird bei jedem Element des Arrays geprüft ob der Arrayeintrag dem Auslöser entspricht. Wenn nein dann "setState vom jeweiligen Element auf "false" sonst "true".

            husqvarna-automower, meteoblue, wiserbyfeller, spritmonitor

            paul53P 1 Antwort Letzte Antwort
            0
            • ice987I ice987

              @paul53
              @Asgothian

              Vielen Dank für eure Unterstützung!

              zu meinem Verständnis (kopieren kann ja jeder):
              Es wird ein Array generiert mit dem Namen ids, welches alle DP's beinhaltet. Der Inhalt dieses Arrays dient als Wert für den Trigger. Change: 'gt' (gem. Definition: "(greater) New value must be greater than old value (state.val > oldState.val)"): ist somit "true" grösser als "false". Der auslösende DP wird der Funktion mit "dp" übergeben. In der Schlaufe "for" wird bei jedem Element des Arrays geprüft ob der Arrayeintrag dem Auslöser entspricht. Wenn nein dann "setState vom jeweiligen Element auf "false" sonst "true".

              paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von paul53
              #6

              @ice987 sagte:

              Wenn nein dann "setState vom jeweiligen Element auf "false" sonst "true".

              Richtig: Wenn nein dann "setState vom jeweiligen Element auf "false", der auslösende Datenpunkt bleibt "true" (wird nicht verändert).
              Ansonsten alles richtig interpretiert.

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: Asus PN 42 / N100 / 8 GB / 500 GB

              1 Antwort Letzte Antwort
              0

              Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

              Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

              Mit deinem Input könnte dieser Beitrag noch besser werden 💗

              Registrieren Anmelden
              Antworten
              • In einem neuen Thema antworten
              Anmelden zum Antworten
              • Älteste zuerst
              • Neuste zuerst
              • Meiste Stimmen


              Support us

              ioBroker
              Community Adapters
              Donate

              411

              Online

              32.9k

              Benutzer

              82.9k

              Themen

              1.3m

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

              • Du hast noch kein Konto? Registrieren

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