Werbung

Kostenlos bedeutet nicht immer "nicht so gut wie bezahlt", und OpenHAB ist keine Ausnahme. Die Open-Source-Hausautomationssoftware übertrifft die Fähigkeiten aller anderen Hausautomationssysteme auf dem Markt bei weitem - die Einrichtung ist jedoch nicht einfach. In der Tat kann es geradezu frustrierend sein.

Dieser Leitfaden kann als kostenloses PDF heruntergeladen werden. Laden Sie jetzt das OpenHAB-Anfängerhandbuch Teil 2: ZWave, MQTT, Regeln und Diagramme herunter. Fühlen Sie sich frei, dies zu kopieren und mit Ihren Freunden und Ihrer Familie zu teilen.

In Teil 1 des Leitfadens habe ich Sie durchgeführt Installieren von OpenHAB auf einem Raspberry Pi Erste Schritte mit OpenHAB Home Automation auf Raspberry PiOpenHAB ist eine ausgereifte Open-Source-Plattform für die Hausautomation, die auf einer Vielzahl von Hardware ausgeführt wird Protokollunabhängig, dh es kann eine Verbindung zu nahezu jeder Hausautomationshardware auf dem Markt hergestellt werden heute. Weiterlesen , stellte die Kernkonzepte von OpenHAB vor und zeigte Ihnen, wie Sie Ihre ersten Elemente zum System hinzufügen. Heute gehen wir weiter:

instagram viewer

  • Hinzufügen von ZWave-Geräten
  • Hinzufügen eines Harmony Ultimate-Controllers
  • Regeln einführen
  • Einführung in 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 vorherrschende Protokoll für die Hausautomation: Es ist zuverlässig, wurde umfassend entwickelt und funktioniert über eine viel größere Reichweite als alle anderen Smart-Home-Produkte. Ihnen stehen Hunderte von Z-Wave-Sensoren zur Verfügung, die eine Vielzahl von Aufgaben ausführen. OpenHAB kann Arbeiten Sie mit Z-Wave, 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, empfehle ich Ihnen, dies zu überdenken. Es kann gut für Sie funktionieren, oder es kann mit kleinen, aber anhaltenden Problemen geplagt sein. Kaufen Sie zumindest kein Haus voller Sensoren, bis Sie die Gelegenheit hatten, einige auszuprobieren. Der einzige Grund, sich für Z-Wave zu entscheiden, besteht darin, dass Sie sich nicht zu 100% für OpenHAB entschieden haben und Ihre Optionen in Zukunft offen lassen möchten: Z-Wave funktioniert beispielsweise mit Samsung SmartThings Welcher Smart Hub für die Heimautomation eignet sich am besten für Sie?Für eine Weile hielten die Leute die Idee für nichts anderes als eine Spielerei, aber die jüngsten Produktversionen haben gezeigt, dass die Smart-Home-Automatisierung beginnt, ihre Versprechen zu erfüllen. Weiterlesen Hub sowie Z-Wave-spezifische Hubs wie Homeseer und eine Reihe anderer Softwareoptionen wie Domoticz.

Obwohl OpenHAB eine Z-Wave-Bindung enthält, müssen Sie dies dennoch tun Konfigurieren Sie zuerst das Z-Wave-Netzwerk, bevor OpenHAB beginnen kann, Daten abzufragen. Wenn Sie eine Rasberry-Controller-Karte haben, wird Software zum Konfigurieren des Netzwerks mitgeliefert. Wir werden dies hier nicht behandeln. Wenn Sie einen Aeotec USB Z-Stick-Controller oder ähnliches gekauft haben, ist wahrscheinlich keine Software enthalten. Lesen Sie also weiter.

Aeotec Z-Stick Gen5, Z-Wave Plus USB zum Erstellen eines GatewaysAeotec Z-Stick Gen5, Z-Wave Plus USB zum Erstellen eines Gateways Jetzt bei Amazon kaufen $44.95

Wenn Sie bereits ein Z-Wave-Netzwerk-Setup habenSie können 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 er etwas komplexer.

