OpenHAB Anfängerleitfaden Teil 2: ZWave, MQTT, Regeln und Charting

OpenHAB Anfängerleitfaden Teil 2: ZWave, MQTT, Regeln und Charting

Kostenlos bedeutet nicht immer „nicht so gut wie bezahlt“, und OpenHAB ist da keine Ausnahme. Die Open-Source-Hausautomationssoftware übertrifft die Fähigkeiten jedes anderen Hausautomationssystems auf dem Markt bei weitem – aber die Einrichtung ist nicht einfach. Tatsächlich kann es geradezu frustrierend sein.





In Teil 1 des Leitfadens habe ich Sie durchgegangen Installation von OpenHAB auf einem Raspberry Pi , stellte die Kernkonzepte von OpenHAB vor und zeigte Ihnen, wie Sie Ihre ersten Elemente in das System einfügen. Heute gehen wir weiter:





  • ZWave-Geräte hinzufügen
  • Hinzufügen eines Harmony Ultimate-Controllers
  • Einführung von Regeln
  • Einführung von MQTT und Installation eines MQTT-Brokers auf Ihrem Pi mit Sensoren auf einem Arduino
  • Daten aufzeichnen und grafisch darstellen

Einführung in Z-Wave

Z-Wave ist seit Jahren das dominierende Hausautomatisierungsprotokoll: Es ist zuverlässig, wurde umfassend entwickelt und funktioniert über eine viel größere Reichweite als alle anderen Smart-Home-Produkte. Es stehen Ihnen Hunderte von Z-Wave-Sensoren zur Verfügung, die eine Vielzahl von Aufgaben erfüllen. OpenHAB kann mit Z-Wave arbeiten, aber die Einrichtung ist mühsam und die Zuverlässigkeit kann nicht garantiert werden.





Wenn Sie den Kauf eines Hauses voller Z-Wave-Sensoren speziell für die Verwendung mit OpenHAB in Betracht ziehen, möchte ich Sie bitten, es sich noch einmal zu überlegen. Es kann gut für Sie funktionieren, oder es kann von kleinen, aber anhaltenden Problemen geplagt werden. Kaufen Sie zumindest kein Haus voller Sensoren, bis Sie die Gelegenheit hatten, einige auszuprobieren. Der einzige Grund, sich für Z-Wave zu entscheiden, ist, wenn Sie sich nicht zu 100 % mit OpenHAB vertraut gemacht haben und Ihre Optionen in Zukunft offen lassen möchten: Z-Wave funktioniert beispielsweise mit Samsung SmartThings-Hubs sowie Z-Wave-spezifischen Hubs wie Homeseer und eine Reihe anderer Softwareoptionen wie domoticz .

Obwohl OpenHAB eine Z-Wave-Bindung enthält, müssen Sie trotzdem Konfigurieren Sie zuerst das Z-Wave-Netzwerk , bevor OpenHAB mit der Datenabfrage beginnen kann. Wenn Sie ein Rasberry-Controller-Board haben, wird Ihnen Software zur Konfiguration des Netzwerks mitgeliefert, daher werden wir hier nicht darauf eingehen. Wenn Sie einen Aeotec USB Z-Stick Controller oder ähnliches gekauft haben, haben Sie wahrscheinlich keine Software im Lieferumfang, also lesen Sie weiter.



Aeotec Z-Stick Gen5 Z-Wave Hub Z-Wave Plus USB zum Erstellen eines Gateways (normales Weiß) JETZT BEI AMAZON KAUFEN

Wenn Sie bereits ein Z-Wave-Netzwerk eingerichtet haben , können Sie einfach Ihren Controller an den Pi anschließen und mit der Konfiguration der Bindung und der Elemente beginnen. Wenn dies Ihr erster Ausflug in Z-Wave ist, ist es etwas komplexer.

Erstens auf der Hardware-Seite: Jeder Controller hat seine eigene Art, sich mit Geräten zu koppeln (technisch bekannt als 'Inklusionsmodus', in dem eine Node-ID zugewiesen wird). Im Fall des Aotec Z-Stick bedeutet dies, ihn vom USB-Port zu trennen und den Knopf einmal zu drücken, um ihn in den Aufnahmemodus zu versetzen. Bringen Sie es dann in die Nähe des zu koppelnden Geräts und drücken Sie auch darauf die Aufnahmetaste (Dies wird auch variieren: Bei meiner Everspring-Buchse muss die Taste dreimal kurz hintereinander gedrückt werden, daher ist die Lektion hier, das Handbuch für Ihr Gerät zu lesen) .





Der Z-Stick blinkt kurz, um den Erfolg anzuzeigen. Dies führt zu Problemen beim Wiedereinstecken in den Pi, da ein neuer Port zugewiesen wird. Starten Sie Ihren Pi neu, damit er auf den Standardport zurückgesetzt wird, wenn Sie feststellen, dass ihm dynamisch ein anderer Port zugewiesen wurde. Noch besser: Schließen Sie es nicht an den Pi an, bevor Sie nicht alle Hardware-Pairings durchgeführt haben.

Installation von HABmin- und Z-Wave-Bindungen

