Reklama

Darmowy nie zawsze oznacza „nie tak dobry jak płatny”, a OpenHAB nie jest wyjątkiem. Oprogramowanie do automatyzacji domu o otwartym kodzie źródłowym znacznie przewyższa możliwości dowolnego innego systemu automatyki domowej na rynku - ale jego konfiguracja nie jest łatwa. W rzeczywistości może być wręcz frustrujące.

Ten przewodnik można pobrać w postaci bezpłatnego pliku PDF. Pobierz przewodnik dla początkujących OpenHAB, część 2: ZWave, MQTT, zasady i wykresy. Kopiuj i udostępniaj to znajomym i rodzinie.

Przeprowadziłem cię w części 1 przewodnika instalowanie OpenHAB na Raspberry Pi Rozpoczęcie pracy z OpenHAB Home Automation na Raspberry PiOpenHAB to dojrzała platforma automatyki domowej o otwartym kodzie źródłowym, która działa na różnych urządzeniach i jest niezależny od protokołu, co oznacza, że ​​można go podłączyć do prawie każdego sprzętu automatyki domowej na rynku dzisiaj. Czytaj więcej , wprowadził podstawowe koncepcje OpenHAB i pokazał, jak dodać swoje pierwsze elementy do systemu. Dzisiaj pójdziemy dalej:

instagram viewer
  • Dodawanie urządzeń ZWave
  • Dodanie kontrolera Harmony Ultimate
  • Wprowadzenie zasad
  • Przedstawiamy MQTT i instalujesz brokera MQTT na twoim Pi z czujnikami na Arduino
  • Rejestrowanie danych i tworzenie wykresów

Wprowadzenie do Z-Wave

Z-Wave jest od lat dominującym protokołem automatyki domowej: jest niezawodny, został szeroko opracowany i działa w znacznie większym zakresie niż jakikolwiek inny produkt inteligentnego domu. Dostępne są setki czujników Z-Wave, które wykonują szeroki zakres zadań. OpenHAB mogą współpracuje z Z-Wave, ale jest trudny do skonfigurowania, a niezawodność nie jest gwarantowana.

Jeśli zastanawiasz się nad zakupem domu pełnego czujników Z-Wave specjalnie do użytku z OpenHAB, zachęcam do ponownego rozważenia. To może się okazać dla ciebie świetne lub może być nękane małymi, ale uporczywymi problemami. Przynajmniej nie kupuj domu pełnego czujników, dopóki nie będziesz miał okazji wypróbować kilka. Jedynym powodem wyboru Z-Wave jest to, że nie jesteś w 100% rozliczony z OpenHAB i chciałbyś pozostawić swoje opcje otwarte w przyszłości: na przykład Z-Wave działa z Samsung SmartThings Które inteligentne centrum automatyki domowej jest dla Ciebie najlepsze?Przez pewien czas ludzie myśleli o tym pomyśle jako o sztuczce, ale ostatnie wersje produktów pokazały, że inteligentna automatyka domowa zaczyna spełniać swoje obietnice. Czytaj więcej hub, a także koncentratory Z-Wave, takie jak Homeseer, oraz szereg innych opcji oprogramowania, takich jak Domoticz.

Chociaż OpenHAB zawiera wiązanie Z-Wave, nadal musisz najpierw skonfiguruj sieć Z-Wave, zanim OpenHAB może rozpocząć wysyłanie zapytań o dane. Jeśli masz płytę kontrolera Rasberry, masz do dyspozycji oprogramowanie do konfiguracji sieci, więc nie będziemy tego tutaj omawiać. Jeśli kupiłeś kontroler Aeotec USB Z-Stick lub podobny, prawdopodobnie nie masz w nim żadnego oprogramowania, więc czytaj dalej.

Aeotec Z-Stick Gen5, Z-Wave Plus USB do stworzenia bramkiAeotec Z-Stick Gen5, Z-Wave Plus USB do stworzenia bramki Kup teraz na Amazon $44.95

Jeśli masz już konfigurację sieci Z-Wave, możesz po prostu podłączyć kontroler do Pi i rozpocząć konfigurację powiązania i elementów. Jeśli to Twoja pierwsza wyprawa do Z-Wave, jest trochę bardziej złożona.

Po pierwsze, od strony sprzętowej: każdy kontroler ma swój własny sposób parowania z urządzeniami (technicznie zwany „trybem włączenia”, w którym przypisany jest identyfikator węzła). W przypadku Aotec Z-Stick oznacza to odłączenie go od portu USB i jednokrotne naciśnięcie przycisku, aby przełączyć go w tryb włączenia. Następnie zanieś go do urządzenia, które chcesz sparować, i naciśnij również przycisk włączenia (może się to również różnić: moje gniazdo Everspring wymaga 3-krotnego naciśnięcia przycisku, więc lekcją tutaj jest przeczytanie instrukcji obsługi urządzenia).

