automatische wohnung

felix schwenzel, , in artikel    

im mai habe ich der beifahrerin ein hue-starterset gekauft. sie mag die beiden lampen sehr, weil sie dimmbar sind und in verschiedenen weiss-tönen leuchten können. das dimm- und weisslevel stellt sie sich je nach tageszeit und stimmung über den mitgelieferten und über ihrem sofa angebrachten hue-schalter ein. sie weigert sich allerdings die leuchten per iphone oder siri zu steuern. sie drückt halt gerne auf tasten rum.

bei mir ist das gegenteil der fall. je mehr dinge ich über mein telefon oder meinen rechner steuern kann, desto mächtiger besser fühle ich mich. zugegebenermassen ist das konzept eine leuchte über eine app zu steuern eher gewöhnungsbedürftig: telefon in die hand nehmen, entsperren, app aufrufen, ein paar mal klicken … die hue app bietet zwar auch widgets an, die sich über den sperrbildschirm steuern lassen, aber auch die sind nicht so das gelbe vom ei. seit iOS10 und der neuen home-app ist das viel besser geworden. jetzt kann ich die wichtigsten geräte mit einem wisch steuern.

mein home-widget
die wichtigsten geräte zuhause im schnellzugriff

433 mhz steckdosen in der home app

aber ich greife vorraus. die hue-lampen weckten in mir das bedürfnis nicht nur ständig (zwei) lichter per telefon an und auszuschalten, sondern vor allem mehr lichter steuern zu können. zufällig stiess ich auf einen artikel, in dem beschrieben wurde wie man alte funksteckdosen über die home-app steuern könnte. von denen lagen bei uns noch drei stück rum, zwei bereits im wohnzimmer verbaut, um zwei ikea-schrankbeleuchtungen per fernbedienung zu steuern.

das projekt funktionierte so gut, dass ich an zwei wochenenden nicht nur die drei funksteckdosen app-steuerbar machte, sondern auch gleich noch einen baumarkt-funk-bewegungsschalter. naja, so gut funktionierte der zweite teil dann auch wieder nicht. während der erste teil relativ unkompliziert war und hier vor allem relativ gut beschrieben war, war der zweite teil um einiges haariger. und wenn ich genauer nachdenke, war auch der erste teil gar nicht so unkompliziert:

  • ich musste lernen, wie man die arduino entwicklungsumgebung unter macos benutzt und einrichtet (funktionierte damals nicht unter macos sierra, ich musste auf unseren mac-mini-server ausweichen, auf dem noch el capitan läuft),
  • ich musste c++ ein bisschen verstehen lernen,
  • die pin-nummern und -zuordnungen auf dem esp8266 esp-12e verstehen lernen
  • und mich mit billigen chinesischen 433 mhz funkmodulen rumschlagen, die nicht immer so funktionieren wie angegeben

aber am ende hatte ich einen esp8266-mikrocontroller der im wlan hing und über einen kleinen webserver befehle empfing, mit denen er funksteckdosen schaltete. so ist er jetzt auch nach knapp 30 tagen hier im einsatz, lediglich die befehle die er empfängt und weitergibt habe ich nach und nach ein bisschen erweitert. ich finde allein das schon senasationell: steckdosen über http steuern! in der firma haben wir für den serverschrank im rechenzentrum vor ein paar jahren eine sackteure, über http steuerbare steckdosenleiste gekauft, die ich so sensationell fand, dass ich mit ihr für ein foto posierte, das noch heute in der firma in der wand hängt. jetzt habe ich über http steuerbare steckdosen zuhause!

weil die steckdosen über http steuerbar sind, sind sie auch über apps zu steuern. ich habe mir dann noch homebridge auf unserem macmini-server installiert und die steckdose per http-modul eingebunden. damit tauchen sie dann in der home-app in meinem telefon auf oder lassen sich per siri steuern. einziger nachteil: es gab keine logik für den schalter-status. wenn ich oder die beifahrerin eine der steckdosen per fernbedienung schalteten, bekamen weder der arduino, noch homebridge, noch die home-app etwas davon mit. die status-erkennung habe ich mir aber erstmal auf die lange bank todo-liste geschoben.