Da OpenHAB eigentlich kein Konfigurationsprogramm für Z-Wave ist, werden wir ein weiteres Web-Management-Tool installieren, das dies tut – etwas namens HABmin. Gehen Sie rüber zum HABmin Github-Repository Laden Sie die aktuelle Version herunter. Sobald Sie es entpackt haben, finden Sie 2 .Krug Dateien im Addons-Verzeichnis – diese sollten im entsprechenden Addons-Verzeichnis in Ihrer OpenHAB Home-Freigabe abgelegt werden (Wenn Sie auch den Aotec gen5 Z-Stick verwenden, stellen Sie sicher, dass Sie mindestens Version 1.8 der Z-Wave-Bindung haben) .





Als nächstes erstellen Sie einen neuen Ordner im webapps-Verzeichnis und nennen ihn 'habmin' (Kleinschreibung ist wichtig). Kopieren Sie den Rest der heruntergeladenen Dateien dorthin.

Hinweis: Es gibt auch a HABmin 2 unter aktiver Entwicklung. Die Installation ist ähnlich, jedoch mit einem zusätzlichen .jar-Addon. Es könnte sich lohnen, beides auszuprobieren, nur um zu sehen, welches Sie bevorzugen.

Wenn Sie es noch nicht getan haben, schließen Sie Ihren Controller an Ihren Pi an. Geben Sie Folgendes ein, um den richtigen Port zu finden.

ls /dev/tty*

Sie suchen etwas mit USB im Namen, oder in meinem speziellen Fall präsentierte sich der Z-Stick als /dev/ttyACM0 (ein Modem). Es ist möglicherweise einfacher, den Befehl einmal vor dem Anschließen und einmal danach auszuführen, damit Sie sehen können, was sich ändert, wenn Sie sich nicht sicher sind.

Öffnen Sie die OpenHAB-Konfigurationsdatei und ändern Sie den Abschnitt zu Z-Wave, indem Sie beide Zeilen auskommentieren und Ihre tatsächliche Geräteadresse eingeben. Ein letzter Schritt war für mich, dem OpenHAB-Benutzer den Zugriff auf das Modem zu ermöglichen.

sudo usermod -a -G dialout openhab

Um alles in die Tat umzusetzen, starten Sie OpenHAB neu

sudo service openhab neu starten

Wenn Sie das Debug-Protokoll überprüfen, sehen Sie hoffentlich so etwas. Herzlichen Glückwunsch, Sie sprechen jetzt Z-Wave. Sie können auch feststellen, dass das Debug-Protokoll mit Nachrichten von verschiedenen Z-Wave-Knoten überflutet ist. Beginnen wir damit, HABMIN zu überprüfen, um zu sehen, was es gefunden hat: http://openhab.local:8080/habmin/index.html (ersetzen Sie openhab.local durch Ihren Raspberry Pi-Hostnamen oder Ihre IP-Adresse).

In HABMIN gibt es viel zu sehen, aber uns geht es nur um die Konfiguration -> Bindungen -> Z-Wave -> Geräte Registerkarte, wie Sie unten sehen können. Erweitern Sie den Knoten, um den Standort und die Namensbezeichnung zu Ihrer besseren Orientierung zu bearbeiten.

Konfigurieren von Z-Wave-Elementen

Jedes Z-Wave-Gerät hat eine spezifische Konfiguration für OpenHAB. Zum Glück wurden die meisten Geräte bereits untersucht und es wird bereits Beispiele für Sie geben. Das Konfigurieren von benutzerdefinierten Geräten, die nicht erkannt werden, würde den Rahmen dieses Handbuchs sprengen, aber nehmen wir vorerst an, dass es unterstützt wird.

Erstens habe ich einen einfachen Everspring AN158-Netzschalter und -Messgerät auf Node 3. Ein kurzes Googeln führte mich zu einem Blog-Beitrag auf Wetwa.re mit einer Beispielartikelkonfiguration. Ich habe das wie folgt angepasst:

Schalter Entfeuchter_Schalter 'Entfeuchter' {zwave='3:command=switch_binary'}

Number Dehumidifier_Watts 'Leistungsaufnahme des Entfeuchters [%.1f W]' { zwave='3:command=meter' }

Perfekt.

Als nächstes kommt ein Aeotec Gen5 Multi-Sensor.

Aeon Labs Aeotec Z-Wave Gen5 Multisensor (Z-Wave Plus) JETZT BEI AMAZON KAUFEN

Für diese habe ich eine Beispielkonfiguration gefunden unter iwasdot.com , und mein Multisensor befindet sich auf Node 2.

Nummer Hallway_Temperature 'Flurtemperatur [%.1f °C]' (Flur, Temperatur) {zwave='2:0:command=sensor_multilevel,sensor_type=1,sensor_scale=0'}

Nummer Hallway_Humidity 'Flurfeuchte [%.0f %%]' (Flur, Feuchtigkeit) {zwave='2:0:command=sensor_multilevel,sensor_type=5'}

Nummer Hallway_Luminance 'Hallway Luminance [%.0f Lux]' (Flur) {zwave='2:0:command=sensor_multilevel,sensor_type=3'}

Kontakt Hallway_Motion 'Flurbewegung [%s]' (Flur, Bewegung) {zwave='2:0:command=sensor_binary,respond_to_basic=true'}

Nummer sensor_1_battery 'Batterie [%s %%]' (Bewegung) {zwave='2:0:command=battery'}

Wenn Ihnen das Format seltsam erscheint, gehen Sie bitte zum ersten zurück Ratgeber für Anfänger , insbesondere der Abschnitt zur Farbtonbindung, in dem ich erkläre, wie Elemente hinzugefügt werden. Sie werden wahrscheinlich immer nur solche Beispiele kopieren müssen, aber falls Sie ein neues Gerät haben, enthält die verbindliche Dokumentation alle Befehle .

