ESP8266/WorldDominationSwitch

Aus C3MAWiki
Zur Navigation springenZur Suche springen

WorldDominationSwitch

Projekt-Idee

Unsere Erfahrungen mit dem ESP8266 haben die Idee aufkommen lassen, einen autarken WLAN-Schalter zu bauen. Durch den günstigen Preis und die bereits vorhandene Raumautomatisierung auf Basis von OpenHAB und MQTT erscheint der ESP8266 als eine gute Lösung, um einen Schalter zu bauen, der bei Betätigung per WLAN eine Aktion auslöst.

Projektteilnehmer

Bilder

Funktionsweise

Die Umsetzung ist "chaotisch": Die Basistechnologien sind der ESP8266, MQTT und die NodeMCU-FIrmware . ESP8266 benötigt 2,8V bis 3,3V Strom und lässt sich damit ideal an entweder zwei Migon-Alkaline-Batterien oder an einer 3V CR2-Lithiumzelle betreiben. Der ESP8266 ist ausserdem so kompakt, dass er zusammen mit einer Lithiumzelle in einem Aufputz-Tastergehäuse verschwindet. Über die Nodemcu-FIrmware lässt sich der ESP8266 in einen DeepSleep-Mode versetzen und benögit nach unseren Messungen dann nur noch ca. 30 Mikroampere Strom. Damit ist der Ruhestrom so gering, dass auch die Lithium-Batterie eine ausreichend lange Betriebszeit bereitstellen sollte. Um die zur Verfügung stehende Strommenge möglichst optimal zu nutzen, arbeitet der ESP8266 nun in etwa folgendes ab, nachdem er über den Schalter resettet worden ist:

  • Oh, was jetzt ? Leben!
  • Ah ein WLAN! Ich probiere mal 10 Sekunden, da reinzu gehen
    • Ich bin im WLAN, Yeah! Was für einen Wert hat den der MQTT-Topic für das Licht ? an oder aus?
    • Okay, schreibe per MQTT das Gegenteil
  • Gute nacht! ich geh wieder schlafen

Der gesamte Vorgang benötigt etwa 2-3 Sekunden. Währen dieser Zeit benötigt der ESP8266 zwischen 100 und 250 mA und geht dann wieder schlafen.


Hardware

Die komplette Hardware besteht eigentlich aus dem Taster im Aufputzgehäuse und dem ESP8266-Modul. Ausserdem benötigt man einen 10kOhm Wiederstand und ein wenig Litze. Dann wird folgende Verbindung hergestellt:

  • Batterie-Minus <-> ESP8266 GND <-> Taster-Eingang1
  • Batterie-Plus <-> ESP8266 VCC <-> ESP8266 GPIO0 <-> ESP8266 CH_PD
  • Batterie-Plus <-10kOhm-> ESP8266 RST
  • Taster-Eingang2 -> ESP8266 RST

Im Regelbetrieb liegt also der Reset-PIN über 10kOhm Pullup gegen VCC und wird durch den Taster zum Resetten auf GND (=Batterie-Minus) gezogen

Normalerweise hat das ESP8266 auf dem von uns verwendeten Modul ESP-01 eine rote Power-LED. Diese LED haben wir von der Platine gekratzt,damt konnten wir die Stromaufnahme im Deepsleep-Modus mehr als halbieren und benötigen eben noch etwa 30Mikro-Ampere

MKII Powersaver Edition

Nachdem sich gezeigt hat, dass der Schalter leider doch relativ häufig den Akku leer hat, trotz der obig genannten Optimierungen wurde eine zweite Runde über die Hardware gedreht.

Der Spannungswandler der für den ESP benutzt wird benötigt ~10mA im Leerlauf um die Spannung zu stabilisieren, daraus ergibt sich, dass der Schalter nach 1-2 Wochen auch bei Nichtbenutzung leer ist.

Das neue Konzept benutzt kein DeepSleep mehr, sondern schaltet den ESP komplett aus, wenn dieser nicht benutzt wird, der Taster ist vom ESP getrennt und startet nur noch einen Timer. Hierzu wird ausgenutzt, dass die orginale Firmware bei einem Kaltstart sich genauso verhält, wie bei einem Aufwachen aus dem DeepSleep (sprich das Licht invertiert) und nicht länger zum Kaltstart braucht.

