HomeStatusDisplay – Smart Home Status immer im Blick

Im Artikel Experimente mit ESP8266, WS2812B und MQTT habe ich vor einiger Zeit über meine ersten Schritte mit dem WLAN-Microcontroller ESP8266 geschrieben.

Mittlerweile bin ich hier aus dem Versuchsstadium hinaus und habe mein „HomeStatusDisplay“ im Betrieb. Mit diesem Gerät visualisiere ich den Status meines Smart Home via LEDs- beispielsweise kann ich so offene Fenster, brennende Lichter, aber auch den Zeitpunkt wann die Mülltonnen auf die Straße gestellt werden müssen visualisieren. In diesem Tutorial zeige ich, wie ich beim Bau vorgegangen bin.

Zielsetzung

Zunächst einmal ein paar Worte zum „Sinn“ dieses Projekts.

Ich habe festgestellt, dass es immer wieder enorm hilfreich ist, wenn man sich schnell und einfach einen Überblick über die Zustände im Haus verschaffen möchte. Sind alle Licher ausgeschaltet? Sind alle Fenster zu? Werden irgendwelche Probleme gemeldet? Bisher war es zur Beantwortung dieser Fragen notwendig, entweder in jedem Raum nachzusehen, oder per Handy oder PC die Smart Home Visualisierung aufzurufen und dort nachzusehen. Beides ist aber unpraktisch, wenn man beispielsweise gerade das Haus verlassen möchte. Daher wollte ich eine immer verfügbare und sichtbare Anzeige, die einen Überblick mit einem Blick ermöglicht. Genau dies soll hier realisiert werden: Mit Hilfe verschiedener LEDs sollen diese Dinge auf einem zentral platzierten Gerät angezeigt werden.

Die LEDs können in verschiedenen Farben leuchten, und in unterschiedlichen Frequenzen blinken, um so auch aus der Ferne schnell zu sehen was für ein Status angezeigt wird.

Hinweis: Ich habe versucht, die notwendigen Schritte zur Realisierung so genau wie möglich zu beschreiben. Leider ist es nicht möglich auf jedes Detail einzugehen. Grundvoraussetzung ist ein lauffähiges Smart Home System, welches in der Lage ist, via MQTT (hierüber habe ich im vorherigen Artikel schon kurz geschrieben) zu kommunizieren. Hier bietet sich FHEM  natürlich an, allerdings unterstützen viele andere Systeme dies auch- ich kann allerdings nur Unterstützung im Zusammenhang mit FHEM geben.

Weiterhin sind Grundkenntnisse von Mikrocontrollern, insbesondere der Umgang mit der Arduino IDE hilfreich. Ich habe allerdings versucht die wichtigsten Schritte zu dokumentieren. 

Falls jemand Informationen in diesem Tutorial fehlen, bitte in den Kommentaren fragen. Ich werde dann versuchen das Tutorial entsprechend zu erweitern.

Hardware

Die Hardware, die für dieses Gerät benötigt wird, ist wirklich minimal:

  •  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 1000uF Elektrolyt Kondensator und ein Widerstand von ca. 470 Ohm, Standard-Beschaltung für die WS2812B Stripes)
  • USB-Netzteil, Leistung ca. 1-2A, je nach Anzahl der LEDs
  • ein Bilderrahmen mit ausreichender Tiefe (in meinem Fall aus einem schwedischen Möbelhaus)
  • eine Holzplatte als Trägerrahmen für die LEDs und den Rest der Elektronik
  • zwei Holzleisten als Klemmbefestigung

Vor dem Aufbau habe ich mir eine kleine Skizze gemacht, die den ungefähren Aufbau zeigen soll. In der fertigen Version hat das Format von Querformat auf Hochformat gewechselt, aber ansonsten bin ich dem Entwurf relativ treu geblieben..

 

Der Schaltplan für die Elektronik ist wie schon angesprochen sehr übersichtlich. Außer dem Controller, dem LED Stripe sowie einem Kondensator und einem Widerstand wird nichts weiter benötigt. Der Elko wird möglichst nah am Mikrocontroller zwischen Masse und 5V (Polung beachten!) eingebaut.

Zur Ansteuerung des LED Stripe wird lediglich ein Datenpin des Mikrocontrollers benötigt. Dies ist das besondere an den WS2812B LED Stripes gegenüber herkömmlichen LED Stripes- jede LED lässt sich getrennt in Farbe und Helligkeit ansteuern. Nachteil ist natürlich, dass zwingend ein Mikrocontroller mit entsprechender Software benötigt wird. Ich habe zur Ansteuerung den GPIO 4 benutzt, auf dem wemos D1 ist dieser mit „D2“ beschriftet.

