iMagazine

Projekt Raspberry Pi – 2 – Instalacja Homebridge i konfiguracja Xiaomi Air Purifier 2

13/02/2018, 10:30 · · · 24

Przez pół piątku i cały dzisiejszy dzień walczyłem z Homebridgem, node’em oraz konfiguracją Xiaomi Air Purifier 2 pod całość. Oczywiście gdybym wszystko wiedział zawczasu, to całość zajęłaby może godzinę (a prawdopodobnie pół), ale nie wiedziałem, więc zajęła w sumie około 12 godzin. Niestety, największy problem sprawiła mi instalacja odpowiedniej wersji node’a (dzięki dla @sembsa za podpowiedzi) i zamiast postawić Raspbiana od nowa to uparcie walczyłem, żeby go naprawić.


Ten projekt jest możliwy dzięki uprzejmości Botland, który dostarczył następujące elementy umożliwiające jego wykonanie:


Spis treści

  1. Instalacja i konfiguracja Raspbian (Wi-Fi, SSH i VNC).
  2. Instalacja Homebridge i konfiguracja Xiaomi Air Purifier 2.
  3. Uruchomienie kamery Raspberry Pi NOIR pod HomeKitem.
  4. Dodajemy pozycję w HomeKit, wyświetlającą jakość powietrza na dworze.
  5. Dodajemy prognozę pogody do HomeKit dla naszej ulicy.

Wszystko co znajdziecie poniżej zakłada, że skonfigurowaliście sobie Raspberry Pi zgodnie z tym co pisałem w pierwszym rozdziale tego poradnika – poza VNC, który jest całkowicie zbędny.

I. Uaktualnienie Raspbiana

Dla pewności możecie wykonać poniższe komendy w Terminalu, po połączeniu się poprzez SSH z Raspberry Pi, zanim przejdziecie dalej:

  • sudo apt-get upgrade i poczekajcie aż się zakończy uaktualnianie wszystkiego,
  • raspi-update i ponownie poczekajcie na uaktualnienia.

II. Instalacja node 8.9.4

Otrzymałem podpowiedź, że Homebridge najlepiej działa z node’em w wersji 8.9.4. Nie wiem na ile to prawda, ale z wersję 9.x.x nie chciał współpracować poprawnie. Zaznaczam, że poniższe komendy są konkretnie dla Raspberry Pi Zero W, która ma architekturę ARMv6 – dla RPi 3 jest przewidziana inna wersja.

  1. Komendą node -v sprawdzicie obecną wersję node’a – będzie to prawdopodobnie 4.x.x. Jeśli nie jest to jakimś cudem 8.9.4, to możecie kontynuować.
  2. Wpisujecie cd, aby wrócić do katalogu domowego.
  3. Następnie należy pobrać odpowiedniego node’a: wget https://nodejs.org/dist/v8.9.4/node-v8.9.4-linux-armv6l.tar.xz.
  4. Teraz trzeba go rozpakować: tar -xvf node-v8.9.4-linux-armv6l.tar.xz
  5. Następnie wchodzicie do tego folderu: cd node-v8.9.4-linux-armv6l/
  6. Teraz musicie sprawdzić gdzie u Was znajduje się node: whereis node. Wynik będzie wyglądał podobnie do tego: node: /usr/bin/node /usr/local/bin/node /usr/share/man/man1/node.1.gz.
  7. Jeśli pierwszym wynikiem pod node: w powyższym jest /usr/bin/node, to wpisujecie sudo cp -R * /usr/, a jeśli /usr/local/bin/node, to wpisujecie sudo cp -R * /usr/local/. W moim przypadku było to pierwsze.
  8. Po powyższej operacji, po wpisaniu node -v, wynik powinien pokazać: v8.9.4.

