Ankündigung

Einklappen
Keine Ankündigung bisher.

Abwesenheit/Anwesenheit in Logik umsetzen

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

    #16
    Zitat von Cannon Beitrag anzeigen
    Ich habs gelesen auf der Seite, aber explizit stand es da nicht, dass es geht oder nicht geht. Oder ich bin blind. ;-)
    Nein, Du bist nicht blind, nur Deine Erwartungshaltung an eine Doku ist übertrieben/unrealistisch.
    Ich kenne keine Doku die sich in Exkursionen darüber ergeht, was die Software nicht kann. (So was hat es aus Haftungsgründen nur mal in den USA gegeben, wo in der Anleitung einer Mikrowelle explizit drin stand, dass sie zum trocknen von Kleintieren nicht geeignet sei.)

    Außerdem steht (finde ich) drin, dass es eine explizite Beschreibung ist, was geht. Es ist sogar eine Erweiterung der Konfigurationsmöglichkeiten ab v1.3erwähnt (die Dein Problem lösen könnte). Es ist die Möglichkeit, als Wert ein anderes Item anzugeben. Du könntest es z.B. so lösen:


    Code:
    timeritem:
        type: bool
        autotimer: 5m = sh.hilfsitem()
    
    hilfsitem:
        type: bool
        eval: True if not sh.Zentral.Praesenz.age() > 299 else False
    Du kannst um bessere Übersicht zu behalten, das hilfsitem auch als Subitem zum timeritem definieren:

    Code:
    timeritem:
        type: bool
        autotimer: 5m = sh..hilfsitem()
    
        hilfsitem:
            type: bool
            eval: True if not sh.Zentral.Praesenz.age() > 299 else False
    Beachte, dass in diesem Beispiel im autotimer das hilfsitem jetzt relativ adressiert wird.
    Viele Grüße
    Martin

    There is no cloud. It's only someone else's computer.

    Kommentar


      #17
      Hi,

      wenn Dich die wiederholten Szenen auf dem Bus stören, dann mach doch ein explizites Szenen-Sende-Item:
      Code:
          SzeneAnwesend:
              type: num
              enforce_updates: yes
              eval: 1 if value else None
              eval_trigger: ..Anwesend
      
          SzenekurzAbwesend:
              type: num
              enforce_updates: yes
              eval: 2 if value else None
              eval_trigger: ..kurzAbwesend
      
          SzenelangeAbwesend:
              type: num
              enforce_updates: yes
              eval: 3 if value else None
              eval_trigger: ..langeAbwesend
      
          SzeneSenden:
              type: num
              knx_dpt: 5
              knx_send: 10/3/0
              eval: value
              eval_trigger:
                  - ..SzeneAnwesend
                  - ..SzenekurzAbwesend
                  - ..SzenelangeAbwesend
      Das sendet jetzt nur Änderungen auf den Bus.

      Gruß, Waldemar

      P.S.: Bei Deinem Beispiel hattest Du dpt 1 für Szenen. Es muss aber 5 sein.
      OpenKNX www.openknx.de

      Kommentar


        #18
        Zitat von mumpf Beitrag anzeigen
        S.: Bei Deinem Beispiel hattest Du dpt 1 für Szenen. Es muss aber 5 sein.
        Ich muss mal ein großes Danke aussprechen. Dank deiner Tipps, habe ich das jetzt so optimiert, dass es genau so läuft, wie ich mir das vorstelle. Und das ohne zyklisches Senden von irgendwelchen Telegrammen.

        Code:
        Zentral:
            Abwesenheit:
                # kurz: Angabe in Sekunden! / 15 Minuten = 900 Sekunden
                TimerkurzAbwesend:
                    type: num
                    value: 900
        
                # lang: Angabe in Sekunden! / 12 Stunden = 43200 Sekunnden
                TimerlangAbwesend:
                    type: num
                    value: 43200
                    Differenz:
                        type: num
                        eval: sh...() - sh....TimerkurzAbwesend()
                        eval_trigger: ..
        
                # welche Tür soll geprüft werden soll: geschlossen = true
                InputTuerGeschlossen:
                    type: bool
                    eval: value
                    eval_trigger: EG.Diele.Tuer.geschlossen
        
                # welche Präsenzmelder soll geprüft werden soll: Präsenz = true
                InputPraesenz:
                    type: bool
                    eval: value
                    eval_trigger: Zentral.Praesenz
        
                Anwesend:
                    type: bool
                    value: True
                    visu_acl: rw
                    enforce_updates: yes
                    eval: not sh...Abwesend()
                    eval_trigger: ..Abwesend
        
                Abwesend:
                    type: bool
                    value: False
                    visu_acl: rw
                    enforce_updates: yes
                    autotimer: sh...TimerkurzAbwesend() = False
                    eval: True if sh...InputTuerGeschlossen() and sh...InputTuerGeschlossen.age() > sh...TimerkurzAbwesend() and sh...InputTuerGeschlossen.age() <= sh...TimerlangAbwesend() and not sh...InputPraesenz() and sh...InputPraesenz.age() > sh...TimerkurzAbwesend() else False
                    eval_trigger: ..InputTuerGeschlossen
                    on_change: ..langeAbwesend = False if value else None
        
                kurzAbwesend:
                    type: bool
                    value: False
                    visu_acl: rw
                    enforce_updates: yes
                    eval: sh...Abwesend() ^ sh...langeAbwesend()
                    eval_trigger:
                        - ..kurzAbwesend
                        - ..langeAbwesend
        
                langeAbwesend:
                    type: bool
                    value: False
                    visu_acl: rw
                    enforce_updates: yes
                    autotimer: sh...TimerlangAbwesend.Differenz() = False
                    eval: True if sh...InputTuerGeschlossen() and sh...InputTuerGeschlossen.age() > sh...TimerlangAbwesend() else False
                    eval_trigger: ..InputTuerGeschlossen
                    on_change: ..kurzAbwesend = False if value else None
        
                SzeneAnwesend:
                    type: num
                    enforce_updates: yes
                    eval: 1 if value else None
                    eval_trigger: ..Anwesend
                    on_change: Zentral.Szene = value
        
                SzenekurzAbwesend:
                    type: num
                    enforce_updates: yes
                    eval: 2 if value else None
                    eval_trigger: ..kurzAbwesend
                    on_change: Zentral.Szene = value
        
                SzenelangeAbwesend:
                    type: num
                    enforce_updates: yes
                    eval: 3 if value else None
                    eval_trigger: ..langeAbwesend
                    on_change: Zentral.Szene = value
        
            Szene:
                type: num
                knx_dpt: 5
                knx_send: 10/3/0
                enforce_updates: yes
        Deshalb poste ich das mal hier gleich, vielleicht freut sich ja der nächste. :-) Und jetzt eine kurze Info noch dazu:

        1. Beim schließen der Tür wird an Hand der Präsenz geprüft, ob noch jemand im Haus ist.
        2. Wird die Tür erneut geöffnet bzw. Präsenz innerhalb von 15 Minuten nach dem Schließen der Tür erkannt, bleibt alles auf Anwesenheit.
        3. Erfolgt innerhalb von 15 Minuten nach dem Schließen der Haustür keien Präsenz, dann wird auf kurze Abwesenheit umgeschaltet.
        4. Nach weiteren 12 h (-15 Minuten), unabhängig von der Präsenz wird auf lange Abwesenheit umgeschaltet.
        5. Kurze und lange Abwesenheit lassen sich dann nur durch öffnen der Haustür unterbrechen. Dann ist wieder alles auf Anwesenheit.
        6. Bei allen 3 Modi werden entsprechenden Szenen auf den Bus gesendet.

        Die Anwesenheit nach den 15 Minuten prüfe ich bewusst nicht, da ich dann sowohl die Präsenz als auch das öffnen von Fenstern bewusst als Alarm in Zusammenhang mit Abwesenheit verwenden kann.

        Kommentar


          #19
          Und das funktioniert auch, wenn beim Türe schließen (ich verlasse das Haus), der Flur PM noch 3 Minuten "On" ist? (Nachlaufzeit)
          Derzeit zwischen Kistenauspacken und Garten anlegen.
          Baublog im Profil.

          Kommentar


            #20
            Hi,

            ich weiß nicht, wie Cannon es gelöst hat, aber ich habe meine Präsenzinfo der PM auf einem eigenen Kanal des PM. Dieser Kanal hat eine Sperre, die im gesperrten Falle Präsenz AUS sendet. Wenn der Kanal entsperrt wird, sendet er bei erneuter Präsenz sofort wieder ein EIN.

            Beim schließen der Tür sende ich über eine Treppenlichtfunktion eine 1 gefolgt von einer 0 (nach 0.5 Sekunden) auf diese Sperre (an alle PM im Haus).

            Semantisch ist das ein "Reset Präsenz" bei schließen der Tür. Somit wird bei der ersten Bewegung nach dem schließen der Tür eine Präsenz gemeldet. Oder eben nicht, dann geht bei mir nach 5 Minuten "Abwesend" an.

            Gruß, Waldemar
            ​​​​​​​
            OpenKNX www.openknx.de

            Kommentar


              #21
              Zitat von greentux Beitrag anzeigen
              Und das funktioniert auch, wenn beim Türe schließen (ich verlasse das Haus), der Flur PM noch 3 Minuten "On" ist? (Nachlaufzeit)
              Ehrlich gesagt nutze ich diese Version gar nicht mehr, weil die zu unflexibel war. Ich habe das jetzt doch über eine Logik gelöst. Mit der Nachlaufzeit habe ich das so gelöst, dass die offene Tür den Präsenzmelder sperrt und die Präsenz auf diesen Kanal auf AUS schaltet. Wenn die Tür geschlossen wird, wird entsperrt und erst dann geprüft, ob noch eine Präsenz vorliegt.

              Ich möchte aber nicht verschweigen, dass die ganze Systemtik nicht so 100% läuft, wie ich mir das vorstelle, denn wenn jemand noch schläft wird keine Präsenz ausgelöst. Das heißt derzeit ist es so, dass ich noch einen Tastsensor mit reingenommen habe. Sobald dieser ausgeschaltet ist, ist die Abwesenheit quasi vorprogrammiert. Das heißt immer wenn man geht sollte man "aus" schalten und enn man kommt "an". Der Rest funktioniert bisweilen aber noch genauso, das heißt die Übrprüfung erfolgt dennoch autmatisch. Ich will das aber noch erweitern. Wenn das so läuft, wie ich mir vorstelle, dann werde ich noch mal was dazu schreiben. Der Plan ist, dass es dann noch mehr Abwesenheitsstufen gibt. Diese ergeben sich dann, wenn man mal im Urlaub ist und die Nachbarn die Post reinbringen. Dann sollte der Urlaubsmodus ja weiterhin bestehen bleiben ... da bin ich noch dran ... :-)

              Kommentar

              Lädt...
              X