da mir die Community hier schon sehr oft unter die Arme gegriffen hat, möchte ich heute mal eine Kleinigkeit zurückgeben und euch meinen smarten Briefkasten vorstellen. Ist ein eher kleines Projekt, das aber so ziemlich bei jedem Briefkasten umsetzbar sein sollte.
Smarthome System:
- Openhab 3 auf einem Raspberry PI 4
- Zigbee2MQTT auf einem Raspberry PI 3 B
Verwendete Hardware für den Briefkasten:
- 2 x Aqara Tür-/Fenstersensoren
- Echo Dot 3
Anbringung der Sensoren an der Einwurfklappe:
https://s20.directupload.net/images/210706/jte5czmh.jpg
Anbringung der Sensoren an der Öffnungsklappe:
https://s20.directupload.net/images/210706/ch8zl3b9.jpg
--------------------------------------------------------------------------------------------------
Briefkasten.map (zur Darstellung in der Sitemap):
Code: Alles auswählen
1=Die Post war da
2=Leer
NULL=undefiniert
Rules:
Kurzfassung: Was macht die Rule?
- Benachrichtigung via Echo Dot, sofern jemand zuhause ist und der Nachtmodus nicht aktiv ist
- Benachrichtigung via Smartphone, sofern niemand zuhause ist oder der Nachtmodus aktiviert ist => Die Nachtruhe soll ja schließlich nicht gestört werden
- Wenn niemand zuhause war oder der Nachtmodus aktiviert war, erfolgt die Benachrichtigung via Echo Dot, sobald sich jemand zuhause anmeldet oder der Nachtmodus deaktiviert wird
- Benachrichtigung via Smartphone, sobald jemand den Briefkasten geleert hat
- Darstellung in der Sitemap
1. Item Post auf ON setzen, wenn ein Einwurf erfolgt
Code: Alles auswählen
rule "Switch wir haben Post"
when
Item Briefkasten_Einwurfklappe_Status changed to "OPEN"
then
if(Post.state != ON) {
Post.sendCommand(ON)
}
end
Code: Alles auswählen
rule "Benachrichtigung wir haben Post"
when
Item Post received command "ON"
then
//Bei Anwesenheit und deaktiviertem Nachtmodus
if(Anwesenheitskontrolle.state == ON && Nachtmodus.state == OFF) {
Echo_WZ_PlayAlarmSound.sendCommand('ECHO:system_alerts_melodic_03') //Alarmsound Echo abspielen
if (AlarmTimerBriefkasten === null) {
AlarmTimerBriefkasten = createTimer(now.plusSeconds(8)) [| //Timer für Abspielen des Alarmsounds setzen (8 Sekunden)
AlarmTimerBriefkasten.cancel()
AlarmTimerBriefkasten = null
Echo_WZ_PlayAlarmSound.sendCommand('') //Alarmsound Ende
Echo_WZ_TTS_Volume.sendCommand(60) //Stelle Lautstärke auf 60
Echo_WZ_TTS.sendCommand('<speak>Die Post ist da</speak>') //Sprachausgabe Echo Dot
Briefkasten_Status.sendCommand(1) //Darstellung in Sitemap - Die Post war da
]
}
}
//Bei Abwesenheit oder aktiviertem Nachtmodus (kein Alarm via Echo)
else if(Anwesenheitskontrolle.state != ON || Nachtmodus.state != OFF) {
sendNotification("max.mustermann@web.de", "Die Post war da!") //Benachrichtigung aufs Smartphone
Briefkasten_Status.sendCommand(1) //Darstellung in Sitemap - Die Post war da
}
end
Code: Alles auswählen
rule "Echo Benachrichtigung wir haben Post bei Anmeldung"
when
Item Anwesenheitskontrolle received command "ON"
then
if(Post.state == ON) {
Echo_WZ_PlayAlarmSound.sendCommand('ECHO:system_alerts_melodic_03')
if (AlarmTimerBriefkasten === null) {
AlarmTimerBriefkasten = createTimer(now.plusSeconds(8)) [|
AlarmTimerBriefkasten.cancel()
AlarmTimerBriefkasten = null
Echo_WZ_PlayAlarmSound.sendCommand('')
Echo_WZ_TTS_Volume.sendCommand(70)
Echo_WZ_TTS.sendCommand('<speak>Die Post war da</speak>')
]
}
}
end
Code: Alles auswählen
rule "Briefkasten wurde geleert"
when
Item Briefkasten_Oeffnungsklappe_Status changed to "OPEN"
then
if(Post.state != OFF) {
Post.sendCommand(OFF)
sendNotification("max.mustermann@web.de", "Briefkasten wurde geleert.")
}
Briefkasten_Status.sendCommand(2) //Darstellung in Sitemap - Briefkasten leer
end
Code: Alles auswählen
rule "Briefkasten Status zurücksetzen"
when
Time cron "0 59 23 1/1 * ? *" // Täglich um 23:59 Uhr
then
if(Post.state != OFF) {
Post.sendCommand(OFF)
}
end