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

OpenHAB, die Open-Source-Heimautomatisierungssoftware, geht weit über die Möglichkeiten anderer auf dem Markt verfügbarer Hausautomationssysteme hinaus - es ist jedoch nicht einfach, sie einzurichten. In der Tat kann es geradezu frustrierend sein.

OpenHAB, die Open-Source-Heimautomatisierungssoftware, geht weit über die Möglichkeiten anderer auf dem Markt verfügbarer Hausautomationssysteme hinaus - es ist jedoch nicht einfach, sie einzurichten.  In der Tat kann es geradezu frustrierend sein.
Werbung

Kostenlos bedeutet nicht immer "nicht so gut wie bezahlt", und OpenHAB ist keine Ausnahme. Die Open-Source-Heimautomatisierungs-Software geht weit über die Möglichkeiten aller anderen auf dem Markt erhältlichen Hausautomationssysteme hinaus - es ist jedoch nicht einfach, sie einzurichten. In der Tat kann es geradezu frustrierend sein.

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

In Teil 1 des Leitfadens habe ich Sie durch die Installation von OpenHAB auf einem Raspberry Pi geführt. Erste Schritte mit OpenHAB Home Automation auf Raspberry Pi Erste Schritte mit OpenHAB Home Automation auf Raspberry Pi OpenHAB ist eine ausgereifte Open-Source-Hausautomationsplattform, die auf einer Vielzahl läuft von Hardware und ist Protokoll agnostisch, was bedeutet, dass es mit fast jeder Hausautomations-Hardware auf dem heutigen Markt verbinden kann. Read More, führte die Kernkonzepte von OpenHAB ein und zeigte Ihnen, wie Sie Ihre ersten Artikel in das System einfügen. Heute werden wir weiter gehen:

  • Hinzufügen von ZWave-Geräten
  • 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 Hausautomationsprotokoll: Es ist zuverlässig, wurde umfassend entwickelt und arbeitet mit einer viel größeren Reichweite als jedes andere Smart-Home-Produkt. Ihnen stehen Hunderte von Z-Wave-Sensoren zur Verfügung, die eine Vielzahl von Aufgaben erfüllen. OpenHAB kann mit Z-Wave arbeiten, aber es ist mühsam einzurichten und die Zuverlässigkeit ist nicht garantiert.

Wenn Sie den Kauf eines Hauses voller Z-Wave-Sensoren speziell für die Verwendung mit OpenHAB in Erwägung ziehen, möchte ich Sie dringend bitten, es noch einmal zu überdenken. Es kann gut für Sie funktionieren, oder es kann mit kleinen, aber anhaltenden Problemen geplagt werden. Kaufen Sie ein Haus voller Sensoren erst, wenn Sie einige davon ausprobieren konnten. Der einzige Grund, sich für Z-Wave zu entscheiden, ist, wenn Sie nicht zu 100% auf OpenHAB eingestellt sind und Ihre Optionen in Zukunft offen lassen möchten: Z-Wave arbeitet zum Beispiel mit Samsung SmartThings Welcher Smart Hub für Heimautomatisierung ist das Beste für Sie ? Welcher Smart Hub für die Heimautomatisierung ist das Beste für Sie? Für eine Weile hielten die Leute die Idee für nichts weiter als ein Gimmick, aber die jüngsten Produkt-Releases haben gezeigt, dass Smart-Home-Automation beginnt, ihre Versprechen zu halten. Lesen Sie mehr Hub, sowie Z-Wave-spezifische Hubs wie Homeseer und eine Reihe weiterer Software-Optionen wie Domoticz.

Obwohl OpenHAB eine Z-Wave-Bindung enthält, müssen Sie das Z-Wave-Netzwerk erst konfigurieren, bevor OpenHAB mit der Abfrage nach Daten beginnen kann. Wenn Sie eine Rasberry Controller-Karte haben, haben Sie eine Software zum Konfigurieren des Netzwerks zur Verfügung gestellt, daher werden wir das hier nicht behandeln. Wenn Sie einen Aeotec USB-Z-Stick-Controller oder ähnliches gekauft haben, haben Sie wahrscheinlich keine Software im Lieferumfang enthalten, lesen Sie weiter.