Logitech Harmony-Bindung

Bevor wir uns mit den Regeln befassen, möchte ich noch eine kurze Anmerkung zum Arbeiten mit der Harmony-Bindung hinzufügen. Ich bin ein großer Fan der Harmony-Serie der ultimativen Fernbedienungen, um das Home Media Center-Erlebnis zu vereinfachen, aber sie stehen oft als separates System im Smart Home. Mit OpenHAB können Logitech Harmony-Aktivitäten und die vollständige Gerätesteuerung jetzt Teil Ihres zentralisierten Systems und sogar in Automatisierungsregeln integriert werden.

Beginnen Sie mit der Installation der drei Bindungsdateien, die Sie finden, indem Sie apt-cache verwenden, um nach 'harmonie' zu suchen:

Vergiss nicht chown das Bindings-Verzeichnis erneut, wenn Sie fertig sind:

sudo apt-get install openhab-addon-action-harmonyhub

sudo apt-get install openhab-addon-binding-harmonyhub

sudo apt-get install openhab-addon-io-harmonyhub

sudo chown -hR openhab:openhab /usr/share/openhab

Um die Bindung zu konfigurieren, öffnen Sie die Datei openhab.cfg und fügen Sie wie folgt einen neuen Abschnitt hinzu:

########## HARMONY-FERNBEDIENUNG ##########

harmonischhub:host=192.168.1.181 oder deine ip

Harmoniehub:Benutzername= Ihr-Harmonie-E-Mail-Login

harmonischhub:password= Ihr Passwort

Die IP-Adresse ist die Ihres Harmony-Hubs. Verwenden Sie einen Netzwerkscanner, um das herauszufinden. Sie müssen auch Ihre Anmeldedaten eingeben, die Sie eingeben, wenn Sie das standardmäßige Harmony-Konfigurationsdienstprogramm starten. Das ist es. Nach dem Neustart Ihres Hue sollte Ihr Debug-Protokoll einen plötzlichen Ausgabeschub von der Bindung haben.

Dies ist eine JSON-formatierte Liste all Ihrer Aktivitäten, Geräte und Befehle, die gesendet werden können. Es ist eine gute Idee, dies zum späteren Nachschlagen zu kopieren. Sie können das Lesen mit zusammenklappbaren Knoten noch einfacher machen, indem Sie sie in einen Online-JSON-Formatierer einfügen wie dieser .

Neben der standardmäßigen PowerOff-Aktivität, die standardmäßig festgelegt ist, finden Sie hier Ihre eigenen definierten Aktivitäten namentlich aufgelistet. Lassen Sie uns nun ein einfaches Ein-Tasten-Steuerelement erstellen, um Aktivitäten zu starten. Fügen Sie zunächst in Ihrer Artikeldatei die folgende Zeile hinzu. Ändern Sie die Gruppe und das Symbol, wenn Sie möchten.

/* Harmony-Hub */

String Harmony_Activity 'Harmony [%s]' (Living_Room) {harmonyhub='*[currentActivity]' }

Das ist ein bidirektionale String-Bindung , die sowohl die aktuelle Aktivität abrufen als auch der aktuellen Aktivität befehlen kann, etwas anderes zu sein. Jetzt können wir in der Sitemap-Datei eine Schaltfläche dafür erstellen.

Switch item=Harmony_Activity Mappings=[PowerOff='Off',Exercise='Exercise',13858434='TV',Karaoke='Karaoke']

Datei ist in einem anderen Programm geöffnet

In der eckigen Klammer sehen Sie jede Aktivität zusammen mit dem Label. Im Allgemeinen können Sie direkt auf Aktivitäten verweisen, wie Sie sie auf Ihrer Fernbedienung benannt haben, aber die Ausnahme war alles, was ein Leerzeichen im Aktivitätsnamen enthält, wie z. B. 'Fernsehen'. In diesem Fall müssen Sie die Aktivitäts-ID verwenden. Auch hier finden Sie die ID in der JSON-Debug-Ausgabe. Speichern und aktualisieren Sie Ihre Benutzeroberfläche. Sie sollten etwas Ähnliches sehen:

Sie können in Ihren Regeln auch auf Aktivitäten verweisen, wie wir als nächstes sehen werden. Lesen Sie die Wiki-Seite für weitere Informationen über die Harmoniebindung .

Eine allgemeine Einführung in die Regeln

Die meisten Smart Home Hubs beinhalten eine Art Regelerstellung, damit Sie automatisch auf Sensordaten und Ereignisse im Haus reagieren können. Tatsächlich würde ich argumentieren, dass ein wirklich intelligentes Zuhause nicht eines ist, das Sie brauchen, um Zeit mit der Interaktion mit mobilen Apps zu verbringen – es ist für den Endbenutzer unsichtbar und vollständig automatisiert. Zu diesem Zweck enthält OpenHAB auch eine leistungsstarke Skriptsprache für Regeln, die Sie programmieren können und die die Komplexität der meisten Smart-Home-Hubs oder IFTTT-Rezepte weit übertrifft.

Programmierregeln hört sich schlimmer an, als es ist. Beginnen wir ganz einfach mit einem Regelpaar, das das Licht je nach Präsenzsensor ein- oder ausschaltet:

Regel 'Bürolicht an, wenn James anwesend ist'

Wenn

Element JamesInOffice von AUS auf EIN geändert

