Verschiedenes > ESP8266

HomeStatusDisplay (ESP8266, MQTT, WS2812B)

(1/47) > >>

Joker:
Hallo,

hier möchte ich mein Projekt "HomeStatusDisplay" vorstellen.
Hierbei handelt es sich um eine Anzeigemöglichkeit von verschiedenen Zuständen aus FHEM (aber prinzipiell auch anderen System, dazu weiter unten mehr) via LEDs.

Zur Anzeige werden RGB (WS2812B) LEDs verwendet. Der Gedanke ist, mit einem Blick auf die Anzeige schnell einen Überblick über das System zu bekommen, ähnlich der Homematic LED-Statusanzeige. Ich nutze es, um mir z.B. die Zustände von Fenstern (getriggert von Homematic Fensterkontakten), Lichtern (getriggert von Homemematic Schaltaktoren) und anderen Dingen wie z.B. der Müllabfuhr zu visualiseren. Verbaut ist das ganze aktuell in einem zweckentfremdeten Bilderrahmen. Siehe Bild "01_hardware.jpg" , als Einstieg wie das ganze aussieht.

Die Idee ist zugegebenermaßen nicht neu, auch hier im Forum gab es schon entsprechende Ansätze und auf anderen Seiten ebenso. Ich habe allerdings -meiner Meinung nach- mein System etwas universeller und vor allem auch "kompletter" gestaltet.

Was wurde verbaut?
- ESP8266 als Mikrocontroller mit WLAN Unterstützung (in meinem Fall ein wemos D1 Mini Klon)
- ein WS2812B LED Stripe, in meinem Fall kommen 33 LEDs in drei Reihen zum Einsatz
- minimale Beschaltung (ein Kondensator und ein Widerstand, Standard-Beschaltung für die WS2812B Stripes)
- ein Bilderrahmen aus einem schwedischen Möbelhaus
- eine Holzplatte als Trägerrahmen für die LEDs und den Rest
- zwei Holzleisten als Klemmbefestigung

Siehe Bilder, "02_hardware.jpg", "03_hardware.jpg", "04_hardware.jpg".

Wie man sieht, wirklich minimaler Aufwand auf der Hardware-Seite, siehe auch "10_schematic.png"

Was braucht man noch?
- ein laufendes FHEM System (oder ein anderes System das MQTT-Nachrichten verschicken kann)
- einen MQTT-Broker, z.B. mosquitto. Dieser kann z.B. auf dem selben Gerät laufen wie FHEM, beispielsweise einem Raspberry Pi

Was kann das System?
- der ESP8266 kommuniziert mit FHEM per WLAN
- als Protokoll kommt MQTT zum Einsatz
- auf FHEM-Seite werden die Module MQTT_BRIDGE und MQTT_DEVICE verwendet, diese senden konfigurierte Topics an das Display, und dieses schaltet entsprechend der Konfiguration bestimmte LEDs
- über eine Konfigurations-Webseite kann man sämtliche Parameter festlegen, wie z.B. die MQTT Topics, Anzahl der LEDs, WLAN Zugangsdaten, MQTT-Zugangsdaten etc.
- ebenso frei konfigurierbar per Webseite ist das Mapping von MQTT-Nachrichten auf LED-Verhalten
- als LED-Verhalten gibt es (aktuell) die Möglichkeit An, Aus, Blinken (500ms an, 500ms aus), Blitzen (200ms an, 2s aus) sowie Flackern (100ms an, 100ms aus) zu wählen
- die Software für den ESP8266 wurde in der Arduino-IDE geschrieben
- es muss nichts in der Software verändert werden, um das Gerät ans eigene System anzupassen- alle Einstellungen können per Webseite gemacht werden
- OTA Firmware Update

