Im nachfolgenden Artikel beschreibe ich das Steuern gängiger Funksteckdosen (wie z.B. Elro 440) mit dem günstigen Wlan-SoC ESP8266 (bzw. dem darauf basierenden NodeMCU-Board). Dabei erfolgt die Umsetzung wie bei der Lösung mit dem Raspberry Pi inklusive Webinterface, das auch über HTTP-Requests, wie z.B. zur Sprachsteuerung über AIVC oder dem Steuern über die NetIO-App benötigt, steuern lässt. Damit lassen sich für einen Gesamtpreis von unter 10€ vorhandene Funksteckdosen vernetzen.
1. Benötigte Hardware
- ESP8266 (hier: ESP-201) oder NodeMCU-Entwicklungsboard (hier: V1.0): ca. 5€
- 433 MHz-Sender + Jumper-Kabel: ca. 1€
- Netzteil (für NodeMCU-Board ein Micro-USB-Netzteil, für ESP-201 3V Netzteil) + USB-Kabel: ca. 4€
→ insgesamt ca. 10€
Für den ESP-201 benötigt ihr zusätzlich noch einen USB-to-UART-Adapter (3 Volt-Variante!), welchen es für 1-2€ in China gibt (dafür ist der ESP-201 etwas günstiger als das NodeMCU-Entwicklungsboard). Habt ihr kein 3V Netzteil, so könnt ihr behelfsweise auch die Stromversorgung des FTDI-Adapters verwenden, welche ihr mit einem Elko (hier verwendet: 220µF) stützt. Das ist aber nur eine Behelfslösung.
Hinweis: Kauft euch am Besten keinen Billig-FTDI-Clone aus China – damit habe ich bereits schlechte Erfahrungen gemacht, was die Qualität betrifft. Gerade am Anfang kann es frustrierend sein, wenn die Kommunikation einfach nicht stabil laufen will, egal, wie man die Stromversorgung und Verkabelung macht. Wenn es möglichst günstig sein soll, greift besser zu Adaptern mit CP2102- oder CH340-Chip.
(+ geeignete Funksteckdosen; hier verwendet: Elro AB440S [analog zum Raspberry Pi-Tutorial])
2. Die Verkabelung
Beginnen möchte ich dabei mit dem Anschluss des 433 MHz-Transmitters an das NodeMCU-Board, da dieser sehr simpel über 3 Jumper-Kabel erfolgt.
Der Anschluss ist nachfolgendem Schaltplan zu entnehmen:
In tabellarischer Form:
NodeMCU | 433 MHz Transmitter |
GND | GND |
3V3 | VCC |
D4 | Data |
Beim ESP-201 sieht der Anschluss etwas komplizierter aus, was daran liegt, dass hier noch der FTDI-Adapter sowie ein Netzteil (bzw. hier ein Stützkondensator) zum Einsatz kommt:
In tabellarischer Form:
ESP-201 | FTDI-Adapter | 433 MHz Transmitter |
RX | TX | |
TX | RX | |
3.3V | VCC | |
GND | GND | |
IO15 | GND | |
IO0 | GND | |
CHIP_EN | VCC | |
3.3V | VCC | |
GND | GND | |
IO2 | Data |
Hinweis (danke an Tobi!): Wenn ihr das Programm auf den ESP-201 übertragen habt und ihr den ESP-201 nach Trennung vom Strom damit betreiben wollt, so müsst ihr die Verbindung zwischen IO0 und GND trennen, da der ESP8266 sonst in den Flash-Modus startet, statt das bereits darauf vorhandene Programm zu starten. Eventuell hilft es bei Problemen auch, den IO0 mit 3.3V zu Verbinden, um den Flash-Modus zu unterdrücken.
[Update 07.12.2015] Wollt ihr den ESP-201 mit einer externen Stromversorgung betreiben (empfohlen!), könnt ihr den Schaltungsaufbau nachfolgendem Bild entnehmen:Es sollte auch das kleine Modell ESP-01 reichen, um die Funksteckdosensteuerung umzusetzen. Der Aufbau der entsprechenden Schaltung (mit externer Stromversorgung) ist nachfolgendem Bild zu entnehmen:
2.1 Exkurs: Hintergrundinfos zu Pinbelegung
Vorweg: Dieser Teil ist nicht relevant, wenn ihr das Tutorial nur nachbauen wollt. Ihr könnt diesen Teil also überspringen. Für den, den es interessiert, habe ich hier ein PinOut vom NodeMCU-Board:
Wie man sehen kann, entspricht der D4-Pin dem GPIO2. Daher der unterschied an dieser Stelle bei der Verkabelung im Vergleich zum ESP-201.
Das entsprechende PinOut des ESP-201 findet ihr auf dieser Seite.
3. Einstellen der Funksteckdosen
Da dieser Schritt komplett gleich, wie bei der Umsetzung mit Raspberry Pi abläuft, habe ich die entsprechende Passage übernommen:
Aber zuerst solltet ihr noch den Hauscode bei euren Dosen ändern, nicht, dass euer Nachbar zufällig auch diese Steckdosen hat und ihr euch diese gegenseitig an- und ausschaltet. Dazu öffnet ihr einfach mit einem Kreuz-Schraubendreher die Dosen hinten und legt die Dip-Schalter mit einem Code eurer Wahl um. Also z.B. hoch, hoch, unten, hoch, unten.
Diese Kombination solltet ihr bei allen Steckdosen eingeben und dann auch bei dem Handsender. Mit diesem könnt ihr dann auch überprüfen, ob alles soweit schon funktioniert.
4. Einrichten der Entwicklungsumgebung
Bei diesem Projekt verwende ich als IDE die Arduino IDE, welche es einfach ermöglicht, auch ESP8266-Modelle und NodeMCU-Boards mit Software zu versorgen.
Dazu muss die IDE in der Version 1.6.5 (oder neuer) auf eurem Rechner installiert sein. Öffnet die IDE und öffnet den Punkt „Voreinstellungen“ unter „Datei“ (unter Umständen variiert die Benennung ja nach IDE-Version und Betriebssystem etwas).
Im sich nun öffnenden Fenster „Voreinstellungen“ gebt ihr unten im Textfeld neben „Additional Boards Manager URLs“ die folgende URL ein:
1 | http://arduino.esp8266.com/stable/package_esp8266com_index.json |
Klickt auf „OK“ und startet die IDE neu. Geht dann auf „Werkzeuge“ → „Platine“ → „Boards Manager…“ und tippt in das Suchfeld „esp“ ein. Klickt bei „esp8266“ auf „Install“.
Die benötigten Komponenten werden nun heruntergeladen und installiert.
Nun solltet ihr unter „Werkzeuge“ → „Platine“ unten ein paar neue Einträge für ESP8266-Modelle haben. Wählt für den ESP-201 „Generic ESP8266 Module“ aus und für ein NodeMCU-Board den entsprechenden Eintrag eures Modells (aktuell verkaufte Boards sind in der Regel 1.0er Versionen).
Die restlichen Einstellungen („CPU Frequency“ und „Upload Speed“) könnt ihr vom Screenshot übernehmen. Als Port wählt ihr den seriellen Anschluss aus, unter dem sich der ESP8266 am PC angemeldet hat. Startet dazu am einfachsten einfach die IDE, ohne das jeweilige Board eingesteckt zu haben, schaut dann, welche Ports zur Verfügung stehen und schließt das Board anschließend an den PC an. Es sollte nun ein neuer Port zur Auswahl stehen, welchen ihr anklickt.
Hinweis für Mac-Nutzer (bzw. für Nutzer anderer Betriebssysteme, bei denen der Port nach Anschluss des NodeMCU-Boards nicht angezeigt wird): Unter OS X „El Capitan“ erhielt ich nach Anschluss des NodeMCU-Boards mit CP2102-Chip keinen neuen Port angezeigt. Es stellte sich heraus, dass der entsprechende Treiber des Herstellers noch installiert werden musste. Dieser ist für alle verfügbaren Betriebssysteme auf dieser Seite zu bekommen. Habt ihr bei eurem NodeMCU-Board also auch das Problem, dass kein Port angezeigt wird, müsst ihr vermutlich noch den Treiber installieren. Da dieser (je nach Betriebssystem) nur wenige Kilobyte bis Megabyte groß ist, geht das allerdings recht zügig.
Damit habt ihr eure Arduino IDE erfolgreich erweitert, um ESP8266-Module programmieren zu können. Was jetzt noch fehlt für die Steckdosensteuerung ist eine Bibliothek namens „RCSwitch“. Diese ist hier erhältlich. Ladet sie euch herunter und installiert sie für die Verwendung mit der Arduino IDE. Wie das geht ist detailliert auf dieser Arduino-Seite beschrieben.
5. Der Sketch (= Programm)
Den benötigten Sketch habe ich so gestaltet, dass er einfach an das eigene Setup an Funksteckdosen angepasst werden kann. Lediglich euer Hauscode der Funksteckdosen, die jeweiligen Gerätecodes und Namen für die einzelnen Steckdosen müssen eingetragen werden. Daraus wird dann dynamisch ein kleines Webinterface erstellt.
Das Interface ist sehr einfach gehalten, ich habe aber den .css-Teil in eine eigene Variable gepackt, sodass ihr es einfach anpassen könnt. Auch die HTML-Komponenten lassen sich natürlich noch an eure Wünsche anpassen.
Mein Sketch sieht folgendermaßen aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include <ESP8266mDNS.h> #include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); MDNSResponder mdns; // Replace with your network credentials const char* ssid = "your_ssid"; const char* password = "your_password"; ESP8266WebServer server(80); // replace with your values char* housecode = "11010"; char* socketcodes[] = {"00010", "00001", "10000", "01000"}; char* socketnames[] = {"Lampe", "Lautsprecher", "Fernseher", "Ventilator"}; int numofsockets = sizeof(socketcodes)/4; // you can write your own css and html code (head) here String css = "body {background-color:#ffffff; color: #000000; font-family: 'Century Gothic', CenturyGothic, AppleGothic, sans-serif;}h1 {font-size: 2em;}"; String head1 = "<!DOCTYPE html> <html> <head> <title>Steckdosensteuerung</title> <style>"; String head2 = "</style></head><body><center>"; String header = head1 + css + head2; String body = ""; String website(String h, String b){ String complete = h+b; return complete; } void setup(void){ // if you want to modify body part of html start here body = "<h1>Steckdosensteuerung</h1>"; // socket names and buttons are created dynamical for(int i = 0; i < numofsockets; i++){ String namesocket = socketnames[i]; body = body + "<p>" + namesocket + " <a href=\"socket" + String(i) + "On\"><button>AN</button></a> <a href=\"socket" + String(i) + "Off\"><button>AUS</button></a></p>"; } body += "</center></body>"; mySwitch.enableTransmit(2); delay(1000); Serial.begin(115200); WiFi.begin(ssid, password); Serial.println(""); // Wait for connection while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } // serial output of connection details Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); if (mdns.begin("esp8266", WiFi.localIP())) { Serial.println("MDNS responder started"); } // this page is loaded when accessing the root of esp8266´s IP server.on("/", [](){ String webPage = website(header, body); server.send(200, "text/html", webPage); }); // pages for all your sockets are created dynamical for(int i = 0; i < numofsockets; i++){ String pathOn = "/socket"+String(i)+"On"; const char* pathOnChar = pathOn.c_str(); String pathOff = "/socket"+String(i)+"Off"; const char* pathOffChar = pathOff.c_str(); server.on(pathOnChar, [i](){ String webPage = website(header, body); server.send(200, "text/html", webPage); mySwitch.switchOn(housecode, socketcodes[i]); delay(1000); }); server.on(pathOffChar, [i](){ String webPage = website(header, body); server.send(200, "text/html", webPage); mySwitch.switchOff(housecode, socketcodes[i]); delay(1000); }); } server.begin(); Serial.println("HTTP server started"); } void loop(void){ server.handleClient(); } |
Tragt in die Variable „housecode“ den Hauscode eurer Funksteckdosen ein (Dip-Schalter oben entspricht einer „1“ und Dip-Schalter unten einer „0“) und in die Variable „socketcodes“ alle Codes eurer Steckdosen (A-E) in gleicher Form wie beim Hauscode. In die Variable „socketnames“ könnt ihr euren Steckdosen dann noch Namen geben, die im Webinterface angezeigt werden.
Außerdem müsst ihr bei den Variablen „ssid“ und „password“ die jeweiligen Daten eures WLAN-Netzes eingeben.
Übertragt den Sketch nun auf euren ESP8266 und öffnet den seriellen Monitor der Arduino IDE. Stellt dort die Baudrate auf 115200 und wartet, bis sich euer ESP8266 mit dem WLAN verbunden hat. Ihr solltet nun die IP-Adresse angezeigt bekommen, die eurem ESP8266 zugewiesen wurde.
Öffnet diese in einem Browser eurer Wahl (der PC oder anderes Gerät, das ihr hierzu verwendet, muss natürlich im gleichen Netzwerk sein). Ihr solltet nun das oben abgebildete Webinterface sehen. Bei einem Klick auf den jeweiligen Button sollten sich nun eure Funksteckdosen bequem schalten lassen.
Hinweis: Die Steuerung ist im Übrigen nicht nur via Browser möglich, sondern auch mittels HTTP-Request auf die entsprechende Adresse. Damit könnt ihr eure Steckdosen beispielsweise auch per Tastatur-Shortcut, per Sprachsteuerung unter Android, per Android oder iOS Widget oder auch via NetIO steuern – also all das, was mit der Umsetzung via Raspberry Pi auch möglich ist.
Das Webinterface hat aktuell noch keine Statusspeicherung implementiert, auch eine zeitverzögerte Schaltung habe ich noch nicht eingebaut. Ich denke aber, dass der Sketch einfach ausbaubar ist und als Grundlage für eigene Umsetzung ausreichende Grundfunktionen liefert. Gerne dürft ihr den Sketch erweitern und mich auch über erweiterte Webinterfaces benachrichtigen, wenn ich diese im Artikel verlinken soll.
Ich wünsche euch viel Erfolg und Spaß bei der Umsetzung! Bei Fragen, Problemen oder Anregungen könnt ihr natürlich wie immer das Kommentarfeld unten verwenden.
Hallo Alexander,
ich hatte tatsächlich nicht auf das 8266 Board umgestellt. Jetzt bei Einstellung auf Generic 8266 habe ich aber eine noch längere Fehlermeldung. Soweit ich das verstehe sind die Bibliotheken alle da aber irgendwo eine Inkompabilität drin. Ich steh nun auf dem Schlauch weil ich gerade erst mit dem 8266 beginnen möchte :(
Viele Grüße
Julian
——————-
Arduino: 1.6.12 (Windows 7), Board: „Generic ESP8266 Module, 80 MHz, 40MHz, DIO, 115200, 512K (64K SPIFFS), ck, Disabled, None“
In file included from C:\Users\Documents\Arduino\libraries\ESP8266WebServer\src\ESP8266WebServer.cpp:27:0:
C:\Users\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src/WiFiClient.h: In instantiation of ’size_t WiFiClient::write(T&, size_t) [with T = char*; size_t = unsigned int]‘:
C:\Users\Documents\Arduino\libraries\ESP8266WebServer\src\ESP8266WebServer.cpp:334:56: required from here
C:\Users\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src/WiFiClient.h:123:36: error: request for member ‚available‘ in ’source‘, which is of non-class type ‚char*‘
size_t left = source.available();
^
C:\Users\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src/WiFiClient.h:127:5: error: request for member ‚read‘ in ’source‘, which is of non-class type ‚char*‘
source.read(buffer.get(), will_send);
^
C:\Users\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src/WiFiClient.h: In instantiation of ’size_t WiFiClient::write(T&, size_t) [with T = unsigned char [1460]; size_t = unsigned int]‘:
C:\Users\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src/WiFiClient.h:84:55: required from ’size_t WiFiClient::write(T&) [with T = fs::File; size_t = unsigned int]‘
C:\Users\Documents\Arduino\libraries\ESP8266WebServer\src\ESP8266WebServer.h:133:35: required from ’size_t ESP8266WebServer::streamFile(T&, const String&) [with T = fs::File; size_t = unsigned int]‘
C:\Users\Documents\Arduino\libraries\ESP8266WebServer\src\detail/RequestHandlersImpl.h:111:41: required from here
C:\Users\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src/WiFiClient.h:123:36: error: request for member ‚available‘ in ’source‘, which is of non-class type ‚unsigned char [1460]‘
size_t left = source.available();
^
C:\UsersAppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src/WiFiClient.h:127:5: error: request for member ‚read‘ in ’source‘, which is of non-class type ‚unsigned char [1460]‘
source.read(buffer.get(), will_send);
^
exit status 1
Fehler beim Kompilieren für das Board Generic ESP8266 Module.
Eine relativ simple und vielleicht auch ein wenig dumme Frage, aber ist es auch weiterhin möglich die Steckdosen mit der Fernbedienung zuschalten? Und ist es egal in welchem Raum bzw. wie weit entfernt die Steckdosen sein dürfen ?
MfG
Alex
Hallo,
Ja – es ist möglich weiterhin die Steckdosen mit der original Fernbedienung zu schalten – warum auch nicht?!
Die Reichweite des Senders ist von verschiedenen Faktoren abhängig (z.B. Stahlbetondecken, Wanddicken, Standort des Senders, etc) Aber das 433 mHz-Band ist recht unempfindlich gegen solche Einflüsse. Bei mir kann ich alle Steckdosen im Haus (über zwei Etagen) erreichen. Selbst die im Garten (hinter der Garage!) schaltet einwandfrei.
Ich habe lange an einer passenden Antenne gebastelt und rumprobiert…. …Die besten Ergebbnisse habe ich jetzt tatsächlich mit einem Jumperkabel (!) von 20 cm Länge und der 5 Volt-Einspeisung am Sender erzielt.
Hallo Alexander,
seit ein paar Wochen verfolge ich deinen Blog und bin echt begeistert, was du so auf die Beine gestellt hast. Inovative und alltagstaugliche Ideen hast du!
Inspiriert dadurch hab mich mit einigen Artikeln aus China versorgt. U. a. auch einige der NODEMCU-Boards. Habe deine Steckdosensteuerung mittels ESP8266 nachgebaut und den Sketch ein wenig angepasst, so dass ich mit verschiedenen Hauscodes arbeiten kann. Somit hätte ich jetzt die Möglichkeit, bis zu 125 Steckdosen schalten zu können – denke, das reicht ;-).
Soweit funktioniert alles Bestens!
Einzig dein kleiner Webbrowser auf dem ESP macht mir Kopfzerbrechen, weil ich es nicht hinbekomme, ihn so anzupassen, dass er auf allen Browseroberflächen den gesammten Bildschirm einnimmt. Auf dem Handy beispielsweise ist das Bild so klein, dass man mit einer Lupe arbeiten müsste….
Du hast doch bestimmt eine Lösung parat, wie ich z.B. einen kleinen Dreizeiler „Java-Skript“ in den Header bekomme..?!
Ic h denke an soetwas wie :
window.ResizeTo(screen.width,screen.height);
Aber egal, was ich versuche… …ich bekomme beim Kompilieren in der Arduino IDE immer eine Fehlermeldung, dass etwas mit „javascript“ nicht stimmt.
Meine Kenntnisse in HTML und CSS sind leider gleich Null – und so hab ich schon viele Stunden im Netz geschaut und rumprobiert – aber geholfen hat bisher nichts.
Wäre echt toll, wenn du einen Tip geben könntest.
Im Voraus vielen Dank auch für die tollen Beiträge…
Viele Grüße
Olaf
—————————————-
Uups… Da fehlt etwas in der Darstellung:
„“
„window.ResizeTo(screen.width,screen.height);“
„“
—————————————-
Da fehlts ja immernoch :-(
script language=“javascript“ type=“text/javascript“
window.ResizeTo(screen.width,screen.height);
/script
Hi Olaf,
der Arduino IDE sollte der JS-Code eigentlich egal sein beim Kompilieren. Vermutlich hast du vergessen, die doppelten Anführungszeichen zu „escapen“ (mit einem „\“ davor).
Hallo Olaf,
dafür braucht’s kein Javascript. Das Zauberwort heißt „viewport“.
Ein simples
im HEAD-Bereich tut Wunder.
Hallo Bernd,
ein simples „was“ ,
nach simples leider kein Text
Hallo Olaf
Wie hast Du den Sketch verändert um verschiedene Hauscodes zu senden? Genau das habe ich auch vor, habe aber nicht genug Ahnung um das selbst zu programmieren.
Könntest Du mir deinen Sketch an meine Email schicken?
Danke und Gruß Michael
Hallo Michael,
einfach den Housecode in ein Array einlesen (für jede Steckdose einzeln).
// replace with your values
//int Chanel[] = {15, 15, 15, 15, 15, 2, 2};
char* housecode[] = {„11111“, „11111“, „11111“, „11111“, „11111“, „00010“, „00010“};
char* socketcodes[] = {„10000“, „01000“, „00100“, „00010“, „000010“, „11000“, „01000“};
char* socketnames[] = {„Kueche/Esszimmer“, „Wohnzimmer“, „PlayStation“, „4“, „5“, „Aussen 1“, „Aussen 2“};
int numofsockets = sizeof(socketcodes)/4;
und dann mitsenden…
server.send(200, „text/html“, webPage);
//mySwitch.enableTransmit(Chanel[i]);
mySwitch.switchOn(housecode[i],socketcodes[i]);
//Serial.print(„AN „);
//Serial.print(housecode[i]);
//Serial.println(socketcodes[i]);
delay(100);
//mySwitch.disableTransmit();
mit der Erweiterung um den Hauscode für jede Steckdose komme ich nicht weiter wo muss der Serverteil eingetragen werden oder ersetzt werden“ hast du da mal den Kompletten Sketch?
Gruß Thomas deh0511 gmx de
Arduino: 1.8.12 (Windows 7), Board: „NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), 4MB (FS:2MB OTA:~1019KB), 2, v2 Lower Memory, Disabled, None, Only Sketch, 115200“
Lan_1-2.ino: In lambda function:
:61:45: error: ‚i‘ was not declared in this scope
mySwitch.switchOn(housecode[1] ,socketcodes[i]);
^
Funksteckdosen_Per_Browser_schalten__ber_12E_W-Lan_1-2:67:15: error: ‚pathOffChar‘ was not declared in this scope
server.on(pathOffChar, [i](){
^
In function ‚void setup()‘:
74:3: error: expected ‚)‘ before ’server‘
server.begin();
^
exit status 1
‚i‘ was not declared in this scope
Hi,
Ist es auch möglich ein Relais zu schalten anstatt der Funksteckdosen? Wie würde da der Code aussehen? Ich bin mit Sachen programmieren eigentlich sehr fit aber mit so Sachen wie HTML- Requests habe ich mich noch nicht beschäftigt!
Währe super wenn einer mir da ein besispiel Code senden könnte! Auch gern an meine Privat Mail: [email protected]
Grüße
Leo
Hallo super Anleitung.Ich kann 4 Funksteckdosen ansteuern über die Webseite aber ich habe 6 Stück davon nun habe ich versucht den Code anzupassen was mir einfach nicht gelingt,
Hier mal ein Ausschnitt aus dem Code:
// replace with your values
char* housecode = „11001“;
char* socketcodes[] = {„10101“, „11000“, „00011“, „01100“, „00010“, „11110“};
char* socketnames[] = {„Lampe1“, „Lampe2“, „Lampe3“, „Lampe4“, „Lampe5“, „Lampe6“};
int numofsockets = sizeof(socketcodes)/6;
Muss man noch an anderer Stelle was ändern damit ich 6 Sckdosen schalten kann ?
Hallo Sören,
die numofsockets-Variable musst du nicht ändern, ansonsten sollte das so passen.
……..wunderbar das hat funktioniert.
aber was hat das zu bedeuten ? Also welche Funktion
int numofsockets = sizeof(socketcodes)/4;
Hallo Sören,
die Variable berechnet automatisch die Anzahl an Steckdosen, die man in dem Array „socketcodes“ angelegt hat. Sie wird benötigt, um die richtige Anzahl an Einträgen im Webinterface anzeigen zu können.
Bist Du aus der Schweiz, Alex?
Mir erschließt sich der Grund der Frage unter diesem Artikel gerade nicht… ;)
Hallo an Alle,
ich habe zwei Problem mit dieser Lösung mit dem NodeMCU Board.
Dazu muss ich sagen, prinzipiell kann ich meine Steckdosen steuern über das Webinterface, aber:
1. Problem:
Nach einer gewissen Zeit funktioniert das Schalten plötzlich nicht mehr. Mein Browser zeigt dann auch an „Seite nicht gefunden“ und leitet auf die Telekom-Nicht-Gefunden-Seite um. Dann trenne ich das Board vom Strom und stecke es wieder ein und es funktioniert wieder für eine Weile. Wie kann man das verhindern? Also, wie bekomme ich es hin, dass es dauerhaft funktioniert bei vorhandener Stromversorgung?
2. Problem:
Ich habe auf meinem RasPi, wie hier bei Alex beschrieben, Homebridge installiert. Nun möchte ich meine „Steckdosensteuerung mit NodeMCU“, wie hier in diesem Artikel beschrieben, in HomeKit über Homebridge einbauen. Leider klappt das nicht.
Ich verstehe nicht, was ich genau machen muss, um meine ESP8266-Steuerung mit dem Homebridge-Zeug zu „verbinden“?
Es wird nur von der Funksteckdosen-Variante OHNE ESP-Modul in dem Artikel zur „Homebridge-Erweiterung“ gesprochen. Muss alles aus der Anleitung (https://alexbloggt.com/funksteckdosen-raspberry-pi-teil1/) in Kombination mit der Anleitung zur Erweiterung auch für die ESP-Variante gemacht werden?
Grüße und frohe Weihnachten
Mike
Hallo Alex,
ich habe das Problem, dass mein PC mein NodeMCU einfach nicht erkennen will…
Den Treiber habe ich installiert, aber dennoch kann ich kein Port auswählen. Bei Werkzeuge bleibt der Punkt ‚Port‘ einfach grau hinterlegt, so dass ich keinen Port auswählen kann…
Weißt du was zu tun ist?
MfG
Hallo Robin,
welches Betriebssystem nutzt du?
Vielen Dank für deine schnelle Antwort. Das Problem lag womöglich am Kabel.
Hallo, kann mir jemand eventuell erklären, wie ich den Code meiner Funksteckdosen in die Programmierung bekomme ?
Mein Problem ist, dass die Funksteckdosen, die ich benutze keinen Binär-Code verwenden sondern einen Dezimal-Code..
Die Codes lauten z.B. 14520973 zum einschalten und 14520972 zum ausschalten.
Hallo, vielen Dank für die super Anleitung, hat alles auf anhieb funktioniert!!!
Hallo,
hat jemand mal versucht das Ganze nun in fhem einzubinden ? Also die Signale vom 433Mhz Sender über WLAN zu einem FHEM Server übertragen und umgekehrt.
Wie müsste man das im Sketch und in FHEM programmieren ?
VG Stefan
Hallo,
wie müsste ich das ganze erweitern, wenn ich mehr als die 4 Steckdosen betreiben will? Also auch mehr als 1 Hauscode benutzen will?
Grüße
M.
Danke für dieses tolle Tutorial! Meine Version funktioniert schon ganz gut. Was ich allerdings überhaupt nicht zuverlässig hinbekomme ist der AP_STA Modus (Access Point UND Station) – geschweige denn, warum es überhaupt so gut funktioniert. Habe schon diverse Postings in Foren – wo könnte ich Hilfe bekommen?
Hallo Alex,
vielen dank, das du deine Arbeit hier veröffentlicht hast. Das hat mir vermutlich viel Zeit gespart. Allerdings hatte ich ein paar Probleme mit deinem Code. Der Webserver wurde zu früh initialisiert, so das er keinerlei Verbindungen annahm. Außerdem konnte sich mein NodeMCU sich nicht mit dem von mir konfigurierten WLAN verbinden, weil andere Timing-Probleme. Außerdem habe ich den Code erweitert, so dass man zusätzlich über angeschlossene Taster an D0, D3 und D9 die Steckdosen geschaltet werden können.
Ich habe meine Änderungen hier dokumentiert:
http://www.monarch.de/redmine/projects/hueskeo/wiki/WebSwitch
Hallo Alex,
tritt das Problem bei dir auch auf, dass sich die erste Steckdose ab und zu schalten lässt, aber nach ein paar mal einfach nichts mehr geht? Die anderen funktionieren dagegen einwandfrei.
Desweiteren hab ich eine Frage zur App Home Remote. Wie muss ich meine URL aufbauen, damit ein HTTP Request möglich ist, da mir ein Verzeichnis Webinterface fehlt, das man wie beim Raspberry angibt. Gib mir doch bitte Hilfestellung, falls ich auf dem Holzweg bin.
Vielen Dank für deine Hilfe
Hallo Robin,
an meinem Raspberry hatte ich mal ein Problem mit einer Steckdose, die sich nicht mehr schalten lassen wollte. Nachdem ich diese kurzzeitig vom Strom getrennt habe, hatte ich das Problem allerdings nicht mehr.
Hallo,
ich bekomme es einfach nicht hin.
nach dem hochladen bekomme ich immer am NodeMcu V0.9 die IP 0.0.0.0 zugewiesen.
keine Ahnung was ich falsch mache.
Gibt es die Möglichkeit per Get zu schalten? Bsp.: 192…../?Lampe=on
Hallo Tobias,
klar – wird ja hier auch gemacht ;)
Hallo Alex,
vielen Dank für die super Anleitung und das Script.
Ich hätte dazu direkt zwei Fragen:
1. Wenn ich mehr als einen Hauscode nutze, wie kann ich das im Code bewerkstelligen?
Ich habe 6 Steckdosen, 3 laufen auf dem Hauscode 11100 und drei auf dem Hauscode 00111
Den Hauscode angleichen ist leider keine Lösung für mich.
2. Gibt es eine Möglichkeit den Webzugriff mit einem Passwort zu schützen?
z.B. mit .htaccess und .htpasswd?
zu 1. Das ist doch kein Problem. Lösche die Variable housecode und erweitere die Variable socketcodes um die fehlenden Stellen.
char* housecode = „“;
char* socketcodes[] = {„1111100010“, „1111100001“, „1111110000“, „1111101000“};
Hi Alex, immer wenn ich irgendwelchen ESP oder Arduino-Schissel suche lande ich bei dir ;)
In Liebe dein angryfish404
btw. ich habe dem html noch eine Tabelle zugefügt, damit die Beschriftung grade wird.
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.
Muss dazu sagen, dass ich leider null Erfahrung mit der Arduino Umgebung und C++ habe. Codebeispiele oder so wären da schon sehr hilfreich.
Hallo wäre es auch möglich deinen Sketch in easyesp zu integrieren??
Da ich über easyesp bereits 4 NodeMCU laufen habe teils mit Display und DHT22 und Relaiskarte. Diese würde ich gerne mit einem 433mhz Sender erweitern um in allen Räumen ein sicheres schalten meiner FunksteckDosen zu gewährleisten.
HI
ich möchte auf einen Sketch für Alexa hinweisen- hab hier im Blog nichts gefunden-
https://github.com/captFuture/Esp8266-fauxmoESP-AlexaBridge
der geht super toll
Und ich möchte auf die Möglichkeit hinweisen, nicht nur Elro 400 Steckdosen , die schon recht rar sind zu verwenden https://isn-systems.com/tools/it2elro/ und https://wiki.fhem.de/wiki/Intertechno_Code_Berechnung Man findet in Ebay manchmal Angebote von Pollin Steckdosen, die als Elro 400 Steckdosenkompatibel angeboten werden (recht teuer) die günstigen gibts direkt bei Pollin https://www.pollin.at/p/funksteckdosen-set-mit-3-steckdosen-550666
Ergänzung das ganze geht auch mit anlernbaren Steckdosen
zuerst mit dem Schript RF433_Sniffer_Arduino_UNO.ino die Parameter auslesen, das sieht bei mir so aus
Received 721043 / 20bit Protocol: 6
Received 721043 / 20bit Protocol: 6
Received 721043 / 20bit Protocol: 6
Received 721026 / 20bit Protocol: 6
Received 721026 / 20bit Protocol: 6
Received 721026 / 20bit Protocol: 6
Wichtig ist neben dem Dezimalcode auch die Anzahl der Bits und das Protokollm hier 6
Das muss dann im Sketch so eingetragen werden
char* onSocketcodes[] = { „10000“, „721043“, „2394414336“, „2797067520“}; // sniffed decimal ON codes for RSL rf 433Mhz learned outlets
char* offSocketcodes[] = { „10000“, „721026“, „2176310528“, „2931285248“}; // sniffed decimal OFF codes for RSL rf 433Mhz learned outlets
hier für die beiden Signale ein/aus 721043 und 721026.
Und ganz Wichtig!! die Pulslänge und das Protokoll setzen
mySwitch.setProtocol(6,900);
Ich beziehe mich auf den Sketch in der vorigen Antwort https://github.com/captFuture/Esp8266-fauxmoESP-AlexaBridge
Bei mir funzt das klasse…..
Achtung!!!!!
Pollin verschickt ein anderes Set, nicht ein PFS-3 sondern ein Flamingo, das ist völlig ungeeignet !!!!
Achtung!!!!!
Hallo ich suche nach einem 433mhz Sender und Empfänger Gateway auf esp8266 Basis den ich in FHEM mit Pilight nutzen kann. Kann mir da jemand weiterhelfen?
Hallo,
Habe dein Blog Jetzt erst gesehen TOLL habe es gleich mal ausprobiert super klappt gut.
Was ich auch sehr gut finde das wenn mann über den browser es anklickt sieht mann sofort welcher
befehl gesendet wird und mann kann es sauber mit curl übernehmen binde es in meine HM / CCU ein SUPER
MFG
Zetzi
Hey,
Funksteckdosen
Klappt alles sehr gut nur leider nicht mit curl vom Browers aus ja ( http://192.168.178.58/socket0On ) aber mit curl nicht ( curl „192.168.178.58/socket0on“ ) bekomme immer die fehlermeldung ( not found: / socket0on ) ???
Hast du ne Lösung ?
mfg
Zetzi
Gelöst :))
Hey,
Nun klappt es mit den Funksteckdosen sie per CURL anzusprechen bsw zu Schalten ein nur so:
curl get „192.168.178.58/socket0On“ > /dev/null
Gruß
Zetzi
Hi,
vielen Dank für das Tutorial. Funktioniert hervorragend und zuverlässiger als mit dem Pi – der ist eh damit aber eh unterfordert.
Frage: Mein NodeMCU macht mit deinem Sketch einen offenen AP „Fairytale…“ inkl. DHCP-Server auf. Im Code finde ich keinen Hinweis darauf. Was ist da los und hat jemand eine Idee, wie ich das Ding loswerde? Weil – im Sketch isser ja nicht.
Zusatz: Der AP heißt „FairyLink“ und wird vom NodeMCU aufgemacht, wenn wifi.setmode nicht station ist.