dann

sendCommand(Office_Hue,ON)

Ende

Regel 'Bürolicht aus, wenn James geht'

Wenn

Artikel JamesInOffice von EIN auf AUS geändert

dann

sendCommand(Office_Hue,OFF)

Ende

Zuerst benennen wir die Regel – seien Sie beschreibend, damit Sie wissen, welches Ereignis ausgelöst wird. Als nächstes definieren wir unsere einfache Regel, indem wir sagen wenn x wahr ist, dann mache y . Ende bedeutet den Abschluss dieser bestimmten Regel. Es gibt eine Reihe von Sonderwörtern, die Sie in Regeln verwenden können, aber im Moment haben wir es mit zwei einfachen Syntaxteilen zu tun - Artikel , mit dem Sie den Status von etwas abfragen können; und sendCommand , die genau das tut, was Sie denken. Ich habe dir gesagt, das ist einfach.

Es ist wahrscheinlich unnötig, ein paar Regeln zu verwenden, aber wenn meine Logik komplexer wird, ist es von Vorteil, sie getrennt zu haben, egal ob ich den Bereich betrete oder verlasse - und es könnte eine gute Idee sein, irgendwo einen Lichtsensor hinzuzufügen in die Gleichung ein, damit wir nicht unnötig das Licht einschalten.

Sehen wir uns ein weiteres Beispiel zum Erstellen einer geplanten Regel an.

Regel 'Übung jeden Morgen'

Wenn

Zeit cron '0 0 8 1/1 * ? *'

dann

HarmonieStartActivity('Übung')

Ende

Auch hier benennen wir die Regel, geben Bedingungen an, wann sie ausgelöst werden soll, und die zu ergreifenden Aktionen. Aber in diesem Fall definieren wir ein Zeitmuster. Der lustige Code, den Sie in den Anführungszeichen sehen, ist ein CRON-Ausdruck für Quartz Scheduler (das Format unterscheidet sich geringfügig von einem normalen CRONtab). ich benutzte cronmaker.com um den Ausdruck zu erstellen, aber Sie können auch die Formatanleitung [Nicht mehr verfügbar] lesen, um eine detaillierte Erklärung und weitere Beispiele zu erhalten.

CronMaker.com wurde verwendet, um den korrekt formatierten Cron-Ausdruck zu generieren

Meine Regeln sagen einfach: „Jeden Morgen, jeden Tag der Woche um 8 Uhr, sag meinem Harmony Ultimate-System, dass es die Übungsaktivität starten soll“, was wiederum den Fernseher, die Xbox und den Verstärker aktiviert und nach einer Minute die A-Taste drückt, um zu starten die Diskette im Laufwerk.

Leider kann OpenHAB die Übung noch nicht für mich erledigen.

Eine weitere Regel, die ich Ihnen zeigen möchte, ist etwas, das ich verwende, um die Luftfeuchtigkeit in meinem Haus zu steuern. Ich habe einen einzigen Luftentfeuchter, den ich überall hin bewegen muss, wo er gebraucht wird, also habe ich beschlossen, alle meine Feuchtigkeitssensoren zu überprüfen, herauszufinden, welcher der höchste ist, und diesen in einer Variablen zu speichern. Es wird derzeit jede Minute ausgelöst, aber das kann leicht gesenkt werden. Schauen Sie zuerst nach:

org.openhab.core.library.types importieren.*

org.openhab.model.script.actions importieren.*

java.lang.String importieren

Regel 'Feuchtemonitor'

wann Zeit cron '0 * * * * ?'

dann

var prevHigh = 0

var highHum = ''

Luftfeuchtigkeit?.Mitglieder.fürEach[hum|

logDebug('humidity.rules', hum.name);

if(hum.state as DecimalType > prevHigh){

prevHigh = hum.state

highHum = hum.name + ': ' + hum.state + '%'

}

xbox one kabelgebundener controller treiber windows 10

]

logDebug('humidity.rules', highHum);

postUpdate (Entfeuchter_Needed,highHum);

Ende

Der Kern der Regel liegt in der Luftfeuchtigkeit?.Mitglieder.foreach Leitung. Luftfeuchtigkeit ist ein Gruppenname für meine Luftfeuchtigkeitssensoren; .Mitglieder schnappt sich alle Elemente in dieser Gruppe; für jeden iteriert über sie (mit einem seltsamen eckigen Klammerformat, mit dem Sie wahrscheinlich nicht vertraut sind). Die Syntax von Regeln ist eine Ableitung von Xtend, sodass Sie die Xtend-Dokumentation wenn Sie kein Beispiel zum Anpassen finden.

Das werden Sie wahrscheinlich nicht brauchen – es gibt Hunderte von Beispielregeln:

MQTT für OpenHAB und Internet der Dinge

MQTT ist ein leichtgewichtiges Messaging-System für die Machine-to-Machine-Kommunikation – eine Art Twitter für Ihre Arduinos oder Raspberry Pis, um miteinander zu kommunizieren (obwohl es natürlich mit viel mehr als nur diesen funktioniert). Es gewinnt schnell an Popularität und findet sich mit Internet-of-Things-Geräten ein Zuhause, bei denen es sich in der Regel um Mikrocontroller mit geringen Ressourcen handelt, die eine zuverlässige Möglichkeit benötigen, um Sensordaten zurück an Ihren Hub zu senden oder Fernbefehle zu empfangen. Genau das werden wir damit machen.

