Projekt: HomeStatusDisplay mit FHEM und MQTT – Nachbau

Projekt: HomeStatusDisplay mit FHEM und MQTT – Nachbau

Das Projekt HomeStatusDisplay ist, wie bereits im Titel angegeben, ein Nachbau von Bernd Schubart. An dieser Stelle möchte ich mich recht herzlich bei der guten Beschreibung auf seiner Seite bedanken. Hier geht es zum Original-Beitrag. Da für mich dieses Thema mit Mikrocontrollern usw. Neuland war, habe ich mir gedacht, dass ich mein Vorhaben detailliert zusammenfasse und Schritt für Schritt erkläre – so gut es geht. Ich hoffe ich habe nichts wichtiges vergessen. Ansonsten bitte in den Kommentaren fragen. Lange war ich auf der Suche nach einer Statusanzeige für meine Homecontrol (2 homee’s). Da es nur ein Display von homematic gibt, dies aber nicht kompatibel mit anderen System ist, legte ich mein Vorhaben wieder auf Eis, bis ich auf das Projekt von Bernd Schubart gestoßen bin.

Tipp: Lese dir bitte die gesamte Anleitung einmal ganz durch, bevor du beginnst. Es erleichtert dir dann den gesamten Aufbau und beantwortet dir bestimmt Fragen, die zwischendurch dann auftreten.

In diesem Display möchte ich die wichtigsten Elemente angezeigt haben. Diese sind alle Türen, alle Fenster, generell in welchem Raum ein Licht an ist, welchen Status der Haupt-homee gerade hat (abwesend, zuhause, schlafend) und ein paar größere Haushaltsgeräte wie Waschmaschine, Trockner, Untertischboiler und Geschirrspüler. Ein Lämpchen habe ich in meiner Planung noch nicht vergeben, dies sollte dann aber für den Warmwasserboiler sein.

Kurz vorweg die Erklärung der LED’s und Farben, welche ich verwende:

  • Türen und Fenster geschlossen ist grün
  • Türen offen ist rot
  • Fenster offen ist orange
  • Geräte weiß = Steckdose ist eingeschaltet
  • Geräte blinken orange = Waschmaschine wäscht, Trockner trocknet, Geschirrspüler wäscht und Untertischboiler heizt
  • Licht weiß = Licht ist eingeschaltet – sonst ist LED aus
  • Für den Status habe ich verschiedene Farben, grün ist alles in Ordnung, orange für Hinweis, rot für „da hat’s was“ 🙂

Welche Voraussetzungen sollte man für dieses Projekt mitbringen:

  • man sollte löten können und einen Lötkolben inkl. Zubehör verfügbar haben
  • FHEM sollte einem was sagen (die Installation auf einem Raspberry Pi sollte kein Problem sein, wenn man sich in die Tutorials etwas einliest. Hier ist ein Beitrag von mir, wie ich das mache.)
  • MQTT auf dem Raspberry Pi installieren erfordert meiner Meinung nach etwas Verständnis im Umgang mit der Console des RPi
  • Spaß am Basteln

Was benötigen wir alles für das HomeStatusDisplay, bzw. welche Komponenten habe ich verwendet:

Ich merke jetzt schon, dass dieser Beitrag wirklich lange werden wird :/

Ich versuche alles so genau und gut wie möglich zu erklären.

Die einzelnen Schritte

Aufbau des Mikrocontrollers

Dazu benötigen wir den Mikrocontroller, den 1.000uF Kondensator, den 470 Ohm Widerstand, Drähte/Kabel und ein PCB Board in passender Größe damit alle Bauteile darauf Platz finden. Aus Platzgründen habe ich das PCB Board für den Kondensator ausgeschnitten. Beim Mikrocontroller werden zuerst die beiden mitgelieferten Stegleisten angelötet, danach den Mikrocontroller, den Kondensator, den Widerstand und das Anschlusskabel für den LED-Stripe auf das PCB Board. Der LED-Stripe kann direkt mit Kabeln verlötet werden, oder mit einer Steckverbindung verbunden werden (zweiteres ist im Lieferumfang von den oa. LED-Stripe, welche ich verwende, enthalten). Nun müssen die einzelnen Kontakte noch korrekt verbunden werden. Ich habe hier zur besseren Darstellung einen – zugegeben nicht perfekten – Schaltplan erstellt.

Ich bin kein Lötprofi – also bitte nicht hauen – ich bin damit ganz zufrieden.
Ist auch meine erste Platine, die ich gelötet habe.

Hier kannst du den Schaltplan herunterladen. Zugegeben, es ist mein erster selbst gezeichneter Schaltplan und ich bin kein gelernter Elektriker 🙂 Wenn hier etwas falsch ist, bitte sag es mir. Danke.

