DIY Smart Home Sensoren mit Arduino, MySensors und OpenHAB
Intelligente Haussensoren kosten eine lächerliche Menge Geld. Für 60 bis 100 US-Dollar allein für einen Bewegungsmelder oder einen Feuchtigkeitssensor wird die Verkabelung eines ganzen Hauses zur Domäne derjenigen, die dumme Einkünfte haben. Lass uns unser eigenes bauen.
Glücklicherweise haben die feinen Leute hinter MySensors.org die harte Arbeit bereits geleistet. Heute zeige ich Ihnen, wie Sie mit dem MySensors-Framework eine preiswerte Reihe von Smart-Home-Sensoren erstellen, die in eine OpenHAB-Installation einfließen können (siehe unser Handbuch "Erste Schritte mit OpenHAB auf Raspberry Pi"). Erste Schritte mit OpenHAB Home Automation auf Raspberry Pi Erste Schritte mit OpenHAB Home Automation für Raspberry Pi OpenHAB ist eine ausgereifte Open Source-Plattform für Heimautomation, die auf einer Vielzahl von Hardware ausgeführt wird und protokollunabhängig ist. Das bedeutet, dass sie mit nahezu jeder auf dem Markt erhältlichen Hausautomationshardware verbunden werden kann. Weiterlesen . Ich gehe davon aus, dass Sie bereits einen funktionierenden MQTT-Server haben und die Grundlagen des MQTT-Nachrichtenformats verstehen. Wenn nicht, lesen Sie bitte das Nachfolgende des OpenHAB-Handbuchs, das Anweisungen zur Installation eines MQTT-Servers enthält. OpenHAB-Beginnerhandbuch Teil 2: ZWave, MQTT, Regeln und Diagramme OpenHAB-Beginnerhandbuch Teil 2: ZWave, MQTT, Regeln und Diagramme OpenHAB , die Open-Source-Hausautomationssoftware, übertrifft bei weitem die Fähigkeiten anderer auf dem Markt verfügbarer Hausautomationssysteme - aber die Einrichtung ist nicht einfach. In der Tat kann es geradezu frustrierend sein. Weiterlesen .
Obwohl ich mich speziell mit der Weiterleitung der MySensors-Daten von einem Arduinos-Netzwerk unter Verwendung von MQTT an eine OpenHAB-Installation beschäftige, sollte ich darauf hinweisen, dass das MySensors-Framework in verschiedene Hausautomationssteuerungen einfließen kann. Ich habe dies hier als eine vollständige Lösung präsentiert, die für mich funktioniert, aber überprüfen Sie die MySensors-Website, da diese möglicherweise auch für Ihren ähnlichen Zweck geeignet ist, jedoch etwas andere Hardware oder ein anderes Messaging-Protokoll verwendet. Es ist unglaublich vielseitig.
Die Hardwarekosten für mein Setup betragen weniger als 10 US-Dollar pro Knoten (etwas mehr für das Gateway), aber zusätzliche Sensoren und Aktuatoren können für sehr wenig hinzugefügt werden (der DHT11-Feuchte- und Temperatursensor ist beispielsweise jeweils etwa 1 US-Dollar; ein Hochspannungsrelais ist um 3 $).
Was machen wir?
Die Grundidee besteht darin, dass wir unser bestehendes, überfülltes lokales Netzwerk nicht mit unzuverlässigem WLAN oder teuren Ethernet-Schilden erweitern, sondern ein völlig getrenntes netzwerkfähiges Netzwerk nur für die Arduinos erstellen. überbrücken Sie dann das lokale Netzwerk mit einem einzigen Gateway-Knoten, der sowohl eine Ethernet-Verbindung als auch eine Funkverbindung zu den anderen Arduinos hat. Wir machen also ein paar Sensorknoten, die Daten sammeln. und einen Gateway-Knoten, der diese Daten an den OpenHAB-Server weiterleitet.
Das funktioniert auch für mich, denn mein WLAN-Empfang ist so schrecklich und ich möchte ihn nicht mit unnötigen Daten stören. Wenn Sie mit Wi-Fi zufrieden sind, verwenden Sie das kostengünstige Arduino-kompatible ESP8266. Triff den Arduino-Killer: ESP8266 Triff den Arduino-Killer: ESP8266 Was wäre, wenn ich dir ein Arduino-kompatibles Entwicklungsboard mit eingebautem Wi-Fi sagen würde -Fi für weniger als $ 10? Nun, das gibt es. Lesen Sie mehr mit integrierten Wi-Fi-Karten - MySensors unterstützt auch diese.
Wichtiger Hinweis für El Capitan-Benutzer und Arduino-Klone: Apple hat es geschafft, die seriellen Treiber, die für die Kommunikation mit einer Reihe von Arduino-Klonkarten verwendet wurden, in der neuesten Version von El Capitan dank neuer Sicherheitsmaßnahmen zu brechen. Um zu sehen, ob Sie betroffen sind, schauen Sie auf die Platine und den Chip, der dem USB-Anschluss am nächsten ist. Wenn es CH340 sagt, sind Sie davon betroffen. Befolgen Sie die Anweisungen, um die Treibersignatur zu deaktivieren, und installieren Sie die seriellen CH340-Treiber erneut.
Benötigte Komponenten
Für das Gateway benötigen Sie:
- Arduino Uno
- Ethernet Shield (W5100-basiert)
- NRF24L01-Modul - Ich habe das verwendet +PA + LNA Versionen durchgängig, die eine Reichweite von bis zu 1 km haben. Die Verdrahtung ist gleich wie Sie möchten.
Für jeden Sensorknoten:
- Arduino Uno
- NRF24L01-Modul
- Sensoren (zunächst würde ich ein DHT11- oder DHT22-Modul für Temperatur und Luftfeuchtigkeit vorschlagen)
Zusätzliche / optional:
- 10 uF-Kondensatoren, einer für jedes HF-Modul, das Sie haben (der Link bezieht sich auf ein Pack von 50!)
- Netzteil mit 5 V und 3,3 V Ausgang (YwRobot MB102 funktioniert gut und kostet jeweils 1 US-Dollar) - erforderlich, wenn ein Arduino-Klon verwendet wird. Sie benötigen dazu auch eine 9-12 V Gleichstromversorgung.
- Prototyping Shields oder kurze männlich-weibliche Überbrückungsdrähte.
Arbeiten mit NRF24L01-Modulen
Beginnen wir mit den NRF24L01-Modulen, da sie der komplexeste Teil des Projekts sind. Ich entschied mich für die teurere Version mit größerer Reichweite: technisch bekannt als NRF24L01 + PA + LNA. Sie verfügen über eine integrierte Signalverstärkungsschaltung und einen Antennenanschluss. Ich empfehle Ihnen jedoch, die günstigere Version der Module ohne Antenne auszuprobieren, wenn Sie ein normales Zuhause mit normalen Wänden haben und nicht die meterdicke, feste Steinwand Ich mache. Die beanspruchte Reichweite beträgt etwa einen Kilometer, mehr als genug für mich, um sie in den Gartenschuppen zu bringen.
Diese Dinge sind jedoch Ja wirklich schwer zu bearbeiten; Wenn Sie alles machen, ohne vorher diese Tipps zu lesen, werden Sie enttäuscht sein.
- Das Modul benötigt 3,3 V Eingangsspannung für den VCC-Pin - nicht 5v. Wenn Sie 5V einsetzen, werden Sie es braten.
- Löten Sie einen 10 uF-Kondensator an den VCC / GND-Anschlüssen. Die durchgezogene graue Linie am Kondensator zeigt die negative / GND-Seite an.
- Verwenden Sie kurze, hochwertige Sprungkabel. oder besser noch, löten Sie sie direkt an eine Prototyp-Abschirmung, um die Kabellänge auf ein Minimum zu reduzieren und solide Verbindungen.
- Wenn Sie einen Arduino-Klon verwenden, bietet der Spannungsregler auf dem 3,3-V-Pin nicht genug für sie. Sie müssen eine externe Stromversorgungsplatine (oben verbunden) verwenden, die für etwa 1 USD erhältlich ist. Diese liefern stabile 3,3 V. Wenn Sie eine Original Arduino-Marke Uno, dies scheint kein Problem zu sein.
Ich empfehle Ihnen dringend, zunächst einige grundlegende Tests durchzuführen, um festzustellen, ob Ihr Radio funktioniert. Verbinden Sie zwei Funkgeräte wie auf der Seite MySensors gezeigt. Es spielt keine Rolle, dass ihr Diagramm Arduino Micro-Boards zeigt - es werden die gleichen Pin-Nummern verwendet. Beachten Sie, dass das Diagramm den NRF24L01 vom zeigt oben; Sie werden tatsächlich Dinge einstecken von der Unterseite. Passen Sie mental entsprechend an. Ignorieren Sie den grauen IRQ-Pin. Er wird derzeit nicht verwendet. In Summe:
- VCC geht an Ihrer externen Stromversorgung auf 3,3 V
- GND geht auf eine gemeinsame Bodenschiene
- CE an Pin 9
- CSN / CS an Pin 10
- MOSI auf Pin 11
- MISO an Pin 12
- SCK an Pin 13
Sie benötigen zwei vollständig verdrahtete Knoten zum Testen. Laden Sie die RF24-Bibliothek herunter und laden Sie die einfachste Fertig machen Beispiel. Schalten Sie beide Module ein, lassen Sie aber eines über USB angeschlossen und öffnen Sie die serielle Konsole. Art “T” und senden, um in den Sendemodus zu wechseln. An diesem Punkt sollten Sie Debugmeldungen erhalten, die besagen, dass die Nachricht erfolgreich an den anderen Knoten gesendet wurde.
Erstellen des MySensors MQTT Client Gateway
Ok, jetzt, da wir wissen, dass die RF24-Funkgeräte richtig angeschlossen sind und richtig funktionieren, laden Sie den Entwicklungszweig des MySensors Arduino-Pakets herunter. Dieses Tutorial wurde mit Version 1.5 geschrieben, sollte aber auch mit späteren Versionen in Ordnung sein. Wir verwenden den Entwicklungszweig, weil zum Zeitpunkt des Schreibens der MQTT Klient Gateway ist noch nicht Bestandteil des Hauptpakets.
Obwohl MQTTGateway im Master-Zweig verfügbar ist, fungiert es auch als Server, den wir nicht möchten, da auf dem Raspberry Pi bereits ein stabiler MQTT-Server ausgeführt wird. Wir möchten nur die MySensors-Daten darauf weiterleiten. Auch wenn dies nicht das ist, was Sie wollen - wenn Sie MQTT lieber nicht verwenden möchten -, dann schauen Sie sich EthernetGateway oder SerialGateway an, die beide auch mit OpenHAB kompatibel sind.
Es ist erwähnenswert, dass das Download-Paket nicht nur wichtige MySensors-Dateien enthält, sondern auch kompatible Bibliotheken, die für jeden möglichen Sensor benötigt werden. Um Konflikte zu vermeiden, empfehle ich, nur den gesamten aktuellen Bibliotheksordner zu sichern und durch die Ordner im Download-Paket zu ersetzen.
Die Verkabelung für das Gateway ist etwas anders. Sobald Sie Ihre Ethernet-Abschirmung haben, verwenden Sie die folgenden Pins für das Funkmodul:
- CE an Pin 5
- CSN an Pin 6
- SCK an Pin A0 anschließen
- MOSI an A1 anschließen
- MISO zum Anstecken von A2
Sie müssen auch das aktivieren #define SOFTSPI Zeile in der Bibliotheken / mySensors / MyConfig.h Datei. Entfernen Sie das //, um das Kommentarzeichen zu entfernen, es ist ungefähr die Linie 309 auf meiner.
Wir müssen dies tun, da sowohl das Funkmodul als auch die Netzwerkabschirmung SPI verwenden und nicht kompatibel sind. Daher verschieben wir das Funkmodul SPI einfach auf einige andere Pins und führen die SPI-Kommunikation stattdessen in Software durch (daher, weich SPI).
Laden Sie die MySensors / GatewayW5100MQTTClient skizzieren. Wenn Sie dies nicht im MySensors-Menü sehen, haben Sie keine Entwicklungszweig Eingerichtet. Verwenden Sie den oben angegebenen Link, um die gesamte Bibliothek erneut herunterzuladen.
Sie müssen eine statische IP-Adresse für den Controller, die IP Ihres Netzwerk-Routers und Ihres Subnetzes sowie die IP-Adresse Ihres vorhandenen MQTT-Servers definieren. Fühlen Sie sich frei, auch die Themen-Präfixe zu ändern, wenn Sie möchten. Laden Sie das Ding hoch und schließen Sie es an das Netzwerk an. Überprüfen Sie die serielle Konsole kurz auf krasse Fehler, z. B., dass keine Verbindung zu Ihrem MQTT-Server hergestellt werden kann. Andernfalls legen Sie sie beiseite (lassen Sie sie jedoch aktiviert)..
Aufbau der Sensorknoten
Zuerst kommentieren Sie das aus #define SOFTSPI Zeile in der MyConfig.h Datei erneut, indem Sie // am Anfang zurücksetzen. Sie wird nur für das Gateway benötigt - wir verwenden die Standard-NRF24L01-Verdrahtung für die Sensorknoten, die Hardware-SPI verwenden. Wenn Sie daran erinnern müssen:
- VCC geht an Ihrer externen Stromversorgung auf 3,3 V (oder auf dem Arduino selbst, wenn es sich um ein Original und nicht um einen Klon handelt)
- GND geht auf eine gemeinsame Bodenschiene
- CE an Pin 9
- CSN / CS an Pin 10
- MOSI auf Pin 11
- MISO an Pin 12
- SCK an Pin 13
Als nächstes verbinden Sie Ihre Wahl des Sensors. Ich verwende den DHT11-Feuchte- und Temperatursensor zum Testen. Wenn Sie jedoch zur Liste der Sensoren und Aktoren in der Seitenleiste der MySensors-Seite scrollen, finden Sie eine große Auswahl an anderen Optionen: Türen, Regenmesser, Licht, Bewegung und sogar RFID - und mehr. Sie können sehen, dass ich dem unten abgebildeten Knoten auch ein Relais hinzugefügt habe, aber dazu später mehr.
Laden Sie schließlich die Luftfeuchtigkeitssensor Beispiel aus dem Menü MySensors und fügen Sie unmittelbar nach den Kommentaren die folgende Zeile ein.
#define MY_NODE_ID 2
Da wir eine spezielle Version des Controllers verwenden, die nur Dinge an unseren eigenen MQTT-Server weiterleitet, verfügt er nicht über die Standard-Controller-Funktion, die jedem neuen Knoten automatisch Knoten-IDs zuweisen würde. Stattdessen definieren wir es jedes Mal manuell. Notieren Sie sich diese Nummer irgendwo für Ihre eigenen Datensätze und ändern Sie sie für jeden Knoten.
Aktivieren Sie auch die Debug-Ausgabe:
#define MY_DEBUG
Überprüfen Sie abschließend, ob der Daten-Pin Ihres DHT11-Sensors korrekt ist.
#define HUMIDITY_SENSOR_DIGITAL_PIN 7
Dann laden Sie hoch!
Es lohnt sich, die serielle Konsole zu öffnen, um einen Blick darauf zu werfen. Der entscheidende Aspekt ist, zu schauen st =, Dies ist der Status der Nachricht. st = scheitern bedeutet, dass die Nachricht nicht gesendet wurde. Es ist möglich, dass Sie keine eindeutige Knoten-ID definiert haben oder dass Ihr Gateway offline ist. Ich habe diese Fehler durch einfaches Trennen des Gateways vorgetäuscht:
Wenn alles funktioniert, sollten Sie sehen, dass einige Daten auf Ihrem MQTT-Server angezeigt werden. Das Einfügen in OpenHAB ist nicht in diesem Tutorial enthalten, wurde aber in Teil 2 des OpenHAB-Leitfadens behandelt. OpenHAB-Beginnerhandbuch Teil 2: ZWave, MQTT, Regeln und Diagramme Die Open-Source-Hausautomationssoftware übertrifft die Fähigkeiten anderer auf dem Markt verfügbarer Hausautomationssysteme bei weitem - aber es ist nicht einfach, sich einzurichten. In der Tat kann es geradezu frustrierend sein. Lesen Sie mehr, damit Sie dort zurückgreifen können.
Sensorcode kombinieren
Obwohl es relativ einfach ist, einen einzelnen Sensorknoten zum Laufen zu bringen, ist es etwas komplizierter, wenn Sie jedem Knoten mehrere Sensoren hinzufügen möchten. Im Wesentlichen werden Sie die Code-Snippets aus zwei verschiedenen Beispielen zusammenführen. Am einfachsten zeigen Sie dies am Beispiel eines Videos! Hier kombiniere ich unseren Basisfeuchtigkeitssensor mit einem Relais.
Den vollständigen Code für Feuchtigkeitssensor und Relais finden Sie hier, der bereits mit einer nicht blockierenden Schleife modifiziert wurde, wie ich im Video erwähnt habe. Um mehr über die MQTT-Befehlsstruktur zu erfahren, die zum Aktivieren des Relais erforderlich ist, überprüfen Sie die serielle API. Es reicht jedoch aus, um zu sagen, dass der folgende Kanal das erste Relais im von mir angegebenen Code steuert (mit einem Nachrichtentext von 0 oder 1):
mysensors-in / 9/1/1/0/2
Ihre einzige Einschränkung ist jetzt die Menge an Speicher auf dem Arduino, und ich sage das - die zuverlässigsten Sensoren in meinem Smart Home sind nicht die kommerziellen Z-Wave-Module, die 80 Dollar kosten, sondern die MySensors-Custom-Module.
Ich werde es heute beenden, aber wenn Sie Probleme haben, können Sie in den Kommentaren oder den sehr aktiven Benutzerforen von MySensors nachfragen. Werden Sie Ihre eigenen billigen Sensorknoten zusammenstellen? Wie kommt dein intelligentes Zuhause??
Erfahren Sie mehr über: Arduino, Smart Sensor.