Przewodnik dla początkujących OpenHAB, część 2: ZWave, MQTT, zasady i wykresy

Przewodnik dla początkujących OpenHAB, część 2: ZWave, MQTT, zasady i wykresy

Darmowy nie zawsze oznacza „nie tak dobry jak płatny”, a OpenHAB nie jest wyjątkiem. Oprogramowanie automatyki domowej typu open source znacznie przewyższa możliwości jakiegokolwiek innego systemu automatyki domowej na rynku – ale nie jest łatwe do skonfigurowania. W rzeczywistości może to być wręcz frustrujące.





W części 1 przewodnika przeprowadziłem Cię instalacja OpenHAB na Raspberry Pi , przedstawił podstawowe koncepcje OpenHAB i pokazał, jak dodać pierwsze elementy do systemu. Dzisiaj pojedziemy dalej:





  • Dodawanie urządzeń ZWave
  • Dodawanie kontrolera Harmony Ultimate
  • Przedstawiamy zasady
  • Przedstawiamy MQTT i instalowanie brokera MQTT na Twoim Pi z czujnikami na Arduino
  • Rejestrowanie danych i tworzenie wykresów

Wprowadzenie do Z-Wave

Z-Wave od lat jest dominującym protokołem automatyki domowej: jest niezawodny, został szeroko rozwinięty i działa w znacznie większym zakresie niż jakiekolwiek inne produkty inteligentnego domu. Dostępne są setki czujników Z-Wave, które wykonują szeroki zakres zadań. OpenHAB Móc współpracuje z Z-Wave, ale jest kłopotliwy w konfiguracji, a niezawodność nie jest gwarantowana.





Jeśli rozważasz zakup domu pełnego czujników Z-Wave specjalnie do użytku z OpenHAB, zachęcam do ponownego rozważenia. Może się to sprawdzić dla Ciebie 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ć kilku. Jedynym powodem, aby wybrać Z-Wave jest to, że nie jesteś w 100% zorientowany na OpenHAB i chciałbyś zostawić swoje opcje otwarte na przyszłość: Z-Wave współpracuje na przykład z koncentratorem Samsung SmartThings, a także z koncentratorami specyficznymi dla Z-Wave takich jak Homeseer i szereg innych opcji oprogramowania, takich jak domoticz .

Chociaż OpenHAB zawiera wiązanie Z-Wave, nadal musisz najpierw skonfiguruj sieć Z-Wave , zanim OpenHAB zacznie odpytywać go o dane. Jeśli masz płytę kontrolera Rasberry, masz dostarczone 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 żadnego oprogramowania, więc czytaj dalej.



Aeotec Z-Stick Gen5 Z-Wave Hub Z-Wave Plus USB do tworzenia bramy (zwykły biały) KUP TERAZ NA AMAZON

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

