Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • 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. Javascript: Multischalter / Datenpunkt

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.9k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    911

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Javascript: Multischalter / Datenpunkt

Geplant Angeheftet Gesperrt Verschoben JavaScript
5 Beiträge 2 Kommentatoren 457 Aufrufe 2 Watching
  • Ä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.
  • K Offline
    K Offline
    Kernal
    schrieb am zuletzt editiert von
    #1

    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?

    AsgothianA 1 Antwort Letzte Antwort
    0
    • K Kernal

      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?

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

      @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.

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

      K 1 Antwort Letzte Antwort
      1
      • AsgothianA 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 Offline
        K Offline
        Kernal
        schrieb am zuletzt editiert von
        #3

        @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.

        AsgothianA 1 Antwort Letzte Antwort
        0
        • K Kernal

          @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.

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

          @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.

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

          K 1 Antwort Letzte Antwort
          1
          • AsgothianA Asgothian

            @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 Offline
            K Offline
            Kernal
            schrieb am zuletzt editiert von Kernal
            #5

            @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 Antwort Letzte Antwort
            0
            Antworten
            • In einem neuen Thema antworten
            Anmelden zum Antworten
            • Älteste zuerst
            • Neuste zuerst
            • Meiste Stimmen


            Support us

            ioBroker
            Community Adapters
            Donate

            707

            Online

            32.6k

            Benutzer

            82.2k

            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