Sie haben Post: der smarte Briefkasten

Smart Home soll Unnötiges unnötig machen. Da gehört z.B. auch der Blick ins Innere des Briefkastens dazu. Da ich i.d.R. nicht über die Haupt-Haustüre sondern über die Garage in’s Haus gehe müsste ich, um in den Briefkasten zu schauen, durch die Haustüre nochmal raus und nachschauen – das kann Smart Home sicher besser.

Was ich hier möchte ist, dass wenn Post eingetroffen ist, das Haus, wenn ich im Wohnzimmer eingetroffen bin, mir das genau dann von selbst mitteilt. Da dort ein PIR-Sensor eingebaut ist, kann dieser das Prozeder ja triggern.

Um den Briefkasten zu vernetzen habe ich verschiedene Ansätze überlegt und ausprobiert. Wichtig war mir, dass sowohl das Einwerfen von Post als auch das Leeren des Briefkastens richtig erkannt wird und dass am Ende ein Item in openHAB zur Verfügung steht, welches anzeigt, ob neue Post vorhanden ist oder nicht und eben für obigen Anwendungsfall verwendet werden kann.

Die Hardware – der verkabelte Briefkasten

Mein erster Gedanke war, den Schließerkontakte-Bausatz HM-SCI-3-FM zu verwenden. Dann würde ein Gerät genügen. Man könnte mit Tastern o.ä. arbeiten und den Zustand von Einwurf- wie auch Leerungsklappe direkt überwachen. Allerdings bin ich bei Recherchen darauf gestoßen, dass die kleine Batterie dieses Bausatzes wohl bei kälterer Temperatur schnell die Grätsche machen soll und von vielen daher im quasi-Ausseneinsatz nicht empfohlen wird. Daher soll es eher etwas „robusteres“ werden.

Weg vom Schließerkontakte-Bausatz bin ich dann auf dieses Youtube-Video gestoßen. Hier wird der Hoematic Funk-Tür-/Fensterkontakt zweckentfremdet, um beliebige Sensoren daran zu bauen.
Interessanter Ansatz, aber der Fensterkontakt selbst verfügt auch nur über eine einzige Batterie und mit seinen 35 € war er mir zu teuer. Im Grunde dachte ich mir, tut das doch auch der Klingelsensor DB-PCB recht gut. Der hat nochdazu zwei Batterien und ist auch halbwegs kompakt unterzubringen und kostet (als Bausatz) gerade einmal knapp 25€.
Kombinieren wollte ich dies mit einem Vibrationssensor, den ich von innen an der Einwurfklappe befestigt habe. Dies funktionierte auch halbwegs, aber leider nicht immer zuverlässig. Die 9€ für den Sensor waren umsonst ausgegeben.

Eine zuverlässigere Variante war dann für mich dann ein Reed-Kontakt für knapp 3€. Diesen habe ich dann am Briefkasten unterhalb der darüber liegenden Einwurfklappe untergebracht und mit dem Klingelsensor verbunden. Der Magnet selbst ist an der Einwurfklappe befestigt. Wird nun der Magnet vom Sensor wegbewegt, stellt der Briefkasten fest, dass die Einwurfklappe bewegt wurde. Der Klingelsensor lässt sich ja schön verschieden verwenden, so dass er nach Konfiguration entweder auslöst, wenn der Magnet weg- oder wenn der Magnet wieder hinbewegt wird. Ein Öffnen des Stromkreises, also ein Wegnehmen des Magnets durch das Öffnen der Einwurfklappe löst somit ein verarbeitbares Ereignis aus.

Für die Entleerungsklappt selbst habe ich auf einen einfachen, optischen Fenstersensor HM-Sec-SCo zurückgegriffen. Als Bausatz bei ELV gibt es den bereits für knapp 20€. Er passt zufälligerweise ideal zwischen Boden und einem Teil der Klappe und meldet so super, wenn der Briefkasten geleert wurde.

Alle Bauteile habe ich entsprechend eingeklebt, aber so, dass ein Batteriewechsel kein Problem darstellt.

Abbildung in openHAB

Der Fenstersensor liefert im zustand „geschlossen“ eine 0, im Zustand „offen“ eine 1 zurück, also einen Zahlenwert. Der Klingelsensor dagegen kennt nur ON und OFF. Damit kann man in den Regeln super arbeiten.

Die Items

Als Items habe ich mehrere Items definiert: Die beiden Sensoren, das Datum des letzten Einwurfs / Leerens sowie ein Item, was anzeigt, ob der Briefkasten Post hat oder nicht. In meinem Fall habe ich das nur in eine Gruppe „debugBriefkasten“ gepackt um die Items ansehen zu können.