Z-Stick miga krótko, aby wskazać sukces. To stwarza problemy przy ponownym podłączaniu go do Pi, ponieważ nowy port jest przypisany. Uruchom ponownie Pi, aby zresetować go do standardowego portu, jeśli okaże się, że został dynamicznie przypisany inny. Jeszcze lepiej: nie podłączaj go do Pi, dopóki nie wykonasz wszystkich parowania sprzętu w pierwszej kolejności.

Instalowanie powiązań HABmin i Z-Wave

Ponieważ OpenHAB tak naprawdę nie jest narzędziem konfiguracyjnym dla Z-Wave, zainstalujemy inne narzędzie do zarządzania siecią, które działa - coś o nazwie HABmin. Udaj się do Repozytorium HABmin Github pobierz aktualną wersję. Po rozpakowaniu znajdziesz 2 .słoik pliki w katalogu addons - powinny one zostać umieszczone w odpowiednim katalogu addons w twoim udziale OpenHAB Home (jeśli używasz również Aotec gen5 Z-Stick, upewnij się, że masz co najmniej wersję 1.8 wiązania Z-Wave).

Następnie utwórz nowy folder w katalogu webapps i nazwij go „habmin” (małe litery są ważne). Skopiuj tam resztę pobranych plików.

Uwaga: istnieje również HABmin 2 w trakcie aktywnego rozwoju. Instalacja przebiega tak samo, ale z jednym dodatkowym dodatkiem .jar. Warto spróbować obu, aby zobaczyć, który wolisz.

Jeśli jeszcze tego nie zrobiłeś, podłącz kontroler do swojego Pi. Wpisz następujące informacje, aby znaleźć odpowiedni port.

ls / dev / tty *

Szukasz czegoś z USB w nazwie, lub w moim przypadku Z-stick prezentował się jako /dev/ttyACM0 (modem). Polecenie może być łatwiejsze do wykonania raz przed podłączeniem, a raz później, abyś mógł zobaczyć, jakie zmiany wprowadzisz, jeśli nie masz pewności.

devtty

Otwórz plik konfiguracyjny OpenHAB i zmodyfikuj sekcję Z-Wave, odkomentując obie linie i podając rzeczywisty adres urządzenia. Ostatnim krokiem było zezwolenie użytkownikowi OpenHAB na dostęp do modemu.

sudo usermod -a -G dialout openhab

Teraz, aby wszystko uruchomić, uruchom ponownie OpenHAB

ponowne uruchomienie usługi sudo openhab

Mamy nadzieję, że jeśli sprawdzasz dziennik debugowania, zobaczysz coś takiego. Gratulacje, mówisz teraz o Z-Wave. Może się również okazać, że dziennik debugowania jest zalany wiadomościami z różnych węzłów Z-Wave. Zacznijmy od sprawdzenia HABMIN, aby zobaczyć, co zostało znalezione: http://openhab.local: 8080 / habmin / index.html (zastępując plik openhab.local nazwą hosta lub adresem IP Raspberry Pi).

uruchamianie zwave w logu OpenHab

W HABMIN jest wiele do zobaczenia, ale naprawdę interesujemy się tylko Konfiguracja -> Wiązania -> Z-Wave -> Urządzenia zakładkę, jak widać poniżej. Rozwiń węzeł, aby edytować etykietę lokalizacji i nazwy w celu ułatwienia wyszukiwania informacji.

edytuj nazwę urządzenia

Konfigurowanie elementów Z-Wave

Każde urządzenie Z-Wave będzie miało określoną konfigurację dla OpenHAB. Na szczęście większość urządzeń została już zbadana i będą już dostępne dla Ciebie przykłady. Konfigurowanie niestandardowych urządzeń, które nie są rozpoznawane, znacznie wykracza poza zakres tego przewodnika, ale załóżmy, że na razie jest obsługiwane.

Po pierwsze, mam podstawowy wyłącznik zasilania Everspring AN158 i miernik na Węźle 3. Szybki Googling doprowadził mnie do wpisu na blogu na Wetwa.re, z konfiguracją przykładowego elementu. Dostosowałem to w następujący sposób:

Przełącz przełącznik osuszacza "Osuszacz" {zwave = "3: polecenie = switch_binary"} Liczba Osuszacz_Watts "Pobór mocy przez osuszacz [% .1f W]" {zwave = "3: polecenie = miernik"}

Idealny.

Następny jest Aeotec Gen5 Multi-Sensor.

Aeon Labs Aeotec Z-Wave Gen5 Multi-Sensor (Z-Wave Plus)Aeon Labs Aeotec Z-Wave Gen5 Multi-Sensor (Z-Wave Plus) Kup teraz na Amazon $69.27

W tym przypadku znalazłem przykładową konfigurację na iwasdot.com, a mój multisensor znajduje się w węźle 2.

