Make Magazin 1/2020
S. 56
Projekt
Aufmacherbild

Smarter Dimmer fürs DIY-IoT

Unser intelligenter 230V-Dimmer lässt sich dank MQTT-Kompatibilität mit überschaubarem Aufwand in ein eigenes Smart-Home-Konzept integrieren. Ein ESP8266 übernimmt nicht nur die LAN-Aufgaben, sondern auch eine raffinierte PWM-Erzeugung, die sogar den störungsarmen Phasenabschnitt-Betrieb beherrscht.

Es ist schwierig, den Überblick im zunehmend unübersehbaren Smart-Home-Angebot zu behalten; die Anbieter übertreffen sich mit Leistungsaussagen; beim zweiten Blick wird man eher enttäuscht, oft auf Grund von proprietären Protokollen und Gateways. Auch macht es nur bedingt Sinn, für jede einzelne Aufgabe eine individuelle App mit einer eigenen Bedienlogik zu installieren und sich von den Servern der Anbieter abhängig zu machen.

Diesem Trend entgegen wirken konfigurierbare Lösungen zur Gebäudeautomatisierung, wie zum Beispiel FHEM, Node-Red und ioBroker auf einem eigenen Server. Diese Baukästen bringen für viele etablierte Lösungen Bausteine zur Integration mit und bieten Raum zur Nutzung von Standards. Den optimal zu nutzen und dabei mit einem geringen Budget aus zu kommen, wollen wir im Folgendem aufzeigen. Wer es ganz einfach haben möchte, kommt bereits mit einer App auf seinem Smartphone aus, wie wir im Laufe des Artikels zeigen werden.

Ein Smart Home besteht aus mindestens drei Komponenten:

– Dem zu steuernden Gerät, beziehungsweise im Falle eines Thermostaten einem messenden und damit Daten lieferndem Gerät, zum Beispiel die Temperatur

– Einem Server in Form eines Raspberry Pi und MQTT-Broker als Nachrichten-Handler

– Einem Smartphone mit MQTT-App, um Nachrichten von den Geräten über den Broker zu empfangen beziehungsweise zu senden.

Richtig interessant wird es allerdings erst, wenn eine Komponente „Hausautomatisierung“ dazukommt, die in der Lage ist, auf Abhängigkeiten bestimmte Aktionen auszuführen. Das sind Systeme wie zum Beispiel NodeRed, FHEM oder ioBroker. Hier sind dann auch Gateways vorhanden, um etwa eine Kopplung mit Sprachassistenten wie Alexa herzustellen.

Zu einem Smart-Home-Konzept gehört neben App und Stell-/Messgliedern (Dimmer, Rollladenmotor, Thermostate) auch immer ein Server als Protokoll-Manager. Wir haben uns für das MQTT-Protokoll entschieden.

Um eigene Komponenten zu entwickeln, bedarf es einiger Vorauswahlen, wie zum Beispiel Übertragungsstandard (433MHz, 834MHz, 2,4GHz usw.), dem darauf verwendeten Protokoll und des zu implementierenden Gateways/Servers. Wir haben unter Berücksichtigung der Sicherheit, der Latenz, der Nachbausicherheit und der Kosten wie folgt entschieden:

– Übertragung via WLAN TCP/IP. Dieser Standard ist in fast allen Haushalten bereits jetzt anzutreffen und erreicht in der Regel jede Ecke der Wohnung beziehungsweise des Hauses. Sollte es doch Bereiche ohne Abdeckung geben, schafft ein Repeater Abhilfe.

– Aufsetzend auf TCP/IP das Protokoll MQTT. MQTT ist zunehmend weit verbreitet, enthält optional Security-Features und hat konfigurierbare End-to-End-Zustellungsoptionen.

– Die dezentrale Intelligenz soll natürlich leicht programmierbar sein, einen erträglichen Stromverbrauch haben, preiswert sein und WLAN bereits an Board haben. In Frage kommen ESP8266-Module wie das Modell ESP-12E.

– Der zu verwendende Server soll natürlich TCP/IP sowie MQTT unterstützen und für eine optionale IoT-Zentrale geeignet sein. Unsere Lösung – Sie ahnen es – heißt Raspberry Pi.