Aeotec Z-Stick Gen5, Z-Wave Plus USB zum Erstellen von Gateway Aeotec Z-Stick Gen5, Z-Wave Plus USB zum Erstellen von Gateway Jetzt Kaufen bei Amazon 44, 95 $

Wenn Sie bereits ein Z-Wave-Netzwerk eingerichtet haben, können Sie Ihren Controller einfach 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 ein wenig komplexer.

Zunächst auf der Hardware-Seite: Jeder Controller hat seine eigene Art der Kopplung mit Geräten (technisch bekannt als "Inklusion-Modus", in dem eine Node-ID vergeben ist). Im Fall des Aotec Z-Sticks bedeutet dies, dass Sie es vom USB-Anschluss trennen und die Taste einmal drücken, um es in den Einschlussmodus zu setzen. Dann nimm es in die Nähe des Geräts, das du koppelst, und drücke den Inklusionsknopf (auch das wird sich ändern): Mein Everspring-Sockel benötigt 3 Mal hintereinander die Taste, so dass die Lektion hier ist, um das Handbuch zu lesen Ihr Gerät) .

Der Z-Stick blinkt kurz auf, um den Erfolg anzuzeigen. Dies wirft Probleme auf, wenn es wieder in den Pi gesteckt wird, da ein neuer Port zugewiesen wird. Starten Sie Ihren Pi neu, um ihn auf den Standard-Port zurückzusetzen, wenn Sie feststellen, dass ihm ein anderer dynamisch zugewiesen wurde. Besser noch: Stecken Sie es nicht in den Pi, bis Sie alle Hardware-Paarungen zuerst gemacht haben.

Installieren von HABmin- und Z-Wave-Bindungen

Da OpenHAB eigentlich kein Konfigurationsprogramm für Z-Wave ist, werden wir ein anderes Web-Management-Tool installieren, das das tut - etwas, das HABmin heißt. Gehen Sie weiter zum HABmin Github Repository, um die aktuelle Version herunterzuladen. Nach dem Entpacken finden Sie 2 .jar- Dateien im addons-Verzeichnis - diese sollten sich im entsprechenden addons-Verzeichnis Ihrer OpenHAB Home-Freigabe befinden (wenn Sie auch den Aotec gen5 Z-Stick verwenden, stellen Sie sicher, dass Sie habe mindestens Version 1.8 der Z-Wave-Bindung .

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

Hinweis: Es gibt auch ein HABmin 2 in aktiver Entwicklung. Die Installation ist ähnlich, aber mit einem zusätzlichen .jar-Addon. Es könnte sich lohnen, beides zu versuchen, nur um zu sehen, was Sie bevorzugen.

Wenn du es noch nicht getan hast, schließe deinen Controller an deinen Pi an. Geben Sie Folgendes ein, um den richtigen Anschluss zu finden.

 ls / dev / tty * 

Du suchst nach etwas mit USB im Namen, oder in meinem speziellen Fall präsentierte sich der Z-Stick als / dev / ttyACM0 (ein Modem). Es könnte einfacher sein, den Befehl einmal zu tun, bevor Sie ihn anschließen und danach, damit Sie sehen können, was sich ändert, wenn Sie sich nicht sicher sind.

abweichend

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

 sudo usermod -a -G Dialout openhab 

Um nun alles in die Tat umzusetzen, starten Sie OpenHAB neu

 sudo service openhab neu starten 

Wenn Sie das Debug-Protokoll überprüfen, werden Sie hoffentlich so etwas sehen. Herzlichen Glückwunsch, Sie sprechen jetzt Z-Wave. Möglicherweise finden Sie das Debugprotokoll auch mit Nachrichten von verschiedenen Z-Wave-Knoten überflutet. Beginnen wir mit der Überprüfung von HABMIN, 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).

zwave startet im openhab log

Es gibt eine Menge zu sehen in HABMIN, aber wir beschäftigen uns nur mit der Registerkarte Konfiguration -> Bindungen -> Z-Wave -> Geräte, wie Sie unten sehen können. Erweitern Sie den Knoten, um den Speicherort und das Namensetikett 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 sind die meisten Geräte bereits erforscht und es wird bereits Beispiele für Sie geben. Das Konfigurieren von benutzerdefinierten Geräten, die nicht erkannt werden, geht weit über den Rahmen dieses Handbuchs hinaus, aber nehmen wir an, dass es zunächst unterstützt wird.