Aber warum das Rad neu erfinden?

MQ Telemetry Transport wurde bereits 1999 erfunden, um Ölpipelines über langsame Satellitenverbindungen zu verbinden, die speziell entwickelt wurden, um Batterieverbrauch und Bandbreite zu minimieren und gleichzeitig eine zuverlässige Datenlieferung zu gewährleisten. Im Laufe der Jahre sind die Designprinzipien die gleichen geblieben, aber der Anwendungsfall hat sich von spezialisierten eingebetteten Systemen zu allgemeinen Geräten für das Internet der Dinge verlagert. Im Jahr 2010 wurde das Protokoll lizenzgebührenfrei veröffentlicht und kann von jedem genutzt und implementiert werden. Wir mögen frei.

Sie fragen sich vielleicht, warum wir uns überhaupt mit einem weiteren Protokoll beschäftigen – wir haben ja bereits das HTTP –, das verwendet werden kann, um schnelle Nachrichten zwischen allen Arten von mit dem Internet verbundenen Systemen (wie OpenHAB und IFTTT, insbesondere mit dem neuen Maker-Kanal) zu senden ). Und du hättest recht. Der Verarbeitungsaufwand eines HTTP-Servers ist jedoch ziemlich groß – so sehr, dass Sie ihn nicht einfach auf einem eingebetteten Mikrocontroller wie dem Arduino ausführen können (zumindest können Sie das, aber Sie haben nicht mehr viel Speicher für alles andere). ). MQTT ist dagegen leichtgewichtig, sodass das Senden von Nachrichten in Ihrem Netzwerk die Leitungen nicht verstopft, und es passt problemlos in unseren kleinen Arduino-Speicherplatz.

Wie funktioniert MQTT?

MQTT erfordert sowohl einen Server (auch „Broker“ genannt) als auch einen oder mehrere Clients. Der Server fungiert als Vermittler, empfängt Nachrichten und sendet sie an interessierte Clients weiter.

Weiter gehts mit dem Twitter-für-Maschinen aber analog. So wie Twitter-Benutzer ihre eigenen bedeutungslosen 140 Zeichen twittern können und Benutzer anderen Benutzern „folgen“ können, um einen kuratierten Stream von Posts zu sehen, können MQTT-Clients einen bestimmten Kanal abonnieren, um alle Nachrichten von dort zu erhalten, sowie ihre eigenen Nachrichten veröffentlichen zu diesem Kanal. Dieses Muster zum Veröffentlichen und Abonnieren wird als . bezeichnet Kneipe / Sub , im Gegensatz zur Tradition Kundenserver HTTP-Modell.

HTTP erfordert, dass Sie sich an die Maschine wenden, mit der Sie kommunizieren, sagen Sie Hallo, und sich dann ständig gegenseitig bestätigen, während Sie Daten abrufen oder ablegen. Bei pub/sub muss der Client, der die Veröffentlichung durchführt, nicht wissen, welche Clients abonniert sind: Es werden nur die Nachrichten ausgegeben, und der Broker verteilt sie an alle abonnierten Clients. Jeder Client kann Themen sowohl veröffentlichen als auch abonnieren, genau wie ein Twitter-Benutzer.

Im Gegensatz zu Twitter ist MQTT jedoch nicht auf 140 Zeichen beschränkt. Es ist datenunabhängig, sodass Sie kleine Zahlen oder große Textblöcke, JSON-formatierte Datagramme oder sogar Bilder und Binärdateien senden können.

Es ist nicht so, dass MQTT für alles besser als HTTP ist – aber es ist ist besser geeignet, wenn wir viele Sensoren im ganzen Haus haben, die sich ständig melden.

Es ist auch wichtig zu wissen, dass OpenHAB nicht als Ihr MQTT-Broker fungiert – darauf werden wir später eingehen. OpenHAB fungiert jedoch als Client: Es kann sowohl Ihr OpenHAB-Aktivitätsprotokoll veröffentlichen als auch bestimmte Kanäle an Geräte binden, sodass Sie beispielsweise einen Switch haben können, der von MQTT-Nachrichten auf einem bestimmten Kanal gesteuert wird. Dies ist ideal, um ein Haus voller Sensoren zu schaffen.

Installieren Sie Mosquitto auf Ihrem Pi

Obwohl OpenHAB einen MQTT-Client enthält, mit dem Sie ein Thema abonnieren und auch Nachrichten veröffentlichen können, fungiert es nicht als Server. Dazu müssen Sie entweder einen webbasierten MQTT-Broker (kostenpflichtig oder kostenlos) verwenden oder die kostenlose Software auf Ihrem Pi installieren. Ich möchte alles im Haus behalten, also habe ich Mosquitto auf dem Pi installiert.

Leider ist die über das übliche apt-get verfügbare Version völlig veraltet. Lassen Sie uns stattdessen die neuesten Quellen hinzufügen.

wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key

sudo apt-key add mosquitto-repo.gpg.key

cd /etc/apt/sources.list.d/

sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list

sudo apt-get install mosquitto

Das ist alles, was wir tun müssen, um einen MQTT-Server im lokalen Netzwerk zum Laufen zu bringen. Ihr Broker läuft standardmäßig auf Port 1883.

Überprüfen Sie, ob Ihr MQTT-Server mit der kostenlosen plattformübergreifenden MQTT.fx funktioniert. Klicken Sie auf das Einstellungssymbol, um ein neues Profil zu erstellen, und geben Sie die IP-Adresse oder den Namen Ihres Raspberry Pi ein. Speichern Sie und klicken Sie auf Verbinden. Wenn die kleine Ampel oben rechts grün wird, kann es losgehen.