III. Instalacja Homebridge

  1. Zaczynamy od instalacji wymaganych bibliotek: sudo apt-get install libavahi-compat-libdnssd-dev.
  2. Następnie instalujemy samego Homebridge’a: sudo npm install -g --unsafe-perm homebridge.
  3. Teraz możemy spróbować go testowo uruchomić za pomocą komendy homebridge – plik konfiguracyjny jest nieprawidłowy, więc wyrzuci błędy, ale powinniście widzieć, że się uruchomił. W razie potrzeby, jeśli nie przywróci Was do prompta, należy wcisnąć ^R (CTRL+R).
  4. Teraz czas na uruchomienie nano i edycję pliku homebridge: sudo nano /etc/default/homebridge.
  5. Do edytora wklejamy następujący tekst:
  6. Wciskamy teraz ^X (CTRL+X), aby go zapisać i Enter, aby zatwierdzić operację.
  7. Edytujemy teraz kolejny plik: sudo nano /etc/systemd/system/homebridge.service i wklejamy do niego:
  8. Ten plik też zapisujemy za pomocą ^X i zatwierdzamy Enterem.
  9. Homebridge można uruchamiać ręcznie na naszym koncie, ale lepiej całość zautomatyzować, więc zaczynamy od: sudo useradd --system homebridge.
  10. Następnie wpisujemy: sudo mkdir /var/homebridge.
  11. Zanim jednak dokończymy powyższe, przygotujemy plik konfiguracyjny na podstawie pliku przykładowego, którego już mamy: cp /usr/local/lib/node_modules/homebridge/config-sample.json ~/.homebridge/config.json.
  12. Wpisujemy sudo npm install -g homebridge-mi-airpurifier miio, aby doinstalować jeszcze dwa potrzebne elementy, jeden z których potrzebny jest do wygenerowania pliku konfiguracyjnego. Więcej informacji na temat homebridge-mi-airpurifier znajdziecie tutaj.
  13. Za pomocą następującej komendy postaramy się znaleźć nasz Xiaomi Air Purifier 2 na naszej sieci Wi-Fi (musi być na tej samej co Raspberry Pi): miio discover sync. Wyświetli ona informacje w stylu:
  14. Z powyższego wyniku musimy zapisać sobie adres IP oraz token. Po ich zapisaniu, wciskamy ^C, aby zamknąć program.
  15. Teraz czas na przygotowanie naszego pliku konfiguracyjnego w edytorze: nano ~/.homebridge/config.json.
  16. Kasujemy całą zawartość pliku – wcześniej bazowałem na niej, ale docelowo stworzyłem plik od nowa.
  17. Plik powinien być teraz pusty, więc wklejamy do niego:

    Bardzo istotne jest, aby w miejscu IPtoken wstawić wartości przekopiowane z punktu 14.
  18. Zapisujemy plik za pomocą ^XEnter.
  19. Uruchamiamy jeszcze raz Homebridge’a, aby sprawdzić czy plik został prawidłowo zaakceptowany: homebridge.
  20. Jeśli tak – pojawi się kod QR na ekranie, kod PIN oraz informacja, że plik konfiguracyjny został odczytany poprawnie – to zamykamy Homebridge’a za pomocą ^C. Teraz czas na dokończenie automatycznego uruchamiania Homebridge’a…
  21. cp ~/.homebridge/config.json /var/homebridge.
  22. sudo cp -r ~/.homebridge/persist /var/homebridge.
  23. sudo chmod -R 0777 /var/homebridge.
  24. sudo systemctl daemon-reload.
  25. sudo systemctl enable homebridge.
  26. sudo systemctl start homebridge.
  27. systemctl status homebridge.

Tylko tyle. To prostsze niż się wydaje.

IV. Konfiguracja HomeKit

Ja wcześniej nie korzystałem z HomeKita zupełnie, więc w moim przypadku była to konfiguracja od zera. Jeśli pamiętacie ten kod QR, który się pojawiał przy testach uruchomienia Homebridge’a, to potwierdzam, że on działa, ale nie w przypadku automatycznego jego uruchamiania, zgodnego z ostatnimi krokami powyżej. W pliku config.json znajdziecie natomiast PIN o wartości 031-45-154, z którego skorzystamy.