Zuerst habe ich einen grundlegenden Everspring AN158 Power-Switch und Meter auf Knoten 3. Ein schnelles Googeln führte mich zu einem Blog-Post auf Wetwa.re, mit einer Beispielkonfiguration. Ich habe das wie folgt angepasst:

 Schalter Luftentfeuchter_Schalter "Entfeuchter" {zwave = "3: command = switch_binary"} Anzahl Luftentfeuchter_Watts "Entfeuchter Stromverbrauch [% .1f W]" {zwave = "3: command = meter"} 

Perfekt.

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

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

Für diesen habe ich eine Beispielkonfiguration bei iwasdot.com gefunden, und mein Multisensor befindet sich auf Knoten 2.

 Anzahl Hallway_Temperature "Hallway Temperature [% .1f ° C]" (Hallway, Temperatur) {zwave = "2: 0: Befehl = sensor_multilevel, sensor_type = 1, sensor_scale = 0"} Nummer Hallway_Humidity "Hallway Humidity [% .0f %% ] "(Flur, Luftfeuchtigkeit) {zwave =" 2: 0: command = sensor_multilevel, sensor_type = 5 "} Anzahl Hallway_Luminance" Flurhelligkeit [% .0f Lux] "(Flur) {zwave =" 2: 0: command = sensor_multilevel, sensor_type = 3 "} Kontakt Hallway_Motion" Flurbewegung [% s] "(Flur, Bewegung) {zwave =" 2: 0: befehl = sensor_binary, respond_to_basic = true "} Anzahl sensor_1_battery" Batterie [% s %%] "( Bewegung) {zwave = "2: 0: Befehl = Batterie"} 

Wenn Ihnen das Format für Sie seltsam erscheint, gehen Sie zurück zum ersten Einsteigerhandbuch. Erste Schritte mit OpenHAB Home Automation auf Raspberry Pi Erste Schritte mit OpenHAB Home Automation auf Raspberry Pi OpenHAB ist eine ausgereifte Open-Source-Plattform für die Hausautomatisierung eine Vielzahl von Hardware und ist Protokoll agnostisch, was bedeutet, dass es mit fast jeder Hausautomatisierung Hardware auf dem heutigen Markt verbinden kann. Lesen Sie mehr, speziell den Bereich Farbtonbindung, in dem ich erkläre, wie Elemente hinzugefügt werden. Sie werden wahrscheinlich nur solche Beispiele einfügen müssen, aber falls Sie ein neues Gerät haben, werden in der verbindlichen Dokumentation alle Befehle beschrieben.

Logitech Harmony Bindung

Bevor wir uns den Regeln zuwenden, möchte ich eine kurze Anmerkung zum Arbeiten mit der Harmony-Bindung hinzufügen. Ich bin ein großer Fan der Harmony-Serie von ultimativen Fernbedienungen Logitech Harmony Ultimate Review und Giveaway Logitech Harmony Ultimate Review und Giveaway Ihr Wohnzimmer ist Chaos - zugeben Sie es. Sie fragen sich, welche Fernbedienung welches Gerät steuert. Was mit dem Fernseher, Verstärker, TiVO, BluRay-Player, vielleicht sogar den Lichtwechsel-Aktivitäten zu einem langen ... Lesen Sie mehr, um die Heim-Media-Center-Erfahrung zu vereinfachen, aber sie oft als separates System innerhalb des Smart Home stehen. 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 "harmony" zu suchen:

openhab apt-cache Suche nach Harmoniebindung

Vergessen Sie nicht, das Bindungsverzeichnis erneut zu öffnen, wenn Sie fertig sind:

 sudo apt-get installieren openhab-addon-action-harmonyhub sudo apt-get installieren openhab-addon-binding-harmonyhub sudo apt-get installieren openhab-addon-io-harmonyhub sudo chown-hR öffnen: openhab / usr / share / openhab 

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

 ########## HARMONY REMOTE CONTROLS ########## harmonyhub: host = 192.168.1.181 oder dein ip harmonyhub: benutzername = dein-harmony-email-login harmonyhub: passwort = dein- Passwort 

Die IP-Adresse entspricht der Ihres Harmony-Hubs. Verwenden Sie einen Netzwerkscanner, um das herauszufinden. Sie müssen außerdem Ihre Anmeldedaten eingeben, die Sie eingeben, wenn Sie das standardmäßige Harmony-Konfigurationsprogramm starten. Das ist es. Nach dem Neustart Ihres Hue sollte Ihr Debugprotokoll einen plötzlichen Ausbruch der Bindung anzeigen.