Liczba Temperatura korytarza „Temperatura korytarza [% .1f ° C]” (korytarz, temperatura) {zwave = "2: 0: polecenie = czujnik_multilevel, typ czujnika = 1, czujnik_skala = 0"} Liczba Przedpokój_ Wilgotność „Przedpokój Wilgotność [% .0f %%]” (Przedpokój, Wilgotność) {zwave = "2: 0: command = sensor_multilevel, sensor_type = 5"} Liczba Luminancja przedpokoju „Luminancja przedpokoju [% .0f Lux]” (Przedpokój) {zwave = "2: 0: polecenie = wielopoziomowy czujnik, typ czujnika = 3"} Skontaktuj się z Hallway_Motion „Motion Hallway [% s]” (Hallway, Motion) {zwave = "2: 0: command = sensor_binary, respond_to_basic = true"} Number sensor_1_battery „Bateria [% s %%]” (ruch) {zwave = "2: 0: polecenie = bateria"}

Jeśli ten format wydaje Ci się dziwny, wróć do pierwszego Przewodnik dla początkujących Rozpoczęcie pracy z OpenHAB Home Automation na Raspberry PiOpenHAB to dojrzała platforma automatyki domowej o otwartym kodzie źródłowym, która działa na różnych urządzeniach i jest niezależny od protokołu, co oznacza, że ​​można go podłączyć do prawie każdego sprzętu automatyki domowej na rynku dzisiaj. Czytaj więcej , w szczególności sekcję Wiązanie barwy, w której wyjaśniam, w jaki sposób dodawane są elementy. Prawdopodobnie będziesz musiał tylko skopiować przykłady wklejania w ten sposób, ale w przypadku nowego urządzenia dokumentacja powiązania zawiera wszystkie polecenia.

Wiązanie Logitech Harmony

Zanim przejdziemy do zasad, chciałem dodać krótką notatkę na temat pracy z wiązaniem Harmony. Jestem wielkim fanem Seria najlepszych pilotów Harmony Logitech Harmony Ultimate Review i prezentyTwój salon jest chaosem - przyznaj się. Wybaczono ci zastanawianie się, które piloty sterują, które urządzenie. Co z telewizorem, wzmacniaczem, TiVO, odtwarzaczem BluRay, może nawet oświetleniem - przełączanie staje się długim ... Czytaj więcej aby uprościć korzystanie z domowego centrum multimedialnego, ale często stanowią one oddzielny system w inteligentnym domu. Dzięki OpenHAB działania Logitech Harmony i pełna kontrola nad urządzeniem mogą być częścią scentralizowanego systemu, a nawet uwzględnione w regułach automatyzacji.

Rozpocznij od zainstalowania trzech powiązanych plików, które znajdziesz za pomocą apt-cache do wyszukania „harmonii”:

open-apt apt-cache szukaj wiązania harmonii

Nie zapomnij chown katalog powiązań ponownie, gdy skończysz:

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

Aby skonfigurować powiązanie, otwórz plik openhab.cfg i dodaj nową sekcję w następujący sposób:

########## HARMONY ZDALNE STEROWANIE ########## harmonyhub: host = 192.168.1.181lub twój ip
harmonyhub: nazwa użytkownika =twój-harmonia-email-login
harmonyhub: hasło =Twoje hasło

Adres IP jest adresem twojego centrum Harmony. Sprawdź to za pomocą skanera sieciowego. Musisz także podać dane logowania, te, które wprowadzasz po uruchomieniu standardowego narzędzia konfiguracji Harmony. Otóż ​​to. Po zrestartowaniu Hue, dziennik debugowania powinien mieć nagły przypływ danych wyjściowych z powiązania.

To jest sformatowana lista JSON wszystkich działań, urządzeń i poleceń, które można wysłać. Dobrze jest skopiować to na przyszłość. możesz jeszcze bardziej ułatwić czytanie za pomocą składanych węzłów, wklejając do internetowego formatyzatora JSON taki jak ten.

Json sformatowane wyjście openhab

Oprócz standardowej aktywności PowerOff, która jest domyślna, znajdziesz tutaj własne zdefiniowane aktywności wymienione według nazwy. Teraz stwórzmy proste sterowanie jednym przyciskiem, aby rozpocząć działania. Najpierw w pliku elementów dodaj następujący wiersz. Zmień grupę i ikonę, jeśli chcesz.

/ * Harmony Hub * / Ciąg Harmony_Activity „Harmony [% s]” (Living_Room) {harmonyhub = "* [currentActivity]"}

To jest dwukierunkowe wiązanie ciągów, który jest w stanie zarówno pobrać bieżącą aktywność, jak i nakazać, aby bieżąca aktywność była czymś innym. Teraz możemy utworzyć dla niego przycisk w pliku mapy witryny.

Switch item = Harmony_Activity mappings = [PowerOff = „Off”, Exercise = „Exercise”, 13858434 = „TV”, Karaoke = „Karaoke”]

W nawiasie kwadratowym zobaczysz każdą aktywność wraz z etykietą. Zasadniczo możesz odwoływać się bezpośrednio do działań tak, jak je nazwałeś na pilocie, ale wyjątkiem, który znalazłem, było coś ze spacją w nazwie działania, na przykład „Oglądanie telewizji”. W takim przypadku musisz użyć identyfikatora aktywności. Ponownie można znaleźć identyfikator w danych wyjściowych debugowania JSON. Zapisz i odśwież interfejs, powinieneś zobaczyć coś podobnego do tego:

