ESP8266 Medienkoppler für ioBroker

Im folgenden Artikel zeige ich Dir, wie Du einen einfachen Medienkoppler für Tür- und Fensterkontakte oder andere Schalter und Taster für ioBroker aufbauen und programmieren kannst.

Über eine Anfrage eines Besuchers meiner Webseite bekam ich die Idee für ioBroker eine Art Medienkoppler für Tür- und Fensterkontakte oder sonstige Schalter und Taster zu entwickeln. In der Anfrage ging es um die Einbindung von ca. 30 Tür- und Fensterkontakten (Reed-Kontakte) in ioBroker. Alle Kontakte laufen zentral an einer Alarmanlage zusammen, und sollen hier auch an den Medienkoppler übergeben werden. In ioBroker können die einzelnen Status dann ausgewertet oder über Blockly auf Veränderungen reagiert werden. Im Artikel zeige ich Dir die Entwicklung und Umsetzung des Medienkopplers. Der Schwierigkeitsgrad des Projektes ist „mittel“, da hier doch einige Lötarbeiten durchgeführt werden müssen.

Inhaltsverzeichnis

Einleitung
Eingesetzte Produkte und Bauteile
Funktionsweise
Vorbereitungen in ioBroker
Aufbau der Schaltung
Programmierung des ESP8266 Mikrocontrollers
Inbetriebname
Fazit

Einleitung

Wie schon oben kurz erwähnt, sollen mit dem Medienkoppler ca. 30 Tür- und Fensterkontakte in ioBroker integriert werden. An den jeweiligen Türen oder Fenstern wurden dazu Reed-Kontakte verbaut, welche zentral an einem Ort zusammenlaufen. Reed-Kontakte können über einen ESP8266-Mikrocontroller relativ einfach abgefragt und somit auch z.B. über MQTT in ioBroker integriert werden. Im hier verlinkten Artikel habe ich bereits den Aufbau und die Programmierung dokumentiert. Die Problematik bei diesem Projekt war die Anzahl von ca. 30 oder mehr Reed-Kontakten in Verbindung mit dem ESP8266 Mikrocontroller. Um mit dem Mikrocontroller diese Anzahl von Reed-Kontakte verarbeiten zu können, setze ich hier sogenannte Port-Expander Mikrocontroller ein. Im hier gezeigten Projekt können wir damit mit 3 MCP23017 Port-Expandern bis zu 48 Tür- und Fensterkontakte integrieren.

Eingesetzte Produkte und Bauteile

Verwende Projekte für den Test- und Versuchsaufbau

Beispiel-Kontakt z.B. für Fenster, Türen oder Tore

Funktionsweise

Der Status (Offen / Geschlossen) der einzelnen Tür- und Fensterkontakte werden über Reed-Kontakte erfasst. Der beiden Kontakte des Reed-Kontakts werden bei einem geschlossenen Fenster über einen im Fenster integrierten Magneten geschlossen. Wenn die Tür oder das Fenster geöffnet wurde, wird der Kontakt unterbrochen. In unserem Projekt werden wir den Status über den Mikrocontroller abfragen und bei einer Veränderung per MQTT-Protokoll an ioBroker übermitteln. Das Projekt ist somit wirklich relativ einfach umzusetzen.

Vorbereitungen in ioBroker

Für die spätere Anbindung des Medienkopplers an ioBroker müssen wir in ioBroker den MQTT-Broker Adapter installieren und einrichten. Die Installation und Konfiguration habe ich bereits in einem anderen Artikel beschrieben, daher werde ich hier nicht weitere auf das Thema eingehen.

Aufbau der Schaltung

Im folgenden Schema siehst Du den Aufbau der Schaltung. Ich habe hier die drei MCP23017 Komponenten nebeneinander platziert. Um den Aufbau zu vereinfachen, habe ich die 16 Reed-Kontakte nur an dem ersten Port-Expander eingezeichnet. Diese können dann an den restlichen Port-Expandern genauso angeschlossen werden. Die Read-Kontakte ziehen im geschlossenen Zustand die Pins GPA0 bis GPA7 sowie GPB0 bis GPB7 auf LOW (GND). Wenn der Kontakt geöffnet ist, liegt durch den internen PullUp-Widerstand wieder HIGH an. Die MCP23017 Expander werden gemeinsam verbunden an den Pins D2 und D1 für den I2C-Bus angeschlossen. Zudem erhalten die MCP23017 Expander eine 3,3V und GND-Verbindung über den Wemos (ESP8266 Mikrcontroller). Der Reset-Pin wird grundsätzlich auf HIGH (3V) gezogen und über die Pins A0 bis A2 wird für jeden MC23017 eine eindeutige Hardware-Adresse generiert.

Den Prototyp habe ich dann wie folgt aufgebaut. Für die einzelnen Pins habe ich unten zwei Reihen von Kontakten aufgelötet, welche dann mit den Reed-Kontakten oder anderen Kontakt-Sensoren (z.B. Schalter oder Taster) verbunden werden können.

Programmierung des ESP8266 Mikrocontrollers

Für die Verwendung der Adafruit MCP23017 Bibliothek müssen wir diese zunächst über den Bibliotheksverwalter installieren.

Die Programmierung des ESP8266 Mikrocontrollers wurde mit der ArduinoIDE durchgeführt. Im Download findest Du den Sketch, welchen Du noch im folgenden Bereich anpassen musst.

ioBroker Medienkoppler Sketch (440 Downloads)