Mithilfe von einem Mosfet, einem Elko und einem Widerstand wurde ein Timer gebaut, welcher den Spannungswandler und somit auch den ESP stromlos schaltet, ohne Interaktion gibt es keinen messbaren Stromverbrauch mehr.

Wenn der Taster gedrückt wird, läd dieser einen 220uF Kondensater auf die Akku Spannung, und ein Mosfet schaltet durch, der Elko wird über einen 47kOhm Widerstand entladen und somit nach ca. 5-7Sekunden hört der Mosfet auf zu leiten. Diese Zeit reicht problemlos, dass der ESP seine normale Tatigkeit versehen kann und sich danach wie zuvor schlafen legt, und dann nie wieder aufwacht, weil die Versorgungspannung weggeschaltet wird.

Zur Vereinfachung der Verkabelung ist der ESP in den unteren Teil gewandert, im oberen Modul befindet sich nur noch der Taster.

Zusätzlich wurde an der Seite des Gehäuses eine LED angebracht, welche anzeigt, wenn der Schalter am Arbeiten ist. Hierrüber kann unter anderen schneller festgestellt werden, ob der Schalter versucht zu schalten, oder der Akku leer ist. In diesem Fall ist ein Laden per Powerbank vorgesehen.

Die Bedienung funktioniert weiterhin wie zuvor, es muss allerdings vor einem neuen Schaltvorgang 2-3Sekunden zusätzlich gewartet werden, bis die Aktivitätsled ausgeht, da ansonsten der ESP nicht neustartet. Da jedoch ein schnelles Ein und ausschalten von dem Werkstattlicht nicht als valider Usecase angenommen wird, ist diese Limitation gegenüber den vorherigen Stand akzeptabel

MKIII der 01 muss sterben Edition

Da keiner Lust hatte den esp01 nochmal zu flashen wurde der durch einen esp8266-12 ersetzt. Die firmeware wurde hierbei durch esphome ersetzt, neu flashen über wifi geht, solange der schalter auf an gehalten wird während des flashens


esphome:
  name: werkstatt_schalter

esp8266:
  board: esp12e

# Enable logging
logger:

# Enable Home Assistant API
api:
  password: ""

ota:
  password: ""

wifi:
  ssid: "C3MA"
  password: "tosetme"
  fast_connect: true
  manual_ip:
    static_ip: 10.23.42.22
    gateway: 10.23.42.1
    subnet: 255.255.254.0

captive_portal:
    
mqtt:
  broker: 10.23.42.10
  birth_message:
    topic: tele/werkstatt_lichtschalter/toggle
    payload: toggle
  will_message:
    topic: tele/werkstatt_lichtschalter/toggle
    payload: offline

Bedienung

Der Schalter benutzt die statische IP 10.23.42.22

Der erste WorldDominationSwitch schaltet das Licht in unserer Werkstatt ein- und aus. Dazu liest er den derzeitigen Lichtstatus über das MQTT-Topc /room/light/5/state ein und schaltet die Lichter über die MQTT-Topics /room/light/5/command und /room/light/6 command um.

Wenn das MQTT-Topic /room/light/debug auf "enabled" steht, dann legt sich der Schalter nicht automatisch schlafen. Über "nc 10.23.42.22 2323" kann man sich dann auf das LUA-CLI verbinden.

Bei dem derzeitigen Code legt sich der Schalter nach 10 MInuten Laufzeit aber auf jeden Fall auch dann schlafen, um die Batterie nicht auszulutschen.

Achtung: Zugriff auf CLI nur durch qualifiziertes C3MA-Fachpersonal !!

Firmware-Hinweis

Aufgrund eines Speicherengpasses mussten wir die NodeMCU-Firmware ohne Flieskomma-Unterstützung kompilieren. Hierzu muss man die Firmware selbst kompilieren, nachdem man in die /app/lua/luaconf.h bei Zeilennummer 572 die Anweisung

  • #define LUA_NUMBER_INTEGRAL

einfügt.


Quellcode