Switch   BRIEFKASTEN_EINWURF            "Briefkasten Einwurf"               (debugBriefkasten)   {channel="homematic:HM-Sen-DB-PCB:xxx:xxx:1#PRESS_SHORT"}
Number BRIEFKASTEN_LEERUNG "Briefkasten Leerung [%d]" (debugBriefkasten) {channel="homematic:HM-Sec-SCo:xxx:xxx:1#STATE"}
Switch briefkasten_voll "Briefkasten: Hat Post" (debugBriefkasten)
DateTime briefkasten_letzteLeerung "Letzte Leerung [%1$td.%1$tm. %1$tT]" (debugBriefkasten)
DateTime briefkasten_letzterEinwurf "Letzter Einwurf [%1$td.%1$tm. %1$tT]" (debugBriefkasten)

Die Rules

Die Regeln sind recht einfach – ein Betätigen der entsprechenden Sensoren setzt die Variable, ob Post da ist, entsprechend um und setzt die aktuellen Zeitstempel in die DatumZeit-Items:

rule "Briefkasten: Einwurfklappe wurde betätigt"
when Item BRIEFKASTEN_EINWURF changed from OFF to ON
then
briefkasten_letzterEinwurf.postUpdate(now.toString())
briefkasten_voll.postUpdate(ON); end

rule "Briefkasten: Leerungsklappe wurde geöffnet"
when Item BRIEFKASTEN_LEERUNG changed from 1 to 0
then
briefkasten_letzteLeerung.postUpdate(now.toString());
briefkasten_voll.postUpdate(OFF);
end

Die Oberfläche

In der Oberfläche erscheinen dann die entsprechenden Items:

Das Haus sagt mir nun von selbst, wenn Post eingeworfen wurde…

Mit den Items in der Sitemap ist es ja nicht getan. Wenn ich auf’s Tablet schauen muss, dann kann ich auch gleich den Briefkasten öffnen.

Ich habe nun eine weitere Rule geschrieben, welche maximal einmal je angefangene Stunde einen Text-to-Speech-Hinweis (TTS) über mein Webradio im Wohnzimmer ausgibt, sobald sich im Wohnzimmer jemand bewegt. Für den TTS-Hinweis nutze ich das in diesem Beitrag beschriebene System – aber letztlich kann ja jeder in der Regel an der Stelle anwenden und tun, was er will…

Dazu habe ich die obigen Rules auch nochmal leicht modifiziert, da ich mir einen Zeitstempel vorhalten muss, ob in der aktuellen Stunde schon ein Hinweis gesagt wurde. Ich möchte ja nicht ständig genervt werden, nur weil ich die Post nicht sofort aus dem Briefkasten hole. Anbei nun die gesammelten Rules und Items.

Weitere Items

Switch   briefkasten_ansage             "Ansage bei Post"               <switch>    (debugBriefkasten)
String briefkasten_letzteansage "Letzte Ansage [%s]" (debugBriefkasten)
Number briefkasten_lautstaerke "Lautstärke [%d]" (debugBriefkasten)

Alle Rules angepasst

var String TTS_URL = 'http://127.0.0.1/streampi/streampi.php'
var String meldetext = 'Es liegt Post im Briefkasten'

rule "Briefkasten: Einwurfklappe wurde betätigt"
when Item BRIEFKASTEN_EINWURF changed from OFF to ON
then
briefkasten_letzterEinwurf.postUpdate(now.toString());
briefkasten_voll.postUpdate(ON);
end

rule "Briefkasten: Leerungsklappe wurde geöffnet"
when Item BRIEFKASTEN_LEERUNG changed from 1 to 0
then
briefkasten_letzteLeerung.postUpdate(now.toString());
briefkasten_voll.postUpdate(OFF);
briefkasten_letzteansage.postUpdate("xxxx");
end

rule "Briefkasten voll, Ansage bei Bewegung im Wohnzimmer"
when Item EG_PIR_WOHNEN_MOTION changed from OFF to ON
then
if ((briefkasten_voll.state == ON) && (briefkasten_ansage.state == ON)) {
// prüfen, ob zur aktuellen Stunde schon einmal gemeldet wurde? Zeitstempel: Jahr-Monat-Tag-Stunde
var String zeitstempel = now.getYear().toString() + '-' + now.getMonthOfYear().toString() + '-' + now.getDayOfMonth().toString() + ' ' + now.getHourOfDay();
if (briefkasten_letzteansage.state.toString() != zeitstempel) { // nur max. einmal pro Stunde
sendHttpPostRequest(TTS_URL,'application/x-www-form-urlencoded','type=tts&prio=1&volume=50&text=' + meldetext)
briefkasten_letzteansage.postUpdate(zeitstempel); // Update des Zeitstempels für aktuelle Stunde
}
}
end

Sitemap für die Konfiguration (Auszug)

(...)
Text label="Konfiguration Briefkasten" {
Frame label="Aktivieren der Automatik" {
Switch item=briefkasten_ansage
}
 Frame label="Konfiguration der Automatik" {
  Setpoint item=briefkasten_lautstaerke minValue=0 maxValue=70 step=5
 }
}
(...)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.