Dies ist eine JSON-formatierte Liste aller Aktivitäten, Geräte und Befehle, die gesendet werden können. Es ist eine gute Idee, dies für zukünftige Referenz zu kopieren. Sie können es noch einfacher machen, mit zusammenklappbaren Knoten zu lesen, indem Sie in einen Online-JSON-Formatierer wie diesen einfügen.

json formatierte openhab-Ausgabe

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

 / * Harmony Hub * / String Harmony_Activity "Harmonie [% s]" (Living_Room) {harmonyhub = "* [currentActivity]"} 

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

 Switch item = Harmony_Activity mappings = [PowerOff = 'Aus', Übung = 'Übung', 13858434 = 'TV', Karaoke = 'Karaoke'] 

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, die ich gefunden habe, war alles mit einem 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 Oberfläche, Sie sollten etwas Ähnliches sehen:

openhab Harmonie in der Sitemap

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

Eine allgemeine Einführung in Regeln

Die meisten Smart-Home-Hubs enthalten eine Art Regelerstellung, so dass Sie automatisch auf Sensordaten und Ereignisse im Heim reagieren können. In der Tat würde ich argumentieren, dass ein wirklich intelligentes Haus ist nicht eine, die Sie Zeit mit mobilen Apps interagieren müssen - es ist eine, die für den Endbenutzer unsichtbar und vollständig automatisiert ist. Zu diesem Zweck enthält OpenHAB auch eine leistungsstarke Regelskriptsprache, die Sie programmieren können, weit über die Komplexität der meisten Smart-Home-Hubs. Battle of the Smart Home-Hubs: Was ist da draußen und was kommt? Kampf um die Smart Home Hubs: Was ist da draußen und was kommt? Lesen Sie mehr oder IFTTT-Rezepte IFTTT stellt jetzt eine Verbindung zu allem her: Einführung in den Maker-Kanal IFTTT stellt jetzt eine Verbindung zu allem her: Einführung in den Maker-Kanal Die potenziellen Einsatzmöglichkeiten für IFTTT sind endlos. Aber bis jetzt war es schwierig, es mit Ihren eigenen Hardwareprojekten zu verbinden. Heute ist alles anders. Weiterlesen .

Programmierregeln klingt schlechter als es ist. Beginnen wir einfach mit einem Paar Regeln, die das Licht je nach Anwesenheitssensor ein- oder ausschalten:

 Regel "Office-Licht an, wenn James anwesend ist", wenn Item JamesInOffice von OFF zu ON wechselt, dann sendCommand (Office_Hue, ON) die Endregel "Office light aus, wenn James geht", wenn Item JamesInOffice von ON zu OFF wechselt und sendCommand (Office_Hue, OFF) endet 

Zuerst nennen wir die Regel - 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 . Das Ende bedeutet die Schließung dieser bestimmten Regel. Es gibt eine Reihe von speziellen Wörtern, die Sie in Regeln verwenden können, aber im Moment haben wir es mit zwei einfachen Bits der Syntax zu tun - Item, mit dem Sie den Zustand von etwas abfragen können; und sendCommand, der genau das tut, was Sie denken. Ich sagte dir, das war einfach.

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

Sehen wir uns ein weiteres Beispiel an, um eine geplante Regel zu erstellen.

 Regel "Jeden Morgen trainieren" wenn Time cron "0 0 8 1/1 *? *" endet dann harmonyStartActivity ("Exercise") 

Auch hier nennen wir die Regel, die Zustandsbedingungen, wann sie ausgelöst werden sollte, und die zu treffenden Maßnahmen. 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 etwas von einem normalen CRON-Tab). Ich habe cronmaker.com verwendet, um den Ausdruck zu erstellen, aber Sie können auch den Format-Guide für eine detaillierte Erklärung und weitere Beispiele lesen.

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

Meine Regeln sagen einfach "8 Uhr jeden Morgen, jeden Tag der Woche, erzähle meinem Harmony Ultimate-System, um die Übung Aktivität zu starten", die wiederum aktiviert den Fernseher, die Xbox, den Verstärker und drückt die A-Taste nach einer Minute zu starten die Festplatte im Laufwerk.

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