Po pierwsze, po stronie sprzętu: każdy kontroler ma swój własny sposób parowania z urządzeniami (technicznie znany jako „tryb dołączania”, w którym przypisywany 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 zbliż go do parowanego urządzenia i również na nim naciśnij przycisk dołączania (to też będzie się różnić: moje gniazdo Everspring wymaga trzykrotnego naciśnięcia przycisku w krótkim odstępie czasu, więc lekcją tutaj jest przeczytanie instrukcji obsługi twojego urządzenia) .





Z-Stick miga krótko, sygnalizując sukces. Stwarza to problemy podczas podłączania go z powrotem do Pi, ponieważ przypisywany jest nowy port. Zrestartuj swoje Pi, aby zresetować je z powrotem do standardowego portu, jeśli okaże się, że został dynamicznie przypisany do innego. Jeszcze lepiej: nie podłączaj go do Pi, dopóki najpierw nie wykonasz wszystkich parowań sprzętu.

Instalowanie wiązań HABmin i Z-Wave

Ponieważ OpenHAB w rzeczywistości nie jest narzędziem konfiguracyjnym dla Z-Wave, zamierzamy zainstalować inne narzędzie do zarządzania siecią, które to robi – coś, co nazywa się HABmin. Udaj się do Repozytorium HABmin Github pobierz aktualną wersję. Po rozpakowaniu znajdziesz 2 .słoik pliki w katalogu dodatków – należy je umieścić w odpowiednim katalogu dodatków w udziale OpenHAB Home (jeśli używasz również Aotec gen5 Z-Stick, upewnij się, że masz przynajmniej 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: jest też HABmin 2 w trakcie aktywnego rozwoju. Instalacja jest bardzo podobna, ale z jednym dodatkowym dodatkiem .jar. Być może warto spróbować obu, aby zobaczyć, co wolisz.

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

ls /dev/tty*

Szukasz czegokolwiek z USB w nazwie lub w moim konkretnym przypadku Z-stick prezentował się jako / deweloper / ttyACM0 (modem). Łatwiejsze może być wykonanie polecenia raz przed podłączeniem i raz po, dzięki czemu możesz zobaczyć, co się zmieni, jeśli nie masz pewności.

Otwórz plik konfiguracyjny OpenHAB i zmodyfikuj sekcję na Z-Wave, odkomentowując obie linie i wprowadzając rzeczywisty adres urządzenia. Ostatnim krokiem dla mnie było umożliwienie użytkownikowi OpenHAB dostępu do modemu.

sudo usermod -a -G dialout openhab

Teraz, aby wszystko zacząć działać, uruchom ponownie OpenHAB

usługa sudo openhab restart

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

W HABMIN jest wiele do zobaczenia, ale tak naprawdę interesują nas tylko te Konfiguracja -> Wiązania -> Z-Wave -> Urządzenia jak widać poniżej. Rozwiń węzeł, aby edytować lokalizację i etykietę nazwy, aby ułatwić sobie korzystanie z nich.

Konfiguracja elementów Z-Wave

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

Po pierwsze, mam podstawowy przełącznik zasilania i miernik Everspring AN158 na węźle 3. Szybkie googlowanie doprowadziło mnie do wpisu na blogu na Wetwa.re, z przykładową konfiguracją pozycji. Dostosowałem to w następujący sposób:

Przełącznik Dehumidifier_Switch 'Osuszacz' {zwave='3:command=switch_binary'}

Number Dehumidifier_Watts 'Pobór mocy przez osuszacz [%.1f W]' { zwave='3:command=meter' }

Doskonały.

Następny jest multiczujnik Aeotec Gen5.

Aeon Labs Aeotec Z-Wave Gen5 Multi-Sensor (Z-Wave Plus) KUP TERAZ NA AMAZON

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

Numer Temperatura_w korytarzu 'Temperatura w korytarzu [%.1f °C]' (W korytarzu, Temperatura) {zwave='2:0:command=sensor_multilevel,sensor_type=1,sensor_scale=0'}

Number Korytarz_Wilgotność 'Wilgotność na korytarzu [%.0f %%]' (Korytar, Wilgotność) {zwave='2:0:command=sensor_multilevel,sensor_type=5'}

Numer Przedpokój_Luminancja 'Luminancja w korytarzu [%.0f Lux]' (Przedpokój) {zwave='2:0:command=sensor_multilevel,sensor_type=3'}

Skontaktuj się z Korytarzem_Motion 'Ruch w przedpokoju [%s]' (Korytar, Ruch) {zwave='2:0:command=sensor_binary,respond_to_basic=true'}

Numer sensor_1_battery 'Bateria [%s %%]' (Ruch) {zwave='2:0:command=bateria'}

Jeśli format tego wygląda dla Ciebie dziwnie, wróć do pierwszego Przewodnik dla początkujących , a konkretnie sekcję wiązania Hue, w której wyjaśniam, w jaki sposób dodawane są elementy. Prawdopodobnie będziesz musiał tylko kopiować przykłady wklejania w ten sposób, ale jeśli masz nowe urządzenie, dokumentacja powiązania zawiera szczegółowe informacje polecenia .

Wiązanie Logitech Harmony

Zanim przejdziemy do zasad, chciałem dodać krótką uwagę na temat pracy z wiązaniem Harmony. Jestem wielkim fanem serii najlepszych pilotów Harmony, które upraszczają korzystanie z domowego centrum multimedialnego, ale często działają one jako osobny system w inteligentnym domu. Dzięki OpenHAB działania Logitech Harmony i pełna kontrola nad urządzeniami mogą być teraz częścią scentralizowanego systemu, a nawet uwzględnione w regułach automatyzacji.

Zacznij od zainstalowania trzech plików powiązań, które znajdziesz, używając apt-cache do wyszukania „harmonii”:

Nie zapomnij chown katalog bindings ponownie, gdy skończysz:

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

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

sudo apt-get zainstaluj 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 PILOTY ##########

harmonihub:host=192.168.1.181 lub twój adres IP

harmonihub:nazwa użytkownika= twoja-harmonia-e-mail-login

harmonihub:hasło= Twoje hasło

Adres IP to adres koncentratora Harmony. Użyj skanera sieciowego, aby to sprawdzić. Będziesz także musiał wprowadzić swoje dane logowania, te, które wpisujesz podczas uruchamiania standardowego narzędzia konfiguracyjnego Harmony. Otóż ​​to. Po ponownym uruchomieniu Hue w dzienniku debugowania powinien pojawić się nagły przypływ danych wyjściowych z powiązania.

To jest sformatowana w formacie JSON lista wszystkich Twoich działań, urządzeń i poleceń, które można wysłać. Dobrym pomysłem jest skopiowanie tego na przyszłość. możesz jeszcze bardziej ułatwić czytanie dzięki składanym węzłom, wklejając je do internetowego formatera JSON takie jak ten .

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

/* Centrum harmonii */

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

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

Przełącz item=Harmony_Activity maps=[PowerOff='Wyłączone',Ćwiczenie='Ćwiczenia',13858434='Telewizja',Karaoke='Karaoke']

jak wyłączyć tryb ograniczony?

W nawiasie kwadratowym zobaczysz każdą aktywność wraz z etykietą. Ogólnie rzecz biorąc, możesz odwoływać się bezpośrednio do działań, które zostały nazwane na pilocie, ale wyjątek od tego, który znalazłem, to wszystko, co zawiera spację w nazwie działania, na przykład „Oglądaj telewizję”. W takim przypadku musisz użyć identyfikatora aktywności. Ponownie możesz znaleźć identyfikator w danych wyjściowych debugowania JSON. Zapisz i odśwież swój interfejs, powinieneś zobaczyć coś podobnego do tego:

Możesz także odnieść się do działań w swoich regułach, jak zobaczymy dalej. Przeczytaj stronę wiki, aby uzyskać więcej informacji na temat Wiązanie harmonii .

Ogólne wprowadzenie do zasad

Większość centrów inteligentnego domu zawiera pewien rodzaj tworzenia reguł, dzięki czemu możesz automatycznie reagować na dane z czujników i zdarzenia w domu. W rzeczywistości twierdzę, że naprawdę inteligentny dom to nie taki, w którym trzeba spędzać czas na interakcji z aplikacjami mobilnymi – to taki, który jest 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 inteligentnych centrów domowych lub przepisów IFTTT.

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

reguła „Światło biurowe włącza się, gdy James jest obecny”

gdy

Pozycja JamesInOffice została zmieniona z WYŁ na WŁ

następnie

sendCommand (Office_Hue, ON)

kończyć się

zasada „Biuro wyłącza się, gdy James wychodzi”

gdy

Pozycja JamesInOffice zmieniona z ON na OFF

następnie

sendCommand(Office_Hue,OFF)

kończyć się

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

Prawdopodobnie nie ma potrzeby używania pary reguł, ale ponieważ moja logika staje się bardziej złożona, korzystne będzie ich oddzielne, niezależnie od tego, czy wchodzę, czy wychodzę z obszaru - i dobrym pomysłem może być dodanie gdzieś czujnika światła do równania, żeby niepotrzebnie nie włączać świateł.

Spójrzmy na inny przykład tworzenia zaplanowanej reguły.

zasada „Ćwicz każdego ranka”

gdy

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

następnie

HarmoniStartActivity('Ćwiczenie')

kończyć się

Ponownie nazywamy regułę, określamy warunki, kiedy powinna zostać uruchomiona, oraz działania, które należy podjąć. Ale w tym przypadku definiujemy wzorzec czasu. Zabawny kod, który widzisz w cudzysłowie, to wyrażenie CRON dla programu Quartz Scheduler (format jest nieco inny niż w przypadku zwykłej karty CRON). użyłem cronmaker.com aby pomóc w tworzeniu wyrażenia, ale możesz również przeczytać przewodnik po formatach [Nie jest już dostępny], aby uzyskać szczegółowe wyjaśnienie i więcej przykładów.

CronMaker.com używany do generowania poprawnie sformatowanego wyrażenia Cron

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

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

Jeszcze jedna zasada, którą chcę ci pokazać, to coś, czego używam do zarządzania poziomem wilgotności w moim domu. Mam pojedynczy osuszacz, który muszę przenosić wszędzie tam, gdzie jest to potrzebne, więc postanowiłem przyjrzeć się wszystkim moim czujnikom wilgotności, znaleźć, który z nich jest najwyższy i zapisać go w zmiennej. Obecnie jest uruchamiany co minutę, ale można go łatwo obniżyć. Spójrz najpierw:

importowanie typów.bibliotek.org.openhab.core.*

import org.openhab.model.script.actions.*

import java.lang.String

reguła „Monitor wilgotności”

kiedy Czas cron '0 * * * * ?'

następnie

var prevHigh = 0

var highHum = ''

Wilgotność?.członków.dlaKażdego[hum|

logDebug('wilgotność.reguły', hum.nazwa);

if(hum.state as DecimalType > prevHigh){

prevHigh = hum.stan

highHum = nazwa.humu + ': ' + stan.humu + '%'

}

jak nagrywać muzykę z śmiałością

]

logDebug('wilgotność.reguły', highHum);

postUpdate(Dehumidifier_Needed,highHum);

kończyć się

Sedno zasady znajduje się w Wilgotność?.członków.dla każdego linia. Wilgotność to nazwa grupy moich czujników wilgotności; .członków 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 adaptacji.

Prawdopodobnie nie będziesz musiał – istnieją setki przykładowych reguł:

MQTT dla OpenHAB i Internetu rzeczy

MQTT to lekki system przesyłania wiadomości do komunikacji maszyna-maszyna – rodzaj Twittera dla Arduino lub Raspberry Pis do komunikowania się ze sobą (choć oczywiście działa z znacznie więcej niż tylko tymi). Szybko zyskuje na popularności i znajduje się w domu dzięki urządzeniom Internetu Rzeczy, które zazwyczaj są mikrokontrolerami o niewielkich zasobach, które potrzebują niezawodnego sposobu przesyłania danych z czujników z powrotem do koncentratora lub odbierania zdalnych poleceń. Dokładnie to będziemy z tym robić.

Ale po co wymyślać koło na nowo?

MQ Telemetry Transport został wynaleziony już w 1999 roku, aby łączyć rurociągi naftowe za pomocą wolnych połączeń satelitarnych, specjalnie zaprojektowanych, aby zminimalizować zużycie baterii i przepustowość, zapewniając jednocześnie niezawodne 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 rzeczy. W 2010 r. protokół został udostępniony bez opłat licencyjnych, otwarty dla każdego do użycia i wdrożenia. Lubimy darmowe.

Być może zastanawiasz się, dlaczego zawracamy sobie głowę jeszcze jednym protokołem – w końcu mamy już HTTP – który może być używany do wysyłania szybkich wiadomości między wszystkimi rodzajami systemów podłączonych do Internetu (takich jak OpenHAB i IFTTT, w szczególności z nowym kanałem producenta ). I miałbyś rację. Jednak obciążenie przetwarzania serwera HTTP jest dość duże – tak bardzo, że nie można go łatwo uruchomić na wbudowanym mikrokontrolerze, takim jak Arduino (przynajmniej możesz, ale nie będziesz mieć dużo pamięci na nic innego ). Z drugiej strony MQTT jest lekki, więc wysyłanie wiadomości w całej sieci nie spowoduje zatkania rur i może z łatwością zmieścić się w naszej małej pamięci Arduino.

Jak działa MQTT?

MQTT wymaga zarówno serwera (zwanego „brokerem”), jak i jednego lub więcej klientów. Serwer pełni rolę pośrednika, odbiera wiadomości i rozsyła je do wszystkich zainteresowanych klientów.

Kontynuujmy z Twitter-dla-maszyny jednak analogia. Tak jak użytkownicy Twittera mogą tweetować własne nic nie znaczące znaki 140 , a użytkownicy mogą „śledzić” innych użytkowników, aby zobaczyć wyselekcjonowany strumień postów, klienci MQTT mogą subskrybować określony kanał, aby otrzymywać z niego wszystkie wiadomości, a także publikować własne wiadomości do tego kanału. Ten wzorzec publikowania i subskrybowania jest określany jako pub / sub w przeciwieństwie do tradycji klient/serwer model HTTP.

HTTP wymaga skontaktowania się z komputerem, z którym się komunikujesz, powiedzmy Hello, a następnie ciągłego potwierdzania się nawzajem podczas pobierania lub wprowadzania danych. W przypadku pub/sub klient wykonujący publikację nie musi wiedzieć, którzy klienci są subskrybowani: po prostu pompuje wiadomości, a broker redystrybuuje je do wszystkich subskrybowanych klientów. Każdy klient może zarówno publikować, jak i subskrybować tematy, tak 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 tekstu, datagramy w formacie JSON, a nawet obrazy i pliki binarne.

Nie jest tak, że MQTT jest lepszy od HTTP do wszystkiego – ale tak jest bardziej odpowiednie, jeśli mamy mieć wiele czujników w całym domu, stale zgłaszających się.

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ć poszczególne kanały z urządzeniami, dzięki czemu możesz na przykład mieć przełącznik kontrolowany przez komunikaty MQTT na określonym kanale. Jest to idealne rozwiązanie do stworzenia domu pełnego czujników.

Zainstaluj Mosquitto na swoim Pi

Chociaż OpenHAB zawiera klienta MQTT, dzięki czemu możesz subskrybować temat, a także publikować wiadomości, nie będzie on działał jako serwer. W tym celu musisz użyć internetowego brokera MQTT (płatnego lub bezpłatnego) lub zainstalować darmowe oprogramowanie na swoim 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 mosquitto

To wszystko, co musimy zrobić, aby serwer MQTT działał i 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 MQTT.fx, który jest wieloplatformowy. Kliknij ikonę ustawień, aby utworzyć nowy profil, i wprowadź adres IP lub nazwę Raspberry Pi. Zapisz i naciśnij połącz. Jeśli małe światło w prawym górnym rogu zmieni kolor na zielony, możesz jechać.

Aby przeprowadzić szybki test, kliknij zakładkę „subskrybuj” i wpisz w temacie / w polu tekstowym, a następnie naciśnij Subskrybuj przycisk. Masz teraz subskrypcję otrzymywania wiadomości na temat o nazwie inTopic, ale będzie tam wyświetlanych 0 wiadomości. Wróć do karty publikowania, wpisz temat w małym polu i krótką wiadomość w dużym polu tekstowym poniżej. Uderzyć Publikować kilka razy i spójrz wstecz na kartę subskrypcji. Powinieneś zobaczyć kilka wiadomości, które pojawiły się w tym temacie.

Zanim dodamy do naszej sieci kilka rzeczywistych czujników, musimy poznać poziomy tematyczne, które pozwolą nam uporządkować i filtrować sieć MQTT. W nazwach tematów rozróżniana jest wielkość liter, nie powinny zaczynać się od $, zawierać spacji lub znaków spoza zestawu ASCII — tak naprawdę są to standardowe praktyki programowania dla nazw zmiennych.

Separator / wskazuje poziom tematu, który jest hierarchiczny, na przykład poniższe są prawidłowe poziomy tematów.

inTemat / smallSubdivision / evenSmallerSubdivision

myHome/salon/temperatura

myHome/salon/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ą w przypadku korzystania z wielu czujników w jednym pomieszczeniu jest publikowanie każdej zmiennej czujnika jako jej własnego poziomu tematycznego – rozgałęziając się na większą szczegółowość (jak w powyższych przykładach) – zamiast próbować publikować wiele typów czujników w tym samym kanale .

Klienci mogą następnie publikować lub subskrybować dowolną liczbę indywidualnych poziomów tematu lub używać specjalnych symboli wieloznacznych do filtrowania z wyższych pozycji w drzewie.

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

myHome/+/temperatura

zasubskrybowałby klienta do obu

myHome/salon/temperatura

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/salon/#

Technicznie rzecz biorąc, możesz również zasubskrybować główny poziom #, dzięki któremu uzyskasz absolutnie wszystko, co przechodzi przez brokera, ale może to być jak wbicie węża strażackiego w twarz: trochę przytłaczające. Spróbuj połączyć się z publicznym brokerem MQTT z HiveMQ i zasubskrybuj #. Otrzymałem około 300 wiadomości w kilka sekund, zanim mój klient się zawiesił.

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

Teraz, gdy znamy teorię, spróbujmy z Arduino, Ethernet Shield i czujnikiem temperatury i wilgotności DHT11 – prawdopodobnie masz go w swoim zestawie startowym, ale jeśli nie, po prostu wymień czujnik środowiskowy na ruch czujnik (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 Ethernetem, to również powinno działać. W końcu będziemy chcieli lepszego / tańszego sposobu komunikowania się, który wymaga korzystania z połączenia sieciowego w każdym pokoju, ale służy to nauce podstaw.

Zacznij od pobrania biblioteka pubsubclient z Github . Jeśli użyłeś przycisku „Pobierz jako ZIP”, struktura jest nieco nieprawidłowa. Rozpakuj, zmień nazwę folderu na po prostu pubsubklient , a następnie wyjmij dwa pliki z src i przenieś je o jeden poziom wyżej 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 na adres swojego Pi w następującym wierszu:

klient.setServer('192.168.1.99', 1883);

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

bufor znaków[10];

dtosrf(t,0, 0, bufor);

client.publish('openhab/himitsu/temperatura',bufor);

dtostrf(h,0, 0, bufor);

client.publish('openhab/himitsu/wilgotność',bufor);

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

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

Sprawdź kod w pobliżu, a zobaczysz, że możesz łatwo sterować diodą LED lub przekaźnikiem, na przykład wysyłając polecenia do określonych kanałów. W przykładowym kodzie po prostu odsyła komunikat potwierdzający otrzymanie polecenia.

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

Wiązanie MQTT dla OpenHAB

Ostatnim krokiem w równaniu jest podłączenie tego do OpenHAB. Do tego oczywiście potrzebujemy wiązania.

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

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

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

mqtt:broker.url=tcp://host lokalny:1883

mqtt:broker.clientId=openhab

Uruchom ponownie OpenHAB

usługa sudo openhab restart

Następnie dodajmy jeden lub dwa elementy:

/* Czujniki MQTT */

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

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

Do tej pory powinieneś zrozumieć format; robi się Numer pozycji z wiązania MQTT, na określony temat. To prosty przykład, możesz chcieć odwołać się do strony wiki, gdzie to może stać się o wiele bardziej złożony .

Gratulacje, masz teraz podstawę taniego układu czujników opartego na Arduino. Powrócimy do tego w przyszłości i umieścimy Arduino w ich własnej, całkowicie oddzielnej sieci radiowej. Stworzyłem też 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 skonfigurowałeś kilka czujników, czy to z Z-Wave, czy niestandardowych Arduino z MQTT – więc możesz w dowolnym momencie zobaczyć aktualny stan tych czujników, a także powinieneś reagować na ich wartość w regułach. Ale interesującą rzeczą w wartościach czujników jest ogólnie to, że zmieniają się w czasie: tutaj pojawia się trwałość i wykresy. Trwałość w OpenHAB oznacza zapisywanie danych w czasie. Przejdźmy dalej i skonfigurujmy RRD4J (Round Robin Database for Java), tak zwany, ponieważ dane są zapisywane w sposób okrężny – 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 {

co minutę : '0 * * * * ?'

co godzinę : '0 0 * * * ?'

codziennie : '0 0 0 * * ?'

domyślna = każdaZmiana

}

Rzeczy {

// zachowaj wszystko, gdy wartość zostanie zaktualizowana, tylko domyślnie i przywróć je z bazy danych przy starcie

*: strategia = everyChange, restoreOnStartup

// następnie definiujemy konkretne strategie co godzinę dla czegokolwiek w grupie temperatury, a co minutę dla wilgotności

najlepsza aplikacja do słuchania muzyki w trybie offline

Temperatura*: strategia = co godzinę

Wilgotność*: strategia = co minutę

// alternatywnie możesz tutaj dodać określone elementy, takie jak

//Sypialnia_Wilgotność,JamesWBiurze : strategia = co minutę

}

W pierwszej części tego pliku definiujemy strategie, co oznacza po prostu nadanie nazwy wyrażeniu CRON. To samo, co już zrobiliśmy z My.OpenHAB, ale tym razem tworzymy nowe strategie, których możemy używać codziennie, co godzinę i co minutę. Nie używałem ich jeszcze wszystkich, ale może będę w przyszłości.

W drugiej połowie pliku mówimy rr4dj, które wartości danych ma zapisać. Domyślnie zapisujemy wszystko przy każdej aktualizacji, ale określiłem również strategie oparte na czasie dla konkretnych czujników. Temperatury, którymi się zbytnio nie przejmuję, więc ustawiłem to, aby oszczędzać tylko co godzinę, ale wilgotność jest dla mnie dużym problemem, więc chcę zobaczyć, jak zmienia się z każdą minutą. Jeśli istnieją inne dane, które chcesz zapisać w określonych godzinach, dodaj je tutaj teraz lub dostosuj w razie potrzeby.

Uwaga: jeśli chcesz również wykreślić dane, MUSISZ je przechowywać co najmniej raz na minutę. Nie ma znaczenia, czy dane z czujnika są aktualizowane tak szybko, wystarczy, że rr4dj będzie je przechowywał raz na minutę.

Po tym zdefiniowaniu powinieneś zacząć widzieć wyniki debugowania informujące, że wartości są przechowywane.

Następnie zróbmy ładne wykresy wszystkich tych danych. To naprawdę proste. Aby utworzyć wykres pojedynczego czujnika, dodaj do mapy witryny:

Pozycja wykresu=Sypialnia_Okres wilgotności=h

To dosłownie wszystko, czego potrzebujesz. Prawidłowe wartości dla okresu to godz., 4h, 8h, 12h, D, 3D, W, 2W, M, 2M, 4M, Y ; powinno być oczywiste, co to znaczy. Domyślnie jest to D dla pełnego dnia danych, jeśli nie określono.

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

Pozycja na wykresie=Okres wilgotności=h

Możesz również chcieć wiedzieć, że możesz użyć tego wykresu gdzie indziej; generuje obraz przy użyciu następującego adresu URL: http://YOUROPENHABURL:8080/chart?groups=Wilgotność&okres=h

Jak się? Twój Nadchodzi system OpenHAB?

To tyle, jeśli chodzi o tę część przewodnika, ale nie oczekuj, że będzie to ostatnia wiadomość od nas o OpenHAB. Mam nadzieję, że ten i przewodnik dla początkujących dały solidne podstawy do opracowania własnego kompletnego systemu OpenHAB – ale jest to proces, który nigdy nie jest całkowicie zakończony.

Na szczęście OpenHAB może się dobrze skalować od kilku do setek urządzeń, od prostej złożoności reguł po najwyższą automatykę domową – więc jak idzie Twój system? Jakie urządzenia wybrałeś? Jaki jest następny duży projekt, którym się zajmiesz?

Porozmawiajmy w komentarzach – i proszę, jeśli ten przewodnik okazał się przydatny, kliknij te przyciski udostępniania, aby powiedzieć znajomym, jak oni również mogą skonfigurować swój własny system OpenHAB.

Mamy nadzieję, że spodobają Ci się polecane i omawiane przez nas przedmioty! MUO posiada partnerstwo partnerskie i sponsorowane, więc otrzymujemy udział w przychodach z niektórych Twoich zakupów. Nie wpłynie to na cenę, którą płacisz, i pomoże nam zaoferować najlepsze rekomendacje produktów.

Udział Udział Ćwierkać E-mail Przewodnik dla początkujących po animowaniu mowy

Animowanie mowy może być wyzwaniem. Jeśli jesteś gotowy, aby rozpocząć dodawanie dialogu do swojego projektu, podzielimy ten proces za Ciebie.

Czytaj dalej
Powiązane tematy
  • majsterkowanie
  • Inteligentny dom
  • Arduino
  • Automatyka domowa
  • Długa forma
  • Przewodnik po długim kształcie
O autorze James Bruce(707 opublikowanych artykułów)

James ma tytuł licencjata w dziedzinie sztucznej inteligencji i posiada certyfikaty CompTIA A+ i Network+. Kiedy nie pracuje jako redaktor recenzji sprzętu, lubi gry LEGO, VR i gry planszowe. Przed dołączeniem do MakeUseOf był technikiem oświetlenia, nauczycielem języka angielskiego i inżynierem centrum danych.

Więcej od Jamesa Bruce .a

Zapisz się do naszego newslettera

Dołącz do naszego newslettera, aby otrzymywać porady techniczne, recenzje, bezpłatne e-booki i ekskluzywne oferty!

Kliknij tutaj, aby zasubskrybować