den bewegungsmelder zum laufen zu bringen war leider irre aufwändig. das teil sendet mit einem etwas komplexeren protokoll als die steckdosen und für dieses protokoll musste ich erstmal die richtigen arduino-bibliotheken finden. diese bibliotheken von randy simons funktionierten, zusammen mit dem neuen 433 MHZ-empfänger, den ich gekauft hatte, nachdem ich bemerkt hatte, dass der billige chinesische empfänger den ich zuerst gekauft hatte, kaputt war. was ich allerdings wegen meiner ahnungslosigkeit nicht hinbekam, war die daten die der bewegungsmelder sendete, der funkempfänger empfing und die bibliotheken von randy simons entschlüsselten, wieder über http zu verschicken.

stundenlang versuchte ich hinzubekommen, den arduino zum reden zu bringen. erst als mir aufging, dass die callbacks, die die funkbibliotheken beim empfang von daten aufriefen, von und in interrupt-zyklen aufgerufen wurden, verstand ich das problem ansatzweise. in diesen callbacks sollte man besser keine längeren operationen durchführen, las ich im netz. bei einem längeren spaziergang ging mir dann die lösung auf: einfach in den callbacks eine variable setzen, die die empfangenen daten speichert und diese dann im loop abarbeiten. meine erste bewegungsmelder-lösung war etwas unbefriedigend: ich liess den arduino die signale des bewegungsmelder gleich wieder per funk an eine steckdose weitersenden. das funktionierte zwar, aber mitunter dauerte es zwei bis drei sekunden, bis das licht anging. so unbefriedigend das war, beliess ich es erstmal.

home assistant

ich hatte nämlich ein neues spielzeug entdeckt: den home assistenten, eine software, die kommunikationsfreudige hausgeräte vernetzt und steuerbar macht. die liste der unterstützen komponenten ist beeindruckend und es setzte ein manischer kreislauf ein: plötzlich sah ich, was in sachen heimautomatisierung alles möglich war, lernte das mysensor-projekt kennen, owntracks, das ähnlich wie google latitude funktioniert und vom home assistenten zur präsenenzdetektierung benutzt werden kann, die auch zuverlässig funktioniert, wenn man sie mit beacons kombiniert. ausserdem kann man mit home assistant netzwerkscans durchführen, um zu sehen, wer zuhause ist, bzw. wessen telefon oder laptop in benutzung ist.

meine präsenz, getrackt mit owntracks, datensammlung von home assistant
meine präsenz, getrackt mit owntracks, datensammlung von home assistant

aus den daten die home assistant sammelt kann man sich übersichtliche graphen anfertigen lassen oder benachrichtigungen per growl, telegram oder sonstwas schicken lassen. natürlich gab es viele falsche positivmeldungen, so dass die benachrichtigungen schnell nervten. aber darum ging es mir ja auch gar nicht, ich war einfach fasziniert, was man mit dieser software alles machen konnte.

leider musste ich dann, bevor ich home assistant weiter im detail erforschen konnte, in den urlaub fahren.

wieder zuhause, nahm ich mir vor, den bewegungsmelder zu verbessern. statt die lampe direkt vom mikrocontroller/arduino zu schalten, wollte ich die bewegungsdaten per mqtt an den home assistenten übertragen. mqtt hatte ich schon bei der einrichtung von owntracks kennengelernt. meine idee war jeweils einen arduino für den versand von 433-MHZ-signalen und einen für den empfang von 433-MHZ-signalen zu verwenden. meinen ehrgeiz das alles mit einem mikrocontroller zu machen, hatte ich mit pragmatismus ersetzt. tatsächlich funktionierte der ansatz ganz gut. mit hilfe der beispiele aus randy simons bibliotheken, ein bisschen mqtt-code aus dem netz und vielen experimenten hatte ich bald einen arduino der 433-MHZ-funksignale aller art empfing und per mqtt ins netz blies. mit diesen informationen konnte wiederum home assistant etwas anfangen. ich konnte automatisierungen schreiben, die auf das bewegungsfunksignal reagierten, eine steckdose schalten und einen timer setzen, der das licht nach einer minute wieder abschaltet — falls keine weiteren bewegungen erkannt werden. genauso konnte ich aber auch betätigungen der 433-MHZ-fernbedienung erkennen und daraus auch (endlich) den status der steckdosen ableiten. und weil home assistant jetzt eigentlich alle funksignale empfing, konnte ich die olle 433-MHZ-fernbedienung (von den alten funksteckdosen) für die beifahrerin auch so einrichten, dass sie damit die hue-lampen schalten kann. so kann sie jetzt alle lampen im wohnzimmer per fernbedienung schalten — und ich (dank home-assistant-homebridge-modul) per home-app oder siri oder home assistant.

