Ankündigung

Einklappen
Keine Ankündigung bisher.

Logikhilfe: Verzögerung von Anwesenheit um X min

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Logikhilfe: Verzögerung von Anwesenheit um X min

    Hi zusammen!

    Ich wäre euch dankbar, wenn sich das mal jemand mit ansieht. Ich werde die Vermutung nicht los, dass ich gerade viel zu kompliziert denke. Ziel ist es, meine Anwesenheit für z.B. Steuerung der Lüftung/Heizung/Klima noch X min (hier 30) nachlaufen zu lassen, wenn diese auf Abwesend gesetzt wird. Geht das evtl. auch einfacher? Ich versuche auch das so zu bauen, dass bei edomi-Neustart kein unnötiges Telegramm geschickt wird.

    VG!

    Bildschirmfoto 2017-05-13 um 16.03.52.png

    #2
    Wenn das KO 496 bei Abwesenheit von 0 auf 1 geht, würde ich nur die positive Flanke auswerten und diese auf eine Ausschaltverzögerung geben.

    >>Smelly One<<
    >> BURLI <<
    Grüße Armin

    Kommentar


      #3
      Danke für den Tipp, wo finde ich die Ausschaltverzögerung? Sehe nur den Baustein "Verzögerung" und dieser lässt sich in ms steuern, das ist im fast Stundenbereich recht unhandlich. KO 496 geht von 1 auf 0 bei Abwesenheit.

      Kommentar


        #4
        Das ist der LBS16000113.
        Oder hier in Sekunden:
        Code:
        ###[DEF]###
        [name        =Ein/Aus-Verzögerung Sekunden    ]
        
        [e#1        =0/&ne;0                 ]
        [e#2        =Verzög. 1 (s) #init=1    ]
        [e#3        =Verzög. 0 (s) #init=1    ]
        
        [a#1        =0/1                    ]
        
        [v#1        =500                    ]
        [v#2        =-1                    ] (Hilfsvariable)
        ###[/DEF]###
        
        
        ###[HELP]###
        Dieser Baustein verzögert ein neues Telegramm an E1. Dabei wird zwischen Telegrammen =0 und &ne;0 unterschieden:
        
        Trifft ein neues Telegramm &ne;0 an E1 ein, wird nach Ablauf der Verzögerungszeit an E2 der Ausgang A1=1 gesetzt.
        Trifft ein neues Telegramm =0 an E1 ein, wird nach Ablauf der Verzögerungszeit an E3 der Ausgang A1=0 gesetzt.
        
        Wichtig: Trifft während der Verzögerung eines Telegramms ein weiteres Telegramm an E1 ein, startet der Baustein quasi neu. Das vorherige Telegramm wird verworfen!
        
        E1: 0=Aus, &ne;0=Ein
        E2: Verzögerung für Ein (&ne;0) in Sekunden (Änderungen an E2 werden während(!) einer laufenden Verzögerung ignoriert)
        E3: Verzögerung für Aus (0) in Sekunden (Änderungen an E3 werden während(!) einer laufenden Verzögerung ignoriert)
        A1: nach Ablauf der Verzögerungszeit wird 0 oder 1 ausgegeben
        ###[/HELP]###
        
        
        ###[LBS]###
        <?
        function LB_LBSID($id) {
            if (($E=getLogicEingangDataAll($id)) && ($V=getLogicElementVarAll($id))) {
        
                if ($E[1]['value']!=0 && $E[1]['refresh']==1) {
        
                    $V[1]=getMicrotime()+($E[2]['value']);
                    $V[2]=1;
                    setLogicElementVar($id,1,$V[1]);
                    setLogicElementVar($id,2,$V[2]);    //Modus: Ein-Verzögerung
                    setLogicElementStatus($id,1,$E[2]['value']);
        
                } else if ($E[1]['value']==0 && $E[1]['refresh']==1) {
        
                    $V[1]=getMicrotime()+($E[3]['value']);
                    $V[2]=0;
                    setLogicElementVar($id,1,$V[1]);
                    setLogicElementVar($id,2,$V[2]);    //Modus: Aus-Verzögerung
                    setLogicElementStatus($id,1,$E[3]['value']);
        
                }
        
                if (getLogicElementStatus($id)==1) {
        
                    if ($V[2]==1 && getMicrotime()>=$V[1]) { //Zeit 1 abgelaufen?
                        setLogicLinkAusgang($id,1,1);
                        setLogicElementStatus($id,0);
                    }
        
                    if ($V[2]==0 && getMicrotime()>=$V[1]) { //Zeit 0 abgelaufen?
                        setLogicLinkAusgang($id,1,0);
                        setLogicElementStatus($id,0);
                    }
        
                }
        
            }
        }
        ?>
        ###[/LBS]###
        
        
        ###[EXEC]###
        <?
        
        ?>
        ###[/EXEC]###
        Bei 1 auf 0 musst Du halt nur die negative Flanke auswerten.
        >>Smelly One<<
        >> BURLI <<
        Grüße Armin

        Kommentar


          #5
          Ich nutze auch den Verzögerer, um z.B. nach Sonnenuntergang noch eine Weile zu warten, ehe die Rolladen automatisch runter fahren.
          Damit die ms handhabbar werden, habe ich vorher einen Multiplikator drin, der die eingegebenen Minuten in ms umrechnet. Der Faktor ist 60000.
          Das iKO 1142 kann über eine Setupseite ohne Eingriff in die Logik (WAF) verändert werden. Daher auch dieser Thread.

          PS: Beobachte mal den Flankendetektor in Deiner jetzigen Konstellation . Ich habe bei mir eine abgewandelte Version laufen, weil ich die Erfahrung gemacht hatte, dass sich die Logik nicht wieder zurück setzt, wenn an E1 wieder eine 0 ansteht.
          edomi-verzoegerer_minuten.png
          Zuletzt geändert von Wingfighter; 13.05.2017, 17:11.

          Kommentar


            #6
            WagoKlemme danke dir! Schau ich mir an. Hatte zuerst nach internen LBS gesucht.

            Kommentar


              #7
              Das ist ein interner (serienmässiger) LBS, allerdings mit ms. Den mit Sekunden musst Du halt neu anlegen.
              Die Lösung von Wingfighter ist super. Es gibt halt immer viele Wege ...
              >>Smelly One<<
              >> BURLI <<
              Grüße Armin

              Kommentar


                #8
                Alles klar - verstanden, danke an alle hier!

                Kommentar

                Lädt...
                X