Damit der LED Stripe nicht fest mit dem Controller verbunden ist, habe ich als Steckverbindung den Stecker von einem alten PC-Lüfter genommen. Natürlich braucht man nicht unbedingt einen Stecker, man kann die Leitungen zum LED-Stripe auch direkt verbinden- aber mit Stecker kann mit die Elektronik auch leicht herausnehmen. Den Kondensator habe ich liegend montiert und ein Loch in die Platine gesägt, weil der Aufbau sonst zu hoch für den Bilderrahmen gewesen wäre.

Ein IKEA Bilderrahmen bildet die Basis zur Aufnahme der Komponenten. Die auf dem folgenden Bild noch vorhandene Rückwand des Bilderrahmens mit dem Aufsteller habe ich entfernt.

Vom LED-Stripe habe ich mir drei Stücke a 11 LEDs abgeschnitten (die meisten WS2812B Stripes lassen sich nach jeder LED trennen). Die drei Stücke habe ich dann auf einem zurecht gesägten Stück Holz (von der Größe her so, dass es genau in den Bilderrahmen passt) aufgeklebt. Vorher habe ich noch Löcher zur Kabel-Durchführung gebohrt. Die Elektronik wurde dann auf der Rückseite befestigt und die Kabel angeschlossen. Wichtig ist, dass die Stripes eine Richtung haben- auf dem Stripe ist IN und OUT immer beschriftet. Der ESP muss mit dem IN verbunden werden, und das OUT Ende des Stripes dann mit dem IN des nächsten Stripes.

Die Holzplatte wird durch zwei passend zurecht gesägte Holzleisten, welche dann seitlich am Rahmen verschraubt wurden, gehalten. Damit es optisch schöner aussieht, habe ich Holzplatte und Leisten noch schwarz lackiert (dazu habe ich natürlich noch einmal alles zerlegt).

Als Stromversorgung dient ein einfaches Netzteil mit micro-USB Stecker. Hierbei ist zu beachten, dass pro LED maximal 60mA benötigt werden. Dies gilt aber nur bei voller Helligkeit und wenn alle drei Farben gleichzeitig an sind (also weiß dargestellt wird). Ich betreibe die LEDs mit ca. 10% Helligkeit, dies reicht völlig aus. Man muss also nicht unbedingt mit dem maximalen Strom rechnen, da ja auch selten alle LEDs gleichzeitig an sind.

Was nun noch fehlte, war eine passende Beschriftung der LEDs. In der ersten Version habe ich die Namen der jeweiligen LEDs einfach auf ein weißes Stück Papier ausgedruckt. Dies war mir dann aber zu schlicht, und so habe ich noch ein farbiges Stück Tonkarton darüber gelegt, in das ich entsprechende Ausschnitte geschnitten habe.

Der Zusammenbau der Hardware ist hiermit abgeschlossen.

MQTT Broker

Für die Kommunikation mit FHEM setze ich wie schon geschrieben auf MQTT. Hierüber lassen sich Nachrichten zwischen verschiedenen Geräten einfach austauschen.  Da MQTT ein standardisiertes Protokoll ist, kann man auf eine breite Softwareunterstützung und definiertes Verhalten setzen. Der große Vorteil ist, dass wenn MQTT einmal eingerichtet ist, kann man es für eine Vielzahl weiterer Funktionen nutzen. Ich habe noch einige weitere Projekte realisiert, diese werde ich im Laufe der Zeit ebenfalls hier dokumentieren.

Um ein Grundverständnis für die Funktionsweise von MQTT zu bekommen, empfehle ich die entsprechenden Wiki-Artikel im FHEM-Wiki zu lesen. Bitte auch die am Ende des Artikel aufgeführten Links beachten. Es ist zum Verständnis dieses Tutorials enorm hilfreich, wenn man ein gutes Verständnis von MQTT hat.

MQTT nutzt zur Verteilung der Nachrichten eine Zentrale, einen sog. Broker. Ich habe mich hier für den Broker mosquitto entschieden. Da mein FHEM auf einem Raspberry Pi läuft, bietet es sich an den Broker auf demselben Gerät zu installieren. In der Paketverwaltung von Raspbian ist nicht die aktuellste Version enthalten, diese kann man aber folgendermaßen installieren:.

wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
sudo apt-key add mosquitto-repo.gpg.key
cd /etc/apt/sources.list.d/
 