Eine weitere Regel, die ich Ihnen zeigen möchte, ist etwas, das ich verwende, um die Luftfeuchtigkeit in meinem Haus zu verwalten. Ich habe einen einzigen Entfeuchter, den ich überall hinbewegen muss, also habe ich beschlossen, alle meine Feuchtesensoren zu betrachten, herauszufinden, welcher der höchste ist, und diesen in einer Variablen zu speichern. Es wird momentan jede Minute ausgelöst, aber das kann leicht gesenkt werden. Schau zuerst:

 import org.openhab.core.library.types. * import org.openhab.model.script.actions. * import java.lang.String-Regel "Humidity Monitor" wenn Time cron "0 * * * *?" dann var prevHigh = 0 var highHum = "" Luftfeuchtigkeit? .Members.forEach [hum | logDebug ("feuchte.regeln", hum.name); if (hum.state als DecimalType> prevHigh) {prevHigh = hum.state highHum = hum.name + ":" + hum.status + "%"}] logDebug ("feuchte.regeln", highHum); postUpdate (Luftentfeuchter_Needed, highHum); Ende 

Der Kern der Regel befindet sich in der Zeile Humidity? .members.foreach . Feuchtigkeit ist ein Gruppenname für meine Feuchtigkeitssensoren; .Members packt alle Elemente in dieser Gruppe; foreach iteriert über sie (mit einem seltsamen eckigen Klammerformat, mit dem Sie wahrscheinlich nicht vertraut sind). Die Syntax von Regeln ist eine Ableitung von Xtend. Sie können also die Xtend-Dokumentation lesen, wenn Sie kein passendes Beispiel finden.

Du wirst es wahrscheinlich nicht brauchen - es gibt Hunderte von Beispielregeln da draußen:

  • Detaillierte Erklärung der Regeln im offiziellen Wiki
  • Die offiziellen Regeln finden Sie auf der Wiki-Seite
  • Regeln zu neuen Höhen bringen
  • Fortgeschrittene Proben bei IngeniousFool.net

MQTT für OpenHAB und Internet der Dinge

MQTT ist ein leichtgewichtiges Messaging-System für Machine-to-Machine-Kommunikation - eine Art Twitter für Ihre Arduinos oder Raspberry Pis, um miteinander zu reden (obwohl es natürlich mit viel mehr als nur diesen funktioniert). Es gewinnt immer mehr an Popularität und findet sich in Internet of Things-Geräten wieder, die normalerweise Mikrocontroller mit niedrigen Ressourcen sind, die eine zuverlässige Methode zur Übertragung von Sensordaten an Ihren Hub oder zum Empfang von Remote-Befehlen benötigen. 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 dennoch eine zuverlässige Datenlieferung zu gewährleisten. Im Laufe der Jahre sind die Designprinzipien gleich geblieben, aber der Anwendungsfall hat sich von spezialisierten eingebetteten Systemen zu allgemeinen Geräten des Internets der Dinge verschoben. Im Jahr 2010 wurde das Protokoll gebührenfrei veröffentlicht, offen für jedermann zu verwenden und zu implementieren. Wir mögen frei.

Sie wundern sich vielleicht, warum wir uns überhaupt noch mit einem anderen Protokoll beschäftigen - wir haben ja schon das HTTP -, mit dem man schnelle Nachrichten zwischen allen Arten von Web-verbundenen Systemen (wie OpenHAB und IFTTT, insbesondere mit dem neuen Maker-Kanal) senden kann IFTTT stellt jetzt eine Verbindung zu allem her: Einführung in den Maker-Kanal IFTTT verbindet sich jetzt mit allem: Einführung in den Maker-Kanal Die Möglichkeiten für IFTTT sind endlos, aber bisher war es schwierig, sie mit Ihren eigenen Hardware-Projekten zu verbinden. Weiterlesen ). Und du hättest recht. Der Verarbeitungsaufwand eines HTTP-Servers ist jedoch ziemlich groß - so sehr, dass Sie auf einem eingebetteten Mikrocontroller wie dem Arduino nicht so einfach laufen können (zumindest können Sie das, aber Sie werden nicht viel Speicher für irgendetwas anderes übrig haben) ). MQTT ist andererseits leichtgewichtig, so dass das Senden von Nachrichten in Ihrem Netzwerk die Pipes nicht verstopft und es sich leicht in unseren kleinen Arduino-Speicherplatz einfügt.

