Ankündigung

Einklappen
Keine Ankündigung bisher.

An/Abwesenheit: Alarm verzögert ausführen

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

    An/Abwesenheit: Alarm verzögert ausführen

    Hallo,
    vielleicht weiß jemand Rat
    bevor ich das Haus verlasse, drücke ich abwesend.
    Sobald ich abwesend bin, ist die Alarm Funktion scharf.
    Leider löse ich beim Rausgehen noch einen Bewegungsmelder aus und so die Alarm Logik.
    Ist es irgendwie möglich die Alarmfunktion erst 15min später scharf zu schalten?


    logic.conf
    Code:
    [Alarm_Seitentuer] # Meldung an Geraete
        filename = Alarm_Seitentuer.py
        visu_acl = yes
        watch_item = EG.HWR.Bewegung.switch
    Alarm_Seitentuer.py:
    Code:
    #!/usr/bin/env python
    import time
    
            
    time.sleep(30)
    if sh.Haus.Status.Abwesend.led():
            sh.notify('ACHTUNG!', 'Seitentuer wurde im ABWESEND geöffnet', 2, '', '','Haus')
            sh.whatsapp("ACHTUNG!', 'Seitentuer wurde im ABWESEND geoeffnet", "491xxxx")
            logger.debug("Seitentür wurde im ABWESEND geöffnet")
    Danke.
    Gruß
    Christian
    ------------------------------
    Mein Haus:
    136qm KfW70 Haus mit Hager-tebis-KNX und Hager domovea

    #2
    Hallo,

    time.sleep ist "böse" da es die Logik und damit einen Thread schlafen legt. Wenn ich die Logik sehr oft nacheinander triggere, gibt es keine Threads mehr für andere Logiken.

    Nimm doch einfach ein das Alter des Items.

    Code:
    if sh.Haus.Status.Abwesend.led() and sh.Haus.Status.Abwesend.led.age() > 30:
       ...
    Bis bald

    Marcus

    Kommentar


      #3
      ah ok.
      Das mit age() kannte ich mal noch gar nicht. Werde ich gleich mal testen.
      Danke.
      Gruß
      Christian
      ------------------------------
      Mein Haus:
      136qm KfW70 Haus mit Hager-tebis-KNX und Hager domovea

      Kommentar


        #4
        Hat wunderbar funktioniert... :-)
        Nun muss ich nur noch eine Warteschleife einbauen, dass der Alarm nicht sofort losgeht, sondern dass man noch ca. 1min zeit hat.
        Gruß
        Christian
        ------------------------------
        Mein Haus:
        136qm KfW70 Haus mit Hager-tebis-KNX und Hager domovea

        Kommentar


          #5
          ???

          Wieso noch eine Warteschleife?
          Evtl. musst Du das Item bei der If-Abfrage anpassen.
          sh.Haus.Status.Abwesend.led.age() > 30

          Ist True, wenn die Led vor 30 Sekunden zuletzt geändert wurde.
          Schreibe da das Item Deine "Scharfschalters" hin und passe die Zeit auf 60 an.

          Dann bekommst Du die Meldung erst nachdem 60 Sekunden rum sind.

          Bis bald

          Marcus

          Kommentar


            #6
            Hi,
            irgendwie verstehe ich nicht...

            Zum Ablauf:
            Mein Scharfmachertaster ist "sh.Haus.Status.Abwesend.led()"
            Die Variable wird beim Drücken gesetzt und beim Wechseln auf "Anwesend" auf false gesetzt.
            Sobald ich das Haus verlassen will, drücke ich auf den Taster "Abwesend" und "sh.Haus.Status.Abwesend.led" wird true.
            Ich gehe dann durch den HWR (Bewegungsmelder für Alarm) in die Garage.
            Es wird durch den Bewegungsmelder ein Impuls (EG.HWR.Bewegung.switch) auf den Bus geschickt, welcher per watch_item die "Alarm_Seitentuer.py"-Logik anschupst.
            In der Logik wird per If das age von dir überprüft (10Min).
            Da ich aber das Haus gerade verlasse ist die Bedingung = false.

            Komme ich dann wieder >10min und öffne die Tür des HWR Raumes, löst die Logik durch den Bewegungsmelder wieder aus und die Bedingung (sh.Haus.Status.Abwesend.led() und sh.Haus.Status.Abwesend.led.age() > 600) ist true und löst sofort aus.

            Deshalb habe ich nun vor der If-Bedingung ein Timer mit 30sek. geschrieben.
            Das bewirkt mir, dass ich noch eintreten kann und auf Anwesenheit drücken kann.
            So wird "sh.Haus.Status.Abwesend.led" = false und die If-Bedingung ist nicht erfüllt.
            Alarm würde dann erst nach 30Sek. kommen, wenn ich nicht gedrückt hätte.
            Gruß
            Christian
            ------------------------------
            Mein Haus:
            136qm KfW70 Haus mit Hager-tebis-KNX und Hager domovea

            Kommentar


              #7
              Hallo,

              Ah, ok. Jetzt verstehe ich was Du dort machen möchtest.
              Man könnte die Logik auch mit trigger nach 30 Sekunden noch einmal aufrufen lassen.

              Bis bald

              Marcus

              Kommentar


                #8
                mhh... das wäre natürlich auch ne Idee

                Danke
                Gruß
                Christian
                ------------------------------
                Mein Haus:
                136qm KfW70 Haus mit Hager-tebis-KNX und Hager domovea

                Kommentar


                  #9
                  Zitat von Polecat Beitrag anzeigen
                  mhh... das wäre natürlich auch ne Idee

                  Danke
                  falls es bei dir klappt gib bitte Bescheid. Ich brauche sowas auch demnächst

                  Kommentar


                    #10
                    Zitat von mknx Beitrag anzeigen
                    Man könnte die Logik auch mit trigger nach 30 Sekunden noch einmal aufrufen lassen.
                    Falls es bei dir klappt:
                    kann du evtl mal ein Codebsp. posten?!

                    ...kann mir gerade nicht erklären wir ich eine Logik nach X. sec erneut triggern kann...

                    THX



                    Nachtrag:
                    ok ok...:

                    logic.trigger(dt=sh.now() + datetime.timedelta(seconds=30))

                    :-)

                    Kommentar


                      #11
                      Transferleistung erbracht

                      Hallo,

                      Zitat von web27 Beitrag anzeigen
                      logic.trigger(dt=sh.now() + datetime.timedelta(seconds=30))
                      es freut mich immer, wenn Benutzer eigenständig eine Transferleistung erbringen.

                      Bis bald

                      Marcus

                      Kommentar


                        #12
                        Zitat von mknx Beitrag anzeigen
                        Hallo,



                        es freut mich immer, wenn Benutzer eigenständig eine Transferleistung erbringen.

                        Bis bald

                        Marcus
                        auch von mir einen großen Dank!

                        Kommentar


                          #13
                          Hi,

                          man kann auch noch einen Werte mitschicken:
                          Zitat von web27 Beitrag anzeigen
                          logic.trigger(dt=sh.now() + datetime.timedelta(seconds=30), value='zweiter Versuch')
                          Dann steht bei dem zweiten Aufruf: 'zweiter Versuch' in trigger['value']

                          Bis bald

                          Marcus

                          Kommentar


                            #14
                            Zitat von mknx Beitrag anzeigen
                            Hi,
                            Dann steht bei dem zweiten Aufruf: 'zweiter Versuch' in trigger['value']
                            Marcus
                            Whoa, gestern noch gewünscht, heute schon gelöst - genial! Genau das, was ich für die neue Logic brauche, die ich grad am Wickel habe. Das Gerät kann jetzt nach dem Einschalten erstmal in Ruhe anlaufen, bevor die gewünschte Lüftungsstufe gesetzt wird. Dafür ein extra Dank!!!

                            /tom

                            Kommentar


                              #15
                              Zitat von web27 Beitrag anzeigen
                              logic.trigger(dt=sh.now() + datetime.timedelta(seconds=30))
                              Kurze Verständnisfrage dazu.....

                              Wenn man zu beginn einer Logic diesen Eintrag verwendet, wird doch die Logic nach 30 Sekunden erneut gestartet. Heißt das in weiterer Folge, dass die Logik 2 mal komplett durchläuft oder bewirkt dieser Eintrag eine Pause von 30 Sekunden um anschliessend die restlichen Einträge abzuarbeiten?

                              Sorry....sofern das eine dumme Frage ist.

                              Kommentar

                              Lädt...
                              X