gelöst:Briefkasten 2 Zustände

Begonnen von Masterfunk, 04 April 2015, 09:56:08

Vorheriges Thema - Nächstes Thema

Masterfunk

Hallo,

ich habe einen HM Fensterkontakt mit dem ich die Klappe im Briefkasten überwache.
Jetzt möchte ich aber 2 verschiedene Zustände erhalten.

1. Brief wurde eingeworfen (Klappe unter 30 Sec offen)
2. Es wurde etwas "großes" eingeworfen (Klappe steht noch offen)

Hat jemand einen Tip?

Gruß Detlef

marvin78

Worum geht es dir denn genau? Geht es dir um Benachrichtigung, einen ablesbaren Status oder beides?

Masterfunk

Die Benachrichtigung und die Visualisierung habe ich schon realisiert.
Mir gehts nur darum nur eine Meldung zu bekommen, damit nicht 2 Benachrichtigungen rausgehen.
Sprich, eine Funktion, die mir sagt ob der Stus "open" unter 30 Sec war, oder noch ansteht.
Aktuell mache ich das mit einem DOIF in folgender Form:

Internals:
   DEF        ([Briefkasten_FK] eq "open")(set Briefkasten open_long, {sendMeJabberMessage("Es wurde Posteingeworfen, die Klappe ist noch auf")})
DOELSEIF ([Briefkasten_FK] eq "closed")(set Briefkasten open, {sendMeJabberMessage("Es wurde Post eingeworfen")})
DOELSEIF ([Briefkasten] eq "closed")
   NAME       Briefkasten_status
   NR         545
   NTFY_ORDER 50-Briefkasten_status
   STATE      cmd_2
   TYPE       DOIF
   CHANGETIME:
   Helper:
     Dblog:
       Cmd_event:
         Dblog:
           TIME       1428133249.00024
           VALUE      Briefkasten_FK
       Cmd_nr:
         Dblog:
           TIME       1428133249.00024
           VALUE      2
       State:
         Dblog:
           TIME       1428133249.00024
           VALUE      cmd_2
   Readings:
     2015-04-04 09:40:49   cmd_event       Briefkasten_FK
     2015-04-04 09:40:49   cmd_nr          2
     2015-04-04 09:40:48   e_Briefkasten_FK_STATE closed
     2015-04-04 09:40:48   e_Briefkasten_STATE open
     2015-04-04 09:40:49   state           cmd_2
     2015-04-04 09:40:43   wait_timer      no timer
   Condition:
     0          InternalDoIf('Briefkasten_FK','STATE','') eq "open"
     1          InternalDoIf('Briefkasten_FK','STATE','') eq "closed"
     2          InternalDoIf('Briefkasten','STATE','') eq "closed"
   Devices:
     0           Briefkasten_FK
     1           Briefkasten_FK
     2           Briefkasten
     all         Briefkasten_FK Briefkasten
   Do:
     0          set Briefkasten open_long, {sendMeJabberMessage("Es wurde Posteingeworfen, die Klappe ist noch auf")}
     1          set Briefkasten open, {sendMeJabberMessage("Es wurde Post eingeworfen")}
     2
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
     0           Briefkasten_FK:STATE
     1           Briefkasten_FK:STATE
     2           Briefkasten:STATE
     all         Briefkasten_FK:STATE Briefkasten:STATE
   Itimer:
   Readings:
   State:
   Trigger:
Attributes:
   room       System
   wait       30


"Briefkaste" ist dabei der Dummy für die Visualisierung.

Der Nacchteil dabei ist, das wenn die Klappe dann später geschlossen wird (Lange Post wird entnommen) es wieder zur Bedingung 2 kommt und eine erneute Meldung erfolgt.

Gruß Detlef

Gruß Detlef

marvin78

Mit DOIF kenne ich mich nicht aus (und möchte es auch nicht) aber umgangsprachlich würde ich einfach auf eine lange Zeit testen (über 45 Sekunden!?). Ist die Klappe länger auf, Benachrichtigen, dass etwas großes drin steckt, andernfalls war es nur ein Brief. Zum entnehmen von großen Teilen würde sich die Klappe ja nur schließen. Diesen Status würde ich in dem Fall völliig unbeachtet lassen, wenn man davon ausgeht, dass man Briege durch eine größere Tür entnimmt und die Klappe dabei zu bleibt.

Mad22

Hallo Detlef,

nur mal als Idee , eine Lösung für Dein Problem habe ich so erst mal nicht .

