Full Power

Projekt
Irgendwann hatte ich mir mal zwei NodeMCU Development-Boards bestellt.
Diese basieren auf dem esp8266 – bringen also gleich alles für Wlan mit.
Leider verschwanden die erstmal in der Bastelkiste, bis ich auf folgende Idee kam:
Ziel
Es muss doch möglich sein, 230V mit µ-Prozessoren zu schalten.
Spoiler: Natürlich geht das!
Recherche
☞︎ Am gefahrlosesten und flexibelsten sind Funksteckdosen.
Dann informieren, wie man diese ansteuert:
☞︎ Es gibt generische 433-MHz Sender und Empfänger. Und es gibt Libraries dazu.
Alles klar! - Auf die Teileliste kommt also:
  • Brennenstuhl RCS 1000N Funksteckdosen.
    empfangen auf 433-MHz und haben DIP-Schalter für die Adressen.
  • Die NodeMCU natürlich.
  • FS1000A 433-MHz Transmitter.
  • Eine RGB-Led, paar normale Leds, Widerstände, Kabel...
Werkzeuge
Die Entdeckungsreise geht weiter..
Es gibt einen Arduino-Support für den esp8266!
Für das Projekt ist daraus folgendes relevant:
  • Der esp8266 bucht sich in mein Wlan ein, und bekommt per DHCP eine IP-Adresse.
  • Stellt einerseits eine API bereit, um die Steckdosen und die RGB-Led anzusteuern, oder zur abfrage des Status.
    Und liefert eine statische Webseite aus - Das Javascript darin spricht dann mit der API.
  • Somit ist der esp8266 unter z.B. http://device.local erreichbar.
Ich probiere damit auch einmal PlatformIO aus.
☞︎ viel angenehmer als die Arduino-IDE.
Umsetzung
Der Quellcode ist modular aufgebaut, Funktionalität wird in Klassen gebündelt.
Am Ende entstehen Module für:
  • Logging auf der Seriellen Schnittstelle
    und ein paar Funktionen um mit Strings zu arbeiten.
  • Eine Kommandozeile, auch auf der Seriellen Schnittstelle
    Nachfolgende Module registrieren dort Kommandos, um z.B. die Konfiguration zu bearbeiten oder um mit dem Wlan (neu) zu verbinden.
  • Speichern in und laden einer Konfigurationsdatei
    Auf dem eingebauten Flash im esp8266, per SPIFFS.
  • Das Netzwerk
    esp8266 als Wlan Client & mDNS Responder.
  • Die RGB-Led
    Konvertiert Farbwerte in das entsprechende PWM-Signal, und kann sanft zwischen den Farben wechseln.
  • Ansteuern des 433-MHz Transmitters
    Und somit der Funksteckdosen.
  • Die HTTP-Verbindungen
    • Eine API zum schalten von Licht und Strom, und zur Abfrage des Status.
      Ist also mit allen anderen Modulen verdrahtet, und schickt Antworten im JSON-Format.
    • Eine Webseite.
      Darin ein bisschen Javascript, dass direkt mit der API kommuniziert.
      Ein simples, aber sehr effektives Präprozessor-Makro erlaubt das Einlesen von HTML-Templates.
      Die String::replace() Funktion ersetzt die entsprechenden Platzhalter.
Versionen
Dies ist wohl mein umfangreichstes C++ Projekt bisher, und somit lerne ich beim entwickeln auch ständig was neues..
So kommt es, dass ich nach der ersten fertigen Version sofort damit unzufrieden war..
"Das alles geht noch eleganter.. Bestimmt!"
Somit habe ich mich daran gemacht, alles noch mal neu zu schreiben.
Die neue Version bringt die Kommandozeile und die Konfigurationsdatei mit.
Löst also die Konfiguration mittels Header-File ab, es muss jetzt nicht mehr nach jeder Änderung neu kompiliert werden..
Weiterhin wurden die Webseite und die eigentlichen Funktionen durch die API enkoppelt.
Dies beschleunigt das Schalten beim Aufruf mit z.B. curl
API
Die neue Version nutzt keine URL-Parameter mehr, sondern besetzt ganze Pfade nach diesem Schema:
/{modul}/{aktion}/{daten}
Um also den Strom einer Steckdose an und aus zu schalten reichen folgende Aufrufe:
curl http://device.local/power/full/0110100100
curl http://device.local/power/null/0110100100
Die RGB-LED kann entweder zu einer Farbe hin wechseln, oder in dieser blinken:
curl http://device.local/light/fade/0xfff800
curl http://device.local/light/flash/0x008fff
Links
Repository
full_power.git
☞︎ Schaltplan
☞︎ master_control nutzt dieses Projet hier & kümmert sich um Abhänigkeiten
Erst die USB-Festplatte aushängen, dann den Strom dafür aus..
Noch offen
Die Hardware in ein Gehäuse stecken.
Das Ganze an einem Ort mit Stromversorgung und Empfang aufhängen.
Bilder
Das Development-Board
Ist drei mal so groß wie der eigentliche µ-Chip :)
Es handelt sich um eine NodeMCU v1.0 / V2 von Amica mit einem ESP-12E.
NodeMCU Development-Board
Der Aufbau am Breadboard.
  • Die roten LEDs sind Status-Indikatoren zum Debuggen.
    Traffic auf RX bzw. TX oder Signal am Transmitter.
  • GND: Weiß
  • 3.3V: Rot
  • Daten für den Transmitter: Orange
  • Stromversorgung für die Status LED am Transmitter: Blau
  • Das fliegende orange Kabel oben ist meine Behelfsantenne, bis ich alles in ein Gehäuse verpacke.
Breadboard aufbau
Webseite der ersten Version.
Funkioniert zwar, hat jedoch ein paar Nachteile:
  • zu kleine Knöpfe, man trifft am Telefon oftmals den falschen..
  • Das color-input Element wird von Safari nicht unterstützt..
  • Die Schaltvorgänge werden über URL-Parameter auf der Homepage geregelt.
    Somit wird bei jedem Aufruf die Webseite neu zusammengesetzt, was auf der kleinen CPU recht lange dauern kann..
erste Version der Webseite
Webseite der aktuellen Version.
  • Mehr Platz zwischen den Knöpfen.
  • Mehr Kontrast, und Rahmen um die Eingabe-Elemente.
  • Die Farbe für die LED lässt sich mit den drei Reglern unten zusammenmischen.
  • Mehr Info im Footer :)
Im Hintergrund läuft ein bisschen Javascript, dass
  • die Eingaben an die API weiterreicht,
  • Farben mischt,
  • und periodisch die Status Informationen erneuert.
zweite Version der Webseite
My coffee machine is full power!
Erstellt
21.07.2016 - 11:22:03
Editiert
17.12.2016 - 17:12:37
Tags
C++
Home Automation
Projekt