Ferner erheben wir den Anspruch, dass die Smart-Home-Komponenten neben der Remote-Fähigkeit auch offline bedienbar bleiben sollen. Somit ist sichergestellt, dass auch ohne Server eine Basis-Bedienung möglich ist.

Dimmer mal anders

Unser erster Baustein, den wir im Folgenden näher vorstellen möchten, ist ein universeller Dimmer für den Einbau in übliche Schalterdosen, umschaltbar für Phasenanschnitt (für induktive Lasten, wie z. B. traditionelle Trafos) oder Phasenabschnitt (elektronische Trafos, LED-Leuchtmittel) mit einer Leistung von bis zu 300 Watt. Mit einem kapazitiven Touch-Sensor lässt sich der Dimmer unter einer Blindplatte, wie es sie für fast alle Schalterserien von Markenherstellern (Busch-Jaeger, Jung, Gira) gibt, dezent verstecken.

Die prinzipielle Steuerung des Dimmers ist im Blockschaltbild dargestellt. Um eine Phasenabschnitt-Steuerung (Bild 2) zu ermöglichen, kam die Verwendung eines sonst üblichen Triacs nicht in Betracht – damit wäre nur eine Phasenanschnitt-Steuerung möglich. Wir haben uns daher für die Verwendung eines Brückengleichrichters entschieden, dessen Wechselstromseite mit dem zu steuernden Verbraucher in Reihe geschaltet wird. Solange sein Gleichstromkreis (Plus und Minus) offen ist, passiert nichts. Bei einem Kurzschluss von Plus und Minus fließt der volle Strom durch den Verbraucher. Wir verwenden nun einen Leitungs-MOSFET als Schalter, um diesen Kurzschluss herbeizuführen. Natürlich ist es hierbei wichtig, den MOSFET synchron zur Netzspannung ein- und auszuschalten; nur so ist durch Pulsweitenmodulation (PWM) ein flackerfreier Betrieb der Leuchten möglich.

Damit sich der MOSFET nicht aufheizt, sind steile Flanken bei der Ansteuerung wichtig, denn ein nur teilweise leitender Transistor würde die an ihm abfallende Leistung in Wärme umwandeln. Außerdem ist zu beachten, dass auch ein voll durchgesteuerter MOSFET einen kleinen Restwiderstand besitzt. Im Fall des von uns verwendeten IRF740 beträgt dieser laut Datenblatt ca. 0,5 Ohm. Bei einer Leistung von maximal 300 Watt fließen ca. 1,3 Ampere, womit 0,85 Watt in Wärme umgesetzt werden. Dazu kommt die Verlustleistung aus dem „Schalterbetrieb“, da die Flanken in der Praxis auf Grund kapazitiver Einflüsse keine ideale Steilheit haben.

Im Blockschaltbild erkennt man den MOSFET-Schalter, die Stromversorgung, die galvanische Trennung durch zwei Optokoppler und auf der rechten Seite den ESP8266 als steuerndes Element.

Wir haben die Schaltung übrigens so ausgelegt, dass der MOSFET möglichst schnell abgeschaltet wird, weil beim (bei ohmschen und kapazitiven Lasten zu bevorzugenden) Phasenabschnittsbetrieb hier die höchstmögliche Spannung anliegt. Bei zu langsamem Anschalten würde hier die meiste Verlustleistung „verbraten“.

Im Takt bleiben

Für die galvanische Trennung der PWM- und Sync-Signale zwischen dem 230V-Bereich und der Mikroprozessorsteuerung sorgen zwei Optokoppler (im Schaltbild U1 und U2). Kondensator C1 dient als verlustarmer „kapazitiver Vorwiderstand“. Aus den 50Hz-Impulsen an D1 wird zum einen über D2 die mit ZD1 stabilisierte Gate-Steuerspannung gewonnen, zum anderen über D3 die Synchronisationsimpulse für den ESP8266.

Die Stromversorgung des ESP12-Moduls übernimmt dagegen ein kleiner AC/DC-Wandler mit 3,3V Ausgangsspannung. Der ESP samt seiner Programmierschnittstelle ist somit nicht mit dem Lichtnetz verbunden, und er darf für die Programmierung mit einem PC oder Notebook verbunden werden. Allerdings sind die vorhandenen „Kriechstrecken“ zwischen Netz- und Niederspannungsseite mit 2mm wegen des gedrängten Aufbaus auf der Platine für einen schutzisolierten, nicht geerdeten Betrieb zu knapp bemessen. Der Anschluss des Programmierkabels darf deshalb nur auf dem Labortisch (möglichst unter Verwendung eines Trenntrafos) erfolgen; im regulären Betrieb darf kein Teil der Schaltung, auch nicht die Niederspannungsseite, berührt werden können.