Die Inbetriebnahme des Geräts kann wie folgt erfolgen:
- beim ersten Start wird versucht eine WLAN-Verbindung aufzubauen, da noch keine Zugangsdaten bekannt sind, schlägt dies fehl und es wird ein Access Point aufgemacht
- der Access Point heißt "StatusDisplay", Passwort "statusdisplay". Mit diesem kann man sich verbinden und danach gelangt man über die Seite 192.168.4.1 auf die Konfigurationsseite (Bild "06_software_general.png")

-- Hier kann man nun Basiskonfiguration vornehmen, wichtig ist zunächst WiFi SSID und Passwort. Sinvollerweise kann man auch schon LED-Anzahl und LED-Datenpin eingeben. Nach einem Reboot sollte sich das Gerät mit dem WLAN verbinden. Visualisiert wird dies -sofern korrekt eingegeben- schon über die LEDs:
--- alle LEDs rot bedeutet: Keine WLAN Verbindung vorhanden
--- alle LEDs gelb bedeutet: WLAN Verbindung vorhanden, MQTT Verbindung steht noch nicht
--- man sollte nun die Konfigurationsseite erneut aufrufen (diesmal über die IP, die das Gerät vom lokalen DHCP-Server bekommen hat), und die restlichen Einstellungen machen. Auf der Statusseite (Bild "05_software_status.png") sieht man eine Übersicht über den Zustand des Geräts.

Weiter geht es auf der "General" Seite mit den Einstellungen:

MQTT Server: Servername oder IP des MQTT-Servers
Status Topic: Topic, über das die Statusmeldungen übermittelt werden, auf die die LEDs reagieren sollen. Dieses MUSS eine Wildcard enthalten in der Form, dass auf alle gewünschten Nachrichten reagiert wird. Beispiel "fhem/status/#" -> Alle Nachrichten die mit fhem/status beginnen, werden für die Statusanzeige hergenommen. Es wird davon ausgegangen, dass danach einer der unterstützten Gerätetypen im String folgt (derzeit "door", "window", "light" und "alarm"), sowie der Name des Geräts, Beispiel: fhem/status/light/kitchen.
Test Topic: Ein Topic zu Testzwecken. Dieses wird nur komplett erkannt, also keine Wildcards. Als Message können die Werte 1-5 übermittelt werden, diese schalten verschiedene LEDs dauerhaft an, um die Funktion der LEDs testen zu können. Mit Message "0" wird in den normalen Betrieb zurück geschaltet.
Will Topic: Dieses Topic wird beim Startup des Geräts mit der Message "on" gepublished. Wenn die Verbindung zum Gerät abbricht (z.B. weil stromlos), schickt der MQTT Broker dieses Topic mit der Message "off". Hiermit kann man überwachen, ob das Gerät einsatzbereit ist

Nach Klick auf "Save" und "Reboot" sollten nun nicht mehr alle LEDs in rot oder gelb an sein, sondern aus (normaler Betrieb).

Nun muss noch das "Color Mapping" konfiguriert werden (Bild "07_software_colormapping.jpg")
Hier müssen Message, Type, Color und Behavior gewählt werden.

Zum Verständnis hier ein Beispiel, wie ein Statustopic aussehen soll: "fhem/status/light/kitchen open". -> Konfiguration z.B.:
open, Window, Blue, On -> "Wenn im Topic "fhem/status/window/DEVICENAME" die Message "open" empfangen wird, soll dies mit einer blauen LED signalisiert werden.

Allgemein gesprochen konfiguriert man hier "Wenn eine Message X für den Gerätetyp Y empfangen wird, wie soll sich eine LED verhalten".

Was alles in DEVICENAME stehen darf, wird im Device Mapping eingestellt (Bild 08_software_devicemapping.png).
Hier müssen Device, Type und LedNummer gewählt werden.

Beispiel:
kitchen, Window, 2

Im Zusammenhang mit dem Color Mapping bedeutet dies:
Wenn die message "fhem/status/window/kitchen open" empfangen wird, soll dies an der LED 2 signalisiert werden, diese würde dann blau leuchten (Zusammenspiel mit Color Mapping).
Wenn man im Device Mapping noch hinzufügt z.B. "eating, Window, 3", dann wird auch die Message "fhem/status/light/eating open" erkannt, hier würde die LED 3 blau leuchten.