Der Bau des ganzen Displays ist Geschmacksache. Ich zeige hier ein paar Fotos von meiner Lösung mit der Wandhalterung für Tablets.

Die Hardware ist nun fertig und wir machen uns an die Software.


Einrichten des Mikrocontrollers

Zunächst müssen wir unseren PC dafür einsatzbereit machen und ein paar Sachen installieren und einrichten:

  • Arduino IDE – Das Programm zum Übertragen der Firmware auf den Mikrocontroller

Die Firmware ist hier (https://github.com/s4home-net/HomeStatusDisplay/releases/tag/v0.5-beta) erhältlich. Das Projekt wird von Bernd Schubart offensichtlich nicht mehr weiter betreut (keine Updates mehr seit 2017). Ich verwende die V0.5-beta und bin damit sehr zufrieden. Es gibt lediglich einen Nachteil. Wenn zB. der Raspberry PI zwischendurch mal abschmiert, oder Stromausfall war, dann muss der Mikrocontroller neu gestartet werden, aber erst dann, wenn der Raspberry Pi schon online ist!

Nun öffnen wir Arduino IDE am PC und müssen noch ein paar Libraries einrichten. Dies kann im Library Manager (Sketch –> Bibliothek einbinden –> Bibliothek Verwalten) gemacht werden.

Suche nun nach den drei Libraries und installiere diese:

  • Adafruit_NeoPixel (Alternativ: https://github.com/adafruit/Adafruit_NeoPixel)
  • PubSubClient (Alternativ: https://github.com/knolleary/pubsubclient)
  • ArduinoJson (Alternativ: https://github.com/bblanchon/ArduinoJson)

Ebenso benötigen wir ein Paket für die Unterstützung des ESP8266 in der Arduino IDE. Um dieses Paket im Boardverwalter finden zu können, gehe dazu auf „Datei –> Voreinstellungen“ und trage unter „Zusätzliche Boardverwalter-URLs:“ den Link http://arduino.esp8266.com/stable/package_esp8266com_index.json ein. Nun kann man über den Board-Manager (Werkzeuge –> Board –> Boardverwalter) das Paket holen. Suche nach „ESP8266“ und installiere das Paket „esp8266 von der ESP8266 Community“ – aber Achtung!! – Bitte installiere dies mit der Version 2.4.0 – nur mit dieser Version hat es bei mir einwandfrei und ohne Fehler funktioniert. (die Version kann man im Nachhinein jederzeit ändern)

Nun konfigurieren wir noch schnell die Software, siehe dazu den folgenden Screenshot und wähle die entsprechenden Einträge aus den Menüs aus. Der Port kann dann ausgewählt werden, sobald der Mikrocontroller am PC angeschlossen wurde.

Öffne nun vom entpackten Ordner „HomeStatusDisplay“ die Datei „HomeStatusDisplay.ino“. Unter Umständen wirst du gefragt, ob du diese Datei in einem neuen Ordner speichern möchtest – kannst du gerne machen, jedoch musst du alle anderen Dateien vom ursprünglichen ZIP-File auch in diesen Ordner kopieren. Nun müssen die Dateien kompiliert werden – dies passiert über den Haken in der Oberen Leiste. Ist dieser Vorgang erfolgreich, kannst du mittels dem Rechtspfeil (gleich neben dem Haken) die Dateien auf den Mikrocontroller übertragen. Sollte dies nicht ohne Probleme funktionieren, versuche es ein paar Mal. Leider hakt es hier hin und wieder mit COM-Ports auf USB usw. Bei mir hat es geholfen, wenn ich mit offener Arduino IDE und angeschlossenem Mikrocontroller den COM-Port in der Geräteverwaltung deaktiviert und wieder aktiviert habe.

Ist alles korrekt, sieht es so aus:

Somit ist der Mikrocontroller fertig eingerichtet und dieser Step abgeschlossen – Sehr gut!

Zur Inbetriebnahme und Konfiguration des HomeStatusDisplay kommen wir nach der Installation des Raspberry PI. Nun kommen wir zum Raspberry Pi und werden diesen installieren, FHEM und MQTT einrichten.


Raspberry PI installieren, FHEM und MQTT einrichten

Da ich mir die ganze Schreiberei ersparen möchte, verweise ich nun auf meinen Beitrag, wie man einen Raspberry PI installiert und FHEM einrichtet. Hier geht’s zum Beitrag. Einzig ist zu beachten – ich habe es nicht anders zum Laufen gebracht – dass man nicht das neueste „Raspberry PI OS“ installiert, sondern mit der alten Version „Jessie“. Ich habe dieses Image (https://downloads.raspberrypi.org/raspbian/images/raspbian-2017-07-05/ – ZIP-Datei downloaden) verwendet und es läuft prima. Da ich den RPI nur lokal betreibe, ist mir die aktuellste Software inkl. Sicherheitspakete nicht so wichtig.


MQTT-Broker einrichten

Ab hier gehe ich davon aus, dass du den RPI installiert und FHEM eingerichtet hast. Dann starten wir mit der Einrichtung des MQTT-Broker (mosquitto) auf dem RPI. Wenn einmal MQTT eingerichtet ist und läuft, kann es für weitere Anwendungen eingesetzt werden, welche ihr vl. später in eurem Heim noch umsetzten möchtet. Hier wird erklärt, was MQTT alles macht und kann, sofern es jemanden interessiert und hier wie MQTT mit FHEM zusammenarbeitet.

Da ich nicht der Profi bin und MQTT nicht auf dem neuesten Image des RPI zum laufen gebracht habe und auch keine weiteren Anleitungen gefunden habe, kommt hier die Installation von MQTT auf den RPI mit Jessie.

Gerne lasse ich mich berichtigen und würde mich in den Kommentaren auf eure Updates und Feedbacks freuen.

Damit jetzt unser RPI mit FHEM mit dem HomeStatusDisplay kommunizieren kann, müssen wir den MQTT-Broker ebenfalls am RPI einrichten (könnte auch getrennt auf einem anderen RPI installiert werden – ich habe alles auf einem RPI laufen) und das geht wie folgt:

Wir melden uns auf der Console am RPI an und geben folgende Befehle nacheinander ein:

wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
sudo apt-key add mosquitto-repo.gpg.key
cd /etc/apt/sources.list.d/
sudo wget http://repo.mosquitto.org/debian/mosquitto-jessie.list
sudo apt-get update
sudo apt-get install mosquitto

Das alles einwandfrei funktioniert, müssen zwei Module nachinstalliert werden. Dieser Vorgang kann etwas dauern.

sudo cpan install Net::MQTT:Simple
sudo cpan install Net::MQTT:Constants

Wichtige Befehle zum Betreiben des Brokers:

Status des Brokers abfragen: sudo service mosquitto status
Broker starten und stoppen: sudo service mosquitto start oder sudo service mosquitto stop

Wenn bis hier her alles super durchgelaufen ist, können wir nun MQTT in FHEM einrichten. Wir begeben uns auf die FHEM Seite unseres RPI. Als erstes müssen wir unsere zwei Server (FHEM und MQTT) miteinander verbinden. Da beide System auf einem RPI laufen, können wir diese ohne Passwort und IP verknüpfen und wählen deshalb die interne IP 127.0.0.1 und den Standardport 1883 für MQTT. Der Befehl für FHEM sieht dann wie folgt aus:

define mqtt MQTT 127.0.0.1:1883
in der FHEM Commandref ist der Originalbefehl dazu: define <name> MQTT <ip:port> [<username>] [<password>]

Ob FHEM mit dem Broker verbunden ist, sieht man im soeben angelegten Gerät in den Readings bei „state“. Dort müsste „opened“ angeführt sein, dann ist alles korrekt. Wenn wir hier nun fertig sind, können wir bereits unsere ersten dummy-Geräte in FHEM anlegen.

Als Beispiel habe ich hier zwei Geräte, welche wir anlagen (pro Gerät sind es immer vier Befehle in FHEM):

Hiermit wird die MQTT_Bridge für das Gerät „TuerEingang“ erstellt und zwei Attribute hinzugefühgt. Zweites Attribut ist sehr wichtig. „retain“ ist dafür verantwortlich, wenn das HomeStatusDisplay mal offline war, wird vom Broker erneut der korrekte Status geschickt.

define mqtt_status_door_TuerEingang MQTT_BRIDGE TuerEingang
attr mqtt_status_door_TuerEingang publishState fhem/status/door/TuerEingang
attr mqtt_status_door_TuerEingang retain 1

Nun erstellen wir das Gerät selbst als dummy in FHEM (TuerEingang)

define TuerEingang dummy
Im DeviceOverview kann man noch Schalter für dieses Gerät einrichten. Dies geht über das Attribut „webCmd“ mit zB. „open:closed“ (oder „on:off“, oder „red:orange:green:off“) und dann mit Enter bestätigen und schon sollten die Schalter auftauchen.

Hiermit legen wir die MQTT_Bridge für das Gerät „LichtEsszimmer“ an:

define mqtt_status_light_LichtEsszimmer MQTT_BRIDGE LichtEsszimmer
attr mqtt_status_light_LichtEsszimmer publishState fhem/status/light/LichtEsszimmer
attr mqtt_status_light_LichtEsszimmer retain 1

und mit define LichtEsszimmer dummy das Gerät selbst. (Attribut webCmd würde hier „on:off“ passen.)

Dieser Vorgang muss natürlich für alle LED’s mit den entsprechenden Namen wiederholt werden. Um dies erstmals mit deinem tollen LED-Display testen zu können, wenden wir uns jetzt zur Einrichtung und Konfiguration des HomeStatusDisplay.


HomeStatusDisplay einrichten, konfigurieren und in Betrieb nehmen

Zunächst musst du dich direkt via WLAN mit dem Display verbinden. Beim ersten Booten wurde die Firmware so konzipiert, dass ein Access Point aufgebaut wird. Die SSID ist StatusDisplay und das Passwort lautet statusdisplay. Mit der IP-Adresse 192.168.4.1 erreichst du das Display über einen Web-Browser. Dies sollte dann so aussehen:

Nachdem nun die WLAN Zugangsdaten eingegeben wurden, klickt man auf „Reboot“ und das Board startet neu. Jetzt musst du die neue IP-Adresse in deinem Netzwerk für das Board herausfinden. Dies geht meist über die Router-Software oder diverse Netzscanner Apps (Ich bevorzuge hier den Net Scanner von devolo für Android). Hat man nun die neue IP-Adresse, wird diese wieder im Browser eingegeben und die HomeStatusDisplay Konfigurationsseite erscheint wieder. Findet man das Board nicht, einfach nochmal neu starten, dies kann beim ersten Booten mit neuer Konfiguration vorkommen.

Nun müssen wir MQTT einstellen. Dazu geben wir unter „Server“ die IP-Adresse des Raspberry PI ein, sowie folgende Einträge für die Topic’s und die Anzahl der LED’s, die du einrichten möchtest. Mehr als 35 LED’s werden aber nicht unterstützt. Die Angabe der LED pin ist jene, mit wie vielen Kontakten eine LED am Stripe angelötet ist, meist sind das 4 Kontakte. Brightness ist die Helligkeit, welche man je nach Geschmack von 1-100 eintragen kann.

Ist dies nun alle eingegeben sollte es nun so unter Status aussehen:

Dies ist mein Testboard, deshalb die #2 dabei.

Jetzt geht es daran, die LED’s zu konfigurieren (Device mapping), sowie die Farben und Leuchtart einzustellen (Color mapping). Hier wieder zwei Screenshots von meinem Live-Board:

Bei der Einrichtung in FHEM haben wir als Beispiel define mqtt_status_door_TuerEingang MQTT_BRIDGE TuerEingang gehabt. Die Bezeichnung der LED mit zB. TuerEingang muss mit dem define und attr in FHEM übereinstimmen. Mit dem webCmd zB. open:closed muss der Eintrag im Color Mapping übereinstimmen.

Beispiel für die Tür Eingang. Die Bezeichnung der LED und in FHEM muss immer gleich sein, hier eben TuerEingang. Im Color Mapping wird open – Door – Red – Blinking gewählt. Wird nun in FHEM der Status der Tür auf open geändert, blinkt die LED der Tür rot. Wird closed gesendet, schaltet sich die LED wieder aus, da es kein closed als Einstellung gibt. Man könnte closed – Door – White – On eingeben, dann würde bei geschlossener Tür die LED weiß leuchten. Hoffe das ist verständlich erklärt.

So, das wars eigentlich. Ich wünsche viel Spaß beim Nachbau. Generell ist es nicht schwierig. Es mag kompliziert klingen, aber wenn man meine Anleitung Nach und Nach durchgeht, dann kann eigentlich nichts schief gehen. Viel Erfolg. Ich freue mich über Feedback in den Kommentaren.

Nun Fragen sich viele, was kann ich jetzt damit machen, wenn meine Homecontrol nicht über FHEM läuft? Naja, wenn deine Homecontrol Webhooks unterstützt dann kann man das nun alles über IFTTT lösen, sowie in meinem Fall. Aber das erkläre ich in einem anderen Beitrag.

Leave a Reply

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

*

code

Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu. Weitere Informationen

Die Cookie-Einstellungen auf dieser Website sind auf "Cookies zulassen" eingestellt, um das beste Surferlebnis zu ermöglichen. Wenn du diese Website ohne Änderung der Cookie-Einstellungen verwendest oder auf "Akzeptieren" klickst, erklärst du sich damit einverstanden.

Schließen