Solltest Du mehrere Medienkoppler einsetzen, muss die clientId für jeden Medienkoppler eindeutig definiert sein. Als ssid und password wählst Du Deine WIFI-Zugangsdaten. In der Variable mqtt_server trägst Du die IP-Adresse von ioBroker oder alternativ einen andere MQTT-Broker Adresse ein. Als Port habe ich hier den Standard-Port 1883 verwendet. Weitere Anpassungen sind im Sketch nicht erforderlich.

Im Sketch wird über die setup Funktion zunächst eine WIFI-Verbindung hergestellt. Nach dem Herstellen der WIFI-Verbindung werden dann die Port-Expander initialisiert. Dazu wird die Begin Funktion mit der jeweiligen Adresse aufgerufen (5,6 und 7). Im nächsten Schritt wird dann über die Funktion connectToMQTT eine Verbindung zum MQTT-Broker hergestellt. Abschließend werden nun die einzelnen Ports der 3 Port-Expander auf den PortMode INPUT gesetzt und zudem an jedem Port ein virtueller PullUp-Widerstand aktiviert.

In der Loop Funktion wird im ersten Schritt die Verbindung zum MQTT-Broker geprüft und gegeben falls ein Reconnect durchgeführt. Im nächsten Schritt werden dann die Ports auf Änderungen geprüft und dann per MQTT-Publish die Werte zum Broker übermittelt.

Nach der Anpassungen an der Konfiguration können wir den Sketch dann über folgende Konfiguration auf den WEMOS Flashen. Hier kann natürlich auch ein anderes ESP8266 Modul verwendet werden.

Inbetriebnahme

Nach dem Flashen und Starten des Medienkopplers werden nun nach wenigen Sekunden die folgenden Datenpunkte in den ioBroker MQTT Objekten zu finden sein. In den Ordnern m1, m2 und m3 findest Du die Kontakte p00 bis 015 (16 Kontakte je Modul). Wenn die Kontakte geöffnet sind, steht der Wert „false“ im Datenpunkt. Wird der Datenpunkt geschlossen, sprich werden die Kontakt-Pins verbunden, wird der Wert „true“ in den Datenpunkt geschrieben.

Fazit

Der Prototyp läuft bei mir jetzt seit mehreren Tagen problemlos. Der Kontaktstatus wird zuverlässig an ioBroker übertragen und quasi in Echtzeit dargestellt. Ich bin mit dem gesamten Projekt soweit zufrieden und hab es daher in Form eines Bauberichts veröffentlicht. Der einzige Nachteil sind die umfangreichen Löt- und Verkabelungsarbeiten für die einzelnen Pins der Port-Expander. Hier bin ich aber aktuell schon dabei eine kleine Platine zu entwerfen, mit dem dann nur noch Lötarbeiten durchgeführt werden müssen.

Ich hoffe Dir gefällt der Artikel. Über Kommentare, Anregungen oder Ideen freue ich mich wie immer 🙂

Matthias Korte

Hauptberuflich Software-Entwickler und seit einigen Jahren Smart-Home Fan. Angefangen hat alles mit einem RaspberryMatic und einer schaltbaren Steckdose. Mittlerweile habe ich einige Steckdosen, Sensoren, und Thermostate sowie ioBroker zur Visualisierung im Einsatz.

4 Gedanken zu „ESP8266 Medienkoppler für ioBroker

  • 11. April 2021 um 8:53
    Permalink

    Hallo Matthias,
    mein besonderer Dank für die Umsetzung dieses Projekt. Ich freue mich, dass ich dein Interesse dafür wecken konnte. Es bringt mir (und sicherlich auch vielen anderen Nutzern mit festverdrahteten Alarmanlagen) einen enormen Komfortgewinn. Durch die Einbindung einer Vielzahl simpler Reed-Kontakte in das Smart-Home-System wird die sichere Zustandskontrolle von Türen und Fenstern ein Kinderspiel. Das zur Verfügung stellen der Zustandsvariablen via MQTT in ioBroker (via WLAN) bietet sehr viele Möglichkeiten und spart zudem eine enorme Menge Geld, da keine neuen batteriebetriebenen Funksender an Türen und Fenstern installiert werden müssen. Vielen Dank.

    Ich freue mich auf weitere interessante Projekte hier in deinem Blog.

    Beste Grüße
    Andreas

    Antwort
    • 11. April 2021 um 11:00
      Permalink

      Moin Andreas,

      sehr gerne, vielen Dank für die Idee und Anregung von Dir. Ich freue mich zudem über Deine Rückmeldung 🙂

      LG Matthias

      Antwort
  • 11. April 2021 um 13:25
    Permalink

    Hi Matthias,

    Cooles Projekt und wirklich gut beschrieben. Bei einem Textstück bin ich aber ein wenig verwirrt, du schreibst „Der Reset-Pin wird grundsätzlich auf Masse gezogen“, auf dem Schaltplan darunter ist am betreffenden Pin aber überall Plus angeschlossen, was stimmt denn jetzt? Text oder Schaltplan?

    Viele Grüsse
    Patrick

    Antwort
    • 11. April 2021 um 13:43
      Permalink

      Moin Patrick,

      danke für den Hinweis, der Schaltplan ist korrekt, im Text ist ein Fehler. Der Reset-Pin muss auf HIGH (3V) gezogen werden.

      LG Matthias

      Antwort

Schreibe einen Kommentar

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