Ich habe jetzt auch schon ein paar Wochen einen HM-Sec-SCo , einen optischen Fensterkontakt, im Einsatz .
Den habe ich einfach mit der "Optik" nach oben auf den Boden des Briefkasten geklebt.
Wenn jetzt eine Zeitung , Post etc. eingeworfen wird dann meldet der Kontakt closed und ich weiß das Post im Briefkasten ist . Wenn natürlich nur etwas in der Klappe klemmt dann bekommt der Sensor auf dem Boden das nicht mit . Mein Kasten ist aber so groß das bisher alles auch unten ankam . Selbst wenn nur eine Benachrichtigungskarte eingeworfen wird hat der Sensor das mitbekommen .
Was natürlich nicht funktioniert ist , wenn der Sensor belegt ist und noch etwas eingeworfen wird wird das nicht noch mal erfasst, weil der Sensor schon belegt ist .
Mir genügt das aber als Info das etwas im Briefkasten ist vollkommen und es war recht einfach zu installieren .

Gruß Martin
Raspberry Pi2 Model B, Add-On Board mit 1.8" TFT LCD, FHEM V5.6, CULFW V1.61, JeeLink Clone, HMUsb,  FS20, Homematic , LaCrosse, 1-Wire (10x DS1820)

Masterfunk

#5
Habs gelöst über 4 DOIF und 2 DUMMY.

Vielleicht etwas umständlich, aber es geht. Eventuell hat ja jemand ne bessere Lösung.

Hier meine:

Dummy Helpermodul (Zwischenstatus):

Internals:
   CFGFN
   NAME       Briefkasten_helper
   NR         964
   STATE      closed
   TYPE       dummy
   CHANGETIME:
   Helper:
     Dblog:
       State:
         Dblog:
           TIME       1428142822.11313
           VALUE      closed
   Readings:
     2015-04-04 12:20:22   state           closed
Attributes:
   devStateIcon open:message_mail@green:closed closed:message_mail open_long:message_mail@red:closed


Dummy für Visualisierung mit Rücksetzmöglichkeit:

Internals:
   NAME       Briefkasten_icon
   NR         537
   STATE      closed
   TYPE       dummy
   CHANGETIME:
   Helper:
     Dblog:
       State:
         Dblog:
           TIME       1428142866.53042
           VALUE      closed
   Readings:
     2015-04-04 12:21:06   state           closed
Attributes:
   devStateIcon open:message_mail@green:closed closed:message_mail open_long:message_mail@red:closed
   fp_Grundriss 120,1000,0,,,
   room       Unsorted


DOIF zur Erfassung kurzes Öffnen:

Internals:
   CFGFN
   DEF        ([Briefkasten_FK] eq "open")(set Briefkasten_helper open)
DOELSEIF ([Briefkasten_helper] eq "closed")
   NAME       Briefkasten_status_open
   NR         989
   NTFY_ORDER 50-bk_di1
   STATE      initialized
   TYPE       DOIF
   CHANGETIME:
   Helper:
     Dblog:
       Cmd_event:
         Dblog:
           TIME       1428142822.11801
           VALUE      Briefkasten_helper
       Cmd_nr:
         Dblog:
           TIME       1428142822.11801
           VALUE      2
       State:
         Dblog:
           TIME       1428142904.69368
           VALUE      initialized
   Readings:
     2015-04-04 12:21:44   state           initialized
   Condition:
     0          InternalDoIf('Briefkasten_FK','STATE','') eq "open"
     1          InternalDoIf('Briefkasten_helper','STATE','') eq "closed"
   Devices:
     0           Briefkasten_FK
     1           Briefkasten_helper
     all         Briefkasten_FK Briefkasten_helper
   Do:
     0          set Briefkasten_helper open
     1
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
     0           Briefkasten_FK:STATE
     1           Briefkasten_helper:STATE
     all         Briefkasten_FK:STATE Briefkasten_helper:STATE
   Itimer:
   State:
   Timerfunc:
Attributes:


DOIF zur Erfassung langes Öffnen:

Internals:
   CFGFN
   DEF        ([Briefkasten_FK] eq "open")(set Briefkasten_helper open_long)