Klicken Sie für einen schnellen Test auf die Registerkarte 'Abonnieren' und geben Sie ein inThema / in das Textfeld, dann drücke die Abonnieren Taste. Sie haben jetzt den Empfang von Nachrichten zum Thema inTopic abonniert, es werden jedoch 0 Nachrichten angezeigt. Gehen Sie zurück zum Veröffentlichungs-Tab, geben Sie Thema in das kleine Feld und eine kurze Nachricht in das große Textfeld darunter ein. Schlag Veröffentlichen ein paar Mal und schauen Sie zurück auf die Registerkarte Abonnieren. In diesem Thema sollten einige Nachrichten angezeigt werden.

Bevor wir unserem Netzwerk einige tatsächliche Sensoren hinzufügen, müssen wir uns über Themenebenen informieren, die es uns ermöglichen, das MQTT-Netzwerk zu strukturieren und zu filtern. Bei Themennamen muss die Groß-/Kleinschreibung beachtet werden, sie sollten nicht mit $ beginnen oder Leerzeichen oder Nicht-ASCII-Zeichen enthalten - eigentlich Standard-Programmierpraktiken für Variablennamen.

Das /-Trennzeichen gibt eine Themenebene an, die hierarchisch ist, zum Beispiel sind die folgenden alle gültigen Themenebenen.

inTopic / smallSubdivision / EvenSmallerSubdivision

myHome/Wohnzimmer/Temperatur

myHome/Wohnzimmer/Feuchtigkeit

myHome/Küche/Temperatur

myHome/Küche/Feuchtigkeit

Sie sollten bereits sehen, wie perfekt diese Baumstruktur für ein intelligentes Zuhause voller Sensoren und Geräte ist. Die beste Vorgehensweise für die Verwendung mit mehreren Sensoren in einem einzigen Raum besteht darin, jede Sensorvariable auf ihrer eigenen Themenebene zu veröffentlichen - um mehr Spezifität zu erreichen (wie in den obigen Beispielen) - anstatt zu versuchen, mehrere Sensortypen für denselben Kanal zu veröffentlichen .

Clients können dann eine beliebige Anzahl einzelner Themenebenen veröffentlichen oder abonnieren oder spezielle Platzhalterzeichen verwenden, um weiter oben im Baum zu filtern.

Der Platzhalter + ersetzt eine beliebige Themenebene. Zum Beispiel:

myHome/+/temperatur

würde den Client beide abonnieren

myHome/Wohnzimmer/Temperatur

myHome/Küche/Temperatur

... aber nicht die Luftfeuchtigkeit.

Das # ist ein Platzhalter mit mehreren Ebenen, sodass Sie alles aus dem livingRoom-Sensor-Array abrufen können mit:

myHome/Wohnzimmer/#

Technisch gesehen können Sie auch die Root-Ebene # abonnieren, mit der Sie absolut alles über den Broker erhalten, aber das kann so sein, als würde man sich einen Feuerwehrschlauch ins Gesicht stecken: ein bisschen überwältigend. Versuchen Sie, über HiveMQ eine Verbindung zum öffentlichen MQTT-Broker herzustellen und # zu abonnieren. Ich habe in wenigen Sekunden ungefähr 300 Nachrichten erhalten, bevor mein Client gerade abgestürzt ist.

MQTT-Anfängertipp: ' /mein Zuhause/' ist ein anderes Thema als ' mein Zuhause/' – Das Einfügen eines Schrägstrichs am Anfang erzeugt eine leere Themenebene, die zwar technisch gültig, aber nicht zu empfehlen ist, da sie verwirrend sein kann.

Jetzt, da wir die Theorie kennen, probieren wir es mit einem Arduino, Ethernet Shield und einem DHT11 Temperatur- und Feuchtigkeitssensor aus – Sie haben wahrscheinlich einen in Ihrem Starterkit, aber wenn nicht, tauschen Sie einfach den Umgebungssensor gegen eine Bewegung aus Sensor (oder sogar eine Taste).

Veröffentlichen von MQTT von einem Arduino mit Ethernet-Verbindung

Wenn Sie ein hybrides Arduino-kompatibles Gerät mit integriertem Wi-Fi oder Ethernet haben, sollte das auch funktionieren. Irgendwann werden wir uns eine bessere/billigere Art der Kommunikation wünschen, als in jedem Raum eine Netzwerkverbindung verwenden zu müssen, aber dies dient dem Erlernen der Grundlagen.

Beginnen Sie mit dem Herunterladen pubsubclient-Bibliothek von Github . Wenn Sie die Schaltfläche 'Download as ZIP' verwendet haben, ist die Struktur etwas falsch. Entpacken, benennen Sie den Ordner um in nur pubsubclient , dann nehmen Sie die beiden Dateien aus dem src Ordner und verschieben Sie sie eine Ebene nach oben in das Stammverzeichnis des heruntergeladenen Ordners. Verschieben Sie dann den gesamten Ordner in Ihren Arduino/Bibliotheken Verzeichnis.

Hier ist mein Beispielcode, den Sie anpassen können : Der DHT11-Signalausgang befindet sich an Pin 7. Ändern Sie die Server-IP für die Ihres Pi in der folgenden Zeile:

client.setServer('192.168.1.99', 1883);