Erstens auf der Hardwareseite: Jeder Controller hat seine eigene Art der Kopplung mit Geräten (technisch bekannt als „Einschlussmodus“, in dem eine Knoten-ID zugewiesen wird). Im Fall des Aotec Z-Sticks bedeutet dies, dass Sie ihn vom USB-Anschluss trennen und die Taste einmal drücken, um ihn in den Einschlussmodus zu versetzen. Nehmen Sie es dann in die Nähe des Geräts, das Sie koppeln, und drücken Sie auch die Einschlusstaste (Dies wird auch variieren: Bei meiner Everspring-Buchse muss die Taste dreimal hintereinander dreimal gedrückt werden. Daher besteht die Lektion darin, das Handbuch für Ihr Gerät zu lesen.).

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

Installieren von HABmin- und Z-Wave-Bindungen

Da OpenHAB eigentlich kein Konfigurationsdienstprogramm für Z-Wave ist, werden wir ein anderes Webverwaltungstool installieren, das dies tut - etwas namens HABmin. Gehen Sie weiter 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.).

Erstellen Sie als Nächstes einen neuen Ordner im Verzeichnis webapps und nennen Sie ihn "habmin" (Kleinbuchstaben sind wichtig). Kopieren Sie den Rest der heruntergeladenen Dateien dorthin.

Hinweis: Es gibt auch eine HABmin 2 in aktiver Entwicklung. Die Installation ist ähnlich, jedoch mit einem zusätzlichen .jar-Addon. Es könnte sich lohnen, beides zu versuchen, um zu sehen, welche 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 nach 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 und nach dem Anschließen auszuführen, damit Sie sehen können, was sich ändert, wenn Sie sich nicht sicher sind.

devtty

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

sudo usermod -a -G dialout openhab

Starten Sie OpenHAB neu, um alles in Aktion zu setzen

Sudo Service Openhab Neustart

Wenn Sie das Debug-Protokoll überprüfen, wird hoffentlich so etwas angezeigt. Herzlichen Glückwunsch, Sie sprechen jetzt von Z-Wave. Möglicherweise ist das Debug-Protokoll auch mit Nachrichten von verschiedenen Z-Wave-Knoten überflutet. Beginnen wir mit der Überprüfung von HABMIN, um festzustellen, was gefunden wurde: http://openhab.local: 8080 / habmin / index.html (Ersetzen von openhab.local durch Ihren Raspberry Pi-Hostnamen oder Ihre IP-Adresse).

zwave startet in openhab log

In HABMIN gibt es viel zu sehen, aber wir beschäftigen uns nur wirklich mit dem Konfiguration -> Bindungen -> Z-Wave -> Geräte Registerkarte, wie Sie unten sehen können. Erweitern Sie den Knoten, um die Position und die Namensbezeichnung zu bearbeiten, damit Sie leichter darauf zugreifen können.

Bearbeiten Sie den Gerätenamen

Konfigurieren von Z-Wave-Elementen

Jedes Z-Wave-Gerät verfügt über eine spezifische Konfiguration für OpenHAB. Zum Glück wurden die meisten Geräte bereits untersucht, und es gibt bereits Beispiele für Ihre. Das Konfigurieren von benutzerdefinierten Geräten, die nicht erkannt werden, geht weit über den Rahmen dieses Handbuchs hinaus. Nehmen wir jedoch an, dass es derzeit unterstützt wird.

Zuerst habe ich einen grundlegenden Everspring AN158-Netzschalter und ein Messgerät auf Knoten 3. Ein kurzes Googeln führte mich zu einem Blog-Beitrag auf Wetwa.re mit einer Beispielelementkonfiguration. Ich habe dies wie folgt angepasst:

Schalter Luftentfeuchter_Schalter "Luftentfeuchter" {zwave = "3: command = switch_binary"} Nummer Luftentfeuchter_Watt "Stromverbrauch des Luftentfeuchters [% .1f W]" {zwave = "3: Befehl = Meter"}

Perfekt.

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

Aeon Labs Aeotec Z-Wave Gen5-Multisensor (Z-Wave Plus)Aeon Labs Aeotec Z-Wave Gen5-Multisensor (Z-Wave Plus) Jetzt bei Amazon kaufen $69.27

Für diesen habe ich eine Beispielkonfiguration unter gefunden iwasdot.comund mein Multisensor befindet sich auf Knoten 2.