DOELSEIF ([Briefkasten_helper] eq "closed")
   NAME       Briefkasten_status_open_long
   NR         1007
   NTFY_ORDER 50-bk_di2
   STATE      initialized
   TYPE       DOIF
   CHANGETIME:
   Helper:
     Dblog:
       Cmd_event:
         Dblog:
           TIME       1428142822.13036
           VALUE      Briefkasten_helper
       Cmd_nr:
         Dblog:
           TIME       1428142822.13036
           VALUE      2
       State:
         Dblog:
           TIME       1428142887.83407
           VALUE      initialized
       Wait_timer:
         Dblog:
           TIME       1428142782.0023
           VALUE      no timer
   Readings:
     2015-04-04 12:21:27   state           initialized
   Condition:
     0          InternalDoIf('Briefkasten_FK','STATE','') eq "open"
     1          InternalDoIf('Briefkasten_helper','STATE','') eq "closed"
   Devices:
     0           Briefkasten_FK
     1           Briefkasten_helper
     all         Briefkasten_FK Briefkasten_helper
   Do:
     0          set Briefkasten_helper open_long
     1
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
     0           Briefkasten_FK:STATE
     1           Briefkasten_helper:STATE
     all         Briefkasten_FK:STATE Briefkasten_helper:STATE
   Itimer:
   State:
   Timerfunc:
Attributes:
   wait       20


DOIF zum setzen des Visualisierungs Dummy:

Internals:
   DEF        ([Briefkasten_helper] eq "open_long")(set Briefkasten_icon open_long, {sendMeJabberMessage("Es wurde Post eingeworfen, die Klappe ist noch auf")})
DOELSEIF ([Briefkasten_helper] eq "open")(set Briefkasten_icon open, {sendMeJabberMessage("Es wurde Post eingeworfen")})
DOELSEIF ([Briefkasten_helper] eq "closed")
   NAME       Briefkasten_status
   NR         545
   NTFY_ORDER 50-Briefkasten_status
   STATE      cmd_3
   TYPE       DOIF
   CHANGETIME:
   Helper:
     Dblog:
       Cmd_event:
         Dblog:
           TIME       1428142822.18414
           VALUE      Briefkasten_helper
       Cmd_nr:
         Dblog:
           TIME       1428142822.18414
           VALUE      3
       State:
         Dblog:
           TIME       1428142822.18414
           VALUE      cmd_3
       Wait_timer:
         Dblog:
           TIME       1428142822.16785
           VALUE      no timer
   Readings:
     2015-04-04 12:20:22   cmd_event       Briefkasten_helper
     2015-04-04 12:20:22   cmd_nr          3
     2015-04-04 12:20:22   e_Briefkasten_helper_STATE closed
     2015-04-04 12:20:22   state           cmd_3
     2015-04-04 12:20:22   wait_timer      no timer
   Condition:
     0          InternalDoIf('Briefkasten_helper','STATE','') eq "open_long"
     1          InternalDoIf('Briefkasten_helper','STATE','') eq "open"
     2          InternalDoIf('Briefkasten_helper','STATE','') eq "closed"
   Devices:
     0           Briefkasten_helper
     1           Briefkasten_helper
     2           Briefkasten_helper
     all         Briefkasten_helper
   Do:
     0          set Briefkasten_icon open_long, {sendMeJabberMessage("Es wurde Post eingeworfen, die Klappe ist noch auf")}
     1          set Briefkasten_icon open, {sendMeJabberMessage("Es wurde Post eingeworfen")}
     2
   Helper:
     last_timer 0
     sleepdevice Briefkasten_helper
     sleeptimer -1
   Internals:
     0           Briefkasten_helper:STATE
     1           Briefkasten_helper:STATE
     2           Briefkasten_helper:STATE
     all         Briefkasten_helper:STATE
   Itimer:
   Readings:
   State:
   Timerfunc:
   Trigger:
Attributes:
   room       Unsorted
   wait       30:30:00


DOIF zum zurücksetzen des Helper Dummys damit erneut gemeldet wird, wenn noch etwas eingeworfen wird:

