Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] foreach oder andere Lösung für mein Script

    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

    [gelöst] foreach oder andere Lösung für mein Script

    This topic has been deleted. Only users with topic management privileges can see it.
    • cash
      cash Most Active last edited by

      Ich kämpfe gerade mit einem Script. Und zwar geht es um Sonos.

      Dort gibt es im Adapter ein Feld wo Gruppenmitglieder enthalten sind. Je nach Anzahl will ich die Gruppenmitglieder entfernen.

      Auf meine einfache Art und Weise habe ich es geschafft. Aber elegant ist anders. Ich vermute das es evtl mit einer foreach-Schleife besser geht?

      Leider übersteigt das mein Script-Wissen. Kann mir jemand helfen?

      Hier mein Script:

      /**************************
      * Verschiedene Abfragen wegen Sonos
      * 
      * 
      **************************/
      //Einstellungen
      var logging = true;
      var debugging = true;
      
      var Sonos_IP = '192_168_178_35'; //Schlafzimmer
      var Ziel_Volume = 16;
      var Ziel_Playlist = "Meine Lieder";
      
      //Scriptbereich
      var id_Sonos_Playlist_Set = "sonos.0.root."+Sonos_IP+".favorites_set";
      var id_Sonos_Volume = "sonos.0.root."+Sonos_IP+".volume";
      var id_Sonos_shuffle = "sonos.0.root."+Sonos_IP+".shuffle"/*Shuffle*/;
      var id_Sonos_Status = "sonos.0.root."+Sonos_IP+".state";
      var id_Sonos_Coordinator = "sonos.0.root."+Sonos_IP+".coordinator";
      var id_Sonos_Member = "sonos.0.root."+Sonos_IP+".membersChannels"/*membersChannels*/;
      var id_Sonos_Coordinator_Status;
      
      function func_Sonos(){ 
          var Sonos_Change =  false;
          var Sonos_Coordinator = getState(id_Sonos_Coordinator).val;
          var Sonos_Status = getState(id_Sonos_Status).val;
          var id_Sonos_Coordinator_Status = 'sonos.0.root.'+Sonos_Coordinator+'.state';
          var Sonos_Coordinator_Status = getState(id_Sonos_Coordinator_Status).val;
          var Sonos_Member = getState(id_Sonos_Member).val;
      
          if(debugging){
              log('eigener Status: ' +Sonos_Status);
              log('eingesteller Coordinator: ' +Sonos_Coordinator);
              log('Status vom Coordinator: ' +Sonos_Coordinator_Status);
              log('Member: ' +Sonos_Member);
          }
      
          var Sonos_Member_array = Sonos_Member.split(',');
          var Sonos_Member_Anzahl = Sonos_Member.split(',').length;
          var t1 = Sonos_Member_array[0];
          var t2 = Sonos_Member_array[1];
          var t3 = Sonos_Member_array[2];
          var t4 = Sonos_Member_array[3];
          log('Array: '+Sonos_Member_array);
          log('Anzahl Member: '+Sonos_Member_Anzahl );
          log(t1);
          log(t2);
          log(t3);
          log(t4);
          if(t1 != undefined && t1 != Sonos_IP){
              log('t1 Coordinator entfernt');
              setState('sonos.0.root.'+t1+'.coordinator',t1);
          }
          else{
              log('t1 nichts gemacht');
          }
          if(t2 != undefined && t2 != Sonos_IP){
              log('t2 Coordinator entfernt');
              setState('sonos.0.root.'+t2+'.coordinator',t2);
          }
          else{
              log('t2 nichts gemacht');
          }
          if(t3 != undefined && t3 != Sonos_IP){
              log('t3 Coordinator entfernt');
              setState('sonos.0.root.'+t3+'.coordinator',t3);
          }
          else{
              log('t3 nichts gemacht');
          }
          if(t4 != undefined && t4 != Sonos_IP){
              log('t4 Coordinator entfernt');
              setState('sonos.0.root.'+t4+'.coordinator',t4);
          }
          else{
              log('t4 nichts gemacht');
          }
      
      }
      
      func_Sonos(); 
      

      Damit es nachvollziehbarer ist mal ein Teil der Ausgabe:

      avascript.0	2019-01-15 21:50:16.290	info	script.js.Entwicklung.Sonosteil: t4 nichts gemacht
      javascript.0	2019-01-15 21:50:16.290	info	script.js.Entwicklung.Sonosteil: t3 nichts gemacht
      javascript.0	2019-01-15 21:50:16.290	info	script.js.Entwicklung.Sonosteil: t2 Coordinator entfernt
      javascript.0	2019-01-15 21:50:16.289	info	script.js.Entwicklung.Sonosteil: t1 Coordinator entfernt
      javascript.0	2019-01-15 21:50:16.289	info	script.js.Entwicklung.Sonosteil: undefined
      javascript.0	2019-01-15 21:50:16.289	info	script.js.Entwicklung.Sonosteil: 192_168_178_35
      javascript.0	2019-01-15 21:50:16.289	info	script.js.Entwicklung.Sonosteil: 192_168_178_48
      javascript.0	2019-01-15 21:50:16.289	info	script.js.Entwicklung.Sonosteil: 192_168_178_47
      javascript.0	2019-01-15 21:50:16.289	info	script.js.Entwicklung.Sonosteil: Anzahl Member: 3
      javascript.0	2019-01-15 21:50:16.289	info	script.js.Entwicklung.Sonosteil: Array: 192_168_178_47,192_168_178_48,192_168_178_35
      javascript.0	2019-01-15 21:50:16.288	info	script.js.Entwicklung.Sonosteil: Member: 192_168_178_47,192_168_178_48,192_168_178_35
      javascript.0	2019-01-15 21:50:16.288	info	script.js.Entwicklung.Sonosteil: Status vom Coordinator: stop
      javascript.0	2019-01-15 21:50:16.288	info	script.js.Entwicklung.Sonosteil: eingesteller Coordinator: 192_168_178_35
      javascript.0	2019-01-15 21:50:16.288	info	script.js.Entwicklung.Sonosteil: eigener Status: stop
      
      1 Reply Last reply Reply Quote 0
      • paul53
        paul53 last edited by

        Den Teil

            log(t1);
            log(t2);
            log(t3);
            log(t4);
            if(t1 != undefined && t1 != Sonos_IP){
                log('t1 Coordinator entfernt');
                setState('sonos.0.root.'+t1+'.coordinator',t1);
            }
            else{
                log('t1 nichts gemacht');
            }
            if(t2 != undefined && t2 != Sonos_IP){
                log('t2 Coordinator entfernt');
                setState('sonos.0.root.'+t2+'.coordinator',t2);
            }
            else{
                log('t2 nichts gemacht');
            }
            if(t3 != undefined && t3 != Sonos_IP){
                log('t3 Coordinator entfernt');
                setState('sonos.0.root.'+t3+'.coordinator',t3);
            }
            else{
                log('t3 nichts gemacht');
            }
            if(t4 != undefined && t4 != Sonos_IP){
                log('t4 Coordinator entfernt');
                setState('sonos.0.root.'+t4+'.coordinator',t4);
            }
            else{
                log('t4 nichts gemacht');
            }
        
        

        kann man durch eine for-Schleife ersetzen.

         `for(let i = 0; i < 4; i++) {
              var t = Sonos_Member_array[i];
              log(t);
              if(t != undefined && t != Sonos_IP){
                 log((i + 1) + ' Coordinator entfernt');
                 setState('sonos.0.root.' + t + '.coordinator', t);
              } else log((i + 1) + ' nichts gemacht');
           }` [/i]
        
        1 Reply Last reply Reply Quote 0
        • cash
          cash Most Active last edited by

          Perfekt genau an diesen Teil hatte ich gedacht. :mrgreen:

          Das Script läuft natürlich wie gewünscht.

          Beim nächstenmal schaffe ich es dann vielleicht auch selber. Logisch ist es zumindest. Vielen Dank!

          geändert habe ich

          for(let i = 0; i < 4; i++) {
          

          da ich die Anzahl durch die Abfrage

          var Sonos_Member_Anzahl = Sonos_Member.split(',').length;
          

          bestimmen kann. Somit wird die Schleife nur so oft durchlaufen wie es Member Einträge gibt.

          Meine Zeile lautet also

          for(let i = 0; i < Sonos_Member_Anzahl; i++) {
          

          Ich ergänze es falls mal jemand vor einen ähnlichen Problem steht.

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

            @cash:

            Das Script läuft natürlich wie gewünscht. `
            Dann markiere bitte das Thema im Betreff des ersten Beitrags als [gelöst].

            1 Reply Last reply Reply Quote 0
            • First post
              Last post

            Support us

            ioBroker
            Community Adapters
            Donate

            860
            Online

            31.8k
            Users

            79.9k
            Topics

            1.3m
            Posts

            2
            4
            249
            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