Do-It-Yourself IoT Modul für die Dunstabzugshaube

Dieser Artikel zeigt wie man die Dunstabzugshaube Gutmann Sombra in die Hausautomation OpenHAB integrieren kann. Dazu wird ein Modul auf Basis des Microcontrollers Espressif ESP8266 konzipiert und aufgebaut.

Motivation

Die Idee für diese Ansteuerung entstand, da bei der Dunstabzugshaube das Frontpanel mit den Tasten baulich getrennt von der eigentlichen Haubenelektronik vorliegt. Beide sind durch ein 8poliges Kabel mit RJ45-Steckern verbunden. Es sollte also möglich sein, sich in diese Verbindung einzuklinken um die gleichen Befehle absenden zu können, wie das Frontpanel.

Um das Vorhaben umzusetzen, ist es notwendig die folgenden Fragen zu klären:

  • Wie kommunizieren Frontpanel und Haubenelektronik miteinander?
  • Wie kann man die Funktion des Frontpanels mit einem Microcontroller nachbilden?
  • Welche Bauteile sind dafür erforderlich?
  • Wie lässt sich das Ganze in die Haube integrieren?
  • Über welches Protokoll steuert man den Microcontroller an?
  • Wie bindet man das ganze in OpenHAB ein?

Wie kommunizieren Frontpanel und Haubenelektronik miteinander?

Hierfür musste das Frontpanel ausgebaut werden. Es ist auf den Fotos gut zu erkennen, dass auf der Platine keine aktive Elektronik untergebracht ist. Es sind lediglich 7 Taster sowie die zugehörige LEDs vorhanden, die über Leiterbahnen alle auf die RJ-45 Buchse geführt sind.

Wenn man die zughörige Schaltung zeichnet, wird klar, dass die Schalter und LEDs über eine Matrix abgefragt bzw. angesteuert werden:

Sowohl Taster als auch LEDs hängen an vier Leitungen (J1-J4), die von der Haubenelektronik nacheinander angesteuert werden. Ein Tastendruck sorgt dann dafür, dass das Eingangssignal auf eine der Ausgangsleitungen (J5-J6) ausgegeben werden. Eine Messung mit dem Oszilloskop bestätigt diese Vermutung und bringt weitere Details ans Licht: die Leitungen werden mit einer Frequenz von 1000Hz angesteuert, ein Zyklus über alle vier Leitungen dauert 4ms. Dabei kommt ein Logikpegel von 5V zum Einsatz, die Leitungen werden nacheinander auf 5V (HIGH) gesetzt, während die anderen Leitungen bei 0V (LOW) liegen. Ein Tastendruck führt nun dazu, dass immer wenn die entsprechende Eingangsleitung HIGH ist, der entsprechende Ausgang auch HIGH wird. Die Haubenelektronik kann aus dem Timing sowie der entsprechenden Ausgangsleitung erkennen, welche Taste gedrückt wurde. Die LEDs werden nach dem gleichen Prinzip angesteuert. Soll eine LED brennen, wird der entsprechene Ausgang (J7-J8) auf LOW gesetzt, wenn der korrekte Eingang grade HIGH ist. Es entsteht eine Potentialdifferenz, die dafür sorgt dass die LED leuchtet. Tatsächlich leuchtet sie somit nicht dauerhaft, sondern lediglich 250 mal in der Sekunde für jeweils 1ms.

Eine Herausforderung hier ist das korrekte Messen, da keine Referenzmasse über das 8polige Kabel bereitgestellt werden. Für das Frontpanel allein ist dies auch nicht notwendig, für eine korrekte Messung und eine aktive Steuerung per Microcontroller schon. Der Versuch das Gehäuse als Bezugsmasse zu verwenden scheitert. Glücklicherweise sind an der Haubenelektronik noch eine Kontakte herausgeführt, die offenbar für den Servicetechniker oder den Anschluss weiterer Elektronik vorgesehen sind (z.B. Fensterkontakt). Hier kann eine geeignete Masse abgegriffen werden (Markierung 3 auf dem folgenden Bild):

Wie kann man die Funktion des Frontpanels mit einem Microcontroller nachbilden?

Um einen Tastendruck nachzubilden muss durch den Microcontroller immer dann wenn der entsprechende Eingang (J1-J4) von der Haubenelektronik auf HIGH gesetzt wird, der passende Ausgang (J5-J6) auf HIGH gesetzt werden. In allen anderen Fällen darf der Ausgang nicht beeinflusst werden. Um den Zustand der LEDs in Erfahrung zu bringen muss dagegen der entsprechende Ausgang (J7-J8) gemessen werden. Ist dieser HIGH, brennt die LED nicht, da keine Potentialdifferenz vorliegt. Ist der Ausgang dagegen LOW, brennt die LED.

Mit diesen Informationen kann eine erste prototypische Schaltung per Breadboard aufgebaut werden.

Als Microcontroller kommt der ESP8266 in der Variante 12E zum Einsatz. Dieser ist zum einen sehr preisgünstig erhältlich, zum anderen ist er mit 80MHz Taktfrequenz und 4MB Speicher mehr als ausreichend leistungsfähig und ist WiFi-Fähig. Die Bauvariante 12E bietet sich an, da diese 16 GPIO-Ports des Microcontrollers nutzbar macht.
Außerdem wird ein Pegelwandler benötigt, da die Haubenelektronik mit 5V Logikpegel arbeitet, der ESP8266 jedoch mit 3.3V. Das IC 74HC 4050 ist für diese Aufgabe geeignet. Um den Pegel auf den Eingangsleitungen korrekt erkennen zu können ist außerdem ein externer Pull-Down-Widerstand notwendig (der ESP8266 besitzt keine internen Pull-Down-Widerstände). Hier kam zuerst ein 10kΩ Widerstand zum Einsatz. Durch Messungen zeigte sich aber, dass dieser erst bei 2.5kΩ für ein sauberes Signal sorgt.
Es ergibt sich folgendes Schaltbild:

Anmerkung zur Entwicklungsumgebung

Für den ESP8266 gibt es mittlerweile eine Integration in die Arduino IDE. Die Verwendung ist damit fast genauso einfach, wie mit den original Arduino-Controllern. Nach einmaliger Programmierung über die serielle Schnittstelle kann man sogar ArduinoOTA verwenden und weitere Updates der Firmware “Over-the-Air” per WLAN durchführen.

Welche Bauteile sind dafür erforderlich?

Folgende Bauteile sind zum Einsatz gekommen:

Komponente Bezeichnung Preis
Microcontroller Espressif ESP8266 12E 1,68€ [1]
DC-Converter DC-DC-Step-Down Converter 5V -> 3.3V 1,00€ [1]
Level-Shifter IC 74HC 4050 0,32€ [2]
Kabel Altes Netzwerkkabel ohne Schirmung 0,00€
Gehäuse Kleingehäuse 3,00€ [2]
Kleinteile Lochrasterplatine, Drähte, Lötzinn, … 3,00€ [2]
Summe ~8,00€

Bezugsquellen: [1] Ebay, [2] Reichelt

Wie lässt sich das Ganze in die Haube integrieren?

Um das ganze Standalone in der Abzugshaube zu betreiben ist eine eigene Stromversorgung notwendig. Glücklicherweise bietet die Haube neben einem geeigneten Masse-Anschluss (3) auch eine Versorgung mit ca. 4,8 Volt (4) an, die mit ca. 500mA belastet werden kann (mittels Belastungswiderstand experimentell bestimmt):

Es ist somit ein Step-Down-Wandler auf 3,3 Volt erforderlich um die Schaltung hierüber mit Strom zu versorgen. Ein relativ großer Elektrolytkondensator stützt außerdem die Versorgungsspannung, da der ESP8266 gerne mal kurzfristig hohe Stromaufnahmen aufweist.

Es gibt sich damit folgendes Schaltbild:

Damit kann die Schaltung final auf Lochrasterplatine aufgebaut werden. Das ganze lässt sich in einem kleinen Gehäuse per Magnet neben der eigentlichen Haubenelektronik im Abluftkanal platzieren und verschwindet damit elegant aus der Sicht. In der letzten Abbildung (Sicht von unten in den Abluftkanal) ist das Modul im Gehäuse (1), der Abgriff der Stromversorgung und Masse (2), die Netzwerkkupplung um sich in das vorhandene Steuerkabel einzuklinken (3) sowie der eigentlich Anschluss an die Haubenelektronik (4) zu sehen.

Die Stromversorgung wird mit einem modifizierten (verkürzten) ISA-Bus-Slot abgegriffen:

Über welches Protokoll steuert man den Microcontroller an?

Um den Zustand der Haube in das lokale Netz zu exponieren, sowie Schaltbefehle entgegen zunehmen, bietet sich MQTT als IoT-Protokoll an. MQTT wird zudem durch die Bibliothek PubSubClient direkt in der Arduino-IDE unterstützt. Die Zustände der Haube können beispielsweise über folgende MQTT-Topics dargestellt werden:

  • home/kitchen/hood/ventilation/state
    • Wert: 0, 1, 2, 3, 4 - entsprechend der ersten vier Tasten des Frontpanels)
  • home/kitchen/hood/timer/state
    • Wert: ON, OFF - entsprechend der fünften Taste des Frontpanels
  • home/kitchen/hood/light/state
    • Wert: ON, OFF - entsprechend der sechsten Taste des Frontpanels
  • home/kitchen/hood/maintenance/state
    • Wert: ON, OFF - entsprechend der siebsten Taste des Frontpanels

Über entsprechende Set-Topics kann ein Schaltvorgang ausgelöst werden:

  • home/kitchen/hood/light/set
  • home/kitchen/hood/timer/set
  • home/kitchen/hood/ventilation/set
  • home/kitchen/hood/maintenance/set

Wie bindet man das ganze in OpenHAB ein?

OpenHAB bietet mit dem MQTT Binding die Möglichkeit, Items an MQTT-Topics zu binden. Damit lässt sich die Steuerung sehr einfach in die vorhandene OpenHAB-Konfiguration integrieren.

Der entsprechende Abschnitt der Items-Konfiguration kann beispielsweise so aussehen:

1
2
3
4
Switch Kueche_Haube_Licht "Haubenlicht" <light> {mqtt="<[alarmpi:home/kitchen/hood/light/state:state:REGEX((.*))], >[alarmpi:home/kitchen/hood/light/set:command:*:REGEX((.*))" } 
Switch Kueche_Haube_Timer "Nachlaufautomatik" <fan> {mqtt="<[alarmpi:home/kitchen/hood/timer/state:state:REGEX((.*))], >[alarmpi:home/kitchen/hood/timer/set:command:*:REGEX((.*))" }
Number Kueche_Haube_Ventilation "Lüftung [%s]" <fan> {mqtt="<[alarmpi:home/kitchen/hood/ventilation/state:state:REGEX((.*))], >[alarmpi:home/kitchen/hood/ventilation/set:command:*:REGEX((.*))" }
Switch Kueche_Haube_Reinigung "Filterreinigung" <fan> {mqtt="<[alarmpi:home/kitchen/hood/maintenance/state:state:REGEX((.*))], >[alarmpi:home/kitchen/hood/maintenance/set:command:*:REGEX((.*))"}