Po pierwszym uruchomieniu aplikacji Home na iPhonie lub iPadzie, wystarczy na dole wybrać opcję skorzystania z kodu PIN i następnie go wpisać, aby on sam znalazł wszystkie nasze urządzenia (w tym wypadku oczyszczacz powietrza). Osobiście jeszcze pozmieniałem nazwę oczyszczacza z MiAirPurifier2, jak wyświetlił się w Home, na samo Air Purifier.

Przypominam – mam nadzieję, że nie za późno – że HomeKit wymaga „huba” w postaci Apple TV 4 lub 4K, lub iPada obsługującego iOS 11 (jeśli nie potrzebujecie automatyzacji, to wystarczy Apple TV 3). Więcej informacji na ten temat znajdziecie tutajtutaj.

Moim następnym krokiem było ustawienie sobie odpowiedniej tapety pod poszczególne pokoje – zdjęcia od Apple są wyjątkowo ubogie w tym względzie. Priorytety, prawda?

Przy okazji skonfigurowałem sobie też dwa pokoje, w których są moje „smart” urządzenia – Raspberry Pi jest w salonie (Living Room), a Xiaomi Air Purifier w sypialni (Bedroom).

Następnie rozpocząłem testy z Siri. Okazuje się, że potrafi ona obsłużyć Xiaomi Air Purifier bez większych problemów, chociaż nie udało mi się za jej pomocą wprowadzić go w tryb nocny (silent). Tryb „favourite” (zgodnie z nomenklaturą Xiaomi) to po prostu „manual” dla Siri.

Po wejściu w Ustawienia → Centrum Sterowania, można dodać Home do listy ikon tam wystawionych, dzięki czemu mamy dostęp do informacji bezpośrednio z Centrum Powiadomień. Niestety, implementacja wyświetlania istotnych informacji w aplikacji Home, jest słaba. Cały ekran jest potrzebny, aby wyświetlić jedną linijkę tekstu, która jest obcinana w widoku przeglądowym.

Ten widok jednak zawiera przycisk „Details” na dole, pod którym, w przypadku pola „jakość powietrza”, możemy dostać się do konkretnej wartości PM2.5, odczytywanej przez Xiaomi. Jak widać, „excellent” oznacza w tym wypadku 31 µg/m3. Teraz większość powie, że jest to „do dupy” i że ta informacja powinna się pojawiać obok niejasnego „excellent” – od razu podpowiem, że tą wartością będziecie się tylko interesować na początku, a potem przestaniecie tam zerkać, a po drugie zgłosiłem to już jako „bug” do twórcy.

U mnie za „hub” dla HomeKita robi Apple TV 4, więc jak tylko uruchomiłem Home.app na iPadzie, to cała moje konfiguracja (ale bez tapet) się tam automatycznie pojawiła.

Pozostała już tylko automatyzacja do skonfigurowania. Ta wymaga wejścia do ustawień prywatności w iOS-ie (na iPhone w tym wypadku) oraz dania HomeKitowi praw do korzystania z GPS-a (jeśli to wyłączyliście). Jeśli tego nie zrobicie, to HomeKit nie będzie mógł automatyzować pewnych czynności na podstawie Waszego fizycznego położenia.

Aplikacja Xiaomi też umożliwia automatyzację, ale nie na podstawie naszego położenia. Zanim stworzyłem cztery powyższe zasady, dodałem Iwonę do osób, która może obsługiwać HomeKita – to ważny krok, bo wtedy HomeKit sprawdza i jej, i moje położenie, co pozwala mi wyjść z domu, ale skoro ona jest, to akcja się nie wykona, dopóki ona też nie wyjdzie. To zresztą można skonfigurować. Ustawiłem cztery wstępne akcje:

  1. Jeśli w domu nie ma Iwony ani mnie, to oczyszczacz się wyłącza, aby nie marnować prądu.
  2. Jeśli którekolwiek z nas wróci do domu, to oczyszczacz się włączy w tryb automatyczny.
  3. O godzinie 22:00, jeśli ktoś jest w domu, oczyszczacz przełączy się w tryb nocny.
  4. O godzinie 08:00, jeśli ktoś jest w domu, oczyszczacz przełączy się w tryb auto.