Um den Dimmer in einer Schalterdose verbauen zu können, haben wir eine runde Platine mit etwa 52 mm Durchmesser entworfen. Um den Platz optimal zu nutzen, wird sie beidseitig bestückt: Die bedrahteten Bauteile auf der einen, die SMD-Bauteile auf der anderen (Löt-)Seite. Keine Angst vor letzteren: Keines der Bauteile weist ein unhandlich kleines Gehäuse auf, die Handlötung ist für jeden Lötkundigen kein Problem. Bestücken Sie zunächst die SMD-Bauteile, dann die bedrahteten.

Nahsteuerung

Soll der Dimmer mit einem Taster betrieben werden, ist dieser einfach an den PL3, Pin 1 und Pin 2 anzuschließen. Ein kapazitiver Sensor wie beispielsweise der von uns verwendete Typ TTP223 benötigt zusätzlich noch den Pin3 zur Spannungsversorgung mit 3,3 Volt. Den TTP223 gibt es auch fertig auf einem Breakout-Board aufgelötet, verschiedene eBay-Angebote liegen im zweistelligen Cent-Bereich.

Bestückung der Platine von der Ober- (links) und Unterseite (rechts). Beginnen Sie mit den SMD-Bauteilen auf der Rückseite; die vollständige Stückliste finden Sie unter dem Link im Info-Kasten.

Der Touch-Sensor kalibriert sich beim Einschalten selbst, eine Erhöhung der Empfindlichkeit durch Vergrößern der (rückseitigen) Touch-Fläche mit Alufolie oder blanken FR4-Platinen ist möglich. Hier ist Ausprobieren angesagt; eine elektrische Verbindung von Folie zum Sensor ist nicht nötig, die kapazitive Kopplung reicht. In unseren Tests funktionierte der Sensor selbst durch 5mm starkes Plexiglas hindurch. Wir haben den Sensor deshalb ohne Modifikation mit doppelseitigem Klebeband hinter eine Blindabdeckung der Firma Gira geklebt. Zur besseren Orientierung kann man auf der Sichtseite einen Aufkleber anbringen, auch eine schwach leuchtende LED ist hilfreich.

Software

Unter der im Info-Kasten angegebenen Internetadresse ist neben dem Schaltplan und dem Platinenlayout auch die Software hinterlegt. Die Software kann mit der kostenfreien Arduino-IDE und der obligatorischen ESP8266-Erweiterung übersetzt und via USB-Adapter aufgespielt werden; bitte den USB-Adapter unbedingt auf 3,3 Volt einstellen. Wer das noch nie gemacht hat, sollte sich zunächst die unter dem Link im Info-Kasten verfügbaren Beiträge zu Gemüte führen.

Im Setup-Bereich wird bei erstmaligem Starten oder bei veränderter WLAN Konfiguration ein eigenständiger Access Point (AP) gestartet. Der Name lautet „Auto-connect_Apxxxx“, wobei xxxx für die letzten vier Stellen der MAC-Adresse des verwendeten ESP8266-Moduls steht. Nach Anmeldung an diesen Access Point mit zum Beispiel einem Smartphone kann unter der Adresse 192.178.4.1 und dem Passwort „qwertzui“ der gewünschte eigentliche SSID-Name des WLANs, das Passwort des WLANs, die IP-Adresse und der Port des MQTT-Servers sowie der gewünschte MQTT-Name eingegeben werden. Die Werte werden im EEPROM des Prozessors dauerhaft gespeichert.

Die beschriebene Funktionalität wurde mit der Bibliothek Wifimanager erreicht. Vor dem Kompilieren ist diese daher unter der im Artikel-Link angegebenen Github-Adresse herunterzuladen und zu installieren; eine Anleitung finden Sie dort ebenfalls. Auch die pubsub-Bibliothek für die MQTT-Funktionalität ist auf diese Weise zu installieren.

