Inteligentny dom tanim kosztem, HomeKit, MQTT „zrób to sam”, cz. 4 „Robimy HomeBridge”
  • 82
  • 18.03.2017
Jaromir Kopp

Inteligentny dom tanim kosztem, HomeKit, MQTT… kolejny ważny odcinek, wręcz przełomowy. Dziś postaramy się uruchomić oraz skonfigurować brokera (serwer) MQTT i HomeBridge.

Pamiętajcie o innych częściach cyklu INTELIGENTNY DOM TANIM KOSZTEM, HOMEKIT.

Chcecie zobaczyć na żywo „jak to się robi”?
Zapraszam na MAKE IT SIMPLE – DZIEŃ Z INFORMATYKĄ NA WSB WE WROCŁAWIU, 5 KWIETNIA!

Swoją instalację uruchomiłem na dysku sieciowym QNAP i taką konfigurację opiszę. Bez większych zmian będą z niej mogli skorzystać użytkownicy lepszych modeli Synology, a i osoby, które zapragną uruchomić HomeBridge na „malinkach” i ich klonach, również sporo skorzystają z opisu, zwłaszcza konfiguracji.

Podoba Ci się artykuł? Możesz zafundować mi piwo (lub kawę) ;-) Donate a coder

Inteligentny dom tanim kosztem, HomeKit, MQTT, HomeBridge.

Musimy zacząć od zainstalowania (jeżeli nie mamy) Container Station w QNAP za pomocą App Center.

Teraz możemy zabrać się za MQTT. Jest to bardzo „lekki” protokół wymiany informacji. Ze względu na prostotę i szybkość przyjął się w IoT, ale nie tylko. Teoretycznie moglibyśmy sobie poradzić, wysyłając komendy przez HTTP, jednak MQTT daje znacznie więcej możliwości i jest też pewną alternatywą dla HomeKit (gdyby Apple raczył zablokować niezgodne urządzenia).

MQTT w QNAP

HomeBridge na QNAP konfiguracja 1

W Container Station klikamy w „Utwórz kontener”, następnie wpisujemy, w szukaj: „MQTT”. W zakładce IoT powinien nam się pojawić „MQTT Mosquitto…”. Klikamy „Utwórz”. W oknie ustawień możemy zmniejszyć przydział pamięci (spokojnie 64-128MB wystarczy). Na dole klikamy w „Ustawienia zaawansowane”. Wybieramy po lewej „Sieć” i zmieniamy tryb sieci na „Host”. Jest to bardzo ważne, bo bez tego nasze urządzenia nie będą miały łatwego dostępu do brokera MQTT. Klikamy „Utwórz” i chwilę czekamy aż kontener z MQTT, zostanie utworzony i uruchomiony.

HomeBridge na QNAP konfiguracja - Container Stationustawienia sieciowe

Poprawność jego pracy możemy sprawdzić już teraz. Wystarczy zalogować się do naszego przełącznika z wgranym firmware Sonoff-Tasmota, wejść w „Configuration”, dalej w „Configure MQTT”. Jeżeli nie mamy MQTT na liście, to należy sprawdzić w „Configure Other” czy klient MQTT jest włączony.

HomeBridge na QNAP konfiguracja - ustawienia MQTT przełącznika

  • W ustawieniach MQTT wpisujemy:
  • Host — adres IP naszego brokera MQTT, czyli IP QNAP-a lub „malinki”.
  • Port: 1883,
  • Client Id nie zmieniamy.
  • User i hasło: dowolnie. Będą musiały być zgodne ze wpisanymi w konfiguracji akcesoriów w HomeBridge.
  • Topic: nazwę (identyfikator) naszego urządzenia np. sonoff. Po niej będzie rozpoznawane.

Zapisujemy, przechodzimy do menu głównego naszego Sonoffa lub Electrodragona i tam wchodzimy w Console. Jeżeli zobaczymy komunikaty podobne do tego: „21:24:22 MQTT: stat/sonoff205/POWER”, to oznacza, że Sonoff (Electrodragon) nawiązał połączenie z MQTT. Jeżeli widzimy coś podobnego do:

00:00:05 MQTT: Attempting connection...
00:00:06 mDNS: Query done with 0 mqtt services found

To znaczy, że połączenia brak. Winny może być zły adres, jaki wpisaliśmy w ustawieniach MQTT w Sonoffie (user i hasło na tym etapie nie mają znaczenia). Jeżeli adres jest OK, to sprawdźmy w Container Station czy kontener z MQTT pracuje i czy na pewno daliśmy mu tryb sieciowy Host.

HomeBridge na QNAP konfiguracja - MQTT jest połączenie!

Jeżeli akcja z MQTT się powiodła, to zabierzmy się za HomeBridge, będzie trudniej.

HomeBridge w QNAP

Przed dodaniem kontenera dobrze jest przygotować na QNAP miejsce, gdzie będziemy trzymać jego konfigurację. Może to być osobny zasób lub nasz ulubiony, ale z wydzieloną teczką np. HomeBridge.

HomeBridge na QNAP konfiguracja - Container Station dodajemy kontener z HomeBridge

W Container Station znów klikamy w „Plusa”. W „szukaj” wpisujemy HomeBridge. Tym razem w zakładce „Docker Hub” powinien nam się pojawić między innymi „marcoraddatz/home…”. Przy nim klikamy „utwórz”, wybieramy wersję „latest”. Znów możemy zmniejszyć ilość pamięci (lepiej nie mniej niż 128 MB) i przechodzimy do ustawień zaawansowanych. W sieci koniecznie wybieramy tryb „Host”, a w Foldery musimy „zamapować” utworzoną wcześniej teczkę do odpowiedniej ścieżki w kontenerze HomeBridge. W „Wolumin hosta” wybieramy naszą teczkę, a w „Punkt zamontowania” wpisujemy dokładnie tak jak tu „/root/.homebridge” (bez cudzysłowów oczywiście). Sprawdzamy, czy mamy dla tej pary włączony odczyt i zapis i klikamy w „Utwórz”.

HomeBridge na QNAP konfiguracja - Container Stationustawienia sieciowe HomeBridge na QNAP konfiguracja - Container Station mapowanie dysku

Jeżeli kontener z HomeBridge się utworzy i uruchomi, to w Konsoli pojawi się komunikat o braku pliku konfiguracyjnego. Musimy go stworzyć i zainstalować dodatki (pluginy), bez których HomeBrudge nic nie potrafi.

HomeBridge – konfiguracja

Teraz musimy zacząć od dodania pierwszego „akcesorium” do pliku konfiguracyjnego oraz zainstalować dodatek do jego obsługi.

Opisane niżej pliki muszą znajdować się w katalogu głównym HomeBridge wskazanym podczas jego konfiguracji, czyli np. w wybranym zasobie sieciowym w teczce HomeBridge.

Wszystkie dane konfiguracyjne znajdują się w pliku „config.json”. Można go edytować TextWranglerem, darmową wersją jego następcy: BBEdit, edytorem Atom (tym od wgrywania firmwaru) lub po prostu systemowym TextEdit, ale koniecznie w trybie zwykłego tekstu (menu Format -> Zamień na zwykły tekst). Należy pilnować, aby nazwa pliku była „config.json” i nie pojawiły się za nią żadne dodatki typu .txt (sprawdzamy w Info, czy mamy włączone pokazywanie rozszerzenia dla tego pliku).

Drugi plik to „install.sh”. Jego również dotyczą wspomniane wyżej zasady edycji. Posiadacze „Malinek” mogą dodatki instalować ręcznie bez używania pliku install.sh komendą: „sudo npm install -g nazwa-pluginu” np. „sudo npm install -g homebridge-mqtt-switch-tasmota”.

Możecie pobrać gotowy przykładowy plik „install.sh” lub stworzyć go ręcznie. Jeżeli chcemy zainstalować dodatek do obsługi przełącznika, to plik powinien mieć treść:

#!/bin/bash
npm install -g homebridge-mqtt-switch-tasmota

Konfigurację zrobimy na przykładzie mojego pluginu do obsługi przełącznika.