harmonia openhab w mapie witryny

Możesz również odwoływać się do działań w swoich zasadach, jak zobaczymy w dalszej części. Przeczytaj stronę wiki, aby uzyskać więcej informacji na temat Wiązanie harmonii.

Ogólne wprowadzenie do zasad

Większość inteligentnych centrów domowych obejmuje tworzenie reguł, dzięki czemu można automatycznie reagować na dane z czujników i zdarzenia w domu. W rzeczywistości twierdzę, że naprawdę inteligentny dom to nie taki, który trzeba spędzać na interakcji z aplikacjami mobilnymi - jest on niewidoczny dla użytkownika końcowego i całkowicie zautomatyzowany. W tym celu OpenHAB zawiera również potężny język skryptowy reguł, który można zaprogramować, znacznie przekraczając złożoność większości huby inteligentnego domu Bitwa o Smart Home Hubs: Co tam jest i co będzie dalej? Czytaj więcej lub Przepisy IFTTT IFTTT teraz łączy się z czymkolwiek: Przedstawiamy kanał dla twórcówPotencjalne zastosowania IFTTT są nieograniczone. Ale do tej pory trudno było połączyć go z własnymi projektami sprzętowymi. Dzisiaj wszystko się zmieniło. Czytaj więcej .

Reguły programowania brzmią gorzej niż są w rzeczywistości. Zacznijmy od kilku zasad, które włączają lub wyłączają światło w zależności od czujnika obecności:

reguła „Office light on when James present” gdy pozycja JamesInOffice zmieniła się z WYŁ. na WŁ. następnie wyślij Komenda (Office_Hue, ON) koniec reguły „Wyłącz światło biura, gdy James wychodzi” kiedy pozycja JamesInOffice zmieniła się z ON na OFF. następnie wyślij Komenda (Office_Hue, OFF) koniec

Najpierw nazywamy regułę - bądź opisowy, abyś wiedział, jakie zdarzenie się uruchamia. Następnie definiujemy naszą prostą zasadę, mówiąc gdy x jest prawdziwe, zrób y. Koniec oznacza zamknięcie tej konkretnej reguły. Istnieje wiele specjalnych słów, których można użyć w regułach, ale na razie mamy do czynienia z dwoma prostymi fragmentami składni - Pozycja, który pozwala zapytać o stan czegoś; i sendCommand, który robi dokładnie to, co myślisz. Mówiłem ci, że to łatwe.

Prawdopodobnie nie jest konieczne stosowanie pary reguł, ale ponieważ moja logika staje się bardziej złożona, korzystne będzie oddzielenie ich dla tego, czy jestem wchodzenie lub wychodzenie z tego obszaru - dobrym pomysłem może być dodanie czujnika światła w równanie, abyśmy nie włączali się niepotrzebnie światła.

Spójrzmy na inny przykład, aby utworzyć zaplanowaną regułę.

reguła „Ćwicz codziennie” kiedy Time cron "0 0 8 1/1 *? *" następnie harmonyStartActivity („Ćwiczenie”) koniec.

Ponownie nazywamy regułę, określamy warunki, kiedy powinna ona wystrzelić, i działania, które należy podjąć. Ale w tym przypadku definiujemy wzorzec czasu. Zabawny kod widoczny w cytatach to wyrażenie CRON dla programu Quartz Scheduler (format jest nieco inny niż zwykły CRONtab). użyłem cronmaker.com aby pomóc w utworzeniu wyrażenia, ale możesz także przeczytać przewodnik po formacie [No Longer Available], aby uzyskać szczegółowe wyjaśnienie i więcej przykładów.

generator cron
CronMaker.com służył do generowania poprawnie sformatowanego wyrażenia Cron

Moje zasady mówią po prostu: „8 rano każdego dnia, każdego dnia tygodnia, powiedz mojemu systemowi Harmony Ultimate, aby rozpoczął ćwiczenie”, co z kolei aktywuje telewizor, konsolę Xbox, wzmacniacz i naciska przycisk A po minucie, aby uruchomić dysk w napędzie.

Niestety OpenHAB nie jest jeszcze w stanie wykonać tego ćwiczenia dla mnie.

Jeszcze jedna zasada, którą chcę pokazać, to coś, czego używam do zarządzania poziomem wilgotności w moim domu. Mam pojedynczy osuszacz, który muszę przemieszczać tam, gdzie jest potrzebny, więc postanowiłem spojrzeć na wszystkie moje czujniki wilgotności, znaleźć, który jest najwyższy, i zapisać go w zmiennej. Obecnie jest uruchamiany co minutę, ale można go łatwo obniżyć. Najpierw spójrz:

import org.openhab.core.library.types. * import org.openhab.model.script.actions. * import java.lang. Reguła łańcuchowa „Monitor wilgotności” kiedy Time cron „0 * * * *?” następnie var prevHigh = 0 var highHum = "" Humidity? .members.forEach [hum | logDebug („wilgotność.rules”, hum.nazwa); if (hum.state as DecimalType> prevHigh) {prevHigh = hum.state highHum = hum.name + ":" + hum.state + "%"}] logDebug („wilgotność.rules”, highHum); postUpdate (Dehumidifier_Needed, highHum); koniec.