Wie funktioniert MQTT?

MQTT benötigt sowohl einen Server ("Broker" genannt) als auch einen oder mehrere Clients. Der Server fungiert als Vermittler, der Nachrichten empfängt und sie an interessierte Kunden weiterleitet.

Lassen Sie uns jedoch mit der Twitter-for-machines- Analogie fortfahren. So wie Twitter-Benutzer ihre eigenen bedeutungslosen 140 Zeichen twittern können und Benutzer anderen Nutzern "folgen" können, um einen kuratierten Post-Stream zu sehen, können MQTT-Clients einen bestimmten Kanal abonnieren, um alle Nachrichten von dort zu empfangen und ihre eigenen Nachrichten zu veröffentlichen zu diesem Kanal. Dieses Veröffentlichungs- und Abonnementmuster wird im Gegensatz zum traditionellen Client / Server- Modell von HTTP als Pub / Sub bezeichnet .

HTTP erfordert, dass Sie sich an die Maschine wenden, mit der Sie kommunizieren, sagen Sie Hallo, und lassen Sie sich dann gegenseitig hin und her quittieren, während Sie Daten erhalten oder ablegen. Bei Pub / Sub muss der Client, der die Veröffentlichung durchführt, nicht wissen, welche Clients abonniert sind: Er pumpt die Nachrichten einfach aus und der Broker verteilt sie an alle abonnierten Clients weiter. Jeder Kunde kann Themen wie Twitter-Nutzer veröffentlichen und abonnieren.

Im Gegensatz zu Twitter ist MQTT jedoch nicht auf 140 Zeichen beschränkt. Es ist datenunabhängig, so dass 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 besser geeignet, wenn wir überall im Haus viele Sensoren haben, die sich ständig melden.

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

Installieren Sie Mosquitto auf Ihrem Pi

Obwohl OpenHAB einen MQTT-Client enthält, damit Sie ein Thema abonnieren und auch Nachrichten veröffentlichen können, fungiert es nicht als Server. Dafür müssen Sie entweder einen webbasierten MQTT-Broker (kostenpflichtig oder kostenlos) verwenden oder die kostenlose Software auf Ihrem Pi installieren. Ich würde es gerne 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. Stattdessen fügen wir die neuesten Quellen hinzu.

 wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key sudo apt-key Hinzufügen 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 zu betreiben. Ihr Broker wird standardmäßig auf Port 1883 ausgeführt.

Überprüfen Sie, ob Ihr MQTT-Server mit dem kostenlosen MQTT.fx arbeitet, das plattformübergreifend ist. 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, ist es gut zu gehen.

mqttfx Beispielprofil

Für einen schnellen Test, klicken Sie auf den "subscribe" -Register und geben SieTopic / in das Textfeld ein, dann drücken Sie den Subscribe- Button. Sie sind jetzt angemeldet, um eine Nachricht zu dem Thema zu erhalten, das in Topic genannt wird. Es werden jedoch 0 Nachrichten angezeigt. Kehren Sie zur Registerkarte Veröffentlichung zurück, geben Sie Topic in das kleine Feld und eine kurze Nachricht in das große Textfeld unten ein. Klicken Sie ein paar Mal auf Publish und dann auf den Tab "Abonnieren". In diesem Thema sollten einige Nachrichten angezeigt werden.

InTopic MQTT Test

Bevor wir unserem Netzwerk tatsächlich Sensoren hinzufügen, müssen wir uns mit Themenebenen befassen, die es uns ermöglichen, das MQTT-Netzwerk zu strukturieren und zu filtern. Themennamen unterscheiden zwischen Groß- und Kleinschreibung, sollten nicht mit $ beginnen oder Leerzeichen oder Nicht-ASCII-Zeichen enthalten - die Standardprogrammierung für Variablennamen.

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

 inTopic / smallSubdivision / evenSmallersubdivision myHome / livingRoom / Temperatur myHome / livingRoom / Feuchtigkeit myHome / Küche / Temperatur myHome / Küche / Feuchtigkeit 

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

Clients können dann eine beliebige Anzahl einzelner Themenebenen veröffentlichen oder abonnieren oder einige spezielle Platzhalterzeichen verwenden, um von oben nach oben 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.