{
 "bridge": {
 "name": "Homebridge",
 "username": "CC:22:3D:E3:CE:30",
 "port": 51826,
 "pin": "031-45-154"
 },
 "description": "Chatka",
 "accessories": [
 {
 "accessory": "mqtt-switch-tasmota",
 "switchType": "Switch",
 "name": "Drukarka",
 "url": "mqtt://10.6.12.13",
 "username": "ppp",
 "password": "ppp",
 "topics": {
 "statusGet": "stat/sonoff/POWER",
 "statusSet": "cmnd/sonoff/power",
 "stateGet": "tele/sonoff/STATE"
 },
 "onValue": "ON",
 "offValue": "OFF",
 "activityTopic": "tele/sonoff/LWT",
 "activityParameter": "Online",
 "startCmd": "cmnd/sonoff/TelePeriod",
 "startParameter": "120",
 "manufacturer": "Itead",
 "model": "Sonoff WiFi",
 "serialNumberMAC": "00:01:94:07:4C:02"
 }
 ]
}

Najważniejsze są linijki:

„accessory”: „mqtt-switch-tasmota”,

Tu wpisujemy nazwę dodatku obsługującego to akcesrium („homebridge-” możemy pominąć).

„url”: „mqtt://10.6.12.13”,

To adres naszego brokera MQTT, w tym przypadku adres NAS QNAP lub „Malinki” z mgtt:// na początku. Musi być on taki sam jak w konfiguracji przełącznika! Do MQTT, który przenosi komunikaty, łączy się zarówno HomeBidge, jak i „Sonoffy”.

„username”: „ppp”,

„password”: „ppp”,

Identyczne jak w ustawieniach Sonoffa!

Wszystkich linijek z nazwami Topików gdzie w przykładzie występuje „sonoff”, dotyczy jedna zasada: ma być dokładnie jak w przykładzie, jedynie „sonoff” (w środku pomiędzy „/”) możemy zmieniać. Jest to nazwa MQTT naszego urządzenia podana w konfiguracji MQTT przełącznika. W naszym przypadku jest to właśnie „sonoff”. Jeżeli będziemy mieli kilka przełączników, każdy musi mieć inną nazwę np. „sonoff001”, „sonoff002”, „salon1”. Ważne, że środek z topika w config.json ma być identyczny z nazwą MQTT w ustawieniach przełącznika.

Jeżeli ustawiliście nazwę „sonoff” dla tego pierwszego, to nic nie musicie zmieniać w przykładowej konfiguracji.

Linijki z „manufacturer”, „model”, „serial…” nie są obowiązkowe, to tylko informacja ułatwiająca identyfikację jak już będziecie mieć tych urządzeń kilkanaście.

W plikach json każdy przecinek ma znaczenie. Dobrze jest sprawdzić naszą konfigurację np. za pomocą serwisu: http://jsonlint.com, aby nie narażać się na poprawianie prostych błędów.

Przygotowane pliki install.sh i config.json wgrywamy do teczki HomeBridge i restartujemy lub uruchamiamy kontener z nim, sprawdzając, czy MQTT również pracuje.

HomeBridge na QNAP konfiguracja - restart HomeBridge na QNAP konfiguracja - konsola

Jeżeli nic nie popsuliśmy, to w konsoli kontenera z HomeBridge powinniśmy zobaczyć „pin” konieczny do sparowania z HomeKit. Jeżeli po uruchomieniu i instalacjo dodatków (może to chwilę potrwać, przebieg będzie widoczny w konsoli) widzimy ten pin i nie ma za nim błędów, a kontenery nadal pracują, to możemy w iPhone uruchomić aplikację „Dom”.

HomeBridge na QNAP konfiguracja - działa!

Przy dodawaniu poinformuje nas ona, że urządzenie jest niewspierane, ale nasz przełącznik powinien pojawić się w „domyślnym pokoju”.

Kolejne urządzenia dodajemy do pliku konfiguracyjnego, oddzielając je przecinkiem. Za ostatnim przecinka dodawać nie można.

Np. tak jak w tym pliku: config.json, który zawiera konfigurację dwóch przełączników.

