Mit dem NodeMCU ESP8266 433MHz Funksteckdosen steuern

Im Bereich der Hausautomatisierung sind 433 MHz Funksteckdosen kaum wegzudenken. Ebenso der ESP8266 Microcontroller. Mit diesen beiden Komponenten zusammen lässt sich eine extrem einfache und kostengünstige Methode schaffen, eine ESP8266 433MHz Funksteckdosen-Steuerung zu bauen. Da die NodeMCU Boards noch einmal für weniger Geld als bspw. ein Raspberry Pi Zero zu haben und dazu Wifi-fähig sind, bieten sie das perfekte Werkzeug.

In diesem Tutorial bauen wir für wenige Euro eine per Smartphone und Web steuerbare Oberfläche, mit der wir unsere Steckdosen daheim schalten können.

Aus einer normalen 433 MHz Funksteckdose machen wir mittels dem ESP8266 eine WLAN-Steckdose bzw. Netzwerksteckdose und das für einen Bruchteil dessen, was jene Modelle einzeln kosten würden.

 

Zubehör

Einige haben vielleicht noch die Funksteckdosen aus der Raspberry Pi Schaltung zuhause. Diese lassen sich super einfach mit einem ESP8266 bedienen. Falls wir (noch) keine da haben, brauchen wir lediglich folgendes Zubehör, um die Steckdosen per 433 MHz Funk über eine Weboberfläche mit jedem internetfähigen Gerät fern zu steuern:

Im Endeffekt brauchen wir nur einen GPIO, weshalb es egal ist, welches ESP Board du nutzt. Falls du einen ESP-01 hast, solltest du dir die Verkabelung in diesem Tutorial ansehen, da dieser anders als das ESP-12 Development Board keinen Micro USB Port hat, womit wir ihn einfach per USB anschließen können.

Wer die Anwendung möglichst klein halten will, kann den ESP8266 als normale / nicht Development Board Version nehmen und per USB flashen.

 

Aufbau & Verkabelung der 433 MHz Funksteckdosen am NodeMCU

Beginnen wir mit den Funksteckdosen. Diese müssen einen einstellbaren Hauscode haben, welchen wir zunächst setzen. Dazu muss die Rückseite geöffnet werden und der Code eingestellt werden. Details dazu findest du in diesem Tutorial.

Der Code ist dabei in zwei Teile aufgeteilt: Zunächst der eigentliche Hauscode, sowie die Belegung innerhalb (bei mir A bis E). Achte darauf, dass nur ein Buchstabe aktiviert (oben) sein darf!

433MHz Funksteckdosen Hauscode

433MHz Funksteckdosen Hauscode (00011) + Buchstabe (D)

Ebenso sollte die Fernbedienung eingestellt werden. Jedoch wird hier nur der eigentliche Code, ohne Nummerierung (A-E) angegeben, da diese über die Knöpfe ausgewählt werden.

433MHz Funksteckdosen Fernbedienung

433MHz Funksteckdosen Fernbedienung

Du kannst die Steckdosen nun wieder zu schrauben und per Fernbedienung testen. Sie sollten problemlos angehen.

Die Verbindung des Sendemoduls ist recht einfach: VCC kommt an den 3.3V Pin, GND an GND und DATA an einen freien GPIO (bspw. D6 in meinem Beispiel):

ESP8266 433 MHz Funksteckdosen Steckplatine

 

Vorbereitung – ESP8266 Firmware mit 433 MHz Bibliothek laden

Wir brauchen ein Custom-Build, welches die rfswitch Bibliothek bereits enthält. Dazu rufen wir nodemcu-build.com auf und wählen zusätzlich zu den standardmäßig ausgewählten „rfswitch“ aus (ggf. noch weitere, falls wir ein anderes Projekt ebenfalls laufen lassen wollen):

Anschließend bekommst du eine Mail mit dem Build innerhalb von wenigen Minuten. Lade diesen herunter und übertrage die Firmware wie in diesem Tutorial beschrieben mit dem ESP8266 Flasher auf das NodeMCU Board.

 

433 MHz Codes der Funksteckdosen auslesen

Wir haben erneut zwei Möglichkeiten. Entweder wir kennen die Codes zum An- und Ausschalten bereits (z.B. aus dem Raspberry Pi Tutorial oder aufgrund der Belegung) oder wir müssen sie erst herausfinden.

Leider ist es mit der Programmiersprache Lua nicht möglich die Codes auszulesen, weshalb man dies über die Arduino IDE machen müsste. Welcher GPIO genutzt wird ist dabei egal.