Leider können wir seinen freundlichen Namen nicht verwenden (OpenHAB.local in meinem Fall) Da der TCP / IP-Stack auf dem Arduino sehr einfach ist und das Hinzufügen des Codes für die Bonjour-Benennung viel Speicher wäre, den wir nicht verschwenden möchten. Um die Themen zu ändern, zu denen Sensordaten übertragen werden, scrollen Sie nach unten zu diesen Zeilen:

Zeichenpuffer [10];

dtostrf(t,0, 0, Puffer);

client.publish('openhab/himitsu/temperature',buffer);

dtostrf(h,0, 0, Puffer);

client.publish('openhab/himitsu/humidity',buffer);

Der Code enthält auch das Abonnement eines Befehlskanals. Suchen Sie die folgende Zeile und passen Sie sie an:

client.subscribe('openhab/himitsu/command');

Untersuchen Sie den Code dort und Sie werden feststellen, dass Sie beispielsweise eine LED oder ein Relais leicht steuern können, indem Sie Befehle an bestimmte Kanäle senden. Im Beispielcode sendet es einfach eine Nachricht zurück, die den Empfang des Befehls bestätigt.

Laden Sie Ihren Code hoch, schließen Sie Ihr Arduino an das Netzwerk an und abonnieren Sie mit MQTT.fx entweder # oder openhab/himitsu/# (oder in was auch immer Sie den Raumnamen geändert haben, aber vergessen Sie nicht, das # am Ende einzufügen). Schon bald sollten Sie sehen, dass Nachrichten eingehen; und wenn Sie ON oder OFF an das Befehlsthema senden, werden auch Bestätigungen zurückgegeben.

MQTT-Bindung für OpenHAB

Der letzte Schritt in der Gleichung besteht darin, dies in OpenHAB einzubinden. Dafür brauchen wir natürlich eine Bindung.

sudo apt-get install openhab-addon-binding-mqtt

sudo chown -hR openhab:openhab /usr/share/openhab

Und bearbeiten Sie die Konfigurationsdatei, um die Bindung zu aktivieren.

mqtt:broker.url=tcp://localhost:1883

mqtt:broker.clientId=openhab

OpenHAB neu starten

sudo service openhab neu starten

Dann fügen wir ein oder zwei Elemente hinzu:

/* MQTT-Sensoren */

Nummer Himitsu_Temp 'Himitsu Temperatur [%.1f °C]' (Himitsu,Temperature) {mqtt='<[broker:openhab/himitsu/temperature:state:default]'}

Zahl Himitsu_Humidity'Himitsu Humidity [% .1f %%]' (Himitsu, Humidity) {mqtt ='<[broker:openhab/himitsu/humidity:state:default]'}

Inzwischen sollten Sie das Format verstehen; es wird ein Nummer Artikel aus der MQTT-Bindung zu einem bestimmten Thema. Dies ist ein einfaches Beispiel. Vielleicht möchten Sie auf die Wiki-Seite verweisen, auf der es kann viel komplexer werden .

Herzlichen Glückwunsch, Sie haben jetzt die Basis eines billigen Arduino-basierten Sensorarrays. Wir werden dies in Zukunft erneut aufgreifen und die Arduinos in ein eigenes, völlig separates HF-Netzwerk platzieren. Ich habe auch eine identische Version erstellt für Wizwiki 7500-Boards falls du sowas hast.

Persistenz und grafische Darstellung von Daten

Inzwischen haben Sie wahrscheinlich eine Reihe von Sensoren eingerichtet, egal ob von Z-Wave oder benutzerdefinierten Arduinos mit MQTT – so können Sie jederzeit den aktuellen Zustand dieser Sensoren einsehen und sollten auch auf deren Wert in Regeln reagieren. Aber das Interessante an Sensorwerten ist im Allgemeinen, dass sie sich im Laufe der Zeit ändern: Hier kommen Persistenz und grafische Darstellung ins Spiel. Beharrlichkeit in OpenHAB bedeutet, die Daten im Laufe der Zeit zu speichern. Lassen Sie uns weitermachen und RRD4J (Round Robin Database for Java) einrichten, so genannt, weil die Daten im Round-Robin-Verfahren gespeichert werden – ältere Daten werden verworfen, um die Größe der Datenbank zu komprimieren.

Installieren Sie rrd4j-Pakete mit den folgenden Befehlen.

sudo apt-get install openhab-addon-persistence-rrd4j
sudo chown -hR openhab:openhab /usr/share/openhab

Erstellen Sie dann eine neue Datei namens rrd4j.persist in dem Konfigurationen/Persistenz Mappe. Fügen Sie Folgendes ein:

Strategien {

jede Minute : '0 * * * * ?'

jede Stunde : '0 0 * * * ?'

jeden Tag : '0 0 0 * * ?'

Standard = jede Änderung

}

Produkte {

// alles beibehalten, wenn der Wert aktualisiert wird, nur ein Standardwert, und sie beim Start aus der Datenbank wiederherstellen

* : Strategie = EveryChange, restoreOnStartup

// Als nächstes definieren wir spezifische Strategien für jede Stunde für alles in der Temperaturgruppe und jede Minute für die Luftfeuchtigkeit

kannst du lokale kanäle auf roku . sehen

Temperatur* : Strategie = jede Stunde

Feuchtigkeit* : Strategie = jede Minute

// alternativ können Sie hier auch spezifische Elemente hinzufügen, wie z.B.

//Bedroom_Humidity,JamesInOffice : Strategie = jede Minute

}