Wstępne testy są pozytywne. Żałuję jedynie, że wartości PM2.5 nie można obecnie wykorzystać w automatyzacji – chciałbym np. ustawić regułę, że jeśli wartość jest wyższa niż x, to Xiaomi przełącza się w tryb manualny na 30 minut. Możliwe, że ta funkcja pojawi się z czasem.

Padło też pytanie o archiwizowanie danych z czujnika. Teoretycznie powinno być to możliwe, ale trzeba by napisać skrypt, który odczytywałby pomiar w regularnych odstępach czasu i zapisywał je do jakiejś bazy danych lub wysyłał powiadomienie w przypadku, gdy wartość jest wyższa niż x. Jeśli ktoś z Was taki skrypt napisze, to odezwijcie się.




Wojtek Pietrusiewicz

Wydawca, fotograf, podróżnik, podcaster – niekoniecznie w tej kolejności. Lubię espresso, mechaniczne zegarki i zwinne samochody. Niedawno rozpocząłem prowadzenie kursów Lightrooma i fotografii na Pikselowe.pl – zapraszam.


Dodaj komentarz

Pawel napisał(a):

@wojtek na takie scenario czekalem! Przymierzam sie do homebridge od jakiegoś czasu i powstrzymywało mnie tylko to, ze nie znalazłem nikogo „zintegrowanego” z apple kto chciałby sie pokusić o „walkę” z homebridge a przy tym zrobił to, jakby to powiedzieć aby nikogo nie urazić; łopatologicznie….
Bardzo dziekuje za to ze sie tym zająłeś.

Mariusz napisał(a):

Będzie wpis jak zaimplementować kamerę z malinki?

Wojtek Pietrusiewicz napisał(a):

Jeśli się uda to tak!

lisiatko,pl napisał(a):

Czyli generalnie nie dość że muszę mieć appleTv4 to jeszcze malinkę? To po co to appleTv?

Wojtek Pietrusiewicz napisał(a):

Napisałem w tekście. Jeśli nie jest to wystarczająco wyraźne, to daj znać.

lisiatko,pl napisał(a):

Ok, może niejasno się wyraziłem – w tekście jest „Przypominam – mam nadzieję, że nie za późno – że HomeKit wymaga „huba” w postaci Apple TV 4 lub 4K, lub iPada obsługującego iOS 11 ”
Jako że nie mam żadnych doświadczeń z homekit’em to chciałbym wiedzieć czemu nie można podpiąć tego xiaomi bezpośrednio pod appleTV albo dlaczego (jeśli malinka robi za obsługę xiaomi jak rozumiem) potrzebujemy jeszcze apple TV ?

malinka przerabia rzeczy nie HomeKitowe na HomeKitowe, jest takim pomostem między urządzeniami, które oficjalnie nie wspierają HomeKit, a właśnie HomeKit.
Apple TV daje dostęp do HomeKit z zewnątrz (spoza sieci domowej), jak nie potrzebujesz takiego dostępu do nie musisz mieć ATV

Wojtek Pietrusiewicz napisał(a):

PS. Nie, nie musisz mieć ATV4. A fakt, że musisz mieć Malinkę jest chyba oczywisty?

Mietek napisał(a):

W aplikacji Xiaomi da się zautomatyzować przejścia w tryb manualny (dla którego ustawia się obroty) w zależności od wartości Pm. A kolejną regułą „mniej niż” przejście w trup auto. Oczyszczacz nawet sam się włącza jeśli jest w gniazdku. Ale rozumiem, że wolisz to zrobić na homekit.

KBA napisał(a):

HomeKit z założenia jest systemem nadrzędnym łączącym poszczególne peryferia i to on ma sterować aktorami.
To co napisałeś będzie działać wybiórczo, gdyż programowanie automatyzacji w urządzeniu peryferyjnym oraz równocześnie w systemie nadrzędnym wprowadza tylko chaos. Tak naprawdę nie wiadomo wtedy jaki trigger i dlaczego uruchomił daną automatyzację.
Przykład:
Założenie: brak użytkowników w mieszkaniu = urządzenie wyłączone.
Przebieg: Ostatni użytkownik opuszcza mieszkanie -> następuje wyłączenie urządzenia (trigger globalny). Po 15 minutach od wyjścia wartość Pm wzrasta i jest większa od wartości zadanej -> uruchomienie urządzenia w trybie Auto (trigger lokalny).
Wniosek: założenie nie spełnione i pytanie dlaczego urządzenie nie zostało wyłączone?