Internals:
   CFGFN
   DEF        ([Briefkasten_helper] ne "closed")(set Briefkasten_helper closed)
   NAME       Briefkasten_helper_reset
   NR         3058
   NTFY_ORDER 50-Briefkasten_helper_reset
   STATE      cmd_1
   TYPE       DOIF
   CHANGETIME:
   Helper:
     Dblog:
       Cmd_event:
         Dblog:
           TIME       1428142822.14356
           VALUE      Briefkasten_helper
       Cmd_nr:
         Dblog:
           TIME       1428142822.14356
           VALUE      1
       State:
         Dblog:
           TIME       1428142822.14356
           VALUE      cmd_1
       Wait_timer:
         Dblog:
           TIME       1428142822.06187
           VALUE      no timer
   Readings:
     2015-04-04 12:20:22   cmd_event       Briefkasten_helper
     2015-04-04 12:20:22   cmd_nr          1
     2015-04-04 12:20:22   e_Briefkasten_helper_STATE closed
     2015-04-04 12:20:22   state           cmd_1
     2015-04-04 12:20:22   wait_timer      no timer
   Condition:
     0          InternalDoIf('Briefkasten_helper','STATE','') ne "closed"
   Devices:
     0           Briefkasten_helper
     all         Briefkasten_helper
   Do:
     0          set Briefkasten_helper closed
   Helper:
     last_timer 0
     sleepdevice Briefkasten_helper
     sleeptimer -1
   Internals:
     0           Briefkasten_helper:STATE
     all         Briefkasten_helper:STATE
   Itimer:
   Readings:
   State:
   Trigger:
Attributes:
   do         always
   wait       60


Und der Vollständigkeit halber noch das DOIF für die Ansage:

Internals:
   DEF        ([Briefkasten_icon] eq "open_long" and [Detlef_presence] eq "present")(set Sonos_Kueche Speak 45 de |kb_air| Es wurde Post eingeworfen und die Klappe ist noch offen)
DOELSEIF ([Briefkasten_icon] eq "open" and [Detlef_presence] eq "present")(set Sonos_Kueche Speak 45 de |kb_air| Es wurde Post eingeworfen)
DOELSEIF ([Briefkasten_helper] eq "closed")
   NAME       Briefkasten_Ansage
   NR         547
   NTFY_ORDER 50-Briefkasten_Ansage
   STATE      cmd_1
   TYPE       DOIF
   CHANGETIME:
   Helper:
     Dblog:
       Cmd_event:
         Dblog:
           TIME       1428142834.86712
           VALUE      Detlef_presence
       Cmd_nr:
         Dblog:
           TIME       1428142834.86712
           VALUE      1
       Error:
         Dblog:
           TIME       1428137220.94551
           VALUE      internal does not exist
       State:
         Dblog:
           TIME       1428142834.86712
           VALUE      cmd_1
       Wait_timer:
         Dblog:
           TIME       1428138043.74062
           VALUE      no timer
   Readings:
     2015-04-04 12:20:34   cmd_event       Detlef_presence
     2015-04-04 12:20:34   cmd_nr          1
     2015-04-04 12:20:22   e_Briefkasten_helper_STATE closed
     2015-04-04 12:21:06   e_Briefkasten_icon_STATE closed
     2015-04-04 12:31:01   e_Detlef_presence_STATE present
     2015-04-04 12:20:34   state           cmd_1
   Condition:
     0          InternalDoIf('Briefkasten_icon','STATE','') eq "open_long" and InternalDoIf('Detlef_presence','STATE','') eq "present"
     1          InternalDoIf('Briefkasten_icon','STATE','') eq "open" and InternalDoIf('Detlef_presence','STATE','') eq "present"
     2          InternalDoIf('Briefkasten_helper','STATE','') eq "closed"
   Devices:
     0           Briefkasten_icon Detlef_presence
     1           Briefkasten_icon Detlef_presence
     2           Briefkasten_helper
     all         Briefkasten_icon Detlef_presence Briefkasten_helper
   Do:
     0          set Sonos_Kueche Speak 45 de |kb_air| Es wurde Post eingeworfen und die Klappe ist noch offen
     1          set Sonos_Kueche Speak 45 de |kb_air| Es wurde Post eingeworfen
     2
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
     0           Briefkasten_icon:STATE Detlef_presence:STATE
     1           Briefkasten_icon:STATE Detlef_presence:STATE
     2           Briefkasten_helper:STATE
     all         Briefkasten_icon:STATE Detlef_presence:STATE Briefkasten_helper:STATE
   Itimer:
   Readings:
   State:
   Timerfunc:
   Trigger:
Attributes:
   room       Unsorted


Ganz wichtig sind die wait Timer!

Gruß Detlef

Markus

Ich setze einfach wenn"open"einen dummy auf "Post " und um Mitternacht per at auf "Lehr " das reicht mir fällig um nicht zu oft rauszulaufen
Raspberry Pi2 als FHEM-Plattform
HM, FS20, 1-Wire, PanStamp,LW12,Intertechno,ESPEasy,Alexa

OliS.

Hallo!

