Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. 2 Heizkörper synchron steuern

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    2 Heizkörper synchron steuern

    This topic has been deleted. Only users with topic management privileges can see it.
    • Asgothian
      Asgothian Developer @georg2608 last edited by

      @georg2608 versuch mal den Trigger auf 'wurde geändert' und 'Auslösung durch 'bestätigte Änderung'.

      Dann sollte der Loop weg sein.

      A.

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

        @georg2608
        nicht schön, aber funktioniert:

        
        // Heizung: Philipp - Werte übertragen auf die andere Heizung
        
            var logging = true;
            var vHeiz_L = "alias.0.HM.Heizung.Philipp L.SET_TEMPERATURE";
            var vHeiz_R = "alias.0.HM.Heizung.Philipp R.SET_TEMPERATURE";
        
        
        function weiter1() {
            //Wert übertragen
            if (getState(vHeiz_L).val != getState(vHeiz_R).val) {
                if (logging) log("(1) Heizung links aktuell: " + getState(vHeiz_L).val + "°C // Heizung rechts aktuell: " + getState(vHeiz_R).val + "°C");
                setTimeout(function() { if (logging) setState(vHeiz_R, getState(vHeiz_L).val); }, 500);
                if (logging) log("Der links neu eingestellte Wert wurde auf die rechte Heizung übertragen.");
                setTimeout(function() { if (logging) log("(2) Heizung links aktuell: " + getState(vHeiz_L).val + "°C // Heizung rechts aktuell: " + getState(vHeiz_R).val + "°C"); }, 2000);
            }
        }
        
        function weiter2() {
            //Wert übertragen
            if (getState(vHeiz_L).val != getState(vHeiz_R).val) {
                if (logging) log("(3) Heizung links aktuell: " + getState(vHeiz_L).val + "°C // Heizung rechts aktuell: " + getState(vHeiz_R).val + "°C");
                setTimeout(function() { if (logging) setState(vHeiz_R, getState(vHeiz_R).val); }, 500);
                if (logging) log("Der links neu eingestellte Wert wurde auf die rechte Heizung übertragen.");
                setTimeout(function() { if (logging) log("(4) Heizung links aktuell: " + getState(vHeiz_L).val + "°C // Heizung rechts aktuell: " + getState(vHeiz_R).val + "°C"); }, 2000);
            }
        }
        
        
        on(vHeiz_L, function() { //Heizung links geändert
            setTimeout(function() { weiter1() }, 2000);
        }); 
        
        on(vHeiz_R, function() { //Heizung rechts geändert
            setTimeout(function() { weiter2() }, 2000);
        }); 
        
        
        
        1 Reply Last reply Reply Quote 0
        • Codierknecht
          Codierknecht Developer Most Active last edited by

          @georg2608 sagte in 2 Heizkörper synchron steuern:

          Mit meiner Idee (rechtes Skript) lande ich in einem Loop

          Alternative zum Vorschlag von @Asgothian: Man prüft die Quelle.

          dc996ac9-9d5f-4cfc-af56-7a222c38e52c-image.png

          G 1 Reply Last reply Reply Quote 0
          • G
            georg2608 @Codierknecht last edited by

            Vielen Dank erstmal!
            Aber egal was ich probiere: ob bestätigte Änderung, das JS oder Ursprung, funktioniert das nur one-way. Also ich kann HK 1 steuern und HK 2 passt sich an.
            Wie sollte das Skript denn aussehen, wenn dasa zusätzlich auch andersrum funktionieren soll?
            Sobald ich das deaktivierte Skript laufen lasse, bin ich wieder in einem Loop:

            Bildschirmfoto 2025-03-14 um 10.43.04.png

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

              @georg2608 sagte: Wie sollte das Skript denn aussehen, wenn dasa zusätzlich auch andersrum funktionieren soll?

              Du vergleichst mit dem falschen Ausdruck (Sollwert ist nicht der Ursprung). Versuche es mal so:

              Blockly_temp.JPG

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

                @paul53 hm, also das klappt auch irgendwie nicht. Der erste Block geht. ist aber wieder one-way.
                Sobald der 2. Block aktiviert ist und ich am HK 1 stelle komme ich wieder in einen Loop.

                Würde es evtl Sinn machen per Blockly die Datenpunkte zusammenzufassen und die beiden HK's als Gruppe zu behandeln?

                Bildschirmfoto 2025-03-14 um 12.38.22.png

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

                  @georg2608 sagte: Sobald der 2. Block aktiviert ist und ich am HK 1 stelle komme ich wieder in einen Loop.

                  Wirklich? Füge mal einen Debug-Log ein:

                  Blockly_temp.JPG

                  Kann es sein, dass der Sollwert nach dem Schreiben des neuen Wertes erst wieder auf den alten Wert zurück geht und dann verzögert den neuen Wert bestätigt?

                  Codierknecht G 2 Replies Last reply Reply Quote 0
                  • Codierknecht
                    Codierknecht Developer Most Active @paul53 last edited by

                    @paul53
                    Bei meinen Tests ist "Name des Scripts" = "undefined".

                    @georg2608
                    Versuchs mit dem Ursprung. Aber mach das dann auch so wie gezeigt - also der Zeichenfolge "system.adapter.javascript.0" und nicht mit "Wert von xyz" (wie kommt man eigentlich auf sowas? Das Beispiel ist doch eindeutig).

                    39f36588-9c27-49b7-b4c7-3d506db3a0d4-image.png

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

                      @codierknecht sagte: Bei meinen Tests ist "Name des Scripts" = "undefined".

                      Du meinst den Kommentar, wenn der Ursprung nicht ein Skript ist. In dem Fall wird "steuere" ausgeführt. Wenn der Ursprung das Skript ist, enthält der Kommentar den Skriptnamen.

                      1 Reply Last reply Reply Quote 1
                      • G
                        georg2608 @paul53 last edited by

                        @paul53 Ich hab das mal nach Deiner Vorlage nachgebaut. Aber es kommen immer wieder Dauermeldungen und der LoopBildschirmfoto 2025-03-14 um 13.11.25.png Bildschirmfoto 2025-03-14 um 13.02.33.png

                        paul53 1 Reply Last reply Reply Quote 0
                        • G
                          georg2608 @Codierknecht last edited by

                          @codierknecht hm, selbst bei der Angabe: "system.adapter.javascript" kommt der Loop. Sorry, für mich ist das nicht wirklich eindeutig, warum der da so reagiert. Bildschirmfoto 2025-03-14 um 13.09.42.png

                          Codierknecht 1 Reply Last reply Reply Quote 0
                          • Codierknecht
                            Codierknecht Developer Most Active @georg2608 last edited by

                            @georg2608
                            Der Text für den Debug-Block für HK2 sollte auch "HK2" lauten.
                            So kann man das nicht auseinanderhalten.

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

                              @georg2608
                              Ändere es mal mit Deaktivierung von "steuern" im unteren Tigger, um die Loop zu vermeiden und korrigiere den String "javascript":

                              Blockly_temp.JPG

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

                                @paul53
                                Also so bekomme ich keinen Loop mehr und wenn ich HK 1 steuere passt sich HK 2 an. Nur beim ändern von HK 2 ändert sich an HK 1 nichts (Screenshot mit Ausgabe)
                                Bildschirmfoto 2025-03-14 um 13.32.41.png

                                Der 2. Screenshot ist die Ausgabe wenn ich HK 1 stelle.
                                Bildschirmfoto 2025-03-14 um 13.36.53.png

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

                                  @georg2608 sagte: Ausgabe wenn ich HK 1 stelle.

                                  Wie vermutet: Bevor der neue Wert (24) bestätigt wird, wird der alte Wert (26) gesendet. Das führt zur Loop.

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

                                    @paul53 Okay verstanden. Aber wie kann ich das umgehen?
                                    Macht es Sinn einen timeout einzu bauen?

                                    paul53 1 Reply Last reply Reply Quote 0
                                    • black.falcon87
                                      black.falcon87 last edited by

                                      Ich werf mal das „Binde“ Objekt in den Raum.

                                      Kannst du da nicht einfach beide Objekte miteinander verbinden?
                                      Also du brauchst das Binde Objekt zweimal untereinander.

                                      Einmal HK1 -> HK2 und einmal HK2 -> HK1
                                      Und den Haken bei „nur Änderungen“ setzen.
                                      Klappt das ohne einen Loop zu erzeugen?

                                      Codierknecht 1 Reply Last reply Reply Quote 0
                                      • Codierknecht
                                        Codierknecht Developer Most Active @black.falcon87 last edited by

                                        @black-falcon87 sagte in 2 Heizkörper synchron steuern:

                                        Ich werf mal das „Binde“ Objekt in den Raum.

                                        Das macht unter der Haube auch nix anders.

                                        on({ id: 'Object ID 1', change: 'ne' }, (obj) => {
                                          setState('Object ID 2', obj.state.val);
                                        });
                                        
                                        1 Reply Last reply Reply Quote 1
                                        • paul53
                                          paul53 @georg2608 last edited by paul53

                                          @georg2608 sagte: Macht es Sinn einen timeout einzu bauen?

                                          Ein so hässliches Verhalten (bedanke dich in China) kann man per Timer-Sperre überbrücken.

                                          Blockly_temp.JPG

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

                                            @paul53 Ich bedanke mich da lieber bei Dir!
                                            Ich glaub jetzt funktioniert das richtig gut.

                                            Vielen lieben Dank

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            1.0k
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            7
                                            26
                                            938
                                            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