Nummer Hallway_Temperature "Hallway Temperature [% .1f ° C]" (Flur, Temperatur) {zwave = "2: 0: command = sensor_multilevel, sensor_type = 1, sensor_scale = 0"} Nummer Hallway_Humidity "Flurfeuchtigkeit [% .0f %%]" (Flur, Luftfeuchtigkeit) {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 "Hallway Motion [% s]" (Flur, Bewegung) {zwave = "2: 0: command = sensor_binary, reply_to_basic = true"} Nummer sensor_1_battery "Batterie [% s %%]" (Bewegung) {zwave = "2: 0: Befehl = Batterie"}

Wenn das Format für Sie seltsam erscheint, gehen Sie bitte zurück zum ersten Ratgeber für Anfänger Erste Schritte mit OpenHAB Home Automation auf Raspberry PiOpenHAB ist eine ausgereifte Open-Source-Plattform für die Hausautomation, die auf einer Vielzahl von Hardware ausgeführt wird Protokollunabhängig, dh es kann eine Verbindung zu nahezu jeder Hausautomationshardware auf dem Markt hergestellt werden heute. Weiterlesen , insbesondere im Abschnitt "Farbtonbindung", in dem ich erkläre, wie Elemente hinzugefügt werden. Sie müssen wahrscheinlich immer nur solche Einfügebeispiele kopieren. Wenn Sie jedoch ein neues Gerät haben, werden in der Bindungsdokumentation alle Details aufgeführt Befehle.

Logitech Harmony Binding

Bevor wir uns mit Regeln befassen, wollte ich einen kurzen Hinweis zur Arbeit mit der Harmony-Bindung hinzufügen. Ich bin ein großer Fan von Harmony-Serie ultimativer Fernbedienungen Logitech Harmony Ultimate Review und WerbegeschenkIhr Wohnzimmer ist Chaos - geben Sie es zu. Es wird Ihnen verziehen, sich gefragt zu haben, welche Fernbedienungen welches Gerät steuern. Was ist mit dem Fernseher, Verstärker, TiVO, Blu-Ray-Player, vielleicht sogar den Lichtschaltaktivitäten ... Weiterlesen um das Home Media Center-Erlebnis zu vereinfachen, stehen sie jedoch häufig als separates System innerhalb des Smart Home. Mit OpenHAB können Logitech Harmony-Aktivitäten und die vollständige Gerätesteuerung jetzt Teil Ihres zentralen Systems sein und sogar in Automatisierungsregeln enthalten sein.

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

Openhab Apt-Cache Suche nach Harmoniebindung

Vergiss es nicht chown das Bindungsverzeichnis erneut, wenn Sie fertig sind:

sudo apt-get installiere openhab-addon-action-harmonyhub. sudo apt-get installiere Openhab-Addon-Binding-Harmonyhub. sudo apt-get installiere openhab-addon-io-harmonyhub. sudo chown -hR openhab: openhab / usr / share / openhab

Öffnen Sie zum Konfigurieren der Bindung die Datei openhab.cfg und fügen Sie einen neuen Abschnitt wie folgt hinzu:

########### HARMONY FERNBEDIENUNG ########### Harmonyhub: Host = 192.168.1.181oder deine IP
harmonyhub: Benutzername =your-harmony-email-login
harmonyhub: password =Ihr Passwort

Die IP-Adresse ist die Ihres Harmony-Hubs. Verwenden Sie einen Netzwerkscanner, um dies herauszufinden. Sie müssen auch Ihre Anmeldedaten eingeben, die Sie beim Starten des Standard-Harmony-Konfigurationsdienstprogramms eingeben. Das ist es. Nach dem Neustart Ihres Hue sollte Ihr Debug-Protokoll einen plötzlichen Ausgabe-Ausbruch der Bindung aufweisen.

Dies ist eine JSON-formatierte Liste aller 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.

json formatierte Openhab-Ausgabe

Neben der standardmäßigen PowerOff-Standardaktivität finden Sie hier Ihre eigenen definierten Aktivitäten, die nach Namen aufgelistet sind. Erstellen wir nun ein einfaches Ein-Tasten-Steuerelement, 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 Zwei-Wege-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 eine Schaltfläche dafür in der Sitemap-Datei erstellen.

Element wechseln = Harmony_Activity mappings = [PowerOff = 'Aus', Übung = 'Übung', 13858434 = 'TV', Karaoke = 'Karaoke']

In der eckigen Klammer sehen Sie jede Aktivität zusammen mit dem Etikett. Im Allgemeinen können Sie direkt auf Aktivitäten verweisen, wie Sie sie auf Ihrer Fernbedienung benannt haben. Die Ausnahme hiervon war jedoch ein Leerzeichen im Aktivitätsnamen, 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:

Openhab-Harmonie in der Sitemap

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

Eine allgemeine Einführung in Regeln

Die meisten Smart-Home-Hubs enthalten eine Art Regelerstellung, sodass Sie automatisch auf Sensordaten und Ereignisse im Heim reagieren können. Ich würde sogar argumentieren, dass Sie für ein wirklich intelligentes Zuhause keine Zeit benötigen, um mit mobilen Apps zu interagieren. 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 weit übertrifft Smart-Home-Hubs Battle of the Smart Home Hubs: Was gibt es da draußen und was kommt? Weiterlesen oder IFTTT-Rezepte IFTTT verbindet sich jetzt mit allem: Einführung des Maker-KanalsDie Einsatzmöglichkeiten von IFTTT sind endlos. Bisher war es jedoch schwierig, eine Schnittstelle zu Ihren eigenen Hardwareprojekten herzustellen. Heute hat sich alles geändert. Weiterlesen .

Programmierregeln klingen schlechter als sie sind. Beginnen wir einfach mit zwei Regeln, die das Licht je nach Anwesenheitssensor ein- oder ausschalten:

Regel "Büro Licht an, wenn James anwesend ist" wenn Item JamesInOffice von OFF auf ON geändert wurde. dann sendCommand (Office_Hue, ON) Endregel "Büro Licht aus, wenn James geht" wenn Item JamesInOffice von ON auf OFF geändert wurde. 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 das Schließen dieser bestimmten Regel. Es gibt eine Reihe spezieller Wörter, die Sie in Regeln verwenden können, aber im Moment haben wir es mit zwei einfachen Syntaxbits zu tun - Artikel, mit dem Sie den Status von etwas abfragen können; und sendCommand, was genau das tut, was du denkst. Ich habe dir gesagt, das ist einfach.

Es ist wahrscheinlich unnötig, ein Regelpaar zu verwenden, aber wenn meine Logik komplexer wird, ist es vorteilhaft, sie getrennt zu haben, um festzustellen, ob ich es bin Betreten oder Verlassen des Bereichs - und es ist möglicherweise eine gute Idee, irgendwo in die Gleichung einen Lichtsensor einzufügen, damit wir nicht unnötig einschalten Lichter.

Schauen wir uns ein anderes Beispiel an, um eine geplante Regel zu erstellen.

Regel "Übung jeden Morgen" wann Zeit cron "0 0 8 1/1 *? *" dann harmonyStartActivity ("Übung") Ende.

Wieder nennen wir die Regel, die Bedingungen, unter denen sie ausgelöst werden soll, und die zu ergreifenden Maßnahmen. In diesem Fall definieren wir jedoch 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, können Sie auch die Formatanleitung [Nicht mehr verfügbar] lesen, um eine ausführliche Erklärung und weitere Beispiele zu erhalten.

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

Meine Regeln besagen einfach: "Jeden Morgen um 8 Uhr morgens, jeden Tag der Woche, sagen Sie meinem Harmony Ultimate-System, dass es mit der Übungsaktivität beginnen soll." Dies wiederum aktiviert den Fernseher, die Xbox und den Verstärker und drückt nach einer Minute die A-Taste, um die Festplatte im Laufwerk zu starten.

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

Eine weitere Regel, die ich Ihnen zeigen möchte, ist etwas, mit dem ich die Luftfeuchtigkeit in meinem Haus regle. Ich habe einen einzelnen Luftentfeuchter, den ich überall hin bewegen muss. Deshalb habe ich mich entschlossen, alle meine Feuchtigkeitssensoren zu untersuchen, den höchsten zu finden und diesen in einer Variablen zu speichern. Es wird derzeit jede Minute ausgelöst, kann aber leicht gesenkt werden. Schauen Sie zuerst:

import org.openhab.core.library.types. * import org.openhab.model.script.actions. * importiere java.lang. String-Regel "Feuchtigkeitsmonitor" wenn die Zeit "0 * * * *?" dann var prevHigh = 0 var highHum = "" Luftfeuchtigkeit? .members.forEach [hum | logDebug ("feuchtigkeitsregeln", hum.name); if (hum.state als DecimalType> prevHigh) {prevHigh = hum.state highHum = hum.name + ":" + hum.state + "%"}] logDebug ("humidity.rules", highHum); postUpdate (Dehumidifier_Needed, highHum); Ende.

Der Kern der Regel liegt in der Luftfeuchtigkeit? .Mitglieder Linie. Feuchtigkeit ist ein Gruppenname für meine Feuchtigkeitssensoren. .Mitglieder greift nach allen Gegenständen in dieser Gruppe; für jedes iteriert über sie (mit einem merkwürdigen eckigen Klammerformat, mit dem Sie wahrscheinlich nicht vertraut sind). Die Syntax von Regeln ist eine Ableitung von Xtend, sodass Sie die lesen können Xtend-Dokumentation wenn Sie kein Beispiel zum Anpassen finden.

Sie werden es wahrscheinlich nicht brauchen - es gibt Hunderte von Beispielregeln:

  • Detaillierte Erläuterung der Regeln im offiziellen Wiki
  • Das offizielle Regeln Proben Wiki-Seite
  • Regeln zu neuen Höhen führen
  • Erweiterte Beispiele bei IngeniousFool.net

MQTT für OpenHAB und Internet der Dinge

MQTT ist ein leichtes Messaging-System für die Kommunikation von Maschine zu Maschine - eine Art Twitter für Sie Arduinos oder Raspberry Pis, um miteinander zu reden (obwohl es natürlich mit viel mehr als nur funktioniert jene). Es wird immer beliebter und findet ein Zuhause mit Internet-of-Things-Geräten, die normalerweise niedrig sind Ressourcen-Mikrocontroller, die eine zuverlässige Möglichkeit zum Senden von Sensordaten an Ihren Hub oder zum Empfangen von Fernbedienungen benötigen Befehle. Genau das machen wir damit.

Aber warum das Rad neu erfinden?

MQ Telemetry Transport wurde bereits 1999 erfunden, um Ölpipelines über einen langsamen Satelliten zu verbinden Verbindungen, die speziell entwickelt wurden, um den Batterieverbrauch und die Bandbreite zu minimieren und gleichzeitig zuverlässig zu sein Datenlieferung. Im Laufe der Jahre sind die Entwurfsprinzipien gleich geblieben, aber der Anwendungsfall hat sich von spezialisierten eingebetteten Systemen auf allgemeine Internet-of-Things-Geräte verlagert. Im Jahr 2010 wurde das Protokoll lizenzgebührenfrei veröffentlicht und kann von jedermann verwendet und implementiert werden. Wir mögen kostenlos.

Sie fragen sich vielleicht, warum wir uns überhaupt mit einem weiteren Protokoll beschäftigen - wir haben schließlich bereits HTTP -, das dies kann verwendet werden, um schnelle Nachrichten zwischen allen Arten von mit dem Internet verbundenen Systemen (wie OpenHAB und IFTTT, insbesondere mit dem neuen) zu senden Herstellerkanal IFTTT verbindet sich jetzt mit allem: Einführung des Maker-KanalsDie Einsatzmöglichkeiten von IFTTT sind endlos. Bisher war es jedoch schwierig, eine Schnittstelle zu Ihren eigenen Hardwareprojekten herzustellen. Heute hat sich alles geändert. Weiterlesen ). Und du hättest recht. Der Verarbeitungsaufwand eines HTTP-Servers ist jedoch recht hoch - so groß, dass Sie einen auf einem nicht einfach ausführen können eingebetteter Mikrocontroller wie der Arduino (zumindest können Sie das, aber Sie haben nicht mehr viel Speicher für irgendetwas übrig sonst). MQTT ist dagegen leichtgewichtig, sodass das Senden von Nachrichten in Ihrem Netzwerk die Leitungen nicht verstopft und problemlos in unseren kleinen Arduino-Speicher passt.