Mietek napisał(a):

Nie pomyślałem o tym. Rzeczywiście pewnie działałoby to tak jak opisałeś to w przykładzie.

Przemek napisał(a):

Jak dodac do Apple Home Kit urzadzenia z sieci z-wave?

KBA napisał(a):

Zainstaluj dla Hombridge’a npm dla z-way.

Przemek napisał(a):

Dzieki za informacja mozesz doradzic jak to najlepiej sprzetowo ogarnac? Czy tez Raspberry Pi?

KBA napisał(a):

Potrzebujesz malinę z RaZBerry. Na malinie instalujesz z-way server. Potem do Homebridge’a musisz dograć npm dla z-way. Trochę zabawy jest ale działa.

Mariusz napisał(a):

Jeśli chcę pominąć oczyszczacz powietrza, to które punkty pominąć? 11-18? Na razie dodaję tylko kamerkę.

Wojtek Pietrusiewicz napisał(a):

12-18 pi razy drzwi.

Piotr napisał(a):

Wojtek,
pkt. 21 jest:
cp ~/.homebridge/config.json /var/homebridge

powinno chyba być:
sudo cp ~/.homebridge/config.json /var/homebridge

proszę sprawdź ;)

pzdr

Wojtek Pietrusiewicz napisał(a):

Niektórym pójdzie pewnie bez sudo, bo magia, ale masz rację – to pewniejsze.

Paweł napisał(a):

Robię wszystko wg. tutoriala i o ile uruchomienie poprzez komendę „homebridge” śmiga, to z autostartu nie bardzo… po wpisaniu „systemctl status homebridge” dostaję poniższy komunikat:
┌──────────────────────────────────────────────────────────────┐
│ npm update check failed │
│ Try running with sudo or get access │
│ to the local update config store via │
│ sudo chown -R $USER:$(id -gn $USER) /home/homebridge/.config │
└──────────────────────────────────────────────────────────────┘
próbowałem w wersji z nodem 8.9.4, 8.10.0, w wersji 9.9.0 całkowicie się wykrzacza…
dzieje się identycznie na wersji raspbiana zarówno 2017-11-29 jak i 2018-03-13

Cóż począć? :)

MARIUSZ napisał(a):

Paweł spróbuj tego. Ja chyba tak robiłem. Znalezione na malinowepi.pl

Skrypt ten uruchamia Homebridge.

cd ~/.homebridge/
nano RunHomebridge.sh – tworzymy nasz skrypt do uruchamiania Homebridge. Oczywiście możemy go nazwać jakoś inaczej niż „RunHomebridge”. Skrypt jest bardzo długi, bo ma aż dwie linijki:

#!/bin/bash homebridge

sudo chmod +x RunHomebridge.sh – Po stworzeniu takiego dużego i rozbudowanego skryptu pora nadać mu stosownych uprawnień pozwalających na wykonywanie go.
crontab -e – otwieramy crona i dopisujemy w ostatniej linijce @reboot /home/pi/.homebridge/./RunHomebridge.sh.
Teraz po starcie systemu zawsze powinien nam automatycznie startować Homebridge

Paweł napisał(a):

Mariusz, działa. Dziękuję! :)

Aqara napisał(a):

A gdy już masz homebrigde to może rozbudować system o kolejne detektory od Xiaomi… Oczywiście nie byłbym sobą gdybym nie zasugerował urządzeń od start-up’u Aqara, który finansowany przez Xiaomi robi naprawdę piękne produkty.
Ostanio nawet dostali nagrodę German Design Award za swoje produkty:
https://www.german-design-award.com/en/the-winners/gallery/detail/16867-smart-home-security-kit.html