#für raspian wheezy:
sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list
# oder für raspian jessie:
sudo wget http://repo.mosquitto.org/debian/mosquitto-jessie.list
sudo apt-get update
sudo apt-get install mosquitto

Anschließend kann man testen ob der Broker läuft:

sudo service mosquitto status

Starten und stoppen des Brokers geht so:

sudo service mosquitto stop
sudo service mosquitto start

Zuletzt noch benötigte Module nachinstallierten, dies dauert ein wenig:

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

MQTT Einrichtung in FHEM

Wie eingangs erwähnt, lässt sich das HomeStatusDisplay mit allen Systemen verwenden, die MQTT „sprechen“. Die entsprechenden Topics auf die das Display hört, müssen vom System versendet werden. Ich erläutere dies hier anhand eines Beispiels in FHEM.

FHEM bietet für die MQTT Anbindung drei Gerätetypen: MQTT, MQTT_BRIDGE und MQTT_DEVICE. Ich empfehle, zunächst die Dokumentation hierzu in der Commandref zu lesen.

Zunächst ist es notwendig, ein MQTT Device anzulegen. Dieses verbindet FHEM mit dem Broker und ist damit die Grundvoraussetzung für alles weitere. Wie in der Commandref zu lesen ist die Syntax zum anlegen die folgende:

define <name> MQTT <ip:port> [<username>] [<password>]

Da bei mir der Broker auf demselben Raspberry wie FHEM läuft und ich kein Passwort verwende, sieht die Einrichtung bei mir folgendermaßen aus (1883 ist der Standard Port für MQTT):

define mqtt MQTT 127.0.0.1:1883

Wenn die Verbindung zum  Broker steht, zeigt das angelegte MQTT Device den Status „opened“.

Für jedes Gerät, welches auf dem StatusDisplay visualisiert werden soll, muss nun ein MQTT_BRIDGE Device angelegt werden. Dieses ist dazu da, bei Statuswechsel des Geräts ein bestimmtes MQTT Topic zu verschicken.

Ich zeige die Konfiguration für einen 1-Kanal Homematic Unterputz Schaltaktor HM-LC-SW1-FM. Diesen Typ verwende ich für die meisten Deckenlampen bei mir im Haus. Der nachfolgend verwendete Schaltaktor hat den Namen Bad.Deckenlampe (dies ist der Name des Homematic Geräts, wie er in FHEM konfiguriert ist).

Das MQTT_BRIDGE Device legt man nun beispielsweise so an:

define mqtt_status_light_bath_ceiling MQTT_BRIDGE Bad.Deckenlampe

Nun hört die MQTT_BRIDGE mqtt_status_light_bath_ceiling auf Statusänderungen des Homematic-Geräts Bad.Deckenlampe. Es muss noch noch konfiguriert werden, welches Topic bei einer Statusänderung aktualisiert werden soll:

attr mqtt_status_light_bath_ceiling publishState fhem/status/light/bath_ceiling

Dieses Attribut sorgt dafür, dass bei Statusänderung der Status in das Topic fhem/status/light/bath_ceiling gepostet wird, also z.B. wird wenn das Licht angeschaltet wird die Nachricht „fhem/status/light/bath_ceiling on“ gepostet, bzw. beim Ausschalten entsprechend „fhem/status/light/bath_ceiling off„.

Wichtig und sinnvoll ist auch noch die Messages „retained“ zu schicken. Dadurch bekommt das StatusDisplay immer den aktuellen Status vom Broker zugestellt, auch wenn es zum Zeitpunkt der Statusänderung nicht online war:

attr mqtt_status_light_bath_ceiling retain 1

Ich empfehle, während ihr die Konfiguration vornehmt, immer die Commandref geöffnet zu haben und jeden Schritt nachzuvollziehen anstatt einfach die Befehle abzutippen. So bekommt ihr ein genaues Verständnis was ihr tut und könnt die weiteren Geräte ohne Probleme entsprechend konfigurieren.

Firmware

Als nächstes muss die Firmware auf den ESP8266 gespielt werden. Hierzu installiert man zunächst die Arduino IDE. Die Firmware kann von meinem GitHub-Repository geladen werden. Nach dem Entpacken öffnet man in der Arduino IDE die Hauptdatei (HomeStatusDisplay.ino) und kompiliert diese durch einen Klick auf den „Haken“ Button ganz links oben in der IDE, siehe nachfolgenden Screenshot.