Trzon reguły znajduje się w Wilgotność?. Członkowie. Wcześniej linia. Wilgotność to nazwa grupy moich czujników wilgotności; . członkowie chwyta wszystkie przedmioty w tej grupie; dla każdego iteruje nad nimi (z ciekawym formatem nawiasów kwadratowych, którego prawdopodobnie nie znasz). Składnia reguł jest pochodną Xtend, więc możesz przeczytać Dokumentacja Xtend jeśli nie możesz znaleźć przykładu do dostosowania.

Prawdopodobnie nie musisz tego robić - istnieją setki przykładowych zasad:

  • Szczegółowe objaśnienie zasad na oficjalnej wiki
  • The próbki oficjalnych zasad strona wiki
  • Wznoszenie reguł na nowe wyżyny
  • Zaawansowane próbki na IngeniousFool.net

MQTT dla OpenHAB i Internetu przedmiotów

MQTT to lekki system przesyłania wiadomości do komunikacji między maszynami - rodzaj Twittera dla Ciebie Arduinos lub Raspberry Pis, aby ze sobą rozmawiać (choć oczywiście działa to znacznie więcej niż tylko te). Szybko zyskuje na popularności i staje się domem z urządzeniami z Internet of Things, które zazwyczaj są niskie mikrokontrolery zasobów, które potrzebują niezawodnego sposobu przesyłania danych czujnika z powrotem do koncentratora lub odbierania zdalnego polecenia. Właśnie to z tym zrobimy.

Ale po co wymyślać koło?

MQ Telemetry Transport został wynaleziony w 1999 roku w celu połączenia rurociągów naftowych za pomocą wolnego satelity połączenia, zaprojektowane specjalnie w celu zminimalizowania zużycia baterii i przepustowości, zapewniając jednocześnie niezawodność dostarczanie danych. Przez lata zasady projektowania pozostały takie same, ale przypadek użycia zmienił się z wyspecjalizowanych systemów wbudowanych na ogólne urządzenia Internetu przedmiotów. W 2010 roku protokół został wydany bezpłatnie, otwarty dla każdego, kto może go używać i wdrażać. Lubimy za darmo.

Być może zastanawiasz się, dlaczego zawracamy sobie głowę jeszcze innym protokołem - w końcu mamy już HTTP - który może być używane do wysyłania szybkich wiadomości między wszystkimi systemami połączonymi z Internetem (takimi jak OpenHAB i IFTTT, szczególnie z nowym kanał twórcy IFTTT teraz łączy się z czymkolwiek: Przedstawiamy kanał dla twórcówPotencjalne zastosowania IFTTT są nieograniczone. Ale do tej pory trudno było połączyć go z własnymi projektami sprzętowymi. Dzisiaj wszystko się zmieniło. Czytaj więcej ). I miałbyś rację. Jednak obciążenie związane z przetwarzaniem serwera HTTP jest dość duże - do tego stopnia, że ​​nie można łatwo uruchomić jednego z nich wbudowany mikrokontroler, taki jak Arduino (przynajmniej możesz, ale nie będziesz miał dużo pamięci na nic jeszcze). Z drugiej strony MQTT jest lekki, więc wysyłanie wiadomości w sieci nie zatyka rur i łatwo mieści się w naszej małej pamięci Arduino.

Jak działa MQTT?

MQTT wymaga zarówno serwera (zwanego „brokerem”), jak i co najmniej jednego klienta. Serwer działa jako pośrednik, odbierając wiadomości i transmitując je do wszystkich zainteresowanych klientów.

Kontynuujmy z Twitter dla maszyn analogia jednak. Podobnie jak użytkownicy Twittera mogą tweetować własne bezsensowne 140 znaków, a użytkownicy mogą „śledzić” innych użytkowników, aby zobaczyć wyselekcjonowany strumień postów, Klienci MQTT mogą subskrybować określony kanał, aby odbierać stamtąd wszystkie wiadomości, a także publikować na nim własne wiadomości kanał. Ten wzorzec publikowania i subskrybowania jest określany jako pub / sub, w przeciwieństwie do tradycji klient / serwer model HTTP.

HTTP wymaga, abyś skontaktował się z komputerem, z którym się komunikujesz, powiedz „Cześć”, a następnie mieć możliwość ciągłego wzajemnego potwierdzania się podczas odbierania lub wprowadzania danych. W przypadku publikacji / subskrypcji klient publikujący nie musi wiedzieć, którzy klienci są subskrybowani: po prostu wypompowuje wiadomości, a broker redystrybuuje je wśród subskrybowanych klientów. Każdy klient może publikować i subskrybować tematy, podobnie jak użytkownik Twittera.