Allgemein gesprochen konfiguriert man hier "Wenn eine Message für Device X vom Typ Y eintrifft, welche LED soll reagieren".

Ich hoffe das ist so einigermaßen verständlich, wenn nicht bitte nachfragen :-) Meine eigene Konfiguration seht ihr in den Screenshots.
Vielleicht könnte man das auch noch ein wenig einfacher machen, für Vorschläge bin ich offen.

Ach ja, den Code gibt es zum Download natürlich auf gitHub:
https://github.com/MTJoker/HomeStatusDisplay

Bitte als work-in-progress betrachten- ich habe das System schon länger produktiv im Einsatz, aber es ist sicherlich noch einiges zu verbessern. Auch dafür bin ich offen, entweder hier im Thread oder gern per pull-Request.

Billy:
Interessantes Projekt.
Vielen Dank für die Veröffentlichung! :)

Sobald ich wieder mehr Zeit habe werde ich mich an die Umsetzung machen und meine Homematic LED-Statusanzeige deren Anzeigemöglichkeiten begrenzt sind ersetzen.

Billy

Groej:
Cooles Teil Danke dafür.

Gruß

Jörg

ckbln:
Hallo Joker

wenn ich den Sketch auf den ESP hochlade und neu starte wird kein AP erzeugt.
Mache ich etwas falsch oder ist im Code noch ein Fehler?

Viele Grüße

Der Serielle Monitor zeigt folgendes:
##########################
Initializing config.
Mounted file system.
Reading config file /config.json
File does not exist
Creating default main config file.
Writing config file /config.json
File does not exist
Failed to write file, formatting file system.
Done.
Reading config file /colormapping.json
File does not exist
Creating default color mapping config file.
Deleting color mapping config data.
Writing config file /colormapping.json
File does not exist
Failed to write file, formatting file system.
Done.
Reading config file /devicemapping.json
File does not exist
Creating default device mapping config file.
Deleting device mapping config data.
Writing device mapping config file.
Writing config file /devicemapping.json
File does not exist
Failed to write file, formatting file system.
Done.

Starting WebServer.

Initializing MQTT connection to
Free RAM: 34384
Connecting to MQTT broker  with client id ESP8266Client-3d4f... failed, rc=-2
Connecting to MQTT broker  with client id ESP8266Client-49c0... failed, rc=-2
Connecting to MQTT broker  with client id ESP8266Client-5a51... failed, rc=-2
Connecting to MQTT broker  with client id ESP8266Client-e2ed... failed, rc=-2
usw.

Joker:
Hi ckbln,

da kommen mehrere Dinge zusammen, konnte es mir gerade nur kurz ansehen:

1. Es gibt einen Bug, wenn die Konfigurationsdateien noch nicht vorhanden sind. Dadurch werden die Files initial nicht erzeugt. Das werde ich beheben, schaue ich mir die Tage an, evtl komme ich heute abend schon dazu.

2. Ich vermute, der ESP war schon einmal mit deinem WLAN verbunden oder? Der ESP hat die Eigenheit dass er die Zugangsinformationen zum letztgenutzen WLAN intern wohl irgendwo speichert und mit diesen versucht eine Verbindung in dieses WLAN aufzubauen. Schau mal in deinen Router, ich vermute der ESP ist schon in deinem WLAN und deswegen baut er keinen AP auf. Daher versucht er als nächsten Schritt den MQTT Broker zu erreichen, welcher aber noch nicht hinterlegt ist. Das geht auch noch nicht solange der Punkt 1. nicht behoben ist.

Als Info für mich: Hast du schon den kompletten Hardware Aufbau, also inklusive LEDs? Benutzt du ein wemos D1 oder ein anderes Board?

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln