Intelligente Steckdosen sind der einfachste Weg, um Ihr Zuhause zu automatisieren, aber bei etwa 40 US-Dollar für einen WLAN- oder ZWave-basierten Sockel kaufen Sie wahrscheinlich nicht mehr als ein paar.
Sie haben vielleicht schon einige billige HF-basierte Steckdosen, die mit einer eigenen Fernbedienung ausgestattet sind und einige Kanal- und ID-Selektoren auf der Rückseite haben. Leider gibt es keine Smart Home Hubs auf dem Markt Kampf der Smart Home Hubs: Was ist da draußen und was kommt? Kampf um die Smart Home Hubs: Was ist da draußen und was kommt? Lesen Sie mehr, die mit denen arbeiten. Wäre es nicht toll, wenn Sie diese irgendwie in Ihr DIY Smart Home System einbinden könnten? Nun, Sie können - ziemlich einfach in der Tat - mit etwa 10 $ in Teilen.
Mit etwas mehr Arbeit können Sie auch andere RF-basierte Remote-Hardware, wie diese Budget-Kinoleinwand, integrieren.
Was du brauchst:
- ESP8266 NodeMCU v12E dev board (genaues Modell spielt keine Rolle, v1 oder v3 sollte auch in Ordnung sein). Der Grund für die Verwendung einer NodeMCU-Karte liegt darin, dass wir später die einfache Wi-Fi-Verbindung wünschen. Der Link ist für ein 2er-Pack, das für jeweils 7 US-Dollar berechnet wird.
- Paket von 433 MHz Sender und Empfänger (ca. $ 3).
- RCSwitch- und MQTT-Bibliotheken und unser Code - alles zum Herunterladen von Github verfügbar.
- Ein MQTT-Server, lokal oder remote.
- Einige RF-gesteuerte Buchsen laufen im 433 MHz-Band (sollte auf der Fernbedienung stehen). Ich kaufte meine von Maplin als eine Packung mit 3 für etwa £ 20 ($ 25, 89).
Wenn Sie das NodeMCU-Board zum ersten Mal programmieren, müssen Sie die Arduino-Plugins dafür herunterladen: Folgen Sie dem ersten Teil unseres Arduino Killer-Einführungsleitfadens Treffen Sie den Arduino-Killer: ESP8266 Lernen Sie den Arduino-Killer kennen: ESP8266 Was ist, wenn ich? Ihnen gesagt, es gibt ein Arduino-kompatibles Entwicklungsboard mit integriertem Wi-Fi für weniger als $ 10? Nun, da ist es. Lesen Sie mehr für den NodeMCU / ESP8266-Chip. Sie benötigen auch CH430-Treiber . Sie können hier signierte macOS CH430 Treiber, oder Windows finden.
Ich habe v1.6.5 des Arduino verwendet, weil etwas Höheres mehr Probleme verursacht, als es löst. Downgrade wenn du es noch nicht getan hast.
Bevor Sie fortfahren, werde ich ein grundlegendes Niveau des Wissens über Arduino Programmierung annehmen Arduino Programmierung für Anfänger: Der Ampelsteuerer Arduino Programmierung für Anfänger: Der Ampelsteuerer Letzte Woche lernten wir über die grundlegende Struktur eines Arduino-Programms und hat das 'blink' Beispiel genauer betrachtet. Hoffentlich haben Sie die Gelegenheit genutzt, mit Code zu experimentieren und die Timings anzupassen. Diesmal, ... Lesen Sie mehr, und Sie haben Ihre NodeMCU-Setup im Board-Manager, und können einige Demo-Code korrekt hochladen. Sie sollten auch die Bibliotheken, die in unserem Download enthalten sind, zu Ihrem Arduino / Bibliotheken- Ordner hinzugefügt haben.
Wenn Sie eine vorhandene PubSubClient- oder MQTT-Bibliothek haben, sichern Sie sie und entfernen Sie sie. Die einzige, die ich in den Download aufgenommen habe, ist die einzige, in der ich zuverlässig Nachrichten auf NodeMCU empfangen kann, und ich habe viel ausprobiert!
RF Sniffing (optional)
Dieser Schritt ist nicht notwendig, wenn Sie nur DIP-Schalter oder Wahlschalter-Steckdosen steuern möchten - diese werden von der Box unterstützt, und eine minimale Code-Änderung wird benötigt (das ist aber immer noch interessant, wenn Sie Ich verstehe, was hinter den Kulissen passiert.
Wenn Sie andere RF-Fernbedienungen haben, die Sie hinzufügen möchten, müssen Sie zunächst die übertragenen HF-Codes "ausspähen". Laden Sie dazu die ReceiveDemo_Advanced- Skizze aus dem Menü -> Beispiele -> RCSwitch- Ordner und ändern Sie die folgende Zeile von 0
mySwitch.enableReceive(0); // Receiver on interrupt 0 =>that is pin #2
zu 2.
mySwitch.enableReceive(2); // Receiver on GPIO 2 / D4.
Verdrahten Sie das Empfängermodul wie folgt. Blick auf die Vorderseite der Empfängerplatine (es ist die längere der beiden, der Sender ist quadratisch) - die Seite mit den Komponenten auf:
- Weit rechts ist GND. Verbinden Sie sich mit GND auf der NodeMCU-Platine.
- Ganz links ist VCC. Verbinden Sie sich mit VIN auf der NodeMCU-Karte.
- Die mittleren zwei Pins sind das Signal. Verbinden Sie eines von beiden mit D4 auf der NodeMCU (sie sind miteinander verbunden, also spielt es keine Rolle).
Laden Sie nun das modifizierte ReceiveDemo_Advanced hoch, und öffnen Sie anschließend den seriellen Monitor und starten Sie das Drücken der Tasten auf Ihrer Fernbedienung. Kopieren Sie die Dezimalzahl (einschließlich Bitlänge), die Impulslänge und das Protokoll, wenn Sie eine Taste drücken.
Nachdem ich das getan hatte, fand ich meinen Projektorbildschirm
- SCREEN UP: Empfangen 8694273 / 24bit; Pulslänge: 355 oder 356; Protokoll: 1
- SCREEN DOWN: Empfangen 8694276 / 24bit; Pulslänge: 355 oder 356; Protokoll: 1
Weiter für so viele Tasten wie Sie brauchen.
Testen des Senders
Als nächstes werden wir versuchen, Codes mit dem Sender zu senden. Verdrahten Sie das Sendemodul (das Quadrat) wie folgt. Vorsicht: Die Beschriftung an diesen Pins ist grauenhaft .
Der VCC-Pin befindet sich tatsächlich in der Mitte, nicht auf der linken Seite. Ich habe ein Modul zerstört, um das herauszufinden. Das Ding, das "ATAD" sagt, ist eigentlich "DATA", rückwärts geschrieben. Wieder gehen die Daten zu D4, VCC zu VIN und GND zu GND (entfernen Sie das Empfängermodul, Sie brauchen es nicht mehr).
Laden Sie die Beispiele -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitches, und ändern Sie erneut den Datenpin :
mySwitch.enableTransmit(10);
zu
mySwitch.enableTransmit(2);
Beachten Sie, dass eine Vielzahl von Beispielen in der Bibliothek enthalten ist, und welche für Sie funktioniert, hängt von der genauen Art des Schalters ab, den Sie haben. Typ A (DIP-Schalter) und B (Regler oder Schieberegler) sind die gebräuchlichsten - siehe Bilder auf der RCSwitch-Seite. Für Typ B ist das Ein- und Ausschalten eines Sockels so einfach wie:
mySwitch.switchOn(1, 4); mySwitch.switchOff(1, 4);
Dabei steht 1 für die Kanal-ID (das obere Ziffernblatt) und 4 für die Socket-ID (das untere Ziffernblatt). Diese waren in römischen Ziffern auf meinen Steckdosen geschrieben. Es können daher maximal 16 einzelne Sockets adressiert werden, obwohl mehrere Sockets dieselbe Adresse verwenden können, wenn mehrere Geräte gleichzeitig eingeschaltet werden sollen.
Mein Projektorbildschirm war jedoch etwas anders - er verwendete eine andere Impulslänge. Also, um diese zu bedienen, hat das folgende gearbeitet. Beachten Sie, dass Sie auch ein anderes Protokoll definieren können, wenn Ihre Fernbedienung es benötigt, ABER stellen Sie sicher, dass Sie das Protokoll VOR der Impulslänge definieren. Die Pulslänge wird beim Protokollwechsel überschrieben.
// Note that my screen actually requires TWO button presses (not a long press, but two physical presses), so I'm delaying a bit then sending the same signal again void screenUp(){ mySwitch.setPulseLength(358); mySwitch.send(8694273, 24); // (decimal code, number of bits) delay(2000); mySwitch.send(8694273, 24); } void screenDown(){ mySwitch.setPulseLength(358); mySwitch.send(8694276, 24); delay(2000); mySwitch.send(8694276, 24); }
Testen Sie alle Ihre Codes, bevor Sie mit dem nächsten Schritt fortfahren.
Controlling über MQTT
Öffnen Sie die von Github heruntergeladene Skizze mit dem Namen mqtt_rcswitch.ino, und ändern Sie zunächst die Netzwerk-SSID und das Kennwort für Ihr Zuhause. Ändern Sie dann den Kanalnamen, wenn Sie möchten, und legen Sie den MQTT-Server fest. Wenn Sie noch keinen MQTT-Server auf Ihrer OpenHAB-Installation installiert haben, lesen Sie Teil 2 unseres OpenHAB-Einführungsleitfadens OpenHAB Anfängerleitfaden Teil 2: ZWave, MQTT, Regeln und Charts OpenHAB Anfängerleitfaden Teil 2: ZWave, MQTT, Regeln und Charts OpenHAB, die Open-Source-Heimautomatisierungssoftware, geht weit über die Möglichkeiten anderer auf dem Markt verfügbarer Hausautomationssysteme hinaus - es ist jedoch nicht einfach, sie einzurichten. In der Tat kann es geradezu frustrierend sein. Weiterlesen . Beachten Sie, dass mein Code für Buchsen des Typs B (Drehschalter) ausgelegt ist, obwohl Sie ihn auch für DIP-Schalter leicht ändern können.
Der wichtigste Teil des Codes ist die Funktion messageReceived (), die auf eingehende MQTT-Befehle reagiert. In dieser Funktion suchen wir zuerst nach dem Hauptschlüsselwort - ich habe "Schalter" und "Bildschirm" gewählt. Im Falle von "switch" analysieren wir dann die Kanal- und Plug-ID; Überprüfen Sie dann den Nutzlastkörper für den Befehl.
void messageReceived(String topic, String payload, char * bytes, unsigned int length) { if (topic.indexOf("switch")>=0){ //switch control, parse out the channel and plug id int channel = getValue(topic, '/', 3).toInt(); int plug = getValue(topic, '/', 4).toInt(); if(payload == "on"){ mySwitch.switchOn(channel, plug); } else{ mySwitch.switchOff(channel, plug); } } else if (topic.indexOf("screen")>=0){ //screen control if(payload == "up"){ screenUp(); } else if(payload == "down"){ screenDown(); } } /* add another else if here to listen for more commands (or just modify the one above if you dont want screen) */ }
Standardmäßig funktionieren dann die folgenden MQTT-Befehle:
Wohnzimmer / Steuerung / Schalter / X / Y (wobei X Kanal und Y Stecker-ID ist; mit Nachrichtentext an oder aus)
Wohnzimmer / Steuerung / Bildschirm (mit Nachrichtentext nach oben oder unten)
Verwenden Sie die Befehlszeile oder einen GUI-MQTT-Client, um Ihre Geräte zu testen, bevor Sie sie zu OpenHAB hinzufügen.
Hinzufügen zu OpenHAB
Als letzten Schritt müssen wir nur einige Elemente für diese Switches in OpenHAB erstellen. Ich habe die folgenden Elemente für den Moment definiert, aber Sie sollten herausfinden können, wie Sie mehr hinzufügen können:
/ * RF433mHz Geräte * / Switch CinemaScreen "Bildschirm" (Kino) {mqtt = "> [Makler: Wohnzimmer / Steuerung / Bildschirm: Befehl: ON: down], > [Makler: Wohnzimmer / Steuerung / Bildschirm: Befehl: OFF: nach oben ]}} Switch Switch41 "Switch41" (Kino) {mqtt = "> [Makler: Wohnzimmer / Steuerung / Schalter / 4/1: Befehl: ON: ein], > [Makler: Wohnzimmer / Steuerung / Schalter / 4/1: Befehl: OFF: aus] "} Switch Switch42" Switch42 "(Kino) {mqtt ="> [Makler: Wohnzimmer / Steuerung / Schalter / 4/2: Befehl: ON: ein], > [Makler: Wohnzimmer / Steuerung / Schalter / 4/2: Befehl: AUS: aus] "}
Sie sollten nun in der Lage sein, Ihre RF-Geräte von OpenHAB aus zu steuern! Eine Sache, die mich angenehm überrascht hat, war die Reichweite - ein einzelner Knoten konnte den größten Teil meines Hauses abdecken. Sie können natürlich einen weiteren Knoten hinzufügen, der denselben Kanal hört, der einfach die gleichen Befehle wiederholt, falls Sie eine weitere Abdeckung benötigen.
Die einzige Einschränkung ist, dass die Sockets selbst ihren Status nicht melden können. Wenn Sie also die Original-Fernbedienung verwenden, wird der Status des Sockets möglicherweise nicht genau in OpenHAB wiedergegeben. Bleiben Sie bei der Verwendung der OpenHAB-Schnittstelle und Sie sollten in Ordnung sein.
Fragen oder Probleme? Frag in den Kommentaren, und ich werde mein Bestes tun, um zu helfen . Wenn Sie meinen Code verbessern möchten, können Sie eine Pull-Anfrage senden.