Ein einfaches Beispiel (für ESP8266 sowie Arduino) findet sich in der rfswitch Bibliothek auf Github.

Meine Codes für Steckdose „A“ mit Hauscode 00011 sind bspw. folgende:

  • An: 5506385 (binär 10101000000010101010001)
  • Aus: 5506388 (binär 10101000000010101010100)

Für gewöhnlich haben die Codes 24Bits.

 

Einfache ESP8266 433MHz Funksteckdosen-Steuerung

Sobald die Codes ausgelesen wurden und wir diese für jede 433 MHz Funksteckdose gespeichert haben, können wir mit einer Zeile den RF Transmitter bedienen. Dafür ist ein solcher Aufruf nötig:

Die Parameter haben folgende Bedeutung:

  • protocol_id: Wert zwischen 1 und 6, normalerweise 1.
  • pulse_length: Pulslänge im Millisekunden, zwischen 100 und 650.
  • repeat: Anzahl an Wiederholungen (sollte nicht zu groß sein)
  • pin: I/O Pin (Pin 6 = GPIO12)
  • value: Dezimalzahl, die gesendet werden soll (vorher ausgelesen).
  • length: Bitlänge (3Byte = 24 Bit)

Mit folgendem Skript würde meine Steckdose sich also anschalten lassen:

 

ESP8266 Weboberfläche für 433 MHz Funksteckdosen

Nun möchten wir ja auch einfach per Smartphone, Tablet und PC die Funksteckdosen an- und ausschalten. Deshalb entwerfen wir nun noch eine entsprechende GUI, welche dann über die lokale IP Adresse des ESP8266 über einen Browser aufrufbar ist.

Öffne deinen ESPlorer und erstelle eine neue Datei (remotecontrol433mhz.lua). Diese bekommt folgenden Inhalt:

Zunächst müssen die WLAN Daten eingetragen werden. Ebenfalls musst du für jede zu steuernde Steckdose einen Eintrag bereit stellen. Dieser sollte neben dem Namen auch die ausgelesenen Codes für das An- und Ausschalten in dezimaler Schreibweise enthalten. Hast du mehrere Steckdosen, müssen die Einträge jeweils mit Komma getrennt werden (hinter dem letzten Eintrag kommt jedoch kein Komma!).

Hast du alles angepasst, kannst du die Datei bereits auf den NodeMCU übertragen und ausführen.

Zu guter letzt erstellen wir noch eine „init.lua“, die nichts weiter tut, als unser vorher erstelltes Skript aufzurufen. Dadurch ist gesichert, dass der ESP8266 Server auch nach einem Neustart noch ausgeführt und erreichbar ist:

Nach dem übertragen kannst du den ESP8266 neu starten und solltest gleich die IP Adresse im rechten Fenster des ESPlorer angezeigt bekommen. In meinem Fall ist dies 192.168.1.53.

Öffnest du nun in deinem Heimnetzwerk einen beliebigen Browser (Smartphone, Tablet, PC) und gibst diese IP als URL ein, erscheint ein solches Layout:

Drücken der entsprechenden Buttons sendet die eingestellten Codes und schaltet die Steckdosen, sofern sie sich im Umkreis befinden. Der Status (AN/AUS) könnte theoretisch auch in Dateien gespeichert werden und somit auch erhalten bleiben, sofern der ESP8266 neugestartet wird. Ansonsten ist er initial immer auf „Aus“. Dazu muss allerdings noch gesagt werden, dass ggf. Statusänderungen per Funkfernbedienung nicht erfasst werden, sondern nur jene über das ESP8266 Webinterface / GUI.

PS: Die Bootstrap Javascript und CSS Dateien werden aus dem Internet geladen. Diejenigen die ein komplett lokales System aufbauen möchten, müssten eben jene beiden Dateien lokal speichern und daher laden.

PPS: Sofern du die Funksteckdosen auch von außerhalb deines Netzwerks nutzen willst (wovon ich aber abrate, solange nicht entsprechende Sicherheitsmaßnahmen getroffen wurden), brauchst du einen dDNS Service wie NoIP oder dynDNS. Moderne Router wie die FRITZ!Box unterstützen diese Services.

