Hauptmenü

Intelligenter Briefkasten

Begonnen von harle, 25 März 2022, 09:23:29

Vorheriges Thema - Nächstes Thema

harle

Hallo zusammen,

ich versuche eine zuverlässige Meldung zu bauen, wenn Post in den Briefkasten eingeworfen wird.

Dazu habe ich einen Philips Hue Bewegungsmelder im Briefkasten, welcher mir illuminance und occupancy meldet.

Zusätzlich ist an der Klappe zur Entnahme der Post (nicht am Deckel zum Einwurf) ein Aqara Tür-/Fenstersensor montiert.

Ich möchte über den Fenstersensor den Vorgang "Post wird entnommen" abfangen.

Das heißt in der Theorie, wenn "occupancy = true und Fenstersensor = false" -> keine Meldung bzw. umgekehrt:

Meldung nur dann, wenn "occupancy = true und Fenstersensor = true".

Mein DOIF sieht so aus:

([Bewegungsmelder_Briefkasten:occupancy] eq "true" and [Kontakt_Briefkasten:state] eq "true") (set Telegram msg Post ist da!)


In der Realität stellt es sich so dar, dass die Meldung trotzdem gesendet wird, da die Vorgänge quasi parallel getriggert werden.

Kann ich das DOIF so umbauen, dass die Meldung nur dann getriggert wird, wenn der Kontakt_Briefkasten länger als X Sekunden "true" ist (occupancy bleibt automatisch 30 Sekunden auf true beim Triggern)?

So würde ja, wenn ich es korrekt verstehe, nicht getriggert, wenn ich X Sekunden bräuchte, zum Öffnen, Entnehmen und Schließen des Briefkastens.


Viele Grüße

zife

Hi harle,

so ganz verstehe ich Deinen Umsetzungsversuch nicht. Aber ich kenne auch nicht die möglichen Zustände Deiner Sensoren.

So ganz grob würde ich ein NOTIFY bauen, das sowohl beim Auslösen des Bewegungsmelders als auch beim Türchen triggert.
Und das dann unterscheidet, ob es eben der Bewegungsmelder war (= Post wurde eingeworfen), oder ob es das Türchen war (= Post wurde entnommen).

Vermutlich triggert der Bewegungsmelder auch beim Entnehmen der Post, aber das kann man ja durch die richtige Reihenfolge von if/elsif o.ä. ausfiltern.

fhem mit EnOcean, Gardena, Vorwerk, Miele und Teufel/Raumfeld-Integration... nur meine Kinder wollen sich damit nicht anständig steuern lassen. Wer weiß Rat?

harle

Hi zife,

genau das ist mein Problem. Der Bewegungsmelder triggert auch beim Entnehmen der Post.

Im Grunde möchte ich verhindern, dass der BWM beim Öffnen der Klappe triggert.

Aber es dauert bei der Öffnung etwas bis der Schalter den Zustand "offen" meldet und da hat der BWM schon getriggert.

Deshalb dachte ich so: Falls der BWM triggert -> prüfen, ob in den nächsten X Sekunden der Schalter "offen" ist. Wenn Schalter auf "offen", dann wird die Post entnommen -> keine Nachricht.

War er nicht offen, dann wurde Post eingeworfen -> Nachricht absenden.

Kann ich das in FHEM mit Notify so umsetzen? Ich habe keine Idee für die Logik "wenn ab jetzt in X Sek dieses passiert, dann mache jenes, sonst welches".


Viele Grüße

Wernieman

Mann kann es ... bestimmt auch mit DOIF. Da ich das aber nicht verwende, würde ich es persönlich mit notify und at machen.

Wenn der "leeren" notify trickert, den Status auf geleert setzen (Hart), und den notify für gefüllt für x sekunden disable
- Durch ein "disable for", weiß aber aktuell nicht, ob es so etwas giebt
- Durch ein "set disable" und zusätzlich ein at, welches in x sekunden enabled

Hinweis:
Obiges ist Pseudokode, mußt Du also nich nachregergieren ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

DetlefR

Einmal Grundsätzlich.

Die meisten Bewegungsmelder reagieren auf sich bewegende Wärmequellen (Mensch/Tier) bei denen die Körpertemperatur unterscheidlich bzw. höher zur Umgebungstemperatur ist.
Ob das bei der Zeitung/Brief der Fall ist möchte ich bezweifeln.

Gruß Detlef

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

harle

Zitat von: Damian am 25 März 2022, 19:31:49
Siehe: https://fhem.de/commandref_DE.html#DOIF_wait

Hi grüß dich,

wait würde ich gerne benutzen, wird mir aber als Attribut bei DOIF gar nicht angezeigt und auch ein händisches erzwingen bringt mir nur unknown attribute wait?

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

harle

Ich habe folgendes festgestellt: wenn ich das DOIF direkt so anlege:

define doif_dummy_Briefkasten_Klappe DOIF [Kontakt_Briefkasten:state] eq "true" (set dummy_Briefkasten_Klappe geschlossen)
DOELSEIF [Kontakt_Briefkasten:state] eq "false" (set dummy_Briefkasten_Klappe offen)


lande ich offenbar im Perl-Modus und habe wait dementsprechend nicht als Attribut zur Verfügung.

Wenn ich nur mit

define doif_dummy_Briefkasten_Klappe DOIF anlege und dann die DEF ergänze, lande ich im FHEM Modus und alles ist wie gewünscht.

Nur zu meiner Information; wieso ist das so und wie kann ich den FHEM Modus bei vorhandenen DOIF wieder bekommen? Mir war ja bis eben der Unterschied gar nicht klar.

Damian

Du musst den Code auch richtig definieren ;)

define doif_dummy_Briefkasten_Klappe DOIF ([Kontakt_Briefkasten:state] eq "true") (set dummy_Briefkasten_Klappe geschlossen)
DOELSEIF ([Kontakt_Briefkasten:state] eq "false") (set dummy_Briefkasten_Klappe offen)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

harle

#10
Ich möchte nochmal zu meinem Verständnis fragen:

Wenn bei dem Code oben während der "wait" Zeit ein Statuswechsel erfolgt, wird dann der alte Status trotzdem gesendet oder vom neuem Überschrieben bzw. nie geändert? Ich bräuchte ja eine Verzögerung für "Klappe offen" von X.
So dass, wenn die Klappe in Zeit X wieder geschlossen wird, der Status nie auf offen gewechselt wird.

Habe ich das so korrekt gebaut und verstanden? Oder muss ich das DOIF dafür genau andersrum aufbauen?

Damian

defmod Briefkasten_Klappe DOIF ([Kontakt_Briefkasten:state] eq "false")
attr Briefkasten_Klappe cmdState offen|geschlossen
attr Briefkasten_Klappe wait 30


Das sollte reichen, Dummy brauchst du nicht, du kann direkt den Status von des DOIFs abfragen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF