Werbung
Intelligente Steckdosen sind die einfachste Möglichkeit, Ihr Zuhause zu automatisieren. Bei einem Preis von jeweils rund 40 US-Dollar für eine WLAN- oder ZWave-basierte Steckdose ist es jedoch unwahrscheinlich, dass Sie mehr als ein paar kaufen.
Möglicherweise haben Sie jedoch bereits einige billige RF-basierte Buchsen - die mit einer eigenen Fernbedienung geliefert werden und auf der Rückseite einige Kanal- und ID-Selektoren haben. Leider gibt es keine Smart-Home-Hubs auf dem Markt Battle of the Smart Home Hubs: Was gibt es da draußen und was kommt? Weiterlesen das funktioniert mit denen. Wäre es nicht großartig, wenn Sie diese irgendwie in Ihr DIY-Smart-Home-System einbinden könnten? Nun, Sie können - in der Tat ganz einfach - mit rund 10 US-Dollar in Teilen.
Mit etwas mehr Arbeit können Sie auch andere maßgeschneiderte RF-basierte Remote-Hardware integrieren, z diese Budget-Kinoleinwand.
Was du brauchst:
- ESP8266 NodeMCU v12E Entwicklungskarte (Das genaue Modell spielt keine Rolle, v1 oder v3 sollten ebenfalls in Ordnung sein.) Der Grund, warum wir eine NodeMCU-Karte verwenden, ist, dass wir später die einfache Wi-Fi-Verbindung wünschen. Der Link ist für ein 2er-Pack, das jeweils 7 US-Dollar kostet.
- Paket von 433 MHz Sender und Empfänger (ungefähr 3 $).
- RCSwitch- und MQTT-Bibliotheken sowie unser Code - alles verfügbar zum Download von Github.
- Ein lokaler oder entfernter MQTT-Server.
- Einige HF-gesteuerte Buchsen laufen im 433-MHz-Band (sollte auf der Fernbedienung stehen). Ich kaufte meine von Maplin als 3er-Pack für etwa 20 Pfund (25,89 Dollar).
Wenn Sie das NodeMCU-Board zum ersten Mal programmieren, müssen Sie die Arduino-Plugins herunterladen: Folgen Sie dem ersten Teil unserer Arduino Killer Einführungsleitfaden Lernen Sie den Arduino Killer kennen: ESP8266Was wäre, wenn ich Ihnen sagen würde, dass es ein Arduino-kompatibles Entwicklungsboard mit integriertem WLAN für weniger als 10 US-Dollar gibt? Nun, das gibt es. Weiterlesen für den NodeMCU / ESP8266-Chip. Sie benötigen auch CH430 Treiber. Sie können finden signierte macOS CH430 Treiber hier, oder Windows hier.
Ich habe Version 1.6.5 des Arduino verwendet, da alles, was höher ist, mehr Probleme mit sich bringt als es löst. Downgrade, falls Sie dies noch nicht getan haben.
Bevor Sie fortfahren, werde ich ein grundlegendes Wissen über voraussetzen Arduino-Programmierung Arduino-Programmierung für Anfänger: Ampelsteuerungs-Projekt-TutorialDurch den Bau eines Arduino-Ampelsteuergeräts können Sie grundlegende Codierungsfähigkeiten entwickeln! Wir bringen Sie zum Laufen. Weiterlesen , und dass Sie Ihr NodeMCU-Setup im Board-Manager haben und in der Lage sind, einen Demo-Code korrekt hochzuladen. Sie sollten auch die in unserem Download enthaltenen Bibliotheken zu Ihrem hinzugefügt haben Arduino / Bibliotheken Ordner.
Wenn Sie eine haben PubSubClient- oder MQTT-Bibliothek, sichern Sie es und entfernen Sie es - das, was ich in den Download aufgenommen habe, ist das einzige, bei dem ich zuverlässig Nachrichten auf NodeMCU empfangen konnte, und ich habe es versucht viel!
RF-Sniffing (optional)
Dieser Schritt ist nicht erforderlich, wenn Sie nur die Steckdosen für DIP-Schalter oder Wählschalter steuern möchten. Diese werden standardmäßig unterstützt Es sind nur minimale Codeänderungen erforderlich (dies ist jedoch immer noch interessant, damit Sie verstehen, was sich hinter dem Code abspielt Szenen).
Wenn Sie andere RF-Fernbedienungen haben, die Sie hinzufügen möchten, müssen Sie zuerst die übertragenen RF-Codes "schnüffeln". Laden Sie dazu die ReceiveDemo_Advanced Skizze aus dem Menü -> Beispiele -> RCSwitch Ordner, und ändern Sie die folgende Zeile von 0
mySwitch.enableReceive (0); // Empfänger bei Interrupt 0 => das ist Pin # 2
zu 2.
mySwitch.enableReceive (2); // Empfänger auf GPIO 2 / D4.
Verdrahten Sie das Empfängermodul wie folgt. Wenn Sie auf die Vorderseite der Empfängerplatine schauen (es ist die längere der beiden, der Sender ist quadratisch) - die Seite mit den Komponenten auf:
- Ganz rechts ist GND. Stellen Sie eine Verbindung zu GND auf der NodeMCU-Karte her.
- Ganz links ist VCC. Stellen Sie eine Verbindung zur Fahrgestellnummer auf der NodeMCU-Karte her.
- Die beiden mittleren Pins sind das Signal. Verbinden Sie eine der beiden mit D4 auf der NodeMCU (sie sind miteinander verbunden, es spielt also keine Rolle, welche).
Laden Sie nun die geänderten hoch ReceiveDemo_AdvancedÖffnen Sie anschließend den seriellen Monitor und drücken Sie die Tasten auf Ihrer Fernbedienung. Kopieren Sie die Dezimalstelle (einschließlich Bitlänge), Impulslänge und Protokoll, wenn Sie eine Taste drücken.
Danach stellte ich fest, dass meine Projektionsfläche verwendet wurde
- BILDSCHIRM: 8694273 / 24bit empfangen; Pulslänge: 355 oder 356; Protokoll: 1
- BILDSCHIRM AB: 8694276 / 24bit empfangen;Pulslänge: 355 oder 356; Protokoll: 1
Fahren Sie mit so vielen Schaltflächen fort, wie Sie benötigen.
Sender testen
Als Nächstes werden wir versuchen, Codes mit dem Sender zu senden. Verdrahten Sie das Sendermodul (das quadratische) wie folgt. Seien Sie vorsichtig: Die Beschriftung dieser Stifte ist grausam.
Der VCC-Pin befindet sich tatsächlich in der Mitte und 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 an D4, VCC an VIN und GND an GND (entfernen Sie das Empfängermodul, Sie brauchen es nicht mehr).
Laden Sie die Beispiele -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitchesund ändern Sie erneut den Daten-Pin:
mySwitch.enableTransmit (10);
zu
mySwitch.enableTransmit (2);
Beachten Sie, dass die Bibliothek eine Vielzahl von Beispielen enthält. Welche für Sie funktioniert, hängt von der genauen Art des Schalters ab, über den Sie verfügen. Typ A (DIP-Schalter) und B (Wählscheiben oder Schieberegler) sind am häufigsten - Siehe die Bilder auf der RCSwitch-Seite. Bei Typ B ist das Ein- und Ausschalten einer Steckdose so einfach wie:
mySwitch.switchOn (1, 4); mySwitch.switchOff (1, 4);
Dabei ist 1 die Kanal-ID (das obere Einstellrad) und 4 die Socket-ID (das untere Einstellrad). Diese waren in römischen Ziffern auf meine Steckdosen geschrieben. Es können daher maximal 16 einzelne Sockets angesprochen werden, obwohl mehrere Sockets dieselbe Adresse verwenden können, wenn Sie mehrere Geräte gleichzeitig einschalten müssen.
Meine Projektionswand war jedoch etwas anders - sie verwendete eine andere Pulslänge. Um diese zu bedienen, funktionierte das Folgende. Beachten Sie, dass Sie bei Bedarf auch ein anderes Protokoll definieren können, ABER stellen Sie sicher, dass Sie das Protokoll VOR der Pulslänge definieren. Die Pulslänge wird beim Protokollwechsel überschrieben.
// Beachten Sie, dass mein Bildschirm tatsächlich ZWEI Tastendrücke erfordert (kein langes Drücken, sondern zwei physische drückt), also verzögere ich etwas und sende dann das gleiche Signal erneut. void screenUp () { mySwitch.setPulseLength (358); mySwitch.send (8694273,24); // (Dezimalcode, Anzahl der Bits) Verzögerung (2000); mySwitch.send (8694273,24); } void screenDown () {mySwitch.setPulseLength (358); mySwitch.send (8694276,24); Verzögerung (2000); mySwitch.send (8694276,24); }
Testen Sie zuerst, ob alle Ihre Codes funktionieren, bevor Sie mit dem nächsten Schritt fortfahren.
Steuerung über MQTT
Öffnen Sie die von Github heruntergeladene Skizze mit dem Namen mqtt_rcswitch.inoÄndern Sie zunächst die Netzwerk-SSID und das Kennwort für Ihr Zuhause. Ändern Sie dann den Kanalnamen, wenn Sie möchten, und stellen Sie den MQTT-Server ein. Wenn auf Ihrer OpenHAB-Installation noch kein MQTT-Server ausgeführt wird, Lesen Sie Teil 2 unseres OpenHAB-Anfängerleitfadens OpenHAB Anfängerhandbuch Teil 2: ZWave, MQTT, Regeln und DiagrammeOpenHAB, die Open-Source-Hausautomationssoftware, übertrifft die Fähigkeiten anderer Hausautomationssysteme auf dem Markt bei weitem - aber die Einrichtung ist nicht einfach. In der Tat kann es geradezu frustrierend sein. Weiterlesen . Beachten Sie, dass mein Code für Steckdosen vom Typ B (Drehschalter) ausgelegt ist, obwohl Sie ihn auch für DIP-Schalter leicht ändern können.
Der wichtigste Teil des Codes ist der Nachricht erhalten() Funktion, die auf eingehende MQTT-Befehle reagiert. In dieser Funktion suchen wir zuerst nach dem Hauptschlüsselwort. Ich habe "Schalter" und "Bildschirm" ausgewählt. Im Fall von "Switch" analysieren wir dann die Kanal- und Plug-ID. Überprüfen Sie dann den Nutzlastkörper für den Befehl.
void messageReceived (String-Thema, String-Nutzlast, char * Bytes, vorzeichenlose int-Länge) {if (topic.indexOf ("switch")> = 0) {// Steuerung wechseln, Kanal analysieren und ID int channel = getValue einstecken (Thema, '/', 3) .toInt (); int plug = getValue (Thema, '/', 4) .toInt (); if (payload == "on") {mySwitch.switchOn (Kanal, Stecker); } else {mySwitch.switchOff (Kanal, Stecker); }} else if (topic.indexOf ("screen")> = 0) {// Bildschirmsteuerung if (payload == "up") {screenUp (); } else if (payload == "down") {screenDown (); }} / * füge noch einen hinzu, wenn du hier auf weitere Befehle wartest (oder ändere einfach den obigen, wenn du keinen Bildschirm willst) * / }
Standardmäßig funktionieren dann die folgenden MQTT-Befehle:
Wohnzimmer / Steuerung / Schalter / X / Y (wobei X Kanal und Y Stecker-ID ist; mit ein- oder ausgeschaltetem Nachrichtentext)
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 vorerst die folgenden Elemente definiert, aber Sie sollten in der Lage sein, herauszufinden, wie Sie weitere hinzufügen können:
/ * RF433mHz Geräte * / CinemaScreen "Bildschirm" wechseln (Kino) {mqtt = "> [Broker: Wohnzimmer / Steuerung / Bildschirm: Befehl: EIN: unten],> [Broker: Wohnzimmer / Steuerung / Bildschirm: Befehl: AUS: oben]"} Switch Switch41 "Switch41" (Kino) {mqtt = "> [Broker: Wohnzimmer / Steuerung / Schalter / 4/1: Befehl: EIN: Ein],> [Broker: Wohnzimmer / Steuerung / Schalter / 4/1: Befehl: AUS: aus]"} Switch Switch42 "Switch42" (Kino) {mqtt = "> [Broker: Wohnzimmer / Steuerung / Schalter / 4/2: Befehl: EIN: Ein],> [Broker: Wohnzimmer / Steuerung / Schalter / 4/2: Befehl: AUS: aus]"}
Sie sollten jetzt in der Lage sein, Ihre HF-Geräte von OpenHAB aus zu steuern! Eine Sache, die mich angenehm überraschte, war die Reichweite - ein einzelner Knoten konnte den größten Teil meines Hauses abdecken. Sie können natürlich einen weiteren Knoten hinzufügen und denselben Kanal abhören, der einfach dieselben Befehle wiederholt, wenn Sie weitere Abdeckung benötigen.
Die einzige zu berücksichtigende Einschränkung besteht darin, dass die Steckdosen selbst ihren Status nicht melden können Verwenden Sie die Originalfernbedienung, und steuern Sie, ob der Status der Steckdose möglicherweise nicht genau wiedergegeben wird OpenHAB. Halten Sie sich nur an die OpenHAB-Oberfläche, und es sollte Ihnen gut gehen.
Fragen oder Probleme? Fragen Sie in den Kommentaren nach und ich werde mein Bestes geben, um Ihnen zu helfen. Wenn Sie meinen Code verbessern möchten, können Sie eine Pull-Anfrage senden.
James hat einen BSc in künstlicher Intelligenz und ist CompTIA A + und Network + zertifiziert. Er ist der Hauptentwickler von MakeUseOf und verbringt seine Freizeit mit VR-Paintball und Brettspielen. Er baut seit seiner Kindheit PCs.