alte 433 mhz funkfernbedienung — schaltet jetzt auch hue-lampen
alte 433 mhz funkfernbedienung — schaltet jetzt auch hue-lampen

jetzt hatten wir also einen bewegungsmelder im flur, der dort das licht für jeweils eine minute anschaltete (und mittlerweile auch in weniger als einer sekunde reagierte) und fünf schaltbare lampen, deren status in der home-app und im home-assistent korrekt angezeigt wurde.

sensoren

im urlaub hatte ich viel über sensoren nachgedacht. am anfang jeder automatisierung (und überwachung) stehen natürlich sensoren. viele sensoren. das mysensors-projekt hat dafür viele gute lösungen, die vor allem nicht ein vermögen kosten, wie die regulären, kommerziellen „smarten“ sensoren für bewegung, temperatur, luftfeuchtigkeit oder helligkeit. andererseits war das alles furchtbar kompliziert. für das nächste projekt wollte ich mir erst nochmal einen einfachen sensor auf esp8266 12e-basis selbst bauen — ohne die mysensor-bibliotheken und -komplexität. so habe ich einen DHT22 temperatur- und feuchtigkeitssensor an den arduino angeschlossen und ihn die daten per mqtt in netz blasen lassen.

das funktionierte auch auf anhieb super, bis auf die tatsache, dass der sensor einen viel zu niedrige luftfeuchtigkeit meldete. nach ein paar testtagen, war klar, dass die luftfeuchtigkeit zuverlässig ungefähr 50% zu niedrig ist. also multipliziere ich die sensorwerte mit 2 und gut ist.

home assistant
home assistant

einen temperatur- und luftfeuchtigkeitssensor haben wir schon länger im bad, allerdings ist der wenig kommunikativ und zeigt seine daten nur auf einem stillen LCD-bildschirm an. die beifahrerin hat den ins bad gestellt, weil sie bei anhaltend hoher luftfeuchtigkeit schimmel fürchtet und nicht müde wird, alle bewohner unserer wohnung darauf hinzuweisen, nach dem duschen das licht im bad anzulassen, damit der lüfter die feuchtigkeit rausbläst. laut DHT22, der ziemlich schnell reagiert, gehen die luftfeuchtigkeitswerte beim duschen sehr flott nach oben, fallen dann leicht ab und bleiben für eine weile auf mittelhohem niveau. wenn der lüfter 30 minuten läuft, fällt der wert auf etwas unter 70% (siehe grafik weiter unten).

weil der mit dem licht gekoppelte lüfter uns schon lange genervt hat, vor allem wegen der lautstärke, aber eben auch weil man eben dran denken musste ihn nach dem duschen anzulassen, war mein nächstes projekt diese kopplung aufzuheben. der lüfter sollte sich lediglich bei (zu) hoher luftfeuchtigkeit (automatisch) einschalten. gute sensorwerte hatte ich jetzt ja (im home-assistant), jetzt brauchte ich nur noch einen (fern-) schalter. auch das wollte ich mit einer fernschaltbaren steckdose machen. glücklicherweise ist unsere bad-elektrik gut zugänglich. unser bad hat eine abgehängte decke und über eine lucke über der speisekammer kommt man gut auf die andere seite der abgehängten decke.

die meiste arbeit war dann auch nicht die elektroinstallation, sondern die steuerungslogik, die ich experiementiell mit dem home-assistant-app-daemon umgesetzt habe. der soll das scripten etwas vereinfachen, war aber für einen python- und programmier-dummkopf eine echte herausforderung. die logik funktioniert jetzt so, dass der lüfter beim überschreiten einer schwelle (70% luftfeuchtigkeit) für 15 minuten anspringt und sich dann abschaltet. ist die feuchtigkeit dann noch über 70%, geht der lüfter wieder an, bis es trocken genug ist. manuell ist der lüfter natürlich auch schaltbar — entweder über die funk-fernbedienung, die home-assistant-weboberfläche oder die home-app. weil ich ja noch einen dash-button rumliegen hatte, habe ich den per dasher so konfiguriert, dass er den lüfter manuell entweder an oder ausschaltet.