# Ist ein mehrstufiger Platzhalter, 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 bekommen, was durch den Broker geht, aber das kann sein, als würden Sie einen Feuerlöschschlauch in Ihr Gesicht stecken: ein bisschen überwältigend. Versuchen Sie, sich mit dem öffentlichen MQTT-Broker von HiveMQ zu verbinden und # zu abonnieren. Ich habe in ein paar Sekunden etwa 300 Nachrichten erhalten, bevor mein Client abgestürzt ist.

MQTT Einsteigertipp: " / myHome /" ist ein anderes Thema als " myHome /" - ein Schrägstrich am Anfang erzeugt eine leere Topic-Ebene, die zwar technisch gültig ist, aber nicht empfohlen wird, da sie verwirrend sein kann.

Nun, da wir die Theorie kennen, lassen Sie uns einen Arduino, Ethernet Shield und einen DHT11 Temperatur- und Feuchtigkeitssensor ausprobieren - 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. Schließlich wollen wir eine bessere / billigere Art der Kommunikation, die eine Netzwerkverbindung in jedem Raum verwenden muss, aber dies dient dazu, die Grundlagen zu lernen.

Beginnen Sie mit dem Herunterladen der Pubsubclient-Bibliothek von Github. Wenn Sie die Schaltfläche "Download als ZIP" verwendet haben, ist die Struktur ein bisschen falsch. Entpacken Sie, benennen Sie den Ordner in pubsubclient um, nehmen Sie die beiden Dateien aus dem Ordner src und verschieben Sie sie eine Ebene nach oben in das Stammverzeichnis des heruntergeladenen Ordners. Dann verschieben Sie den gesamten Ordner in Ihr 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); 

Unglücklicherweise können wir seinen freundlichen Namen (OpenHAB.local in meinem Fall) nicht verwenden, 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 wollen . Um die Themen zu ändern, auf denen Sensordaten gesendet werden, scrollen Sie nach unten zu diesen Zeilen:

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

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

 clientsubscribe ("openhab / himitsu / command"); 

Untersuchen Sie den Code dort und Sie werden feststellen, dass Sie eine LED oder ein Relais leicht steuern können, indem Sie beispielsweise 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 verwenden Sie MQTT.fx abonnieren Sie entweder # oder openhab / himitsu / # (oder was auch immer Sie den Raumnamen geändert haben, aber vergessen Sie nicht, die # am Ende einzufügen ). Ziemlich bald sollten Sie Nachrichten kommen sehen; und wenn Sie ON oder OFF zum Befehlsthema senden, sehen Sie, dass Bestätigungen ebenfalls zurückkommen.

mqtt arduino Nachrichten kommen zurück

MQTT-Bindung für OpenHAB

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

 sudo apt-get installieren openbh-addon-binding-mqtt sudo chown-hR öffnen: openhab / usr / share / openhab 

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

 mqtt: broker.url = tcp: // lokaler Host: 1883 mqtt: broker.clientId = openhab 

Starten Sie OpenHAB neu

 sudo service openhab neu starten 

Dann fügen wir ein oder zwei Elemente hinzu:

 / * MQTT Sensoren * / Nummer Himitsu_Temp "Himitsu Temperatur [% .1f ° C]" (Himitsu, Temperatur) {mqtt = "<[broker: openhab / himitsu / temperatur: state: default]"} Anzahl Himitsu_Humidity "Himitsu Humidity [ % .1f %%] "(Himitsu, Feuchtigkeit) {mqtt =" <[broker: openhab / himitsu / feuchtigkeit: state: default] "} 

Inzwischen solltest du das Format verstehen; Es wird ein Number-Element aus der MQTT-Bindung für ein bestimmtes Thema abgerufen. Dies ist ein einfaches Beispiel. Vielleicht möchten Sie auf die Wiki-Seite verweisen, wo sie sehr viel komplexer werden kann.

Herzlichen Glückwunsch, Sie haben jetzt die Basis eines billigen Arduino-basierten Sensor-Array. Wir werden dies in Zukunft noch einmal Revue passieren lassen und die Arduino's auf ihr eigenes, völlig separates RF-Netzwerk setzen. Ich habe auch eine identische Version für Wizwiki 7500 Boards erstellt, wenn Sie eine solche haben.

Persistenz und grafische Daten