In der main-loop ist neben der MQTT-Funktionalität besonders die zentrale Funktion „sync_und_dim“ von Bedeutung. Da das Sync-Signal nur von den positiven Halbwellen des Optokoppler erzeugt wird und dieser auch wegen einer Hysterese etwas verzögert durchschaltet, muss hier die Verzögerung berechnet und das Signal für die negative Halbwelle erzeugt werden. Auf dieser Basis wird dann das benötigte PWM-Signal generiert. Die Länge liegt zwischen 10 Millisekunden = Volle Helligkeit und bis zu 0,5 Millisekunden = kleinste noch sichtbare Helligkeit je Halbwelle.

Schaltplan des IoT-Dimmers: Die Bauteile der Prinzipschaltung erkennt man ohne weiteres wieder.

Um nicht durch Aktivitäten des WLANs ein Flackern zu erhalten, wird dessen Bearbeitung gezielt mit der yield()-Funktion freigegeben – und zwar dann, wenn der Prozessor sonst nichts zu tun hat. yield() verhindert zudem, dass das WLAN durch einen fehlerhaften Sketch blockiert wird.

Erstkonfiguration

Um Phasenan- oder -abschnitt einzustellen, die Phasenverschiebung des Sync-Signals feinzutunen und die gewünschte minimale Helligkeit anzupassen, sind einmalig über MQTT die gewünschten Werte einzustellen. Da nicht alle Leser über einen Trenntrafo und ein Oszilloskop verfügen dürften, empfehlen wir nachfolgende Vorgehensweise zum Abgleich des Sync-Signals:

– Dimmer mit einer klassischen Glühfadenlampe, Klarsicht, 60 Watt in Betrieb nehmen

– Geringe Helligkeit einstellen

– Den Synchronisationsversatz von default 3200 Mikrosekunden in Hunderter-Schritten reduzieren beziehungsweise erhöhen. Ziel hierbei ist, das schon schwache Glimmen der Lampe weiter zu reduzieren.

– Ab einem bestimmten Wert wird das Glimmen der Lampe wieder heller, dann ist bereits die optimale Einstellung überschritten und der Wert muss in die andere Richtung angepasst werden.

Programmausschnitt der ESP8266-Firmware: Die Routine sync_und_dim() erledigt den Phasenan- beziehungsweise -abschnitt mit einstellbarem Versatz („Totzeiten“).
Ohne Abgleich (links) wird der Strom nicht im Nulldurchgang der Netzwechselspannung ein- beziehungsweise ausgeschaltet, es entstehen Störungen. Das Bild rechts zeigt den optimalen Abgleich bei Phasenanschnitt.

Für alle Leser mit Trenntrafo und Oszilloskop (bei Messungen an der Netzspannung Spannungsteiler oder Hochspannungs-Tastkopf verwenden!) ist bei Phasenanschnitt das Abschalten genau auf den Nulldurchgang zu legen, bei Phasenabschnitt entsprechend das Einschalten beim Nulldurchgang (siehe Oszillogramm).

So sollte unsere Platine nach der Bestückung auf der Bauteileseite aussehen. Der Kühlkörper für Q1 ist ein kurzes Stück Aluprofil.
Zur leichteren Montage in Schalterdosen ist die Platine mit einem abtrennbaren Rand versehen.
Der mit doppelseitigem Klebeband befestigte Touch-Sensor wird über ein dreipoliges Kabel mit PL3 verbunden. Hier ist noch unser Dimmer-Prototyp mit anderem Layout abgebildet.

Ein kurzes Drücken des Tasters/Sensors schaltet den Dimmer mit voller Helligkeit ein, ein nochmaliges schaltet ihn wieder aus. Drückt man nun den Taster/Sensor länger als 400 Millisekunden, wird das angeschlossene Leuchtmittel gedimmt. Ein nochmaliges längeres Drücken kehrt die Richtung um. Soll die Helligkeit ferngesteuert über MQTT eingestellt werden, muss man den gewünschten Wert in Prozent „publishen“.

Tabelle
Tabelle: MQTT-Nachrichten

Das Protokoll MQTT wurde unter anderem im Make-IoT-Sonderheft 2016 ausführlich vorgestellt. Dort wurde auch die Software MQTT-fx beschrieben, ebenso die Bedienung mit der App MQTT Dash. cm