Wie funktioniert MQTT?

MQTT erfordert sowohl einen Server (als "Broker" bezeichnet) als auch einen oder mehrere Clients. Der Server fungiert als Vermittler, empfängt Nachrichten und sendet sie erneut an interessierte Kunden.

Fahren wir mit dem fort Twitter für Maschinen Analogie. 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, MQTT-Clients können einen bestimmten Kanal abonnieren, um alle Nachrichten von dort zu empfangen, und ihre eigenen Nachrichten darauf veröffentlichen Kanal. Dieses Veröffentlichungs- und Abonnementmuster wird als bezeichnet Pub / Subim Gegensatz zur Tradition Kundenserver Modell von HTTP.

HTTP erfordert, dass Sie sich an den Computer wenden, mit dem Sie kommunizieren, z. B. Hallo sagen, und sich dann ständig gegenseitig bestätigen, während Sie Daten abrufen oder speichern. Bei pub / sub muss der Client, der die Veröffentlichung durchführt, nicht wissen, welche Clients abonniert sind. Er pumpt nur die Nachrichten aus und der Broker verteilt sie an alle abonnierten Clients. Jeder Kunde kann Themen veröffentlichen und 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 ist als HTTP - aber es ist ist besser geeignet, wenn wir überall im Haus viele Sensoren haben, die ständig Bericht erstatten.