Also ich habe mir anhand dieser Anleitung http://forum.fhem.de/index.php/topic,33961.msg270606.html#msg270606 einen "smarten" Briefkasten gebaut.
Dafür habe ich einen Homematic Türkontakt (HM-SEC-SC-2) benutzt, welcher von Hause aus zwei Schalter beinhaltet. Einmal den normalen Türkontakt (Reed-Kontakt) und dann noch einen Sabotagekontakt (kleiner Taster). Beide habe ich ausgelötet und jeweils einen von diesen Reed-Kontakten http://www.amazon.de/Magnetkontakt-Fensterkontakt-Reedkontakt-Alarmanlage-Alarmkontakt/dp/B00FOIUBZM/ref=sr_1_1?ie=UTF8&qid=1428171507&sr=8-1&keywords=reedkontakt an jeden Schalter gelötet und so in meinen Briefkasten geklebt, dass der eine Reed auslöst, wenn die Einwurfklappe geöffnet wird und der andere wenn ich die Entnahmeklappe öffne, um die Post rauszunehmen.

Mittels zweier notify übergebe ich den jeweiligen Zustand an ein dummy "Post".

Briefkasten:open {fhem ("set Post on")}

Briefkasten {if (ReadingsVal("Briefkasten", "sabotageError", "") eq "on") {fhem ("set Post off")}}

Sobald die Einwurfklappe durch den Briefträger geöffnet wird, wird der dummy Post auf "on" gesetzt und ich bekomme eine Push "Sie haben Post!". Wenn ich die Entnahmeklappe öffne, um die Post herauszunehmen, wird der dummy auf "off" gesetzt und es wird eine Push "Briefkasten geleert" verschickt.

Den Zustand der offenstehenden Einwurfklappe bei großen Briefen habe ich über ein Watchdog gelöst. Wenn die Klappe nicht nach bsw. 15 Sekunden wieder zu ist, wird der dummy Post auf "gross" gesetzt.

Briefkasten:open 00:00:15 Briefkasten:closed set Post gross

Für meine Bedürfnisse auf jeden Fall ausreichend und mit relativ wenig Code gelöst.

Oli
PVE auf MiniPC (N100) mit FHEM, Zigbee2MQTT, Homebridge, DeConz

Masterfunk

Hallo Oli S. ,

dann bekommt Du aber 2 Zustände gemeldet, oder?

Gruß Detlef

OliS.

Hallo Detlef!

Na ja, ich kriege bei Posteinwurf erst den Zustand "Post ja" und 15 Sekunden später den Zustand "Post gross". Aber das stört mich jetzt nicht so sehr.

Oli
PVE auf MiniPC (N100) mit FHEM, Zigbee2MQTT, Homebridge, DeConz

bismosa

Hallo,

ich hatte diesen Beitrag mit als Vorlage für meine Umsetzung genommen.
Ich benutze einen billigen China Fenstersensor. Der Funkt auf 433MHz (IT). Habe ich auch schon häufiger etwas zu geschrieben.
https://www.lightinthebox.com/de/p/gs-iwds07-drahtlosen-intelligenten-tuer-fenster-magnetkontakt_p4766217.html?prm=1.18.104.0
Neu ist nur, das die wohl ausverkauft sind  :(

Statt des Magnetkontaktes habe ich mir einen kleinen taster an die Klappe montiert. Somit ist Briefkasten offen = Fenster auf.
Zum Rücksetzen nach dem entnehmen benutze ich den Manipulationskontakt. Dafür habe ich einen versteckten Taster an die Seite des Briefkastens montiert.
Gelöst habe ich das mit einem DOIF:

defmod di_Briefkasten DOIF ([Briefkasten] eq "Offen") (\
{\
my $state = ReadingsVal("Briefkasten","state",0);;\
if ($state eq "on"){\
fhem("set pushmsg msg device=pushdev sound=bike title=POST 'Post ist gekommen'");;\

}\
if ($state eq "off"){\
fhem("set pushmsg msg device=pushdev sound=incoming title=POST 'Große Post ist gekommen. Der Briefkasten steht auf!'");;\

}\
}\
) DOELSEIF ([Briefkasten] eq "Kaputt")
attr di_Briefkasten do always
attr di_Briefkasten room IT
attr di_Briefkasten wait 15

Sobald der Briefkasten geöffnet wird, startet der Timer. Wird der Rücksetzknopf betätigt, wird der Timer abgebrochen.
Nach den 15sek. prüfe ich den Zustand...wenn offen dann Quillt der Briefkasten über.

Vielleicht braucht es ja nochmal jemand...

Gruß
Bismsoa
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...