Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Rolladen Zeitverzögert ansteuern

    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

    Rolladen Zeitverzögert ansteuern

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

      Hi,

      ich denke setStateDelayed ist von der Übersichtlichkeit besser.

      Was mir in deinem script auffällt, du musst beim benutzen von setTimeout … Das ganze an eine variabel über geben.

      Z.B. ...````
      Timer = setTimeout

      
      Was mir noch aufgefallen ist,````
      on(Vorwahl, Rauf)
      on(Vorwahl, Runter)
      

      Ist das so richtig?

      1 Reply Last reply Reply Quote 0
      • W
        webseb79 last edited by

        Hallo blauholsten,

        wenn ich die zeitverzögerte Ansteuerung des 2.Rolladen auskommentiere funktioniert alles bestens,

        also nehme ich mal an das die

        on(Vorwahl, Rauf)
        on(Vorwahl, Runter)
        

        Anweisung welche du meinst, ob sie richtig wäre, eigentlich funktionieren muß.

        Ich bin in JS nicht so der Kenner und suche mir immer Bruchteile zusammen aus anderen Forenbeiträgen , was bis jetzt immer gut funktioniert hat.

        Die Variante mit setstatedelayed sieht natürlich besser aus…da hast du recht und ist für einen Laien auch besser zu verstehen

        wie unten nochmals eingefügt als Script.

        createState('Jalousien.Hand.Zu', false);
        createState('Jalousien.Hand.Auf', false);
        createState('Jalousien.Hand.Halbe', false);
        createState('Jalousien.Modus.Hand_Auto', false);
        
        var Vorwahl = "javascript.0.Jalousien.Modus.Hand_Auto";
        var Zu      = "javascript.0.Jalousien.Hand.Zu";
        var Auf     = "javascript.0.Jalousien.Hand.Auf";
        var Halbe   = "javascript.0.Jalousien.Hand.Halbe";
        
        function Runter() {
            if (getState(Vorwahl).val && getState(Zu).val)
                setState ("hm-rpc.0.BidCoS-RF.12.PRESS_SHORT", true);
                setStateDelayed("hm-rpc.0.BidCoS-RF.15.PRESS_SHORT",true,2000);
        }
        
        on(Vorwahl, Runter);
        on(Zu, Runter);
        
        function Rauf() {
            if (getState(Vorwahl).val && getState(Auf).val)
                setState ("hm-rpc.0.BidCoS-RF.13.PRESS_SHORT", true);
                setStateDelayed("hm-rpc.0.BidCoS-RF.16.PRESS_SHORT",true,2000);
        }
        
        on(Vorwahl, Rauf);
        on(Auf, Rauf)
        
        function Beschattung() {       
            if (getState(Vorwahl).val && getState(Halbe).val)
                setState ("hm-rpc.0.BidCoS-RF.14.PRESS_SHORT", true);
                setStateDelayed("hm-rpc.0.BidCoS-RF.17.PRESS_SHORT",true,2000);
        }
        
        on(Vorwahl, Beschattung);
        on(Halbe, Beschattung);
        
        1 Reply Last reply Reply Quote 0
        • blauholsten
          blauholsten Developer last edited by

          Hi,

          sorry das mit````
          on(Vorwahl, Rauf)
          on(Vorwahl, Runter)

          
          Ich dachte du willst gleichzeitig auf und zu fahren :roll:
          
          Konnte daa gestern abend auf dem Handy nicht richtig erkennen.
          
          Bin auch ein Laie in JS ….
          
          Dein letzter code sieht doch gut aus.
          1 Reply Last reply Reply Quote 0
          • B
            Beatz last edited by

            Du hast bei der if-Funktion die geschweiften Klammern vergessen. Ändere

            function Runter() {
                if (getState(Vorwahl).val && getState(Zu).val)
                    setState ("hm-rpc.0.BidCoS-RF.12.PRESS_SHORT", true);
                    setStateDelayed("hm-rpc.0.BidCoS-RF.15.PRESS_SHORT",true,2000);
            }
            

            mal in

            function Runter() {
                if (getState(Vorwahl).val && getState(Zu).val) {
                    setState ("hm-rpc.0.BidCoS-RF.12.PRESS_SHORT", true);
                    setStateDelayed("hm-rpc.0.BidCoS-RF.15.PRESS_SHORT",true,2000);
                }
            }
            

            Das müsstest Du natürlich bei den anderen beiden Funktionen nach dem gleichen Prinzip anpassen.

            1 Reply Last reply Reply Quote 0
            • P
              pix last edited by

              Hallo webseb79,

              mir gefällt die kurze Art, wie du die Funktionen aufrufst.

              Allerdings ist es etwas umständlich. Es ist (zumindest für mich) leichter nachzuvollziehen, die Ursache des Auslösens in den Trigger zu packen und die Aktion jeweils in einer Funktion aufzurufen.

              Du rufst zB alle drei Funktionen (Rauf, Runter, Beschattung) auf, wenn sich Vorwahl ändert. Erst in der Funktion prüfst du, welcher Trigger das war und ob überhaupt etwas passieren soll.

              Ich denke, es ist besser so:

              ! createState('Jalousien.Hand.Zu', false); createState('Jalousien.Hand.Auf', false); createState('Jalousien.Hand.Halbe', false); createState('Jalousien.Modus.Hand_Auto', false); ! var Vorwahl = "javascript.0.Jalousien.Modus.Hand_Auto"; var Zu = "javascript.0.Jalousien.Hand.Zu"; var Auf = "javascript.0.Jalousien.Hand.Auf"; var Halbe = "javascript.0.Jalousien.Hand.Halbe"; ! function Runter() { setState ("hm-rpc.0.BidCoS-RF.12.PRESS_SHORT", true); setStateDelayed("hm-rpc.0.BidCoS-RF.15.PRESS_SHORT",true,2000); } ! function Rauf() { setState ("hm-rpc.0.BidCoS-RF.13.PRESS_SHORT", true); setStateDelayed("hm-rpc.0.BidCoS-RF.16.PRESS_SHORT",true,2000); } ! function Beschattung() { setState ("hm-rpc.0.BidCoS-RF.14.PRESS_SHORT", true); setStateDelayed("hm-rpc.0.BidCoS-RF.17.PRESS_SHORT",true,2000); } ! on({ id: Vorwahl, val: true }, function (obj) { if (getState(Zu).val) Runter(); if (getState(Auf).val) Rauf(); if (getState(Halbe).val) Beschattung(); }); ! on({ id: Zu, val: true }, Runter() ); ! on({ id: Auf, val: true }, Rauf() ); ! on({ id: Halbe, val: true }, Beschattung() ); !

              Gruß

              Pix

              1 Reply Last reply Reply Quote 0
              • blauholsten
                blauholsten Developer last edited by

                @Beatz:

                Du hast bei der if-Funktion die geschweiften Klammern vergessen. Ändere

                function Runter() {
                    if (getState(Vorwahl).val && getState(Zu).val)
                        setState ("hm-rpc.0.BidCoS-RF.12.PRESS_SHORT", true);
                        setStateDelayed("hm-rpc.0.BidCoS-RF.15.PRESS_SHORT",true,2000);
                }
                

                mal in

                function Runter() {
                    if (getState(Vorwahl).val && getState(Zu).val) {
                        setState ("hm-rpc.0.BidCoS-RF.12.PRESS_SHORT", true);
                        setStateDelayed("hm-rpc.0.BidCoS-RF.15.PRESS_SHORT",true,2000);
                    }
                }
                

                Das müsstest Du natürlich bei den anderen beiden Funktionen nach dem gleichen Prinzip anpassen. `

                Das ist wohl war…darum wird immer nur der erste Befehl ausgeführt...

                1 Reply Last reply Reply Quote 0
                • P
                  pix last edited by

                  Ja genau,

                  habe deshalb extra etwas Platz gelassen. Ich wollte es erst bei mir testen.

                  Hab es oben geändert! Danke blauholsten.

                  Gruß

                  Pix

                  EDIT: Nee, ich meinte doch was anderes. Klar haben die geschweiften Klammern in der if-Abfrage gefehlt. Es fehlten aber auch die () nach dem Funktionsaufruf. Ohne ging es bei mir nicht.

                  1 Reply Last reply Reply Quote 0
                  • W
                    webseb79 last edited by

                    Hallo in die Runde,

                    Danke für die zahlreichen Antworten und Lösungsvorschlage.

                    Ich bin ein ganzes Stück weiter mit der Lösung von pix…

                    Aber folgendes:

                    Das umschalten von Auto auf Hand und zurück startet schonmal keine Aktion mehr.

                    Nun kann ich aber ob Auto oder HAnd vorgewählt alle 3 Fahrten auslösen, was ja nur bei Hand funktionieren soll und bei Auto gesperrt.

                    Sebastian

                    1 Reply Last reply Reply Quote 0
                    • W
                      webseb79 last edited by

                      Ich nochmal,

                      der erste Vorschlag von Pix war gut und beim schreiben meines ersten Posts gab es nochmal eine Änderung von Pix und mit derm Script geht es garnicht mehr.

                      Jetzt bin ich vollkommen durcheinander.

                      Sebastian

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

                        @pix:

                        Es fehlten aber auch die () nach dem Funktionsaufruf. Ohne ging es bei mir nicht `
                        Nach if(…) muss der Funktionsaufruf mit () erfolgen.

                        Bei on({id: meineid, val:true}, funktion) darf keine Klammer gesetzt werden (http://forum.iobroker.de/viewtopic.php?f=21&t=1883&sid=8266b84ce04121c6720296933aad6977&sid=8266b84ce04121c6720296933aad6977#p16126). Richtig:

                        ...
                        on({id: Zu, val: true}, Runter);
                        
                        on({id: Auf, val: true}, Rauf);
                        
                        on({id: Halbe, val: true}, Beschattung);
                        
                        
                        1 Reply Last reply Reply Quote 0
                        • paul53
                          paul53 last edited by

                          @webseb79:

                          Nun kann ich aber ob Auto oder HAnd vorgewählt alle 3 Fahrten auslösen, was ja nur bei Hand funktionieren soll und bei Auto gesperrt. `
                          Dann versuche es mal so:

                          createState('Jalousien.Hand.Zu', false);
                          createState('Jalousien.Hand.Auf', false);
                          createState('Jalousien.Hand.Halbe', false);
                          createState('Jalousien.Modus.Hand_Auto', false);
                          
                          var Vorwahl = "javascript.0.Jalousien.Modus.Hand_Auto";
                          var Zu      = "javascript.0.Jalousien.Hand.Zu";
                          var Auf     = "javascript.0.Jalousien.Hand.Auf";
                          var Halbe   = "javascript.0.Jalousien.Hand.Halbe";
                          
                          var hand;  // Vorwahl Auto/Hand
                          
                          function Runter() {
                              if (hand)
                              { 	setState ("hm-rpc.0.BidCoS-RF.12.PRESS_SHORT", true);
                              	setStateDelayed("hm-rpc.0.BidCoS-RF.15.PRESS_SHORT",true,2000);
                              }
                          }
                          
                          function Rauf() {
                              if (hand)
                              {   setState ("hm-rpc.0.BidCoS-RF.13.PRESS_SHORT", true);
                              	setStateDelayed("hm-rpc.0.BidCoS-RF.16.PRESS_SHORT",true,2000);
                              }
                          }
                          
                          function Beschattung() {
                              if (hand)
                              {	setState ("hm-rpc.0.BidCoS-RF.14.PRESS_SHORT", true);
                              	setStateDelayed("hm-rpc.0.BidCoS-RF.17.PRESS_SHORT",true,2000);
                              }
                          }
                          
                          on(Vorwahl, function (dp) {
                              hand = dp.newState.val;
                          });
                          
                          on({id: Zu, val: true}, Runter);
                          
                          on({id: Auf, val: true}, Rauf);
                          
                          on({id: Halbe, val: true}, Beschattung);
                          
                          
                          1 Reply Last reply Reply Quote 0
                          • W
                            webseb79 last edited by

                            Hallo paul53,

                            ich werde dein Script erst morgen probieren können,Kinder liegen schon im Bett.

                            Trotzdem Danke schonmal vorab…werde morgen berichten.

                            Sebastian

                            1 Reply Last reply Reply Quote 0
                            • blauholsten
                              blauholsten Developer last edited by

                              Auch hier noch mal erklärt. Denke ich :oops:
                              @soef:

                              @Bluefox:

                              @soef:

                              
                              function setFirstTimer(obj)  ...
                              
                              on({ id: 'idZweiteOeffnung_Minute', change: 'ne'}, setSecondTimer(obj) );
                              
                              ```` `  
                              

                              So darf man nicht schreiben. Du versuchst als Event Handler das Ergebnis von Funktion "setSecondTimer" zu benutzen und nicht die Funktion selbst. `

                              Das stimmt natürlich. Sorry. (obj) darf natürlich nicht angegeben werden. Also nur der Funktionsname.

                              on({ id: 'idZweiteOeffnung_Minute', change: 'ne'}, setSecondTimer);
                              
                              ```` ` 
                              1 Reply Last reply Reply Quote 0
                              • W
                                webseb79 last edited by

                                Hallo paul53,

                                wie versprochen eine Rückmeldung von mir

                                PERFEKT!!!!

                                Klappt alles super wie ich mir das vorstelle….Danke an Dich und Danke an alle Anderen Beteiligten.

                                Bis zum nächsten mal

                                Sebastian

                                1 Reply Last reply Reply Quote 0
                                • P
                                  pix last edited by

                                  @paul53:

                                  Nach if(…) muss der Funktionsaufruf mit () erfolgen.

                                  Bei on({id: meineid, val:true}, funktion) darf keine Klammer gesetzt werden (siehe diesen Beitrag ff.). ` Wieder was gelernt! Danke, Paul.

                                  Gruß

                                  Pix

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

                                    @webseb79:

                                    Guten Abend liebes Forum,

                                    ich bin gerade dabei einige CCU Programme zu portieren nach Iobroker.

                                    Und da bin ich gerade auf ein Problem gestossen mit folgender Konstellation.

                                    Ich habe auf meiner Visualisierung 4 Bedienflächen

                                    Rolladen Vorwahl Auto/Manu als Toggle –-- bei Auto ist Astro aktiv , bei Manu die globale Bedienung der Rolladen

                                    Alle Rolladen zu als Taster

                                    Alle Rolladen Beschattung als Taster

                                    Alle Rolladen auf als Taster

                                    Danke im voraus

                                    Sebastian `

                                    Hallo,

                                    vielleicht kann ich hier ein wenig schnorren. Bin Script unerfahren und gerade dabei mein Haus mit Homatic weiter auszurüsten.

                                    Bin jetzt gerade an der Rolladensteuerung und der Lösungsansatz ist im Prinzip das was ich auch gerne hätte.

                                    Rolladen Vorwahl Auto/Manu als Toggle –-- bei Auto ist Astro aktiv , bei Manu die globale Bedienung der Rolladen

                                    Alle Rolladen zu als Taster

                                    Alle Rolladen Beschattung als Taster

                                    Alle Rolladen auf als Taster

                                    Kann mir vielleicht jemand die notwendigen Scripte dafür zur Verfügung stellen?

                                    Danke und Gruß

                                    Mirko
                                    5050_2019-01-06_13-24-29.jpg

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

                                      Hi,

                                      ich habe mich mal an das bereits in diesem Thema enthaltene Script gewagt.

                                      Damit ich irgendwann mal verstehe wie das alles funktioniert mal ein paar fragen:

                                      wenn ich das Script so erstelle wie angegeben, muss ich doch zusätzlich in der CCU sagen das bei z.B. Druck der Taste "hm-rpc.0.BidCoS-RF.12.PRESS_SHORT" die Rolladen aktoren auf 0% (zu) fahren, oder mache ich das auch in iobroker?

                                      Das wiederhole ich für alle drei Tasten, korrekt?

                                      Sieht bei mir z.B. so aus:

                                      999_jalousie_og_alle_ccu.jpg

                                      Wenn ich z.B. diese Taste nehmen würde: "hm-rpc.0.BidCoS-RF.15.PRESS_SHORT" würde der Rolladen 2000ms später fahren, richtig?

                                      Das Programm habe ich erstmal 1 zu 1 in iobroker importiert und gestartet. Danach ist mein Status so:

                                      999_jalousie_og_alle.jpg

                                      Ich habe mir zum Testen zwei einfache Widgets erstellt und die jeweils mit der virtuellen Taste für rauf bzw. runter belegt. Das scheint zu klappen.

                                      Wie funktioniert jetzt die Umschaltung zwischen Auto/Hand ? Ein Auto Script habe ich zwar noch nicht aber was muss ich machen um wählen zu können?

                                      Ich kann mit einen weiteren Widget den Status für "Hand_Auto" zwischen "true und false" wechseln, allerdings kann ich egal was da steht immer meine beiden anderen Widgets zum fahren benutzen.

                                      Danke für eure Hilfe

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

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      964
                                      Online

                                      31.9k
                                      Users

                                      80.2k
                                      Topics

                                      1.3m
                                      Posts

                                      6
                                      18
                                      2357
                                      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