12 Kommentare

  1. Klingt gut, obschon ich nur Pi Erfahrung habe und es mir zuerst schwer fiel, zu erkennen um was es ging:
    per WLAN und Browser 433 Mhz Steckdosen schalten

    Ich habe noch eine Dose über, mit der kann ich es versuchen, denn 3 x 433Mhz Funksender + Empfänger Sets hab ich auch noch, nur das arduino Teil fehlt. So komm ich wohl doch noch an arduino Erfahrung.

    Danke schon mal

    Antworten
    • Hallo Wolf,

      der NodeMCU ist kein Arduino.
      Es ist ein eigenes opensource WLAN Entwicklungsboard.

      Es ist Leistungsstärker und hat bereits WLAN integriert.

      Antworten
  2. Hi,
    danke für das super Tutorial! Habe es ausprobiert und nach kleineren Schwierigkeiten klappt es jetzt, wie es soll. Vielleicht spare ich dem ein oder anderen Zeit: Die Daten zur SSID und dem zugehörigen Passwort müssen im remotecontrol433mhz.lua script nur ganz oben eingetragen werden. Ich hatte sie zuerst auch noch weiter unten im script eingetragen. Falsch verstanden, viele Fehlermeldungen.
    Grüße aus Münster!

    Antworten
  3. Hallo Felix,

    lässt sich die Webseite auch mit einem Passwort sichern?
    Das wäre sicher für einige, auch für mich, sehr interessant.

    Antworten
  4. Hmm, zwei Fragen:

    1. Wie komme ich ohne Empfänger an die Codes für Brennenstuhlsteckdosen? Für andere Sprachen/Systeme scheint es ja einfach Libarys zu geben, in die man nur den Hauscode und den Steckdosenbuchstaben über gibt. Es muss also doch irgendwo Tabellen geben oder Umrechnungsanleitungen oder?

    2. Wie könnte man System erweitern, dass man die Steckdosen auch über Zeit steuern kann? Also eine Kombination aus beidem. Gerade jetzt, wo die Weihnachtszeit näher kommt, wäre das für die zahlreichen Licherterketten und Lichtbögen echte klasse, wenn man als Grundgerüst eine Zeitschaltung hätte und die dann bequem variieren kann.

    Antworten
    • 1. Kann gut sein, dass es da Tabellen gibt, aber mir sind bisher keine bekannt.
      2. Du meinst quasi über einen Cronjob? Beim Raspberry Pi ist das sehr einfach, beim NodeMCU müsstest du immer wieder warten und die Zeit abfragen – falls die Bedingung(en) erfüllt sind an bzw. ausschalten.

      Antworten
      • Ob man das über einen Cronjob löst oder anders ist ja eignetlich egal. Es reicht ja notfalls eine Schleife, in der kontrolliert wird, ob zu dieser Zeit die Steckdose an sein sollte oder nicht. Und die kontrolliert, ob die Steckdose schon dem gewünschten Zustand entspricht und bei Bedarf den Funkcode senden. Und sie muss kontrollieren, ob die Steckdose in dem Schaltzeitraum schon manuell geschaltet wurde, dann wird für diesen Zeitschaltraum die Automatik ignoriert.

        Ehrlich gesagt habe ich keine Ahnung, wie man das programmiert. Bücher zum Lernen von Lua habe ich nirgendwo gefunden. Gibts da nichts?

      • Ja im Prinzip stimmt das, bis auf, dass du den Status nicht abfragen kannst. Du kannst lediglich die ganze Zeit alle Codes „mithören“. Wurde ein manueller Code zum An/Ausschalten erkannt, setzt du den Status (inkl. Zeit etc).
        Bzgl. Lua gibt es schon einige Bücher, aber überwiegend im Englischen. Ansonsten hilft evtl noch die Lua Website.

  5. Hallo!
    Kann es sein, dass es eine Grenze bei 5 Steckdosen gibt? Wenn ich noch eine sechste mit dem script steuern möchte, gibt es eine Fehlermeldung („out of memory“). Reicht dafür der Arbeitsspeicher des ESP8266 nicht mehr aus? Gibt es da einen Trick, damit man noch mehr Steckdosen steuern kann?

    Antworten
  6. Hallo,
    ich würde gern die Steckdosen über ein http get/push (von openhab) ein und ausschalten, also ganz ohne WebGUI. Ist das auch möglich?
    Das lua script müsste dann ja kleiner werden. Im get könnte man dann auch die codes mit übergeben dann ist man flexibler wenn neue Steckdosen hinzukommen.

    Antworten

Hinterlasse einen Kommentar

Deine Email Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Blog abonnieren

Abonniere Raspberry Pi Tutorials, um kein Tutorial mehr zu verpassen!