dash button als lüftungsschalter
dash button als lüftungsschalter

ganz besonderes vergnügen bereitet mir der lichtsensor den ich noch zum DHT22-sensor hinzufügte. an diesen modulen lässt sich ein schwellenwert einstellen, mit dem ich gut erkennen kann, ob eins der lichter im bad eingeschaltet ist. auch der lichtsensor sendet seine status per mqtt an den home assistant, wo der status dann augenblicklich angezeigt wird. mein neues hobby ist jetzt am bad-eingang zu stehen, das licht ein und aus zu schalten und fasziniert zu beobachten wie nicht nur das licht im bad an und aus geht, sondern auch der indikator auf meinem bildschirm.

mit einem kleinen script schickt mir der home assistant jetzt immer eine nachricht, wenn das licht im bad länger als 30 minuten eingeschaltet ist.

todos

meine liste mit todos ist lang. ich hätte gerne mehr bewegungssensoren, automatisch geschaltetes licht ist schon toll, gerade wenn man nachts mal aufs klo muss. ein sensor, der den status der „fertig“-LED auf der waschmaschine ans interne netz weitergibt und home assistant eine nachricht schicken lässt, ein automatisches türschloss und eine urlaubsschaltung, die bei abwesenheit die lichter so schaltet, als wären wir zuhause. mehr steuerbare lichter, ein magic mirror.

vor allem muss das natürlich alles etwas wartungsfreundlicher und stabiler gemacht werden. schon jetzt laufen im haus vier microcontroller mit wlan und anbindung an einen lokalen mqtt-server, auf dem mac mini laufen unzählige prozesse, die zwar automatisch starten, aber hier und da noch ziemlich fehleranfällig. in dieser hinsicht muss ich die hue-leuchten nochmal lobend erwähnen. die laufen nach der einrichtung, funktionieren immer mit super kurzen latenzen und brauchen null wartung. dafür haben sie einen sehr, sehr stolzen preis und der bewegungsmelder ist immer noch nicht auf dem markt.

unsere badezimmer-daten
unsere badezimmer-daten

gleichzeitig grossartig und erschreckend finde ich das vergnügen, dass ich an den gesammelten daten habe. oben sind die daten des temperatur- und feuchtigkeitssensor im bad zu sehen, sowie die laufzeiten des ventilators. man erkennt gut, wann einzelne einwohner der wohnung geduscht haben, und wenn man genau hinsieht (reinzoomt), auch unsere stuhlgangzeiten (wenn wir danach höflicherweise den ventilator eingeschaltet haben). die bewegungsmelderdaten zeigen relativ zuverlässig an, wann jemand spät nach hause geht oder der letzte das haus verlässt. der luftfeuchtesensor ist (zumindest an der stelle an der er momentan angebracht ist) so empfindlich, dass man ihn beinahe als präsenzsensor nutzen kann, dafür muss man ihn natürlich nicht anhauchen, sondern es reicht einfach im bad zu atmen.

derzeit will ich auf diese daten nicht verzichten, weil sie auch helfen fehlfunktionen oder unregelmässigkeiten zu finden. aber ein bisschen überraschend finde ich es schon, wie aussagekräftig diese trivialen daten sind und welche muster und schlüsse man aus ihnen lesen und ziehen kann.

was mir auch aufällt: das alles ist überhaupt nicht „smart“ und unser heim wird durch diese vernetzten geräte keinen deut klüger. im gegenteil; auch wenn man die geräte tagelang schult und eicht und scriptet, am ende gibt es dann doch unmengen an falschen alarmen, falschen werten und keines der geräte denkt einen schritt weiter als man selbst. trotzdem bereitet es mir unendliches vergnügen bestimmte sachen nicht mehr machen zu müssen (licht im flur anmachen), aber dafür andere um so mehr (scripten, fehler suchen, haare raufen, wenn wieder was nicht funktioniert). noch grösseres vergnügen bereitet es mir, mir sachen auszudenken die niemand braucht und die niemandem helfen — einfach weil es geht und die umsetzung mich herausfordert.