Jednak w przeciwieństwie do Twittera, MQTT nie jest ograniczony do 140 znaków. Jest niezależny od danych, więc możesz wysyłać małe liczby lub duże bloki tekstowe, datagramy w formacie JSON, a nawet obrazy i pliki binarne.

Nie jest tak, że MQTT jest lepszy niż HTTP do wszystkiego - ale to jest bardziej odpowiednie, jeśli będziemy mieć wiele czujników w całym domu, stale się zgłaszając.

Ważne jest również, aby wiedzieć, że OpenHAB nie będzie działać jako twój broker MQTT - zajmiemy się tym nieco później. Jednak OpenHAB będzie działał jako klient: może zarówno publikować dziennik aktywności OpenHAB, jak i wiązać określone kanały do ​​urządzeń, dzięki czemu możesz na przykład mieć przełącznik sterowany wiadomościami MQTT na konkretnym urządzeniu kanał. Jest to idealne rozwiązanie do stworzenia domu pełnego czujników.

Zainstaluj Mosquitto na swoim Pi

Chociaż OpenHAB zawiera klienta MQTT, który umożliwia subskrybowanie tematu i publikowanie wiadomości, nie działa on jak serwer. W tym celu musisz albo skorzystać z internetowego brokera MQTT (płatnego lub bezpłatnego), albo zainstalować bezpłatne oprogramowanie na swoim komputerze Pi. Chciałbym zachować to wszystko w domu, więc zainstalowałem Mosquitto na Pi.

Niestety, wersja dostępna za pośrednictwem zwykłego apt-get jest całkowicie nieaktualna. Zamiast tego dodajmy najnowsze źródła.

wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key. sudo apt-key dodaj mosquitto-repo.gpg.key. cd /etc/apt/sources.list.d/ sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list. sudo apt-get install komar.

To wszystko, co musimy zrobić, aby serwer MQTT działał w sieci lokalnej. Twój broker domyślnie działa na porcie 1883.

Sprawdź, czy Twój serwer MQTT działa, korzystając z bezpłatnego pliku MQTT.fx, który jest wieloplatformowy. Kliknij ikonę ustawień, aby utworzyć nowy profil, i wprowadź adres IP lub nazwę swojego Raspberry Pi. Zapisz i naciśnij Połącz. Jeśli mała sygnalizacja świetlna w prawym górnym rogu zmieni kolor na zielony, możesz iść.

przykładowy profil mqttfx

Aby przeprowadzić szybki test, kliknij kartę „subskrybuj” i wpisz inTopic / w polu tekstowym, a następnie naciśnij Subskrybuj przycisk. Subskrybujesz teraz otrzymywanie wiadomości na temat o nazwie inTopic, chociaż będzie pokazywać 0 wiadomości. Wróć do karty publikowania, wpisz inTopic w małym polu i krótką wiadomość w dużym polu tekstowym poniżej. Trafienie Publikować kilka razy i spójrz wstecz na kartę subskrypcji. Powinieneś zobaczyć kilka wiadomości pojawiających się w tym temacie.

test inTopic MQTT

Zanim dodamy kilka rzeczywistych czujników do naszej sieci, musimy dowiedzieć się o poziomach tematów, które pozwalają nam na strukturę i filtrowanie sieci MQTT. W nazwach tematów rozróżniana jest wielkość liter, nie powinny zaczynać się od $, nie mogą zawierać spacji ani znaków spoza ASCII - tak naprawdę to standardowe praktyki programowania dla nazw zmiennych.

Separator / wskazuje poziom tematu, który jest hierarchiczny, na przykład poniższe wszystkie są poprawnymi poziomami tematu.

inTopic / smallSubdivision / evenSmallerSubdivision. myHome / livingRoom / temperature. myHome / livingRoom / wilgotność. myHome / kuchnia / temperatura. myHome / kuchnia / wilgotność

Już teraz powinieneś zobaczyć, jak ta struktura drzewa jest idealna dla inteligentnego domu pełnego czujników i urządzeń. Najlepszą praktyką do stosowania z wieloma czujnikami w jednym pomieszczeniu jest publikowanie każdej zmiennej czujnika jako własnego poziomu tematu - rozgałęziając się do bardziej szczegółowej (jak w powyższych przykładach) - zamiast próbować publikować wiele typów czujników na tym samym kanał.

Klienci mogą następnie publikować lub subskrybować dowolną liczbę poziomów poszczególnych tematów lub używać specjalnych znaków wieloznacznych, aby filtrować od góry do góry w drzewie.

Symbol wieloznaczny + zastępuje dowolny poziom tematu. Na przykład:

myHome / + / temperature

zasubskrybuje klienta do obu

myHome / livingRoom / temperature. myHome / kuchnia / temperatura

… Ale nie poziom wilgotności.

# To wielopoziomowy symbol wieloznaczny, więc możesz pobrać wszystko z tablicy czujników livingRoom za pomocą:

myHome / livingRoom / #

