Smarthome ohne Spionage: ESP32 und Shelly i4 DC als drahtlose Steuerung fĂŒr dein Zuhause
Ich möchte dir eine drahtlose Steuerung mit ESP32 und einem Shelly i4 DC vorstellen, mit der du Smart-Home-GerĂ€te komfortabel bedienen kannst. Viele setzen dabei auf Sprachassistenten wie Alexa oder Google Assistant â doch nicht jeder möchte sich einen âSpionâ ins Haus holen, der dauerhaft zuhört. Eine Funksteuerung mit ESP32 und Shelly i4 DC ist eine sichere, lokale und flexible Alternative, die ohne Cloud oder Internet funktioniert. https://youtu.be/oVJkW2YQ7To Den Shelly i4 DC habe ich bereits ausfĂŒhrlich in meinem Beitrag "Smarter Schalter fĂŒr Gleichspannung: Der Shelly i4 DC im Detail" vorgestellt. Zudem findest du auf meinem Blog bereits zahlreiche BeitrĂ€ge zum ESP32, da dieser Mikrocontroller eine perfekte Grundlage fĂŒr smarte DIY-Projekte bietet. Mit einer 4-Tasten-Funkfernbedienung und dem Shelly i4 DC lassen sich bis zu vier verschiedene Aktionen ausfĂŒhren â von der Lichtsteuerung bis zum Ăffnen des Garagentors. In diesem Beitrag zeige ich dir, wie du diese praktische und datenschutzfreundliche Smart-Home-Lösung umsetzt.
Schaltung - Shelly i4 DC mit Relais Modul und ESP32-S3-Zero
Warum diese Schaltung, wenn Shelly auch per WebHook steuerbar ist?
Theoretisch kann man jeden Shelly direkt ĂŒber WebHooks steuern, indem man HTTP-Requests an das GerĂ€t sendet. Damit lieĂen sich Shelly-Produkte ganz ohne zusĂ€tzliche Hardware per WLAN in ein Smart-Home-System einbinden. Aber: Was, wenn du eine unabhĂ€ngige, einfache Lösung suchst? Ich möchte dir hier eine alternative Schaltung zeigen, mit der du GerĂ€te in deinem Smart Home ĂŒber eine klassische Funkfernbedienung (433 MHz) bedienen kannst â ohne WLAN, Cloud oder App. Diese Lösung ist besonders dann interessant, wenn du: â GerĂ€te lokal und offline steuern möchtest, ohne auf eine Internetverbindung angewiesen zu sein. â Eine einfache Fernsteuerung bevorzugst, die keine App oder komplizierte Einrichtung erfordert. â Ein bestehendes Funk-Setup mit 433 MHz Fernbedienungen nutzt und dieses mit Shelly kombinieren möchtest. Dazu setze ich einen ESP32 mit einem 433 MHz FunkempfĂ€nger und einem 4-fach Relais-Modul ein. Die Relais steuern die EingĂ€nge des Shelly i4 DC, sodass du mit einer drahtlosen 4-Tasten-Fernbedienung bis zu vier verschiedene Smart-Home-Aktionen auslösen kannst.
Die richtige Funkfernbedienung wÀhlen
Wer eine passende 4-Tasten-Funkfernbedienung sucht, findet auf AliExpress und eBay eine groĂe Auswahl an Modellen. Wichtig ist, auf die Frequenz zu achten: In Deutschland sind 433 MHz-Modelle erlaubt und weit verbreitet, wĂ€hrend 333 MHz-Fernbedienungen hier nicht genutzt werden dĂŒrfen. Dies ergibt sich aus dem Frequenzplan der Bundesnetzagentur, der die zulĂ€ssigen Funkfrequenzen regelt. Achte daher beim Kauf darauf, dass das gewĂ€hlte Modell den gesetzlichen Vorgaben entspricht. Das 433 MHz Funksender Kit fĂŒr den Arduino habe ich dir bereits im Beitrag Arduino Tutorial 37: 433 MHz Sender & EmpfĂ€nger
Benötigte Hardware fĂŒr das Projekt
FĂŒr dieses Projekt kommen folgende Hardware-Komponenten zum Einsatz: - ESP32-S3 Super Mini von Waveshare* â ein leistungsstarker Mikrocontroller mit WLAN- und Bluetooth-FunktionalitĂ€t - Shelly i4 DC* â ein smarter Schalter mit vier digitalen EingĂ€ngen fĂŒr Gleichspannung - 433 MHz FunkempfĂ€nger* â zur drahtlosen SignalĂŒbertragung von der Fernbedienung an den ESP32 - 433 MHz Funksender* â ermöglicht das Senden von Signalen an andere GerĂ€te (gĂŒnstig im 2er-Set erhĂ€ltlich) - vierfach-Relais-Modul* â dient zur galvanischen Trennung und ermöglicht das Schalten der EingĂ€nge am Shelly i4 DC - diverse Breadboardkabel & 400-Pin Breadboard* â fĂŒr eine einfache Verdrahtung ohne Löten - ein USB-Netzteil* - wird fĂŒr die Stromversorgung des Mikrocontrollers und des Shellys benötigt - ein Power-Supply-Modul fĂŒr Breadboard* - ĂŒber dieses Modul kann man 5V & 3.3V abgreifen um unter anderem den Shelly zu betreiben Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du ĂŒber diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beitrĂ€gt, diesen Blog zu unterstĂŒtzen. Der Preis fĂŒr dich bleibt dabei unverĂ€ndert. Vielen Dank fĂŒr deine UnterstĂŒtzung! Stromversorgung Sowohl der ESP32-S3 Super Mini als auch der Shelly i4 DC benötigen eine Stromquelle. Hier eignet sich theoretisch ein einfaches USB-Netzteil*, das sich leicht zweckentfremden lĂ€sst. Da der Shelly i4 DC bereits ab 5V betrieben werden kann und weniger als 1W Leistungsaufnahme hat, reicht ein handelsĂŒbliches Netzteil vollkommen aus.
Aufbau der Schaltung - Shelly i4 DC via Funkfernbedienung ĂŒber ESP32 steuern
Nachfolgend die kleine Schaltung im Schaubild wie die Komponenten zusammenarbeiten.
Schaltung - 433MHz Remotecontroll und Shelly i4 DC KomponenteESP32-S3 Mini4fach Relais ModulVCC5VGNDGNDIN1GP2IN2GP3IN3GP4IN4GP5433 MHz FunkempfĂ€ngerVCC5VGNDGNDDATAGP1 Anschlussklemme des Relais Ein 4-fach Relaismodul bietet fĂŒr jeden Kanal eine dreipolige Anschlussklemme, bestehend aus: - Links (NC - Normally Closed) â Ausgang aktiv, wenn die Relais-LED AUS ist - Mitte (COM - Common) â Gemeinsamer Anschluss fĂŒr den Schaltkreis - Rechts (NO - Normally Open) â Ausgang aktiv, wenn die Relais-LED AN ist
Relais Modul-Anschlussklemme Verdrahtung mit dem Shelly i4 DC - Der GND-Anschluss des Shelly i4 DC wird mit dem rechten (GND) Anschluss der Relaisklemme verbunden. - Die EingĂ€nge des Shelly i4 DC können entweder ĂŒber den mittleren (NO) oder linken (NC) Kontakt mit dem Relais verbunden werden, je nach gewĂŒnschtem Schaltverhalten: - NO (Normally Open): Eingang wird aktiv, wenn das Relais anzieht (LED leuchtet). - NC (Normally Closed): Eingang wird aktiv, wenn das Relais nicht angezogen ist (LED aus). Pinout des ESP32-S3 Mini Nachfolgend das Pinout des ESP32-S3-Zero von Waveshare.
Aufbau - ESP32-S3-Zero
Programmieren - drahtlose Steuerung eines Shelly i4 DC am ESP32
fertiges Programm Programm: drahtlose Steuerung eines Shelly i4 DC ĂŒber ESP32Herunterladen Quellcode /* Projekt: Smarthome ohne Spionage â Funksteuerung fĂŒr den Shelly i4 DC mit ESP32 Autor: Stefan Draeger Blog: https://draeger-it.blog Beitrag: https://draeger-it.blog/smarthome-ohne-spionage-esp32-und-shelly-i4-dc-als-drahtlose-steuerung-fuer-dein-zuhause/ Beschreibung: Dieser Code ermöglicht es, einen Shelly i4 DC ĂŒber ein 4-fach Relais-Modul zu steuern. Die Relais werden mit einem 433 MHz FunkempfĂ€nger in Kombination mit einem Handsender geschaltet. Der ESP32 empfĂ€ngt die Funksignale und schaltet entsprechend die Relais, welche die EingĂ€nge des Shelly i4 DC bedienen. Benötigte Hardware: - ESP32 (z. B. ESP32-S3 Super Mini) - 433 MHz FunkempfĂ€nger - 433 MHz Funksender - 4-fach Relais-Modul - Shelly i4 DC - Passende Netzteile fĂŒr ESP32 und Shelly Hinweis: Der Code nutzt die RCSwitch-Bibliothek, um die 433 MHz Funksignale zu dekodieren. */ #include // Initialisierung des RCSwitch-Objekts zur Kommunikation mit dem 433 MHz EmpfĂ€nger RCSwitch rcSwitch = RCSwitch(); // Definition der GPIO-Pins #define remotePin 1 // Empfangs-Pin fĂŒr den 433 MHz EmpfĂ€nger #define relais1 2 // Steuerpin fĂŒr Relais 1 #define relais2 3 // Steuerpin fĂŒr Relais 2 #define relais3 4 // Steuerpin fĂŒr Relais 3 #define relais4 5 // Steuerpin fĂŒr Relais 4 // Definition von ZustĂ€nden fĂŒr die Relaissteuerung #define AN true // Relais einschalten #define AUS false // Relais ausschalten // Codes fĂŒr die 433 MHz Funkfernbedienung (Ein- und Ausschalten der Relais) const long TASTE_1_ON = 83029; const long TASTE_1_OFF = 83028; const long TASTE_2_ON = 86101; const long TASTE_2_OFF = 86100; const long TASTE_3_ON = 70741; const long TASTE_3_OFF = 70740; const long TASTE_4_ON = 21589; const long TASTE_4_OFF = 21588; void setup() { Serial.begin(9600); // Serielle Kommunikation starten rcSwitch.enableReceive(remotePin); // Aktivierung des 433 MHz EmpfĂ€ngers auf remotePin // Setzen der Relais-Pins als Ausgang pinMode(relais1, OUTPUT); pinMode(relais2, OUTPUT); pinMode(relais3, OUTPUT); pinMode(relais4, OUTPUT); // Alle Relais beim Start ausschalten digitalWrite(relais1, AUS); digitalWrite(relais2, AUS); digitalWrite(relais3, AUS); digitalWrite(relais4, AUS); } void loop() { // PrĂŒfen, ob ein Signal vom 433 MHz Handsender empfangen wurde if (rcSwitch.available()) { long remoteValue = rcSwitch.getReceivedValue(); // Empfangenen Code auslesen rcSwitch.resetAvailable(); // Empfangsstatus zurĂŒcksetzen Serial.println(remoteValue); // Empfangenen Code zur Diagnose ausgeben // ĂberprĂŒfung, ob der empfangene Code einem gespeicherten Befehl entspricht switch (remoteValue) { case TASTE_1_ON: toggleRelais(relais1, AN); break; case TASTE_1_OFF: toggleRelais(relais1, AUS); break; case TASTE_2_ON: toggleRelais(relais2, AN); break; case TASTE_2_OFF: toggleRelais(relais2, AUS); break; case TASTE_3_ON: toggleRelais(relais3, AN); break; case TASTE_3_OFF: toggleRelais(relais3, AUS); break; case TASTE_4_ON: toggleRelais(relais4, AN); break; case TASTE_4_OFF: toggleRelais(relais4, AUS); break; default: Serial.println("Code : " + String(remoteValue) + " nicht behandelt!"); // Fehlermeldung, falls Code unbekannt } } } // Funktion zur Steuerung eines Relais void toggleRelais(int pin, bool newStatus) { digitalWrite(pin, newStatus); // Setzt das Relais auf AN oder AUS } Auslesen einer Funkfernbedienung Jede Taste an einer Funkfernbedienung hat eine eigene einzigartige ID welche wir zunĂ€chst ermitteln mĂŒssen. Dazu reicht das kleine Script aus dem bereits veröffentlichten Beitrag Arduino Tutorial 37: 433 MHz Sender & EmpfĂ€nger. /* Projekt: 433 MHz Signalempfang mit RCSwitch Autor: Stefan Draeger Webseite: https://draeger-it.blog Beschreibung: Dieser Code dient dazu, Signale von einem 433 MHz Funksender zu empfangen und auf der seriellen Schnittstelle auszugeben. Der ESP32 oder Arduino empfĂ€ngt dabei Funksignale von einer 433 MHz Fernbedienung oder anderen kompatiblen Sendern. Benötigte Hardware: - 433 MHz FunkempfĂ€nger - Mikrocontroller (z. B. ESP32 oder Arduino) - Serielle Schnittstelle fĂŒr die Diagnose */ #include // Einbinden der Bibliothek fĂŒr die 433 MHz Funkkommunikation // Erstellen eines Objekts fĂŒr die RCSwitch-Klasse zur Steuerung des FunkempfĂ€ngers RCSwitch rcSwitch = RCSwitch(); void setup() { Serial.begin(9600); // Start der seriellen Kommunikation mit 9600 Baud // Aktivierung des 433 MHz EmpfĂ€ngers auf Interrupt-Pin 0 (digitaler Pin 2 auf Arduino) rcSwitch.enableReceive(0); } void loop() { // ĂberprĂŒfung, ob neue Daten vom 433 MHz Sender empfangen wurden if (rcSwitch.available()) { // Ausgabe des aktuellen Zeitstempels (Millisekunden seit dem Start des Mikrocontrollers) Serial.print(" - "); // Ausgabe des empfangenen Codes auf der seriellen Schnittstelle Serial.println(rcSwitch.getReceivedValue()); // ZurĂŒcksetzen des EmpfĂ€ngers, damit neue Signale verarbeitet werden können rcSwitch.resetAvailable(); } }
Schritt-fĂŒr-Schritt-Anleitung
Nachfolgend erlĂ€utere ich dir den Aufbau des Quellcodes fĂŒr eine drahtlose Steuerung des Shelly i4 ĂŒber einen ESP32. Schritt 1 - einbinden der Bibliothek und definieren der Pins FĂŒr den 433 MHz FunkempfĂ€nger benötigen wir zusĂ€tzlich eine Bibliothek. Hier verwende ich "rc-switch von sui77" welche ĂŒber den Bibliotheksverwalter installiert werden kann wenn du nach "rc-switch" suchst.
#include // Bibliothek fĂŒr die 433 MHz Funkkommunikation einbinden // Initialisierung des RCSwitch-Objekts zur Kommunikation mit dem 433 MHz EmpfĂ€nger RCSwitch rcSwitch = RCSwitch(); // Definition der GPIO-Pins #define remotePin 1 // Empfangs-Pin fĂŒr den 433 MHz EmpfĂ€nger #define relais1 2 // Steuerpin fĂŒr Relais 1 #define relais2 3 // Steuerpin fĂŒr Relais 2 #define relais3 4 // Steuerpin fĂŒr Relais 3 #define relais4 5 // Steuerpin fĂŒr Relais 4 // Definition der ZustĂ€nde fĂŒr die Relaissteuerung #define AN true // Relais EIN #define AUS false // Relais AUS Schritt 2 - Konstanten fĂŒr die Tasten Ăber das kleine Programm oben habe ich nachfolgende Codes der Tasten ermittelt. Da sich diese Werte nicht Ă€ndern habe ich diese in Konstanten abgelegt. // Codes fĂŒr die 433 MHz Funkfernbedienung (Ein- und Ausschalten der Relais) const long TASTE_1_ON = 83029; const long TASTE_1_OFF = 83028; const long TASTE_2_ON = 86101; const long TASTE_2_OFF = 86100; const long TASTE_3_ON = 70741; const long TASTE_3_OFF = 70740; const long TASTE_4_ON = 21589; const long TASTE_4_OFF = 21588; Schritt 3 - Funktion setup Die Funktion setup wird einmalig aufgerufen wenn der Mikrocontroller startet oder auch neugestartet wird. Hier definieren wir die Pins des Relais Moduls als Ausgang und deaktivieren initial die Relais. void setup() { Serial.begin(9600); // Serielle Kommunikation starten rcSwitch.enableReceive(remotePin); // Aktivierung des 433 MHz EmpfĂ€ngers auf remotePin // Setzen der Relais-Pins als Ausgang pinMode(relais1, OUTPUT); pinMode(relais2, OUTPUT); pinMode(relais3, OUTPUT); pinMode(relais4, OUTPUT); // Alle Relais beim Start ausschalten digitalWrite(relais1, AUS); digitalWrite(relais2, AUS); digitalWrite(relais3, AUS); digitalWrite(relais4, AUS); } Schritt 4 - Funktion loop Die Funktion loop wird dauerhaft ausgefĂŒhrt bis der Strom abfĂ€llt oder ein Fehler auftritt. void loop() { // PrĂŒfen, ob ein Signal vom 433 MHz Handsender empfangen wurde if (rcSwitch.available()) { long remoteValue = rcSwitch.getReceivedValue(); // Empfangenen Code auslesen rcSwitch.resetAvailable(); // Empfangsstatus zurĂŒcksetzen Serial.println(remoteValue); // Empfangenen Code zur Diagnose ausgeben //Switch/Case Abfrage } } Schritt 4.1 - Switch / Case fĂŒr die Tasten Ăber eine switch Anweisung kann man einfach den empfangenen Wert mit den der Tasten vergleichen. // ĂberprĂŒfung, ob der empfangene Code einem gespeicherten Befehl entspricht switch (remoteValue) { case TASTE_1_ON: toggleRelais(relais1, AN); break; case TASTE_1_OFF: toggleRelais(relais1, AUS); break; case TASTE_2_ON: toggleRelais(relais2, AN); break; case TASTE_2_OFF: toggleRelais(relais2, AUS); break; case TASTE_3_ON: toggleRelais(relais3, AN); break; case TASTE_3_OFF: toggleRelais(relais3, AUS); break; case TASTE_4_ON: toggleRelais(relais4, AN); break; case TASTE_4_OFF: toggleRelais(relais4, AUS); break; default: Serial.println("Code : " + String(remoteValue) + " nicht behandelt!"); // Fehlermeldung, falls Code unbekannt }
Erweiterte Möglichkeit: Bis zu 8 GerÀte mit einem 4-fach Relais steuern
Theoretisch lassen sich mit dieser Schaltung nicht nur vier, sondern bis zu neun verschiedene GerĂ€te steuern â indem man die vier EingĂ€nge des Shelly i4 DC als Bitmuster verwendet.
Shelly i4 DC Wie funktioniert das? - Die ersten drei EingĂ€nge (SW1,SW2, SW3) des Shelly i4 DC werden als BinĂ€rcode fĂŒr die GerĂ€tewahl genutzt. - Der vierte Eingang (SW4) wird als BestĂ€tigungssignal (High-Pegel) verwendet, um die Auswahl auszufĂŒhren. Bitmuster fĂŒr die GerĂ€teauswahl SW1SW2SW3GerĂ€t000GerĂ€t 1001GerĂ€t 2010GerĂ€t 3011GerĂ€t 4100GerĂ€t 5101GerĂ€t 6110GerĂ€t 7111GerĂ€t 8xxxKeine Aktion (SW4 nicht aktiviert) Ablauf der Steuerung - Mit der Funkfernbedienung wird ein 3-Bit-Muster auf die EingĂ€nge SW1-SW3 gesetzt (z. B. â101â fĂŒr GerĂ€t 6). - Sobald SW4 auf High gesetzt wird, wertet der Shelly das Bitmuster aus und schaltet das zugewiesene GerĂ€t. - Danach werden alle EingĂ€nge zurĂŒckgesetzt, um eine neue Auswahl zu ermöglichen. Vorteile dieser Methode â Erweitert die Steuerungsmöglichkeiten erheblich â statt nur 4 sind bis zu 8 GerĂ€te steuerbar. â Nutzt die vorhandenen Relais effizient â kein zusĂ€tzliches Hardware-Modul nötig. â Schnelle und flexible Steuerung â einfach per Funkfernbedienung umsetzbar. Diese Methode zeigt, wie viel Potenzial in der Kombination aus ESP32, Shelly i4 DC und einem 4-fach Relais-Modul steckt! đ Read the full article