Es ist auch wichtig zu wissen, dass OpenHAB nicht als Ihr MQTT-Broker fungiert - wir werden uns später darum kümmern. OpenHAB fungiert jedoch als Client: Es kann sowohl Ihr OpenHAB-Aktivitätsprotokoll veröffentlichen als auch bestimmte Daten binden Kanäle zu Geräten, sodass Sie beispielsweise einen Switch haben können, der von MQTT-Nachrichten an einem bestimmten Gerät gesteuert wird Kanal. 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 OpenHAB 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. Fügen wir stattdessen die neuesten Quellen hinzu.

wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key. sudo apt-key füge mosquitto-repo.gpg.key hinzu. cd /etc/apt/sources.list.d/ sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list. sudo apt-get install Moskito.

Das ist alles, was wir tun müssen, damit ein MQTT-Server im lokalen Netzwerk funktioniert. Ihr Broker wird standardmäßig auf Port 1883 ausgeführt.

Überprüfen Sie, ob Ihr MQTT-Server mit dem 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, können Sie loslegen.

mqttfx Beispielprofil

Klicken Sie für einen schnellen Test auf die Registerkarte "Abonnieren" und geben Sie ein inTopic / in das Textfeld, dann drücken Sie die Abonnieren Taste. Sie haben jetzt abonniert, um eine Nachricht zum Thema inTopic zu erhalten, obwohl 0 Nachrichten angezeigt werden. Kehren Sie zur Registerkarte "Veröffentlichen" zurück, geben Sie inTopic in das kleine Feld und eine kurze Nachricht in das große Textfeld unten ein. Schlagen Veröffentlichen ein paar Mal und schauen Sie zurück auf die Registerkarte Abonnieren. In diesem Thema sollten einige Nachrichten angezeigt werden.