Im ersten Teil dieser Datei definieren wir Strategien, was bedeutet, einem CRON-Ausdruck einen Namen zu geben. Dies ist das gleiche wie bei My.OpenHAB, aber dieses Mal erstellen wir einige neue Strategien, die wir für jeden Tag, jede Stunde und jede Minute verwenden können. Ich habe sie noch nicht alle benutzt, aber vielleicht in Zukunft.

In der zweiten Hälfte der Datei teilen wir rr4dj mit, welche Datenwerte gespeichert werden sollen. Standardmäßig werden wir bei jeder Aktualisierung alles speichern, aber ich habe auch einige zeitbasierte Strategien für bestimmte Sensoren angegeben. Temperaturen, die mir nicht allzu wichtig sind, habe ich so eingestellt, dass nur jede Stunde gespeichert wird, aber die Luftfeuchtigkeit ist ein großes Problem für mich, also möchte ich sehen, wie sie sich jede Minute ändert. Wenn Sie andere Daten zu bestimmten Zeiten speichern möchten, fügen Sie diese jetzt hier hinzu oder passen Sie sie nach Bedarf an.

Hinweis: Wenn Sie die Daten auch grafisch darstellen möchten, MÜSSEN Sie sie mindestens einmal pro Minute speichern. Es spielt keine Rolle, ob Ihre Sensordaten sogar so schnell aktualisiert werden, Sie müssen rr4dj nur sagen, dass es sie einmal pro Minute speichern soll.

Wenn das definiert ist, sollten Sie eine Debug-Ausgabe sehen, die Ihnen mitteilt, dass Werte gespeichert werden.

Lassen Sie uns als Nächstes einige hübsche Diagramme all dieser Daten erstellen. Es ist wirklich einfach. Um ein Diagramm eines einzelnen Sensors zu erstellen, fügen Sie Ihrer Sitemap Folgendes hinzu:

Chart item=Bedroom_Humidity period=h

Das ist buchstäblich alles, was Sie brauchen. Gültige Werte für den Zeitraum sind h, 4h, 8h, 12h, D, 3D, W, 2W, M, 2M, 4M, Y ; es sollte klar sein, was diese bedeuten. Der Standardwert ist D für einen ganzen Tag mit Daten, wenn nicht angegeben.

Um ein Diagramm mit mehreren Elementen zu erstellen, zeichnen Sie stattdessen einfach den Gruppennamen:

Diagrammelement=Feuchtigkeitszeitraum=h

Es könnte Sie auch interessieren, dass Sie dieses Diagramm an anderer Stelle verwenden können; Es generiert ein Bild mit der folgenden URL: http://YOUROPENHABURL:8080/chart?groups=Humidity&period=h

Wie ist Ihre Kommt das OpenHAB-System?

Das war's für diese Ausgabe des Handbuchs, aber erwarten Sie nicht, dass dies das letzte ist, was Sie von uns über OpenHAB hören. Hoffentlich haben Ihnen diese und der Einsteigerleitfaden eine solide Grundlage gegeben, um Ihr eigenes komplettes OpenHAB-System zu entwickeln – aber es ist ein Prozess, der nie wirklich vollständig abgeschlossen ist.

Glücklicherweise kann OpenHAB gut von wenigen Geräten bis zu Hunderten skalieren, von einfacher Regelkomplexität bis hin zur ultimativen Heimautomatisierung – wie sieht es also mit Ihrem System aus? Welche Geräte hast du gewählt? Was ist das nächste große Projekt, das Sie in Angriff nehmen werden?

Lassen Sie uns in den Kommentaren sprechen – und wenn Sie diese Anleitung nützlich fanden, klicken Sie auf diese Schaltflächen zum Teilen, um Ihren Freunden zu sagen, wie auch sie ihr eigenes OpenHAB-System einrichten können.

Wir hoffen, dass Ihnen die von uns empfohlenen und besprochenen Artikel gefallen! MUO hat Partner- und gesponserte Partnerschaften, sodass wir einen Anteil an den Einnahmen aus einigen Ihrer Einkäufe erhalten. Dies hat keinen Einfluss auf den von Ihnen bezahlten Preis und hilft uns, die besten Produktempfehlungen anzubieten.

Teilen Teilen Tweet Email Ein Leitfaden für Anfänger zum Animieren von Sprache

Animierende Rede kann eine Herausforderung sein. Wenn Sie bereit sind, Ihrem Projekt Dialog hinzuzufügen, werden wir den Prozess für Sie aufschlüsseln.

Weiter lesen
Verwandte Themen
  • Heimwerken
  • Intelligentes Zuhause
  • Arduino
  • Heimautomatisierung
  • Lange Form
  • Langform-Führer
Über den Autor James Bruce(707 veröffentlichte Artikel)

James hat einen BSc in Künstlicher Intelligenz und ist CompTIA A+ und Network+ zertifiziert. Wenn er nicht als Hardware-Review-Editor beschäftigt ist, genießt er LEGO, VR und Brettspiele. Bevor er zu MakeUseOf kam, war er Lichttechniker, Englischlehrer und Rechenzentrumsingenieur.

Mehr von James Bruce

Abonniere unseren Newsletter

Abonnieren Sie unseren Newsletter für technische Tipps, Rezensionen, kostenlose E-Books und exklusive Angebote!

Klicken Sie hier, um sich zu abonnieren