Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. State Ordner von zwei Lampen syncen

    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

    State Ordner von zwei Lampen syncen

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

      Hallo zusammen,

      ich hab eine Frage:
      Ich würde gerne zwei Lampen vollständig synchronisieren, da sie im selben Raum sind.
      Es handelt sich um 2x Yeelight, aber ich glaube das spielt keine Rolle.

      Ich habe mir drei Lösungen überlegt:

      1. Ich synce über Subscriptions -> geht bei mir nicht -> siehe Code unten -> Performanz ist so vmtl. eh schlecht.
      2. Ich synce zwei States irgendwie ohne Subscription
      3. Ich synce irgendwie den ganzen Ordner "control" (das funktioniert dann aber vmtl. nur bei Yeelights, bzw. gleicher Struktur) -> bslamp.control = color.control

      Danke vorab!

      Anhang:

      5c5af313-46df-4905-815b-71415906c4f5-image.png

      on({
          id: new RegExp(
              "yeelight-2.0\\.bslamp2\\.control\\.active_bright" + "|" +
              "yeelight-2.0\\.bslamp2\\.control\\.color_mode" + "|" +
              "yeelight-2.0\\.bslamp2\\.control\\.ct" + "|" +
              "yeelight-2.0\\.bslamp2\\.control\\.hue" + "|" +
              "yeelight-2.0\\.bslamp2\\.control\\.power" + "|" +
              "yeelight-2.0\\.bslamp2\\.control\\.rgb" + "|" +
              "yeelight-2.0\\.bslamp2\\.control\\.sat" + "|" +
              "yeelight-2.0\\.bslamp2\\.control\\.set_scene"
          ),
          change: "ne"
      }, () => {
          setState("yeelight-2.0.color.control.active_bright", getState("yeelight-2.0.bslamp2.control.active_bright").val);
          setState("yeelight-2.0.color.control.color_mode", getState("yeelight-2.0.bslamp2.control.color_mode").val);
          setState("yeelight-2.0.color.control.ct", getState("yeelight-2.0.bslamp2.control.ct").val);
          setState("yeelight-2.0.color.control.hue", getState("yeelight-2.0.bslamp2.control.hue").val);
          setState("yeelight-2.0.color.control.power", getState("yeelight-2.0.bslamp2.control.power").val);
          setState("yeelight-2.0.color.control.rgb", getState("yeelight-2.0.bslamp2.control.rgb").val);
          setState("yeelight-2.0.color.control.sat", getState("yeelight-2.0.bslamp2.control.sat").val);
          setState("yeelight-2.0.color.control.set_scene", getState("yeelight-2.0.bslamp2.control.set_scene").val);
      });
      
      paul53 J 2 Replies Last reply Reply Quote 0
      • paul53
        paul53 @jlssmt last edited by paul53

        @jlssmt sagte:

        Ich synce zwei States irgendwie ohne Subscription

        Wie soll das gehen ?

        @jlssmt sagte in State Ordner von zwei Lampen syncen:

        Ich synce irgendwie den ganzen Ordner "control"

        Man kann keine Ordner synchronisieren - nur Zustände von Datenpunkten.

        @jlssmt sagte in State Ordner von zwei Lampen syncen:

        Ich synce über Subscriptions -> geht bei mir nicht -> siehe Code unten

        Weshalb geht es nicht ?
        Verwende besser 8 einzelne Subscriptions, damit nicht bei jedem Trigger-Ereignis 8 Datenpunkte gesetzt werden müssen.

        on('yeelight-2.0.bslamp2.control.active_bright', function(dp) {
           setState('yeelight-2.0.color.control.active_bright', dp.state.val);
        });
        // weitere 7 Trigger
        

        Alternativ kann auch der $Selector verwendet und die Datenpunkt-ID modifiziert werden, was allerdings nur bei identischer Ordner-Struktur funktioniert.

        $('yeelight-2.0.bslamp2.control.*').on(function(dp) {
           let id = dp.id.replace('bslamp2', 'color');
           setState(id, dp.state.val);
        });
        
        J 1 Reply Last reply Reply Quote 1
        • J
          jlssmt @paul53 last edited by

          Wie soll das gehen ?

          Naja das weiß ich auch nicht 😄 Dachte vllt. an: zwei Datenpunkte zeigen auf eine Referenz und man ändert immer die Referenz.

          Weshalb geht es nicht ?

          ioBroker bzw. meine Lampen spinnen dann. Vmtl. checkt der Yeelight Adapter es nicht, wenn acht Datenpunkte gleichzeitig geändert werden.

          Verwende besser 8 einzelne Subscriptions, damit nicht bei jedem Trigger-Ereignis 8 Datenpunkte gesetzt werden müssen.

          Das hatte ich übersichtlichkeitshalber extra nicht gemacht. Denn wenn ichs in beide Richtungen will brauch ich 16 subscriptions.
          Aber ich versteh auch nicht ganz die Struktur von ioBroker. Wollte eig. ein foreach auf control oder so machen. Intuitiv hätte ich gedacht, control ist ein object, welches wiederum ein Array mit den Datenpunkten enthält. Leider ist dem nicht so, sondern es sind alles einzelne Objects...

          PS: einzeln geht alles. Aber ich find das schon sehr unschön mit 16 subscriptions pro Zimmer.

          paul53 2 Replies Last reply Reply Quote 0
          • paul53
            paul53 @jlssmt last edited by

            @jlssmt sagte in State Ordner von zwei Lampen syncen:

            einzeln geht alles. Aber ich find das schon sehr unschön mit 16 subscriptions pro Zimmer.

            Hast du den alternativen Vorschlag mit dem $Selector gesehen ? (habe ich nachträglich hinzu gefügt)

            J 1 Reply Last reply Reply Quote 1
            • J
              jlssmt @paul53 last edited by jlssmt

              @paul53

              Hab ich natürlich nicht gesehen 😄
              Den kannte ich nicht. Find ich geil. Genau für so ne Info hab ich die Frage gestellt. Danke 🙂

              Edith: Werden ja trotzdem 8 Subscriptions erstellt. Weißt du zufällig auch ob viele Subscriptions Auswirkungen auf Performanz bzw. RAM hat? Gurk hier noch mit nem rpi3 rum und da läuft nicht nur ioBroker drauf 😄

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

                @jlssmt sagte:

                Werden ja trotzdem 8 Subscriptions erstellt. Weißt du zufällig auch ob viele Subscriptions Auswirkungen auf Performanz bzw. RAM hat?

                Ja, natürlich werden im Hintergrund 8 Subscriptions erstellt, die alle RAM verbrauchen. Die CPU-Last wird durch die Häufigkeit der Trigger-Ereignisse bestimmt und sollte kein Problem sein.

                1 Reply Last reply Reply Quote 1
                • paul53
                  paul53 @jlssmt last edited by

                  @jlssmt sagte:

                  mit 16 subscriptions pro Zimmer.

                  Wenn die Synchronisation in beide Richtungen erfolgen soll, sollte man als Quelle des Triggers die Javascript-Instanz ausschließen, damit nicht unnötig gesendet wird.

                  const jsi = 'system.adapter.javascript.' + instance;
                  
                  $('yeelight-2.0.bslamp2.control.*').on(function(dp) {
                     if(dp.state.from != jsi) {
                        let id = dp.id.replace('bslamp2', 'color');
                        setState(id, dp.state.val);
                     }
                  });
                  
                  $('yeelight-2.0.color.control.*').on(function(dp) {
                     if(dp.state.from != jsi) {
                        let id = dp.id.replace('color', 'bslamp2');
                        setState(id, dp.state.val);
                     }
                  });
                  
                  J 1 Reply Last reply Reply Quote 1
                  • J
                    Jan1 @jlssmt last edited by

                    @jlssmt
                    Da müsste doch ein DP zum synchron laufen genügen und am allereinfachsten geht das mit Blockly und dem Block:
                    2f968002-b4f5-4d91-905e-dfcfd1ea3d8e-grafik.png
                    Soll das ganze in beide Richtungen laufen,, einfach den Block doppelt und die DP tauschen.

                    T 1 Reply Last reply Reply Quote 0
                    • T
                      ticaki Developer @Jan1 last edited by ticaki

                      @Jan1

                      on(id1, id2);
                      

                      Und mit Änderungen ist es der selbe Code der schon oben gepostet wurde.

                      on({id: 'Object ID 1', change: "ne"}, function (obj) {
                        setState('Object ID 2', obj.state.val);
                      });
                      
                      J 1 Reply Last reply Reply Quote 1
                      • J
                        Jan1 @ticaki last edited by

                        @ticaki
                        Nur dass ich mit Blockly nicht mal tippen muss 😉

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

                          @paul53 said in State Ordner von zwei Lampen syncen:

                          Wenn die Synchronisation in beide Richtungen erfolgen soll, sollte man als Quelle des Triggers die Javascript-Instanz ausschließen, damit nicht unnötig gesendet wird.

                          Habe ich verstanden und ergänzt, danke. Werd es testen und melde mich, wenns Probleme gibt, die ich selbst nicht lösen kann. Bisher siehts aber gut aus.

                          //

                          @Jan1 said in State Ordner von zwei Lampen syncen:

                          Nur dass ich mit Blockly nicht mal tippen muss 😉

                          Ich denke wir müssen jetzt keine Grundsatzdiskussion "Blockly vs. Plain JS" lostreten 😉

                          J 1 Reply Last reply Reply Quote 0
                          • J
                            Jan1 @jlssmt last edited by

                            @jlssmt
                            Nö, weil ich von Java Script kein Plan habe und das mit Blockly, wie Du schon erkannt hast es der selbe Code ist und ich eben schneller klicke als tippe 🙂

                            1 Reply Last reply Reply Quote 0
                            • J
                              jlssmt last edited by jlssmt

                              @Jan1 said in State Ordner von zwei Lampen syncen:

                              Nö, weil ich von Java Script kein Plan habe und das mit Blockly, wie Du schon erkannt hast es der selbe Code ist und ich eben schneller klicke als tippe 🙂

                              Ich habs ja nicht umsonst in das JavaScript Forum und nicht ins Blockly Forum gepostet 😉

                              @paul53
                              Zu früh gefreut 😄 Meine Bedside Lamp 2 oder der Yeelight Adapter hat einen Bug, den ich vorher nicht gesehen hatte.
                              bslamp2 schaltet (warum auch immer) ab und an den value power auf false, geht aber nicht aus. Die zweite Lampe dann natürlich schon... Paar sec später geht der value dann wieder auf true und die zweite Lampe wieder an.
                              Sehr weird das ganze und so für mich keine Lösung.
                              Rot rechts ist die "from" Spalte. Kommt also nicht von JS sondern vom Adapter/ der Lampe...
                              1268e427-91c1-45d4-b5cb-95dc283240bc-image.png

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

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              390
                              Online

                              31.8k
                              Users

                              80.0k
                              Topics

                              1.3m
                              Posts

                              4
                              13
                              879
                              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