Wenn die IDE frisch installiert wurde, wird es zu Fehlermeldungen wegen fehlenden Abhängigkeiten zu anderen Libraries kommen. Die folgenden Libraries werden benötigt und müssen daher installiert werden:

Adafruit_NeoPixel: https://github.com/adafruit/Adafruit_NeoPixel
PubSubClient: https://github.com/knolleary/pubsubclient
ArduinoJson: https://github.com/bblanchon/ArduinoJson

Alle Libraries können über den Library Manager der Arduino IDE installiert werden (Sketch->Include Library->Manage Libraries, dann im Suchfeld den Namen der Library eingeben).

Weiterhin muss das Package für die Unterstützung des ESP8266 in der Arduino IDE installiert werden. Dies geht über Tools->Board->Boards Manager.  Hier gibt man im Suchfeld „ESP8266“ und installiert das gefundene Package.

Nachdem der Code erfolgreich kompiliert wurde, wird der ESP8266 mit einem Micro-USB auf USB Kabel mit dem PC verbunden. Unter Tools müssen noch die korrekten Board-Einstellungen für den wemos D1 Mini gemacht werden:

Unter „Port“ müsst ihr den USB Port auswählen, an dem der Controller angeschlossen ist. In der Regel gibt es hier nur eine Auswahlmöglichkeit. Danach kann der Code mit dem Upload Button (zweiter Button von links, ganz oben in der IDE) auf den ESP8266 geladen werden.

Dies dauert eine Weile und wird am Ende von einer Erfolgsmeldung abgeschlossen. Falls eine Fehlermeldung auftaucht, einfach noch mal probieren- manchmal verhält sich der ESP8266 ein wenig eigenartig.

Inbetriebnahme

Die Firmware verhält sich beim ersten Booten so, dass ein WLAN Access Point aufgespannt wird. Dieser hat den Namen StatusDisplay und das Passwort statusdisplay. Mit dem PC oder Smartphone kann man diesen Access Point auswählen und sich damit verbinden. Danach ist unter der Adresse 192.168.4.1 die Konfigurationsseite des Geräts verfügbar.

Hier kann man nun die Basiskonfiguration vornehmen, wichtig ist zunächst WiFi SSID und Passwort. Sinvollerweise kann man auch schon LED-Anzahl und LED-Datenpin eingeben. Nach einem Klick auf Reboot sollte sich das Gerät mit dem WLAN verbinden (Hinweis: auch hier hat der ESP8266 ein seltsames Verhalten. Der erste Boot nach dem Flashen der Firmware via USB funktioniert meistens nicht; daher kann es sein dass kurz die Spannungsversorgung abgezogen und wieder angeschlossen werden muss, damit er wieder hochfährt).

Visualisiert wird das Hochfahren -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, dazu im Router nachsehen), und die restlichen Einstellungen machen. Auf der Statusseite sieht man eine Übersicht über den Zustand des Geräts:

Weiter geht es auf der „General“ Seite mit den restlichen 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. Das Topic muss natürlich zu den vorher angelegten MQTT_ BRIDGE Devices passen.
  • Es wird davon ausgegangen, dass im Topic 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/bath_ceiling, siehe ebenso oben die Konfiguration der MQTT_BRIDGE
  • 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.


Hier müssen Message, Type, Color und Behavior gewählt werden.

Zum Verständnis hier ein Beispiel, wie ein Statustopic aussehen soll: „fhem/status/window/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 dauerhaft leuchtenden 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:


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/window/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“.

Ausblick

Auf den ersten Blick sieht dieses Tutorial sehr kompliziert aus. Dies liegt aber vor allem daran, dass ich viele grundlegende Dinge ebenso versucht habe zu erläutern. Wer Erfahrung mit FHEM hat, für den erleichtert sich schon vieles. Wer auch schon die Arduino IDE kennt und benutzt hat, wird sich auch mit der Firmware sehr leicht tun- es bleibt in diesem Fall nur noch die Konfiguration von MQTT. Da dies prinzipiell ein sehr leicht zu verstehendes System ist, denke ich dass man mit Hilfe der Beispiele und der genannten Links gut ein Verständnis aufbauen kann.

Als letztes bleibt mir nur noch viel Spaß bei Aufbau und Inbetriebnahme eures eigenen HomeStatusDisplay zu wünschen. Die von mir gewählte Optik ist natürlich nur eine von vielen Möglichkeiten. Wer möchte kann mir gerne Fotos von seinem eigenen Display schicken, es würde mich sehr interessieren.