Więcej o konfiguracji dowiecie się z moich profili na npm oraz github. Są tam również inne dodatki do obsługi temperatury, wilgotności, pomiaru mocy (Sonoff Pow), czy sensorów ruchu wraz z przykładowymi konfiguracjami.

W następnej części opiszę jak podłączać do Sonoffów i Electrodragonów dodatkowe sensory, czy przełączniki oraz więcej opcji konfiguracji HomeBridge.

Powodzenia!

Pamiętajcie o innych częściach cyklu INTELIGENTNY DOM TANIM KOSZTEM, HOMEKIT.

Użytkownik komputerów Apple od 1991 roku. Fan transportu rowerowego. Domorosły programista (od 1984, Atari, Amiga). Programuje dla iOS i macOS. Dobrze zna Filemaker. Uczulony na Windowsa, Androida i JB. Uznający wyższość „Poniechaj” nad „Anuluj”.
  • piotrek

    a widzisz, o tym nie pomyślałem. Czujkę zasililem w 100% z zasilacza i z pinu OUT podpiąłem się GPIO14 w SONOFF …
    Jak to powinno być ostatecznie połączone ?, nie do końca czuje to wspólne GND a nie chcę bałaganu narobić …

  • Aby prąd popłynął musi być obwód czyli dwa przewody. Bez podpięcia do masy Sonoffa nie będzie obwodu i nie sprawdzi różnicy potencjałów. Masa (minus) zasilacza musi być połączona z masą Sonoffa, ale tylko masa (i linia danych – czujnika)

  • Michał Czarkowski

    Moze byc ATV 3gen ale bez obslugi kamer ;)

  • Michał Czarkowski

    Jest jeszcze szansa ze mial jakis problem z username w config.json raz 2h homekit nie widzial w ogole mostka zmienilem na inny i smignelo.

  • Piotrek

    aktualne podłączenie:

    —– 5V———————————–VCC (czujka)
    OUT (czujka)——|
    —-GND—-|—————————–GND (czujka) |
    | |
    | |
    —-GND—-|—————————–GND (sonoff) |
    GPIO14 (sonoff)——|
    —-3.3V———————————-VCC (sonoff)

    … i niestety nie działa ;( Już nie mam pomysłu. Co robię nie tak ?

  • piotrek
  • Nie otwiera się…
    Zrób tak: http://macwyznawca.pl/sensorRuchu.png

  • piotrek

    nie widzę różnicy ;(

  • A skąd wiesz, że dobrze skonfigurowałeś Sonoffa?
    Sprawdzałeś czy przełączanie działa, gdy podłączasz od pinu GPIO14 3,3V?
    Sprawdź też co się dzieje jak 14 zwierasz do GND.

  • piotrek

    no i jasne, konfiguracja czujnika ruchu na GPIO12 Sonoffa jako „SWITCH” powoduje aktywację oświetlenia skonfigurowanego też na tym sonoffie po podaniu GND na GPIO14
    I tak sie działo sama zapalała mi się lampka i nie wiedziałem dlaczego – to czujnik ją wyzwalał, ale nie miałem informacji o wykryciu ruchu.

    Jeżeli podam VCC nic się nie dzieje.

    Pytanie jak skonfigurować ten czujnik ?

  • Jakie GPIO12? Coś Ty namieszał 😉
    A powinno się dziać… znaczy, że dla 14 masz coś żle ustawione.

  • piotrek

    oczywiście GPIO14, czeski błąd ….

  • Czyli najpierw musisz tak pokombinować z konfiguracją (sprawdź wszystkie tryby switcha) aby po załączaniu 3,3V na GPIO14 załączał się włącznik. Jak to osiągniesz dopiero podpinaj czujkę.

  • Tomek

    Czy te czujki trzeba spiąć z sonoff TH czy może być zwykły tez ??

    Drugie pytanie jaki jest zasięg praktycznie tej czujki ?

  • Ze zwykłym bez problemu (jak wlutujesz piny lub gniazdka).

    Producent podaje, że kilka metrów, praktyka to potwierdza.

  • piotrek

    jest lepiej niż było, ale w dalszym ciagu nie ma sygnalizacji ruchu na przycisku w telefonie
    poniżej krótki filmik obrazujący problem

    http://gofile.me/3oxPY/fMRdAMWcE

  • A coś tam wogule działa? Bo temp. też jakby nie działała

  • piotrek

    pozostałe rzeczy są z drugiego sonoffa, który nie jest podłączony.
    Na podłączonym mam zdefiniowaną tylko czujkę ruchu.

    tutaj mój config.json – http://gofile.me/3oxPY/mYbv09y2M

  • Nie otwiera się…

  • Michał Czarkowski

    A mam pytanie czy ten switch

    https://www.itead.cc/sonoff-touch.html

    Tak samo mozna zrobic update firmware?
    I pytanie czy jest w sumie sens, bo widzialem ze sonoff chwali sie ze na ich sofice wspolpracuje to to z alexa i nestem. Pewnie tasmota ma fajniejszy firmware w sumie nadal pytanie czy w takim gniazdku dalej sie go da wgrac

  • Ta… współpracuje przez ich chiński serwer. Wyłączy Ci się net i wszystko siądzie. Nie czytałeś I części?
    Na stronie Github Tasmota jest opisane z czym działa. Ten jest na liście. Pamiętaj, ze wymaga zasilania. Sprawdź czy masz w gniazdku przełącznika pełne zasilanie, czy tylko kabel do żyrandola

  • Michał Czarkowski

    No pelne, w sensie jakbym zamiast przelacznika dal kontakt to by smigalo. ;) a jak mozna inaczej zamontowac przelacznik? A jesli chodzi o obsluge Alexy to wydaje mi soe ze wczesniej o tym nie pisali ztad moje zdziwienie :) fajnie ze dziala mozna cos pomyslec :)

  • Pełna, że z masą i 23V oraz kablem do żyrandola, a nie tylko kable z 230V i do żyrandola.

    Dodali obsługę na serwerze to napisali. Zresztą po co komu alexia?

  • Michał Czarkowski

    Niewiem, moze ktos bedzie szczesliwy. :) to ok tak mam to zamawiam.

  • 😉
    Dla mnie za drogie i nie mam pełnego zasilania… ja podłączam dragona lub Sonofa w puszcze gdzie się kable z przełacznika i żyrandola zbiegają, i przełącznik pod masę i GPIO i działa 😉

  • Michał Czarkowski

    No tak, tylko w Twoim wypadku chyba musisz uzywac telefonu a nie mozesz przelaczac przelacznikiem fizycznym. A u mnie jednak przelaczanie fizyczne by sie przydalo

  • Michał Czarkowski

    A czekaj, czyli jest opcja normalnego przelacznika i sonoffa? Ooo masz moze jakis schemat pod reka?

  • Przecież napisałem: podpinam przełącznik między masę a GIPO… ścienny przełącznik. ;-)

  • To będzie w następnej części, jak chcesz to poczytaj wiki projektu tasmota i ustawienia moduły w konfiguracji WWW 😉
    Przecież możesz dowolny pin jako przełącznik ustawić… zwierasz do masy i ustawiasz w jakim trybie ma pracować (toggle najlepiej) i już.

  • Michał Czarkowski

    To poczekam do nastepnego odcinka bo az tak mi sie nie spieszy. Jak pisalem kiedys ja jestem laik do potegi n-tej w zwiazku z czyn wole sam nie sprawdzac tylko poczytac od madrzejszych :)

  • Tomek

    Narobiłeś smaka że już paczka z Chin już jedzie :) A tak przy okazji kiedy się spodziewać części V ? Mam też pytanie czy planujesz może jakaś wzmianke jak podpiąc rolety pod homekita? Drugie pytanie czy trudno napisac jest swój plugin do homebridga np potrzbuje pod kamerke Foscam ale te gotowe nie działaja tak jak chce? Pzdrw

  • Będzie pod koniec tygodnia, niestety teraz mamy urwanie głowy z zamknięciem numeru, aby zdążyć przed świętami.

    Roletą nie wiem jak będzie, bo nawet okiennic w domu nie mam 😉

    Czy trudno jest napisać? Jak znasz JavaScript to nie 😉
    Ja nie znałem (się brzydzę JS), a jakoś sobie poradziłem 😉