inTopic MQTT-Test

Bevor wir unserem Netzwerk einige tatsächliche Sensoren hinzufügen, müssen wir uns mit Themenebenen vertraut machen, mit denen wir das MQTT-Netzwerk strukturieren und filtern können. Bei Themennamen wird zwischen Groß- und Kleinschreibung unterschieden, sie sollten nicht mit $ beginnen oder ein Leerzeichen oder Nicht-ASCII-Zeichen enthalten - eigentlich Standardprogrammierpraktiken für Variablennamen.

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

inTopic / smallSubdivision / evenSmallerSubdivision. myHome / livingRoom / Temperatur. myHome / livingRoom / Luftfeuchtigkeit. myHome / Küche / Temperatur. myHome / Küche / Luftfeuchtigkeit

Sie sollten bereits sehen, wie perfekt diese Baumstruktur für ein Smart Home voller Sensoren und Geräte ist. Die beste Vorgehensweise für die Verwendung mit mehreren Sensoren in einem Raum besteht darin, jede Sensorvariable als eigene Themenebene zu veröffentlichen. Verzweigung zu mehr Spezifität (wie in den obigen Beispielen) - anstatt zu versuchen, mehrere Sensortypen auf demselben zu veröffentlichen Kanal.

Clients können dann eine beliebige Anzahl einzelner Themenebenen veröffentlichen oder abonnieren oder spezielle Platzhalterzeichen verwenden, um von einer höheren Stelle im Baum zu filtern.

Der Platzhalter + ersetzt eine beliebige Themenebene. Zum Beispiel:

myHome / + / Temperatur

würde den Client für beide abonnieren