Im übrigen ist es auch problemlos möglich, mehrere HomeStatusDisplays gleichzeitig zu betreiben- durch den zentralen Broker bekommen alle Geräte die auf das Status Topic subscribed sind den Status automatisch zugestellt.

Wenn Probleme beim nachvollziehen und durchführen dieses Tutorial auftauchen, bitte in den Kommentaren fragen- ich werde wie gesagt versuchen, alle Fragen zu beantworten und bei Bedarf das Tutorial zu ergänzen. Solltet ihr Fehler in diesem Tutorial feststellen, könnt ihr mir diese ebenso gerne melden.

Nachtrag 05.06.2017: Der User stenumer aus dem we-mod-it.com Forum hat mir folgendes Foto seines Nachbaus geschickt:

Teilen:Share on FacebookShare on Google+Tweet about this on TwitterEmail this to someone

21 Antworten auf „HomeStatusDisplay – Smart Home Status immer im Blick“

  1. Hallo Bernd,

    ein ziemlich geniales Projekt hast du dir da aufgebaut. Da ich momenten mit Openhab und Hausautomatisierung experimentiere habe ich mir deine Software mal angeschaut.

    Leider bekomme ich diese nicht so richtig zum Laufen. Genauer gesagt funktioniert des Flashen des Wemos D1 Mini mit RGB-Shield sehr gut. Der StatusDisplay-AP erscheint auch wie von dir beschrieben. Eine Anpassung der Konfiguration habe ich durchgeführt.

    Der Reboot wird auch ausgeführt, nur danach erhalte ich folgende Aussagen im Serial Monitor:

    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: 32904
    Starting Wifi connection to
    Failed to connect WiFi.

    Starting access point.
    AccessPoint SSID is StatusDisplay
    IP: 192.168.4.1

    Er findet also wohl die config.json und formatiert den Speicher. Danach ist alles weg und er springt wieder in den unkonfigurierten Zustand.

    Bei genauerem Hinsehen ist mir aufgefallen, dass eine Speicherung der Konfiguration schon nicht richtig funktionierte.

    Starting access point.
    AccessPoint SSID is StatusDisplay
    IP: 192.168.4.1
    Page size: 1058
    Page size: 1058
    Page size: 2727
    Free RAM: 29472
    Page size: 2750
    Main config has changed, storing it.
    Writing config file /config.json
    File does not exist
    Failed to write file, formatting file system.
    Done.
    Free RAM: 28952
    Page size: 1058
    Page size: 2750
    Free RAM: 29472
    Page size: 2750
    Rebooting ESP.

    Hast du eine Idee, was da bei mir schiefläuft? Ich habe es mit der Version 0.4 getestet.

    Viele Grüße
    Tim

    1. Hi,
      das Problem scheint bei dir zu sein dass er es nicht schafft die Konfigurationsdateien ins Flash zu schreiben.

      Benutzt du einen Original wemos D1 mini oder einen Klon?

      Du sagst du hast schon einmal eine Konfiguration vorgenommen. Bitte mache das nochmal, und poste die Log-Ausgabe vom Booten bis zu der Stelle wo du in die Konfiguration was eingetragen hast und „Save“ gedrückt hast. Ich vermute schon hier klappt das Abspeichern nicht.
      Achja, wenn du das Log postest wird darin deine WIFI SSID und Passwort auftauchen. Die kannst du natürlich unkenntlich machen 😉

      /Edit: Ich sehe gerade, genau das hast du schon gemacht. Komisch ist allerdings, dass die Werte die du eingetragen hast gar nicht im Log auftauchen? Ich werde morgen mal nachsehen was es noch für Möglichkeiten gibt

  2. Als kleine Ergänzung mit dem aktuellen Master-Branch funktioniert es problemlos.

    Sehr cooles Projekt. Vielen Dank für die Veröffentlichung.

  3. Ah, alles klar.
    Ja das stimmt, die Version 0.4 hat hier noch einen Bug, den ich erst nach dem Release gefixt habe. War mir so nicht mehr bewußt. Ich schaue dass ich schnellstmöglich ein Release vom aktuellen Master mache, damit andere nicht in das gleiche Problem laufen.

    Freut mich jedenfalls dass es klappt!

  4. Hallo Bernd,
    vielen Dank für das ausführliche Tutorium und die geniale Firmware. Der Nachbau hat super geklappt und solange der LED-Rahmen online ist werden auch alle Meldungen angezeigt.
    Wenn dieser allerdings stromlos ist und wieder Online geht sind nach dem Booten (und kurzen Roten aufleuchten aller LEDs) alle LEDs aus obwohl beim Brooker Statusmeldungen hinterlegt sind (MQTT QoS 2) ich kann diese z.B. mit MQTT-Spy sehen.
    Erst wenn sich ein Status ändert oder erneuert wird leuchtet die entsprechende LED. Ist es nicht möglich, dass alle Statusmeldungen beim starten angefordert werden?
    Dann habe ich noch ein Problem mit der Last Will Message, beim starten wird diese nicht auf „On“ gesetzt.

    Gruß Andre

    1. Hi Andre,
      freut mich dass der Nachbau gut geklappt hat.
      Damit der letzte Status erneut übertragen wird wenn das Display online geht, ist es notwendig dass die Meldungen von den jeweiligen Geräten mit „retained“ Flag gepublished werden. Ist dies bei dir der Fall? Der QoS spielt da keine Rolle.
      Beim Last Will Topic habe ich gerade noch keine Idee warum das bei dir nicht klappt. Wird nie „on“ gepublished oder nicht immer?
      Grüße,
      Bernd

      1. Hallo Bernd,

        da muss ich mich wohl noch tiefer mit MQTT beschäftigen… QoS 2 bedeutet ja, dass die Nachricht mindestens 1x zugestellt wird ich dachte dann auch noch mal wenn der Client wieder Online ist.
        Habe jetzt überall noch den retain Flag gesetzt und jetzt funktioniert es wie erwartet, danke für deine Hilfe.
        Heute habe ich auch noch 3x den LTW „On“ getestet, habe dafür in Node-Red eine Texfeld angelegt welches das Topic anzeigt.
        2x wurde „On“ angezeigt 1x „Off“ obwohl der LED-Rahmen online war.
        Vielleicht solltest du den „On“ Status später verschicken oder periodisch wiederholen,

        Gruß Andre

  5. Hallo, ich wollte für mein Status Display 96leds verwenden. Ist das ohne Probleme möglich oder muss man am Code etwas anpassen? Strom-/Spannungsversorgung ist logisch, dass die ausreichend sein muss.

    1. Hi, sorry für die späte Antwort.
      Aufgrund des limitierten Speichers des ESP sind mit dem Konfigurationskonzept per Webseite derzeit maximal 35 LEDs möglich. Das zu erweitern würde größere Umbauarbeiten bedeuten.

  6. hi.
    wollte das Projekt nachbauen.
    Komme aber über das kompilieren nicht drüber weg!
    Hast du eine Idee was ich falsch mache?

    Danke
    Sascha
    —————————-
    Fehler:
    Arduino: 1.8.4 (Windows 7), Board: „Generic ESP8266 Module, 80 MHz, 80MHz, DIO, 115200, 512K (64K SPIFFS), ck, Disabled, None“

    C:\Program Files (x86)\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -hardware C:\Users\DSL\AppData\Local\Arduino15\packages -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -tools C:\Users\DSL\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\DSL\Documents\Arduino\libraries -fqbn=esp8266:esp8266:generic:CpuFrequency=80,FlashFreq=80,FlashMode=dio,UploadSpeed=115200,FlashSize=512K64,ResetMethod=ck,Debug=Disabled,DebugLevel=None____ -ide-version=10804 -build-path C:\Users\DSL\AppData\Local\Temp\arduino_build_104314 -warnings=none -build-cache C:\Users\DSL\AppData\Local\Temp\arduino_cache_281698 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.esptool.path=C:\Users\DSL\AppData\Local\Arduino15\packages\esp8266\tools\esptool\0.4.9 -prefs=runtime.tools.mkspiffs.path=C:\Users\DSL\AppData\Local\Arduino15\packages\esp8266\tools\mkspiffs\0.1.2 -prefs=runtime.tools.xtensa-lx106-elf-gcc.path=C:\Users\DSL\AppData\Local\Arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2 -verbose C:\TEMP_Adrino\HomeStatusDisplay-0.5-beta\HomeStatusDisplay-0.5-beta\HomeStatusDisplay\HomeStatusDisplay.ino
    C:\Program Files (x86)\Arduino\arduino-builder -compile -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -hardware C:\Users\DSL\AppData\Local\Arduino15\packages -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -tools C:\Users\DSL\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\DSL\Documents\Arduino\libraries -fqbn=esp8266:esp8266:generic:CpuFrequency=80,FlashFreq=80,FlashMode=dio,UploadSpeed=115200,FlashSize=512K64,ResetMethod=ck,Debug=Disabled,DebugLevel=None____ -ide-version=10804 -build-path C:\Users\DSL\AppData\Local\Temp\arduino_build_104314 -warnings=none -build-cache C:\Users\DSL\AppData\Local\Temp\arduino_cache_281698 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.esptool.path=C:\Users\DSL\AppData\Local\Arduino15\packages\esp8266\tools\esptool\0.4.9 -prefs=runtime.tools.mkspiffs.path=C:\Users\DSL\AppData\Local\Arduino15\packages\esp8266\tools\mkspiffs\0.1.2 -prefs=runtime.tools.xtensa-lx106-elf-gcc.path=C:\Users\DSL\AppData\Local\Arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2 -verbose C:\TEMP_Adrino\HomeStatusDisplay-0.5-beta\HomeStatusDisplay-0.5-beta\HomeStatusDisplay\HomeStatusDisplay.ino
    Using board ‚generic‘ from platform in folder: C:\Users\DSL\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0
    Using core ‚esp8266‘ from platform in folder: C:\Users\DSL\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0
    Detecting libraries used…
    „C:\Users\DSL\AppData\Local\Arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-g++“ -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ „-IC:\Users\DSL\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0/tools/sdk/include“ „-IC:\Users\DSL\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0/tools/sdk/lwip/include“ „-IC:\Users\DSL\AppData\Local\Temp\arduino_build_104314/core“ -c -w -Os -g -mlongcalls -mtext-section-literals -fno-exceptions -fno-rtti -falign-functions=4 -std=c++11 -ffunction-sections -fdata-sections -w -x c++ -E -CC -DF_CPU=80000000L -DLWIP_OPEN_SRC -DARDUINO=10804 -DARDUINO_ESP8266_ESP01 -DARDUINO_ARCH_ESP8266 -DARDUINO_BOARD=“ESP8266_ESP01″ -DESP8266 „-IC:\Users\DSL\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266“ „-IC:\Users\DSL\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\variants\generic“ „C:\Users\DSL\AppData\Local\Temp\arduino_build_104314\sketch\HomeStatusDisplay.ino.cpp“ -o „nul“
    „C:\Users\DSL\AppData\Local\Arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-g++“ -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ „-IC:\Users\DSL\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0/tools/sdk/include“ „-IC:\Users\DSL\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0/tools/sdk/lwip/include“ „-IC:\Users\DSL\AppData\Local\Temp\arduino_build_104314/core“ -c -w -Os -g -mlongcalls -mtext-section-literals -fno-exceptions -fno-rtti -falign-functions=4 -std=c++11 -ffunction-sections -fdata-sections -w -x c++ -E -CC -DF_CPU=80000000L -DLWIP_OPEN_SRC -DARDUINO=10804 -DARDUINO_ESP8266_ESP01 -DARDUINO_ARCH_ESP8266 -DARDUINO_BOARD=“ESP8266_ESP01″ -DESP8266 „-IC:\Users\DSL\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266“ „-IC:\Users\DSL\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\variants\generic“ „C:\Users\DSL\AppData\Local\Temp\arduino_build_104314\sketch\HomeStatusDisplay.ino.cpp“ -o „C:\Users\DSL\AppData\Local\Temp\arduino_build_104314\preproc\ctags_target_for_gcc_minus_e.cpp“
    C:\TEMP_Adrino\HomeStatusDisplay-0.5-beta\HomeStatusDisplay-0.5-beta\HomeStatusDisplay\HomeStatusDisplay.ino:1:31: fatal error: HomeStatusDisplay.h: No such file or directory

    #include „HomeStatusDisplay.h“

    ^

    compilation terminated.

    exit status 1
    Fehler beim Kompilieren für das Board Generic ESP8266 Module.

    1. Hi,
      das Problem steht ganz am Ende: HomeStatusDisplay.h: No such file or directory
      Hast du alle Dateien in dem Verzeichnis liegen, in dem sich die ino befindet?
      Am besten auf Github auf der Release-Seite (https://github.com/MTJoker/HomeStatusDisplay/releases) das neueste Release runter laden und alles in ein Verzeichnis entpacken. Dann die ino öffnen und kompilieren.
      Du kannst natürlich auch von der Hauptseite herunterladen (https://github.com/MTJoker/HomeStatusDisplay), dort bekommst du die neueste Entwicklungsversion – aber in jedem Fall brauchst du alle Dateien.

  7. Moin,

    ich finde das Projekt schick und will das gerne nachbauen. Flasche etc sind problemlos, ist auch ins WLan eingebunden. Aber ich bekomme keine MQTT Verbindung zustande (MQTT an sich läuft, steuere damit Sonoff Schalter mit Tasmota). Monitor liefert mir

    Starting WebServer.
    Free RAM: 34608
    Starting Wifi connection to Tedious_Home…
    WiFi connected with IP 192.168.192.83.
    Connecting to MQTT broker 192.168.192.60 with client id ESP8266Client-359a… failed, rc = -4
    DEBUG: Reconnect unsuccessful, m_numConnectRetriesDone = 1
    Connecting to MQTT broker 192.168.192.60 with client id ESP8266Client-1613… failed, rc = -4
    DEBUG: Reconnect unsuccessful, m_numConnectRetriesDone = 2
    Connecting to MQTT broker 192.168.192.60 with client id ESP8266Client-7110… failed, rc = -4
    DEBUG: Reconnect unsuccessful, m_numConnectRetriesDone = 3
    Failed to connect Mqtt.

    Hast Du einen Tip wo ich ansetzen könnte?

    1. Hi,
      der Rückgabewert -4 bedeutet „MQTT_CONNECTION_TIMEOUT“, d.h. der Mqtt Server hat nicht innerhalb der KeepAlive Zeit geantwortet. Stimmt die IP-Adresse sicher?

  8. Hallo Bernd,

    ich habe deinen „Bilderrahmen“ nachgebaut, vielen Dank erstmal für die tolle Idee und die Bereitstellung der Bauanleitung/Software. Da der Wemos ja etwas unterfordert ist hatte ich die Idee noch 3 bis 4 Taster auf dem Bilderrahmen zu platzieren die beim Drücken bestimmte Aktionen auslösen, natürlich per MQTT Message. Hättest du eine Idee wie ich das am besten in deine Firmware einbaue? Bin da leider nicht so der Fachmann drin 😉
    Danke schonmal und Grüße aus dem Ruhrpott!!!

    1. Hi Klaus,

      danke fürs Lob erstmal.
      Ich weiß nicht welche Kenntnisse du hast, aber prinzipiell ist das sehr einfach:
      – jeden Taster an einen freien Pin des Wemos anschließen
      – Pins als INPUT_PULLUP definieren
      – Pin-Zustand in der main loop abfragen (Entprellen nicht vergessen, gibts aber fertige Libs dazu wie z.b. „Bounce2“)
      – bei Wechsel auf LOW eine MQTT-Message absetzen, z.B. „statusdisplay/switch1/status“, z.B. mit der Funktion HSDMqtt::publish (siehe MSDMqtt.cpp); idealerweise noch vorher checken ob überhaupt eine Verbindung zum MQTT Server besteht

      Die Idee ist jedenfalls interessant, ich habe auch schon mal drüber nachgedacht aber im Moment keine Zeit für eine Implementierung. Wenn du da was funktionsfähiges hinbekommst nehme ich es gerne offiziell in die Firmware auf!

  9. Hallo Bernd,
    ich habe da noch ein Problem festgestellt. Bin mir aber nicht sicher ob es an deinem Code oder am NeoPixel Plugin liegt.
    Und zwar habe ich die Helligkeit auf 10% gesetzt und man kann sehr gut erkennen, dass regelmäßig (ca.1x pro Stunde) kurz alle LEDs mit voller Helligkeit aufblitzen.

    Gruß Andre

    1. Hallo Andre,
      Den Fehler konnte ich bei mir noch nie sehen. Sind es alle Leds die hell aufleuchten oder nur die, die sowieso schon an waren? Und in welcher Farbe leuchten sie auf, in der wie sie waren oder alle in der selben Farbe (und in welcher, wenn letzteres)?

      1. Hallo Bernd,
        leider kann ich deine Fragen nicht beantworten. Das Status Display hängt im Flur und man sieht es dann daran, dass es einen Art Lichtblitz dort gibt.
        Wenn du das Problem nicht hast, liegt es vielleicht an meinem LED-Streifen es ist ein WS2812B mit 144 LEDs pro Meter.

        Gruß Andre

        1. Hallo Andre,
          ok. Meine Vermutung ist, dass das Display komplett neu bootet und der „Lichtblitz“ daher kommt, dass beim Booten kurz alle LEDs an sind während der Verbindung mit dem WLAN. Schau doch mal auf die Webseite des Displays kurz nachdem dieser Lichtblitz passiert ist. Unter „Status“ steht eine Device uptime. Wenn das Gerät neu gebootet hat, geht diese wieder auf 0. Ist das vielleicht das Problem?

Schreibe einen Kommentar

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