Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Alle Mitglieder einer Aufzählung schalten (gelöst)

    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

    SOLVED Alle Mitglieder einer Aufzählung schalten (gelöst)

    This topic has been deleted. Only users with topic management privileges can see it.
    • N
      NyanCat last edited by NyanCat

      Hallo zusammen, ich habe leider nichts in der Suche gefunden, was mir so richtig weitergeholfen hat.
      Ich habe ein paar Lampen der Aufzählung "enum.functions.light" zugeordnet und würde diese gerne alle gleichzeitig an oder ausschalten.

      Zur Zeit sehen die Mitglieder so aus:

      "enum.functions.light","members":["sonoff.0.Sonoff_Basic_3.POWER","sonoff.0.Sonoff_Basic_5.POWER","sonoff.0.Sonoff_S20_1.POWER","sonoff.0.Sonoff_Touch_1.POWER","tradfri.0.L-65537.lightbulb.state","tradfri.0.L-65538.lightbulb.state"]
      

      probiert habe ich

      $('channel[state.id=*.state](functions=light)').setState(true)
      $('channel[state.id=*.POWER](functions=light)').setState(true) 
      $('channel(functions=light)').setState(true) 
      

      und und weitere Variationen. Hat aber alles irgendwie nicht funktioniert.

      on({id: "javascript.0.scenes.general.lightAllOn", val: true}, function (obj) {
        $('state(functions=light)').setState(true);
      });
      

      Bei der letzten Version werden zwar erst alle Lampen, wie gewünscht geschaltet, aber direkt danach schieß ich damit den sonoff-Adapter ab 😂

      error: sonoff.0 uncaught exception: "string" must be a string, Buffer, or ArrayBuffer
      error: sonoff.0 TypeError: "string" must be a string, Buffer, or ArrayBuffer
      

      Ich verstehe halt das ganze Prinzip, wie ich die Mitglieder einer Aufzählung ansprechen kann nicht wirklich (und das mit dem $-Selektor).

      Was wäre der einfachste Befehl, um alle Mitglieder einer Gruppe mit "setState(true/false)" ein oder auszuschalten?

      vielen Dank und Grüße

      1 Reply Last reply Reply Quote 0
      • N
        NyanCat last edited by NyanCat

        const enum_sonoff = $('state[id=*.POWER](functions="light")');
        const enum_tradfri = $('state[id=*.state](functions="light")');
        
        on({id: "javascript.0.scenes.general.lightAllOn", val: true}, function (obj) {
          enum_sonoff.each(function (id, i) {
                setState(id, true);
              });
          enum_tradfri.each(function (id, i) {
                setState(id, true);
              });
          console.log('Gesamtes Licht an');
        });
        

        funktioniert (aus geht natürlich auch).

        Dann erklärt sich auch warum ich den sonoff-Adapter abgeschossen habe mit unpassenden ID's. Die SetState's müssen also definitiv getrennt für unterschiedliche Endungen der Mitglieder gesetzt werden.

        Vielen Dank an alle, das Problem ist somit gelöst.

        1 Reply Last reply Reply Quote 0
        • bahnuhr
          bahnuhr Forum Testing Most Active last edited by

          Hallo,

          hier mal ein Script mit dem ich nachts alle Lichter (wenn sie an sind) 3 x blinken lassen und sie dann ausschalte.

          Vielleicht kannst du Scriptteile davon gebrauchen.

          
          // Licht/Dimmer nachts ausschalten und dabei 3x blinken
          
          
          function weiter() {
          
          var cacheSelectorState = $('channel[state.id=*.STATE](functions="Licht")'); 
          var cacheSelectorLevel = $('channel[state.id=*.LEVEL](functions="Licht")');
          
          cacheSelectorLevel.each(function (id, i) { 
              var name = getObject(id).common.name;
              var devicename = name.substring(0, name.indexOf(".LEVEL")); //.level aus Text entfernen
              var status = getState(id).val;     
              if (status > 0) {   // 3 x blinken
                  setState(id, 0);
                  setTimeout(function() {
                      setState(id, status);  
                  }, 2000);   
                  setTimeout(function() {
                      setState(id, 0);  
                  }, 4000);   
                  setTimeout(function() {
                      setState(id, status);  
                  }, 6000);   
                  setTimeout(function() {
                      setState(id, 0);  
                  }, 8000);   
                  setTimeout(function() {
                      setState(id, status);  
                  }, 10000);   
                  setTimeout(function() {
                      setState(id, 0);  
                  }, 12000); 
              }
          });
          
          cacheSelectorState.each(function (id, i) { 
              var name = getObject(id).common.name;
              var devicename = name.substring(0, name.indexOf(".STATE")); //.state aus Text entfernen
              var status = getState(id).val;     
              if (status > 0) {      // 3 x blinken
                  setState(id, false);
                  setTimeout(function() {
                      setState(id, true);  
                  }, 2000);   
                  setTimeout(function() {
                      setState(id, false);  
                  }, 4000);   
                  setTimeout(function() {
                      setState(id, true);  
                  }, 6000);   
                  setTimeout(function() {
                      setState(id, false);  
                  }, 8000);   
                  setTimeout(function() {
                      setState(id, true);  
                  }, 10000);   
                  setTimeout(function() {
                      setState(id, false);  
                  }, 12000); 
              }
          });
          
          }
          
          
          
          schedule("0 1,3,5,23 * * *", function () {
              weiter();
          });
          
          
          1 Reply Last reply Reply Quote 0
          • OstfrieseUnterwegs
            OstfrieseUnterwegs last edited by

            Hast Du Dir mal den Scenes Adapter angeschaut? Der ist eigentlich für solche Aufgaben ideal.

            N 1 Reply Last reply Reply Quote 0
            • N
              NyanCat @OstfrieseUnterwegs last edited by NyanCat

              @OstfrieseUnterwegs said in Alle Mitglieder einer Aufzählung schalten:

              Hast Du Dir mal den Scenes Adapter angeschaut? Der ist eigentlich für solche Aufgaben ideal.

              Ja das wäre meine Notlösung gewesen, ich hätte es über functions = light als einfacher erweiterbar empfunden.

              Die Lösung hier drunter funktioniert jedenfalls nicht:

              var cacheSelectorState;
              
              on({id: "javascript.0.scenes.general.lightAllOn", val: true}, function (obj) {
              cacheSelectorState = $('channel[state.id=*.STATE](functions="light")')
              cacheSelectorState.each(function (id, i) { 
                      setState(id, true);
                    });  
                console.log('Gesamtes Licht an');
              });
              // Button ALLE Mitglieder der Aufzählung function.light aus
              on({id: "javascript.0.scenes.general.lightAllOff", val: true}, function (obj) {
              cacheSelectorState = $('channel[state.id=*.STATE](functions="light")')
              cacheSelectorState.each(function (id, i) { 
                      setState(id, true);
                    });
                console.log('Gesamtes Licht aus');
              });
              

              Es passiert einfach nichts

              1 Reply Last reply Reply Quote 0
              • bahnuhr
                bahnuhr Forum Testing Most Active last edited by

                auf den ersten Blick:

                wenn du aus schaltest, dann aber auch mit -> false

                N 1 Reply Last reply Reply Quote 0
                • bahnuhr
                  bahnuhr Forum Testing Most Active last edited by bahnuhr

                  Das Gewerk heißt bei dir wirklich: "Light" ?

                  Und zwar oben "light"
                  und unten "Light"
                  ??

                  1 Reply Last reply Reply Quote 0
                  • N
                    NyanCat @bahnuhr last edited by

                    @bahnuhr said in Alle Mitglieder einer Aufzählung schalten:

                    auf den ersten Blick:

                    wenn du aus schaltest, dann aber auch mit -> false

                    haha ja, das war nur copy-paste, hatte erst mal nur probiert, ob an überhaupt geht (was nicht der Fall ist) ... wegen "light" und "Light" ... wo hast du denn "Light" entdeckt? also es sollte "light" sein, weil:

                    "enum.functions.light","members":["sonoff.0.Sonoff_Basic_3.POWER","sonoff.0.Sonoff_Basic_5.POWER","sonoff.0.Sonoff_S20_1.POWER","sonoff.0.Sonoff_Touch_1.POWER","tradfri.0.L-65537.lightbulb.state","tradfri.0.L-65538.lightbulb.state"]
                    

                    da sind sie alle drin 🙂

                    paul53 1 Reply Last reply Reply Quote 0
                    • bahnuhr
                      bahnuhr Forum Testing Most Active last edited by bahnuhr

                      habe dein Script bei mir probiert.
                      Bei mir mit dem Gewerk "Licht" funktioniert es einwandfrei:

                      var cacheSelectorState = $('channel[state.id=*.STATE](functions="Licht")')
                      cacheSelectorState.each(function (id,i) { 
                          setState(id, true);
                      });  
                        console.log('Gesamtes Licht an');
                      
                      

                      6b7d6b1a-4086-419a-b607-6799b928b8c0-image.png

                      1 Reply Last reply Reply Quote 0
                      • T
                        tempestas last edited by

                        Setz doch Mal setState("true") anstelle von setState(true).

                        In der Fehlermeldung steht doch, dass der sonoff einen String erwartet

                        N 1 Reply Last reply Reply Quote 0
                        • paul53
                          paul53 @NyanCat last edited by paul53

                          @NyanCat sagte in Alle Mitglieder einer Aufzählung schalten:

                          da sind sie alle drin

                          Die IDs enden nicht mit .STATE, sondern mit .POWER und .state.

                          const Sonoff = $('state[id=*.POWER](functions="light")');
                          const Tadfri = $('state[id=*.state](functions="light")');
                          
                          N 1 Reply Last reply Reply Quote 0
                          • N
                            NyanCat @tempestas last edited by

                            @tempestas said in Alle Mitglieder einer Aufzählung schalten:

                            Setz doch Mal setState("true") anstelle von setState(true).

                            In der Fehlermeldung steht doch, dass der sonoff einen String erwartet

                            Da passiert leider weiterhin nichts. Ich hab ja so ein bisschen das Gefühl, dass es etwas damit zu tun hat, dass ein paar Mitglieder mit .POWER enden und andere mit .state ... weil ich hatte mal eine Version, da gingen immerhin alle .POWER an, und zwar ohne Fehler. Aber die Tradfris halt nicht. (ich kann mich nur leider nicht mehr erinnern, was ich dafür genau geändert hatte)

                            // Button ALLE Mitglieder der Aufzählung function.light an
                            on({id: "javascript.0.scenes.general.lightAllOn", val: true}, function (obj) {
                              $('state(functions=light)').setState(true);
                              console.log('Gesamtes Licht an');
                            });
                            // Button ALLE Mitglieder der Aufzählung function.light aus
                            on({id: "javascript.0.scenes.general.lightAllOff", val: true}, function (obj) {
                              $('state(functions=light)').setState(false);
                              console.log('Gesamtes Licht aus');
                            });
                            

                            Das ist die Version, bei der ich mir den sonoff-Adapter mit den bekannten Fehlermeldungen abschieße. Es funktioniert zwar (also es wird einmal alles an- oder ausgeschaltet), aber danach ist der sonoff down.

                            BBTown 1 Reply Last reply Reply Quote 0
                            • N
                              NyanCat @paul53 last edited by

                              @paul53 said in Alle Mitglieder einer Aufzählung schalten:

                              @NyanCat sagte in Alle Mitglieder einer Aufzählung schalten:

                              da sind sie alle drin

                              Die IDs enden nicht mit .STATE, sondern mit .POWER und .state.

                              const Sonoff = $('state[id=*.POWER](functions="light")');
                              const Tadfri = $('state[id=*.state](functions="light")');
                              

                              Ja in die Richtung hatte ich auch schon was probiert, probiere es aber nochmal. Kann man eigentlich auch irgendwie einer Variabel die ID's von beiden zuweisen, so dass ich keine 2 .each machen muss?

                              schon mal vielen Dank 🙂

                              paul53 1 Reply Last reply Reply Quote 0
                              • paul53
                                paul53 @NyanCat last edited by paul53

                                @NyanCat sagte in Alle Mitglieder einer Aufzählung schalten:

                                Kann man eigentlich auch irgendwie einer Variabel die ID's von beiden zuweisen, so dass ich keine 2 .each machen muss?

                                Nein. Teste erst einmal, ob alle passenden IDs gefunden werden.

                                const Sonoff = $('state[id=*.POWER](functions="light")');
                                const Tadfri = $('state[id=*.state](functions="light")');
                                
                                Sonoff.each(function(id, i) {
                                   log(id + ': ' + getState(id).val);
                                });
                                Tadfri.each(function(id, i) {
                                   log(id + ': ' + getState(id).val);
                                });
                                
                                1 Reply Last reply Reply Quote 1
                                • BBTown
                                  BBTown @NyanCat last edited by

                                  @NyanCat wie @paul53 bereits geschrieben hat:
                                  ". STATE" ist nicht das gleiche wie ".state"

                                  1 Reply Last reply Reply Quote 0
                                  • N
                                    NyanCat last edited by NyanCat

                                    const enum_sonoff = $('state[id=*.POWER](functions="light")');
                                    const enum_tradfri = $('state[id=*.state](functions="light")');
                                    
                                    on({id: "javascript.0.scenes.general.lightAllOn", val: true}, function (obj) {
                                      enum_sonoff.each(function (id, i) {
                                            setState(id, true);
                                          });
                                      enum_tradfri.each(function (id, i) {
                                            setState(id, true);
                                          });
                                      console.log('Gesamtes Licht an');
                                    });
                                    

                                    funktioniert (aus geht natürlich auch).

                                    Dann erklärt sich auch warum ich den sonoff-Adapter abgeschossen habe mit unpassenden ID's. Die SetState's müssen also definitiv getrennt für unterschiedliche Endungen der Mitglieder gesetzt werden.

                                    Vielen Dank an alle, das Problem ist somit gelöst.

                                    1 Reply Last reply Reply Quote 0
                                    • smartboart
                                      smartboart last edited by

                                      Hallo,
                                      beim folgenden Selektor werden auch Geräte aufgeführt welche nicht dem Gewerk Licht zugeordnet sind.
                                      var cacheSelectorState = $('channel[state.id=hm-rpc.0*.STATE](functions= Licht)');

                                      zum Beispiel dieser hier... also Steckdose wird mit verarbeitet..
                                      Unbenannt1.JPG

                                      Fehler im Javascriptadapter ?

                                      paul53 1 Reply Last reply Reply Quote 0
                                      • paul53
                                        paul53 @smartboart last edited by paul53

                                        @smartboart sagte:

                                        $('channel[state.id=hm-rpc.0*.STATE](functions= Licht)');

                                        Die Gewerke sind nicht Kanälen, sondern Datenpunkten zugeordnet. Versuche mal

                                        $('state[id=hm-rpc.0.*.STATE](functions=Licht)');
                                        

                                        In der ID enum.functions.Licht ist "Licht" groß geschrieben ?

                                        smartboart 1 Reply Last reply Reply Quote 0
                                        • smartboart
                                          smartboart last edited by

                                          Hatte ich vorher.. Gleiches Verhalten!!!

                                          1 Reply Last reply Reply Quote 0
                                          • smartboart
                                            smartboart @paul53 last edited by smartboart

                                            @paul53 ja ist gross geschrieben..hab schon alle Varianten durch und getestet...
                                            Screenshot_20200213_210145_org.mozilla.firefox.jpg

                                            paul53 1 Reply Last reply Reply Quote 0
                                            • paul53
                                              paul53 @smartboart last edited by

                                              @smartboart sagte:

                                              hab schon alle Varianten durch und getestet...

                                              Welche Versionen haben ?

                                              • js-controller
                                              • Javascript-Adapter
                                              smartboart 1 Reply Last reply Reply Quote 0
                                              • First post
                                                Last post

                                              Support us

                                              ioBroker
                                              Community Adapters
                                              Donate

                                              586
                                              Online

                                              31.7k
                                              Users

                                              79.9k
                                              Topics

                                              1.3m
                                              Posts

                                              7
                                              30
                                              1921
                                              Loading More Posts
                                              • Oldest to Newest
                                              • Newest to Oldest
                                              • Most Votes
                                              Reply
                                              • Reply as topic
                                              Log in to reply
                                              Community
                                              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                              The ioBroker Community 2014-2023
                                              logo