myHome / livingRoom / Temperatur. myHome / Küche / Temperatur

… Aber nicht die Luftfeuchtigkeit.

Das # ist ein mehrstufiger Platzhalter, sodass Sie alles aus dem livingRoom-Sensorarray abrufen können mit:

myHome / livingRoom / #

Technisch gesehen können Sie auch die Root-Ebene # abonnieren, mit der Sie absolut alles in Gang bringen Durch den Makler gehen, aber das kann sein, als würde man sich einen Feuerwehrschlauch ins Gesicht stecken: ein bisschen überwältigend. Versuchen Sie, von HiveMQ aus 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: „/myHome/” ist ein anderes Thema als “mein Zuhause/" - Wenn Sie am Anfang einen Schrägstrich einfügen, wird eine leere Themenebene erstellt, die zwar technisch gültig ist, jedoch nicht empfohlen wird, da sie verwirrend sein kann.

Nachdem wir die Theorie kennen, versuchen wir es mit einem Arduino, einem Ethernet Shield und einem DHT11-Temperatur- und Feuchtigkeitssensor. Sie haben wahrscheinlich einen in Ihrem Starter-Kit, aber wenn nicht, tauschen Sie einfach den Umgebungssensor gegen einen Bewegungssensor (oder sogar einen) aus Taste).

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

Wenn Sie ein Hybrid-Arduino-kompatibles Gerät mit integriertem Wi-Fi oder Ethernet haben, sollte dies auch funktionieren. Schließlich möchten wir eine bessere / billigere Art der Kommunikation, dass in jedem Raum eine Netzwerkverbindung verwendet werden muss. Dies dient jedoch dazu, die Grundlagen zu erlernen.

Beginnen Sie mit dem Herunterladen pubsubclient Bibliothek von Github. Wenn Sie die Schaltfläche "Als ZIP herunterladen" verwendet haben, ist die Struktur etwas falsch. Entpacken Sie, benennen Sie den Ordner in just um pubsubclientNehmen Sie dann 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 den Anzeigenamen 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 Speicherplatz bedeuten würde, möchten wir nicht verschwenden. Scrollen Sie zu den folgenden Zeilen, um die Themen zu ändern, zu denen Sensordaten gesendet werden:

Zeichenpuffer [10]; dtostrf (t, 0, 0, Puffer); client.publish ("openhab / himitsu / temperatur", Puffer); dtostrf (h, 0, 0, Puffer); client.publish ("openhab / himitsu / Luftfeuchtigkeit", Puffer);

Der Code enthält auch ein Abonnement für einen Befehlskanal. Suchen und passen Sie die folgende Zeile an:

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

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

Laden Sie Ihren Code hoch, schließen Sie Ihr Arduino an das Netzwerk an und abonnieren Sie MQTT.fx # oder openhab / himitsu / # (oder was auch immer Sie den Raumnamen geändert haben, aber vergessen Sie nicht, das # am Ende anzugeben). Ziemlich bald sollten Sie Nachrichten sehen; und wenn Sie EIN oder AUS an das Befehlsthema senden, werden auch Bestätigungen angezeigt.

mqtt arduino Nachrichten kommen zurück

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 installiere openhab-addon-binding-mqtt. sudo chown -hR openhab: openhab / usr / share / openhab

Bearbeiten Sie die Konfigurationsdatei, um die Bindung zu aktivieren.

mqtt: macro.url = tcp: // localhost: 1883. mqtt: macro.clientId = openhab

Starten Sie OpenHAB neu

Sudo Service Openhab Neustart

Fügen wir dann ein oder zwei Elemente hinzu:

/ * MQTT-Sensoren * / Nummer Himitsu_Temp "Himitsu-Temperatur [% .1f ° C]"(Himitsu, Temperatur) {mqtt = " (Himitsu, Luftfeuchtigkeit) {mqtt = "

Inzwischen sollten Sie das Format verstehen. es wird ein Nummernelement 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 sich befindet kann viel komplexer werden.

Herzlichen Glückwunsch, Sie haben jetzt die Basis eines billigen Arduino-basierten Sensorarrays. Wir werden dies in Zukunft erneut prüfen und die Arduinos in ihrem eigenen, vollständig separaten HF-Netzwerk platzieren. Ich habe auch eine identische Version erstellt für Wizwiki 7500 Boards wenn Sie zufällig eine davon haben.

Persistenz- und Grafikdaten

Inzwischen haben Sie wahrscheinlich eine Reihe von Sensoren eingerichtet, egal ob von Z-Wave oder benutzerdefinierten Arduinos, auf denen MQTT ausgeführt wird - also Sie Sie können jederzeit den aktuellen Status dieser Sensoren anzeigen, und Sie sollten auch auf ihren Wert in reagieren Regeln. Das Interessante an Sensorwerten ist jedoch im Allgemeinen, dass sie sich im Laufe der Zeit ändern: Hier kommen Persistenz und Grafik ins Spiel. Beharrlichkeit In OpenHAB bedeutet dies, dass die Daten im Laufe der Zeit gespeichert werden. Lassen Sie uns RRD4J (Round Robin Database für Java) einrichten, das so genannt wird, weil 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 installiere openhab-addon-persistence-rrd4j. sudo chown -hR openhab: openhab / usr / share / openhab. 

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

Strategien {everyMinute: "0 * * * *?" everyHour: "0 0 * * *?" jeden Tag: "0 0 0 * *?" Standard = everyChange. } Elemente {// behalten alles bei, wenn der Wert aktualisiert wird, nur eine Standardeinstellung, und stellen sie beim Start aus der Datenbank wieder her *: Strategy = 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 Feuchtigkeitstemperatur *: Strategy = EveryHour Humidity *: Strategy = EveryMinute // Alternativ können Sie hier bestimmte Elemente hinzufügen, z. B. // Bedroom_Humidity, JamesInOffice: Strategy = everyMinute. }

Im ersten Teil dieser Datei definieren wir Strategien. Dies bedeutet lediglich, einem CRON-Ausdruck einen Namen zu geben. Dies ist das gleiche wie wir es bereits mit My getan haben. 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 verwendet, aber ich könnte es in Zukunft sein.

In der zweiten Hälfte der Datei teilen wir rr4dj mit, welche Datenwerte gespeichert werden sollen. Standardmäßig speichern wir bei jeder Aktualisierung alles, aber ich habe auch einige zeitbasierte Strategien für bestimmte Sensoren angegeben. Die Temperaturen, die mich nicht sonderlich stören, sind so eingestellt, dass nur jede Stunde gespart wird. Die Luftfeuchtigkeit ist mir jedoch ein großes Anliegen. Deshalb möchte ich sehen, wie sie sich jede Minute ändert. Wenn Sie andere Daten speziell zu festgelegten 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 so schnell aktualisiert werden. Sie müssen rr4dj lediglich anweisen, sie einmal pro Minute zu speichern.

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

rrd4j Daten speichern

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

Diagrammelement = Schlafzimmer_Heuchtigkeitszeitraum = 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 offensichtlich sein, was diese bedeuten. Wenn nicht angegeben, wird standardmäßig D für einen ganzen Tag Daten verwendet.

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

Diagrammelement = Feuchtigkeitsperiode = h
Diagramm

Vielleicht interessiert Sie auch, dass Sie dieses Diagramm an anderer Stelle verwenden können. Es wird ein Bild unter der folgenden URL generiert: http://YOUROPENHABURL: 8080 / Diagramm? Gruppen = Luftfeuchtigkeit & Periode = h

Wie ist Ihre OpenHAB-System kommt?

Das war's für diesen Teil des Handbuchs, aber erwarten Sie nicht, dass dies das letzte Mal ist, dass Sie von uns über OpenHAB hören. Hoffentlich haben Ihnen dies und der Leitfaden für Anfänger eine solide Grundlage für die Entwicklung Ihres eigenen vollständigen OpenHAB-Systems gegeben - aber es ist ein Prozess, der nie wirklich vollständig abgeschlossen ist.

Zum Glück kann OpenHAB von wenigen Geräten auf Hunderte skaliert werden, von einfacher Regelkomplexität bis hin zur ultimativen Heimautomation. Wie geht es Ihrem System? Welche Geräte haben Sie gewählt? Was ist das nächste große Projekt, das Sie angehen werden?

Lassen Sie uns in den Kommentaren sprechen - und wenn Sie dieses Handbuch nützlich fanden, klicken Sie auf diese Freigabeschaltflächen, um Ihren Freunden mitzuteilen, wie auch sie ihr eigenes OpenHAB-System einrichten können.

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.