Samstag, 4. Februar 2017

Fenster zu, es wird kalt! FHEM schickt eine Erinnerung per mail

Lüften muß man, kein Zweifel. Ob man aber im Winter den ganzen Tag das Fenster offen lassen soll, darüber gehen die Meinungen auseinander. Wer möchte, kann natürlich gern für draußen heizen, mir wäre das zu teuer.
Wenn das Schlafzimmer im ersten Stock ist und man dort das Fenster öffnet,  bleibt es manchmal doch den ganzenTag offen, einfach, weil es vergessen wird.

https://www.elv.de/homematic-hm-sec-sc-funk-tuer-fensterkontakt-1.html

Abhilfe ist sehr einfach, es braucht nichts weiter als einen Fensterkontakt und ein paar Zeilen Code.
Wir formulieren eine DOIF Abfrage etwa wie folgt:  Ist das Fenster länger als 10 Minuten offen und ist es draußen kälter als 16°C ? Wenn beide ja, dann sende Erinnerungsmail "Fenster ist noch offen".

So sieht das in der Praxis aus:

define di_schlafzimmerfenster _offen DOIF  ([CUL_FHTTK_916374:state] eq "Open" and [CUL_TX_47:temperature] < 16) ({ DebianMail(xyz@gmail.com',' FHEM: Schlafzimmerfenster ist noch offen','Das Schlafzimmerfenster ist jetzt seit 10 Minuten  offen und es ist draußen kälter als 16°C!','');;}) 

di_xyz als Name steht bei mir immer für ein DOIF.  Wenn der Sensor CUL_FHTTK_916374  Open meldet und die Temperatur von CUL_TX_47 kleiner als 16 ist, dann gehe zum nächsten Schritt und schicke eine mail.
Soweit, so schlecht, denn damit würde sofort nach dem Öffnen des Fenster eine mail geschickt. 

Das Attribut  wait 600 muß jetzt extra gesetzt werden, um die Ausführung des Befehls 10 Minuten ( oder wie lange auch immer, die Zeit wird inSekunden definiert ) zu pausieren.  Wird das Fenster früher zugemacht, bricht die Sequenz ab und es wird nichts gesendet.  Wer kein Thermometer hat, kann sich auch die Temperatur von Yahoo-Weather holen.  Es kommt ja nicht auf  1 °C an, aber einen Unterschied macht es schon, ob draußen 5 oder 15°C sind.

Ganz elegant wird es, wenn wir noch den Befehl anhängen: Heizung zudrehen, wenn Fenster offen.  Für normale Heizkörper müsste das Ventil sofort schließen, wenn das Fenster geöffnet wird, bei einer Fußbodenheizung kann man den oben beschrieben Befehl einfach erweitern und erst nach 10 Minuten schließen.

Zusätzlich wird noch ein devStateIcon als Attribut gesetzt, um Fenster-offen zu visualisieren.


Sinngemäß können wir auch das Fenster vom Gäste-WC überwachen, das steht ja auch gern mal die Nacht über offen.

Raspi mit FHEM einrichten -> meintechblog




Donnerstag, 2. Februar 2017

Intertechno Rolladensteuerung CMR-500 in FHEM einbinden

 Die Intertechno Ralladenschalter eignen sich sehr gut für nachträgliche Umrüstung mit FHEM und lassen sich problemlos einbinden. -> Herstellerseite



Der elektrische Anschluß ist klar: L ist die Phase, N der Rückleiter und P die Erdung.  Wer sich mit  Netzspannung nicht 100%ig  auskennt, beauftrage einen Elektriker!   Welche von den beiden Leitungen  für rauf oder runter am Rolladen ist, steht in der Bedienungsanleitung. Notfalls ausprobieren, es kann nichts kaputt gehen- der Rolladen läuft einfach nicht, weil  die einen Endschalter haben, der bei Erreichen des Endpunktes abschaltet, der Rolladen kann dann nur in die andere Richtung fahren.(Normalerweise!)
Achtung: der CRM-500 Rolladenschalter liefert nach Aktivierung  für 2 Minuten Spannung, dann erst schaltet er ab. Der Endschalter vom Rolladen schaltet also immer zuerst ab ( wenn er nicht kaputt ist ) , aber die Spannung liegt noch  an!  Man kann allerdings unterwegs durch nochmaliges Senden eines Impulses stoppen.

Wenn der elektrischen Anschluß hergestellt ist, kommt die Codierung für  FHEM. Auf der Rückseite gibt es zwei Drehschalter, damit stellt man den individuellen Code für jeden Schalter ein. Man kann natürlich auch einen für alle benutzen, dann fahren eben alle gleichzeitig.
Der linke Codierschalter ist für den Hauscode, das sind die ersten 4 Stellen:

Der rechte Schalter ist der Gerätecode, nochmal 4 Stellen. Dann kommt noch 0F für die Stellen 9 und 10, das ist immer gleich.  Zum Schluß kommen noch wie üblich FF und F0 für Ein und Aus.


Beispiel:   lionker Drehschalter auf  D und rechter auf  1

define Rollo_1 IT  FF0000000F FF F0

 ( der Name "Rollo_1"  kann beliebig gewählt werden, am Besten zu Anfang eine guten Namenskonventions ausdenken für alle devices. Notfalls kann man den NAME aber noch ändern:
                        rename NAMEALT NAMENEU )



Jetzt noch



eventMap            on:rauf off:runter ( kann natürlich auch AUF / AB heißen oder was immer)
devStateIcon       rauf:fts_shutter_10@yellow runter:fts_shutter_100@green
alias                    Rolladen 1 Schlafzimmer

 Wenn man eventMap ändert, muß immer der neue Wert überall verwendet werden, z.B. für devStateIcon. Die alten Werte on / off gelten nicht mehr.

Das wars eigentlich schon, müsste laufen!

Weil es so einfach war, programmieren wir gleich noch einen Automaten für rauf und runter.  Der Rolladen soll bei Sonnenuntergang runterfahren und um 7.45 rauf.

Zuerst einen griffigen Namen vergeben: RolladenSunsetRunter, dann den Befehl dahinter

define RolladenSunsetRunter  at *{sunset} set Rollo_1 runter

FHEM holt sich dann den Tagessonnenuntergang und steuert damit die Zeit:

                                                z.B.      STATE  Next: 17:56:44   



Und, das ist ganz wichtig, im TimespecWizard  das Häkchen  für die Perl-Funktion setzen.  Das Holen des aktuellen Sonnenuntergangs ist eine Perl-Funktion.

Wer bei Sonneaufgang aufstehen will, nimmt das gleiche Schema nur mit "sunrise", dann fährt der Rolladen hoch. Meist will man aber zu einer festen Zeit aufstehen:

define RolladenMorgensRauf at *07:45:00 set Rollo_1 rauf

Ich habe alle automatiserten Schaltvorgänge in einer Gruppe "Automaten" zusammengefasst:


Nachtrag: 

Der Rolladen soll nur teilweise herunterfahren, z.B. halb, wenn Licht an ist ( das natürlich FHEM anschaltet) ?
Diese Funktion ist in diesen  Aktoren nicht vorgesehen, aber es gibt einen Workaround.

Wir legen ein notify  an und probieren erstmal "zu Fuß" mit einem  Dummy-Schalter myschalter Ich habe mir für Versuchszwecke den Raum LABOR angelegt, wo erstmal alles durchprobiert wird, bevor es in echt eingebunden wird.  Wenn man also den Dummyschalter auf on stellt, fährt Rollo_3 runter,  nach 7 Sekunden kommt  der Befehl wieder rauf zu fahren. 

define n_Rollo3HalbRunter notify  myschalter:on  set Rollo_3 runter; sleep 7; set Rollo_3 rauf

Der Befehl "rauf" fährt aber nicht rauf, sondern stoppt. Erst ein nochmaliger "rauf" Befehl würde wieder hoch fahren.  Jetzt muß man nur noch  mit der Uhr ausprobieren, wie lange die Fahrzeit von oben bis zur gewünschten Stellung ist, dann diesen Wert ( Sekunden)  als sleep eintragen.   Zum Schluß  die Bedingung myschalter:on durch den gewünschten Auslöser ersetzen.

Alle Anweisungen nach bestem Wissen, aber ohne Garantie. Und wie immer:  Arbeiten mit Netzspannung sind lebensgefährlich und sollten nur von einer Elektrofachkraft durchgeführt werden.









Mittwoch, 1. Februar 2017

wenn der Postmann keinmal klingelt: Der Briefkasten schickt eine e-mail und sagt Bescheid.

Wenn der Zusteller mal wieder nur einen Zettel eingeworfen hat, anstatt das Paket auszuliefern,  kommen wir ihm jetzt auf die Schliche!

Das läßt sich auch in einer Mietwohnung verwirklichen, vorausgesetzt, der Briefkasten ist nicht zu weit vom FHEM -Raspi mit dem CUL entfernt.  .

Man benötigt nur ein Reed-Relais ,  einen Magneten und einen FS20 TK Klingeltaster, gibts bei Conrad derzeit für 9,99 €.  Der Magnet wird  so am Briefkasten angebraucht, daß der Reed-Kontakt schließt, wenn die Briefkastenklappe  geöffnet wird.

Dann wird der FS20 TK etwas modifiziert:  Der Taster kommt raus, dafür 2 Drähte dran. Die werden mit dem Reed-Relais verbunden und fertig!



Jetzt schickt der Klingeltaster bei jedem Öffnen des Briefkastens ein ON an das in FHEM angelegte Device. Das muß man händisch zurückstellen auf OFF, wenn man zum Briefkasten geht. Könnte man natürlich mit einem zweiten Kontakt automatisieren, die Vorgensweise ist genau so, nur ist der Kontakt dann am Briefkastentürchen, das man aufmacht.

 Das Device sollte sich per Autocreate beim ersten Auslösen selbst anlegen. Anstelle des Klingeltasters läßt sich natürlich auch jedes andere Modul verwenden, z.B. ein Fenster-Sensor, ist allerdings etwas teurer.

Jetzt noch ein DOIF anlegen, z.B. so:  define  di_briefkastenmeldung  DOIF und dann


([FS20_59d300:state] eq "on")({ DebianMail('xxxxxx@gmail.com','Nachricht von FHEM','Sie haben Post!!','');;}) (set MyTTS tts Der Briefträger war soeben da)

FS20_59d300 ist der Taster, nach dem Doppelpunkt wird der Status abgefragt. Wenn der auf "on" geht, wird eine mail geschickt.  Der Mail-Text ist natürlich frei wählbar.
Als DevStateIcon habe ich angelegt:

 message_mail_open@yellow off:message_mail
Ein geschlossener Brief steht für "keine neue Post",  der Umschlag offen und gelb  für "neue Post". 

Wer es ganz sorgfältig machen möchte, kann vorher noch den kryptischen Device-Name ändern in etwas griffiges:  rename FS20_59d300 klingeltaster

Wenn man irgendwann 20 device angelegt hat, verliert man leicht den Überblick, welches nun was macht. FHEM macht süchtig!

Für die Sprachausgabe braucht man weder Alexa noch Siri, das macht das Modul text2speech, welches wie der Name vermuten läßt, eine Textzeile an Google schickt, von dort kommt ein MP3 zurück und das wird über den Raspi vorgelesen.   Die email dient als Beleg mit Uhrzeit, wann jemand den Briefkasten göffnet hat.

Nachtrag: Das Ganze geht auch per Draht über die GPIO, dann braucht man keine Funkgeräte. Wer ein eigenes Haus hat und sowieso umbaut, sollte auf Vorrat mindestens CAT und Telefon/Schaltleitungen überall verlegen.

Für den Briefkasten habe ich jetzt  einfach einen <dum.briefkasten> angelegt, der  abwechselnd von der Briefkastenklappe über einen GPIO und über die Briefkastentür über einen anderen GPIO betätigt wird, d.h. beim Öffnen der Klappe geht der Dummy auf "Sie haben Post",  die Anzeige bleibt so lange stehen, bis man die Tür öffnet und die Post entnimmt, dann wird über einen Magnetschalter der zweite GPIO betätigt und der Dummy zurück gesetzt.

Das sieht dann so aus:
 
([dum.briefkasten:"off"]) (set MyTTS tts Sie haben Post. Bitte schauen Sie in Ihren Briefkasten )
 
und 
 
([gpio14:"off"]) (set dum.briefkasten off)  bzw  ([gpio15:"on"]) (set dum.briefkasten on) 

 Wie die GPIO beschaltet werden, steht in der Commandref  und in diversen Foren.  Wer möchte, kann natürlich auch zusätzlich einen mail generieren lassen.