Inzwischen haben Sie wahrscheinlich eine Reihe von Sensoren eingerichtet, ob von Z-Wave oder benutzerdefinierten Arduinos mit MQTT - so können Sie jederzeit den aktuellen Status dieser Sensoren einsehen und auch auf deren Wert in Regeln reagieren. Aber das Interessante an Sensorwerten ist, dass sie sich im Laufe der Zeit ändern: Hier kommt die Persistenz und Graphik ins Spiel. Die Persistenz in OpenHAB bedeutet, dass die Daten im Laufe der Zeit gespeichert werden. Lassen Sie uns fortfahren und RRD4J (Round Robin Database für Java) einrichten, das so genannt wird, weil Daten in einem Round-Robin-Modus 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 anschließend eine neue Datei namens rrd4j.persist im Ordner configurations / persistence . Fügen Sie Folgendes ein:

 Strategien {everyMinute: "0 * * * *?" everyHour: "0 0 * * *?" jeden Tag: "0 0 0 * *?" default = everyChange} Items {// behalten alles bei, wenn der Wert aktualisiert wird, nur ein Standard und stellt sie beim Start aus der Datenbank wieder her *: strategie = everyChange, restoreOnStartup // Als nächstes definieren wir spezifische Strategien von everyHour für alles in der Temperaturgruppe, und und jede Minute für Feuchtigkeit Temperatur *: Strategie = jede Stunde Feuchtigkeit *: Strategie = jederMinute // alternativ können Sie hier bestimmte Elemente hinzufügen, wie zum Beispiel: // Bedroom_Humidity, JamesInOffice: strategie = everyMinute} 

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

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, um die ich mich nicht sonderlich kümmere, also habe ich das so eingestellt, dass ich nur jede Stunde speichern kann, aber Feuchtigkeit ist mir ein großes Anliegen, also möchte ich sehen, wie sich jede Minute ändert. Wenn andere Daten zu bestimmten Zeiten gespeichert werden sollen, fügen Sie diese hier hinzu oder passen Sie sie nach Bedarf an.

Hinweis: Wenn Sie die Daten ebenfalls 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 lediglich mitteilen, dass sie einmal pro Minute gespeichert werden.

Mit dieser Definition sollten Sie beginnen, einige Debug-Ausgaben zu sehen, die Ihnen sagen, dass Werte gespeichert werden.

rrd4j speichert Daten

Als nächstes machen wir einige schöne Grafiken von all diesen Daten. Es ist wirklich einfach. Um ein Diagramm eines einzelnen Sensors zu erstellen, fügen Sie Ihrer Sitemap Folgendes hinzu:

 Diagrammelement = Schlafzimmer_Freizeit = h 

Das ist buchstäblich alles was du brauchst. Gültige Werte für die Periode sind h, 4h, 8h, 12h, D, 3D, W, 2W, M, 2M, 4M, Y ; Es sollte offensichtlich sein, was diese bedeuten. Wenn nicht angegeben, wird D standardmäßig für einen ganzen Tag mit Daten verwendet.

Um ein Diagramm mit mehreren Elementen zu erstellen, grafisch einfach den Gruppennamen anzeigen:

 Diagrammelement = Feuchtigkeitsperiode = h 

Diagramm

Sie könnten auch daran interessiert sein zu wissen, dass Sie dieses Diagramm an anderer Stelle verwenden können; Es erzeugt ein Bild mit der folgenden URL: http: // YOUROPENHABURL: 8080 / Diagramm? groups = Luftfeuchtigkeit & Zeitraum = h

Wie kommt Ihr OpenHAB-System?

Das ist es für diese Ausgabe des Leitfadens, aber erwarte nicht, dass dies das letzte Mal sein wird, was du von uns über OpenHAB hörst. Hoffentlich haben Sie und der Anfängerleitfaden Ihnen eine solide Grundlage gegeben, um Ihr eigenes komplettes OpenHAB-System zu entwickeln - aber es ist ein Prozess, der nie wirklich abgeschlossen ist.

Zum Glück kann OpenHAB von einigen wenigen Geräten auf Hunderte skalieren, von einfacher Regelkomplexität bis zur ultimativen Heimautomatisierung - wie kommt Ihr System daher? Welche Geräte haben Sie ausgewählt? Was ist das nächste große Projekt, das du angehen wirst?

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

In this article