Technicznie możesz też zasubskrybować poziom główny #, dzięki czemu uzyskasz absolutnie wszystko przechodząc przez brokera, ale to może być jak wbicie węża gaśniczego w twarz: trochę przytłaczający. Spróbuj połączyć się z publicznym brokerem MQTT z HiveMQ i subskrybować #. Dostałem około 300 wiadomości w ciągu kilku sekund, zanim mój klient się po prostu zawiesił.

Wskazówka dla początkujących MQTT: „/myHome/” to inny temat niż „mój dom/" - umieszczenie ukośnika na początku tworzy pusty poziom tematu, który, choć technicznie ważny, nie jest zalecany, ponieważ może być mylący.

Teraz, gdy znamy teorię, wypróbujmy Arduino, Ethernet Shield oraz czujnik temperatury i wilgotności DHT11 - prawdopodobnie masz go w zestawie startowym, ale jeśli nie, po prostu zamień czujnik otoczenia na czujnik ruchu (lub nawet przycisk).

Publikowanie MQTT z Arduino z połączeniem Ethernet

Jeśli masz hybrydowe urządzenie kompatybilne z Arduino z wbudowanym Wi-Fi lub Ethernet, powinno to również działać. W końcu będziemy potrzebować lepszego / tańszego sposobu komunikowania się z koniecznością korzystania z połączenia sieciowego w każdym pokoju, ale służy to poznaniu podstaw.

Zacznij od pobrania biblioteka pubsubclient z Github. Jeśli użyłeś przycisku „Pobierz jako plik ZIP”, struktura jest nieco niepoprawna. Rozpakuj, zmień nazwę folderu na just pubs podklient, a następnie wyjmij dwa pliki z src folder i przenieś je o jeden poziom do katalogu głównego pobranego folderu. Następnie przenieś cały folder do swojego Arduino / biblioteki informator.

Oto mój przykładowy kod, który możesz dostosować: wyjście sygnału DHT11 znajduje się na pinie 7. Zmień adres IP serwera dla swojego Pi w następującym wierszu:

client.setServer („192.168.1.99”, 1883);

Niestety nie możemy używać jego przyjaznej nazwy (OpenHAB.local w moim przypadku) ponieważ stos TCP / IP na Arduino jest bardzo uproszczony, a dodanie kodu do nazewnictwa Bonjour stanowiłoby dużo pamięci, której nie chcemy marnować. Aby zmienić tematy, na których transmitowane są dane z czujników, przewiń w dół do następujących wierszy:

bufor char [10]; dtostrf (t, 0, 0, bufor); client.publish („openhab / himitsu / temperature”, bufor); dtostrf (h, 0, 0, bufor); client.publish („openhab / himitsu / wilgotność”, bufor);

Kod obejmuje również subskrypcję kanału poleceń. Znajdź i dostosuj następujący wiersz:

client.subscribe („openhab / himitsu / command”);

Sprawdź kod tam, a zobaczysz, że możesz łatwo kontrolować diodę LED lub przekaźnik, na przykład wysyłając polecenia do określonych kanałów. W przykładowym kodzie po prostu wysyła wiadomość zwrotną potwierdzającą otrzymanie polecenia.

Prześlij swój kod, podłącz Arduino do sieci i za pomocą MQTT.fx subskrybuj oba # lub openhab / himitsu / # (lub cokolwiek zmieniłeś nazwę pokoju, ale nie zapomnij podać # na końcu). Wkrótce powinny pojawić się wiadomości; a jeśli wyślesz ON lub OFF do tematu polecenia, zobaczysz również potwierdzenia.

wracają wiadomości mqtt arduino

Wiązanie MQTT dla OpenHAB

Ostatnim krokiem w równaniu jest podpięcie go do OpenHAB. Do tego oczywiście potrzebujemy wiązania.

sudo apt-get install openhab-addon-binding-mqtt. sudo chown -hR openhab: openhab / usr / share / openhab

I edytuj plik konfiguracyjny, aby włączyć powiązanie.

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

Uruchom ponownie OpenHAB

ponowne uruchomienie usługi sudo openhab

Dodajmy element lub dwa:

/ * Czujniki MQTT * / Liczba Himitsu_Temp „Temperatura Himitsu [% .1 ° C]”(Himitsu, temperatura) {mqtt = " (Himitsu, Wilgotność) {mqtt = "

Do tej pory powinieneś zrozumieć format; robi się Numer przedmiotu z powiązania MQTT na określony temat. To prosty przykład, możesz odnieść się do strony wiki, na której jest może stać się o wiele bardziej skomplikowane.

Gratulacje, teraz masz podstawę taniej matrycy opartej na Arduino. W przyszłości ponownie to sprawdzimy i umieścimy Arduino we własnej, całkowicie oddzielnej sieci RF. Stworzyłem również identyczną wersję dla płyt Wizwiki 7500 jeśli zdarzy ci się mieć jeden z nich.

Trwałość i dane graficzne

Do tej pory prawdopodobnie masz skonfigurowanych kilka czujników, zarówno z Z-Wave, jak i niestandardowych Arduinos z uruchomionym MQTT - więc możesz zobaczyć aktualny stan tych czujników w dowolnym momencie i powinieneś również zareagować na ich wartość w zasady. Ale interesująca rzecz w wartościach czujników polega na tym, że zmieniają się one z czasem: to właśnie tutaj pojawia się trwałość i wykresy. Trwałość w OpenHAB oznacza zapisywanie danych w czasie. Przejdźmy dalej i skonfiguruj RRD4J (Round Robin Database for Java), tzw. Ponieważ dane są zapisywane w okrągły robin - starsze dane są odrzucane, aby skompresować rozmiar bazy danych.

Zainstaluj pakiety rrd4j za pomocą następujących poleceń.

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

Następnie utwórz nowy plik o nazwie rrd4j.persist w konfiguracje / trwałość teczka. Wklej w następujący sposób:

Strategie {everyMinute: „0 * * * *?” everyHour: „0 0 * * *?” EveryDay: „0 0 0 * *?” default = everyChange. } Elementy {// zachowują wszystko, gdy wartość jest aktualizowana, tylko domyślną, i przywracają je z bazy danych podczas uruchamiania *: strategia = każda Zmień, restoreOnStartup // następnie definiujemy konkretne strategie everyHour dla czegokolwiek w grupie Temperatura, a co minutę dla Temperatury Wilgotności *: strategia = everyHour Humidity *: strategia = everyMinute // alternatywnie możesz tutaj dodać określone elementy, takie jak // Bedroom_Humidity, JamesInOffice: strategia = everyMinute. }

W pierwszej części tego pliku definiujemy strategie, co oznacza po prostu nadanie nazwy wyrażeniu CRON. To jest to samo, co już zrobiliśmy z Moim. OpenHAB, ale tym razem tworzymy nowe strategie, z których możemy korzystać w EveryDay, EveryHour i EveryMinute. Nie korzystałem jeszcze z nich wszystkich, ale mogę być w przyszłości.

W drugiej połowie pliku mówimy rr4dj, które wartości danych zapisać. Domyślnie będziemy zapisywać wszystko przy każdej aktualizacji, ale określiłem także strategie czasowe dla określonych czujników. Temperatury, którymi się nie przejmuję, więc ustawiłem to, by oszczędzać tylko godzinę, ale wilgotność jest dla mnie dużym problemem, więc chcę zobaczyć, jak zmienia się co minutę. Jeśli są inne dane, które chcesz zapisać w określonych godzinach, dodaj je teraz lub dostosuj w razie potrzeby.

Uwaga: jeśli chcesz również wykreślić dane, MUSISZ je przechowywać przynajmniej raz na minutę. Nie ma znaczenia, że ​​dane czujnika są nawet aktualizowane tak szybko, wystarczy powiedzieć rr4dj, aby je zapisał raz na minutę.

Mając to zdefiniowane, powinieneś zacząć widzieć dane wyjściowe debugowania z informacją, że wartości są przechowywane.

rrd4j przechowujący dane

Następnie zróbmy ładne wykresy wszystkich tych danych. To jest naprawdę łatwe. Aby utworzyć wykres pojedynczego czujnika, dodaj do mapy witryny następujące elementy:

Element wykresu = Sypialnia_Wilgotność = godz

To dosłownie wszystko, czego potrzebujesz. Poprawne wartości dla okresu to h, 4h, 8h, 12h, D, 3D, W, 2W, M, 2M, 4M, Y; powinno być oczywiste, co one oznaczają. Domyślnie ustawiony jest na D dla pełnego dnia danych, jeśli nie jest określony.

Aby utworzyć wykres z wieloma elementami, po prostu wykreśl nazwę grupy:

Element wykresu = okres wilgotności = godz
wykres

Być może zainteresuje Cię również to, że możesz użyć tego wykresu w innym miejscu; generuje obraz przy użyciu następującego adresu URL: http://YOUROPENHABURL: 8080 / wykres? grupy = wilgotność i okres = godz

Jak Twój Nadchodzi system OpenHAB?

To tyle w tej części przewodnika, ale nie oczekuj, że to będzie ostatnia wiadomość od nas o OpenHAB. Mam nadzieję, że ten i przewodnik dla początkujących zapewnił solidne podstawy do opracowania własnego kompletnego systemu OpenHAB - ale jest to proces, który nigdy tak naprawdę nie został całkowicie zakończony.

Na szczęście OpenHAB może dobrze skalować od kilku urządzeń do setek, od prostej złożoności reguł po najwyższą automatyzację domu - więc jak idzie twój system? Które urządzenia wybrałeś? Jaki jest następny duży projekt, z którym zamierzasz się zmierzyć?

Porozmawiajmy w komentarzach - i jeśli uważasz, że ten poradnik jest przydatny, kliknij te przyciski udostępniania, aby powiedzieć znajomym, jak oni również mogą skonfigurować własny system OpenHAB.

James ma licencjat z zakresu sztucznej inteligencji i jest certyfikowany przez CompTIA A + i Network +. Jest głównym programistą MakeUseOf i spędza wolny czas grając w paintball VR i gry planszowe. Buduje komputery od dziecka.