Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Javascript: Multischalter / Datenpunkt

    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

    Javascript: Multischalter / Datenpunkt

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

      Hallo zusammen

      Hab ein Problem

      Ich habe 3 Datenpunkte mit welchen ich die Weihnachtsbeleuchtung schalten will. Im VIS will ich auf der Startseite aber nur ein Button (weitere Datenpunkt) haben, welcher wenn noch eine einer der 3 Datenpunkte auf true ist auch auf true ist und wenn alle aus sind auf false.

      Wenn ich den Button drücke wenn er noch auf true ist, dann sollen alle 3 Datenpunkte auf false gehen.
      Andersrum soll er wenn er auf False ist alle auf true setzen.

      Auf einer "Unterseite" werden dann alle Lichter einzeln dargestellt.

      Ich habe das mal in Javascript versucht umzusetzen, aber wahrscheinlich habe ich irgendwo ein Denkfehler, ich komme immer in eine Endlosschleife:

      var Weihnachten = ['hm-rpc.0.000B9BE98C3FC5.4.STATE', 'shelly.0.SHSW-25#C45BBE5F9833#1.Relay0.Switch','shelly.0.SHSW-25#C45BBE5F9833#1.Relay1.Switch'];
       on(Weihnachten , function (obj) {
        var lighton = false;
          Weihnachten.forEach(function(obj) {
          if (getState(obj).val == true) {
         lighton = true;     
          }
          })
          setState('javascript.0.Weihnachtsbeleuchtung', lighton);
          });
          // Weichnachtsbeleuchtung einschalten
          on('javascript.0.Weihnachtsbeleuchtung' , function (obj) {
                if  (obj.state.val == true) {
                     Weihnachten.forEach(function(obj2) {
                        if (getState(obj2).val == false){
                        setState(obj2, true);
                        console.log(obj2 + " AN");
                        }
                }); 
                }
              if  (obj.state.val == false) {
                     Weihnachten.forEach(function(obj2) {
                        if (getState(obj2).val == true){
                       setState(obj2, false);
                        }
                      console.log(obj2 + " AUS");
                }); 
                }
          });
      
      

      Jemand eine Idee wie ich das am beste löse?

      Asgothian 1 Reply Last reply Reply Quote 0
      • Asgothian
        Asgothian Developer @Kernal last edited by Asgothian

        @kernal

        Ohne das Skript im Detail durchgegangen zu sein:

        Der mir bekannte normale Weg für diese Aufgabe ist die Nutzung des 'acknowledge'

        Man nehme

        • Die States A, B, C die die Weihnachtsbeleuchtung steuern
        • Den State V der in der Vis angezeigt wird.

        Die Vis sollte den State V immer mit 'acknowledge' = false setzen, um damit ein Gerät anzusteuern. Dementsprechend kann der Trigger um die States A,B,C anzusteuern mit "ack=false" verbunden werden.

        Die Aktualisierung des States V basierend auf den States A,B,C sollte dementsprechend mit 'acknowledge' auf true passieren. Damit wird der Trigger nicht aktiv und es entsteht keine Schaltschleife.

        Zur Frage wie mach ich das mit acknowledge im Trigger siehe hier.

        K 1 Reply Last reply Reply Quote 1
        • K
          Kernal @Asgothian last edited by

          @asgothian Vielen Dank.
          Bekomme es leider nicht hin. Wenn ich Anfange mit acknowledge zu arbeiten, merkt das VIS nicht mehr, dass sich der Status geändert hat und zeigt mir den Button als aktiv an obwohl er auf false steht.

          Asgothian 1 Reply Last reply Reply Quote 0
          • Asgothian
            Asgothian Developer @Kernal last edited by

            @kernal Hmm.. das ist nicht schön.

            Dann bleibt dir nur eine Option. Am Trigger auf den Datenpunkt V müsstest du im Trigger auf verifizieren was in state.val.from drinsteht. Da ich vis nicht einsetze kann ich Dir nicht sagen was da steht wenn der State über die vis gesetzt wird. Aus einem Skript heraus muss da system.adapter.javascript.x stehen, wobei x die InstanzID (zumeist 0) ist.

            A.

            K 1 Reply Last reply Reply Quote 1
            • K
              Kernal @Asgothian last edited by Kernal

              @asgothian Vielen Danke. Bei state.val.from ist immer undefiniert, aber in state.from steht system.web.0 beim vis drin.

              So funktioniert es jetzt:

              
              //Weihnachtsbeleuchtung Gruppe
              
              var Weihnachten = ['hm-rpc.0.000B9BE98C3FC5.4.STATE', 'shelly.0.SHSW-25#C45BBE5F9833#1.Relay0.Switch','shelly.0.SHSW-25#C45BBE5F9833#1.Relay1.Switch'];
              on('javascript.0.Weihnachtsbeleuchtung', function(obj) {
              if  (obj.state.from != "system.adapter.javascript.0") {
              Weihnachten.forEach(function(wobj){
              setState(wobj, obj.state.val);
              });
              }
              });
              
              on(Weihnachten, function(obj) {
                 var lightson = false;
              setTimeout(function() {
                 Weihnachten.forEach(function(wobj) {
              if (getState(wobj).val == true) {
              lightson = true;
                 }
                 });
                 if (getState('javascript.0.Weihnachtsbeleuchtung').val != lightson) {
               }
               }, 2000);   
              });
              
              
              1 Reply Last reply Reply Quote 0
              • First post
                Last post

              Support us

              ioBroker
              Community Adapters
              Donate

              860
              Online

              31.8k
              Users

              80.0k
              Topics

              1.3m
              Posts

              2
              5
              311
              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