iMagazine

Sandisk

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

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

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ę.



27

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.


27
Dodaj komentarz

avatar
12 Comment threads
15 Thread replies
2 Followers
 
Most reacted comment
Hottest comment thread
14 Comment authors
czarkowmMichałDanAqaraPaweł Recent comment authors
  Subscribe  
najnowszy najstarszy oceniany
Powiadom o
Pawel
Gość
Pawel

@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
Gość
Mariusz

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

lisiatko,pl
Gość

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

Mietek
Gość
Mietek

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
Gość
KBA

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
Gość
Mietek

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

Przemek
Gość
Przemek

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

KBA
Gość
KBA

Zainstaluj dla Hombridge’a npm dla z-way.

Przemek
Gość
Przemek

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

KBA
Gość
KBA

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
Gość
Mariusz

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

Piotr
Gość
Piotr

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

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

proszę sprawdź ;)

pzdr

Paweł
Gość
Paweł

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
Gość
MARIUSZ

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ł
Gość
Paweł

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

Aqara
Gość

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

Dan
Gość
Dan

Czy potrzebny jest zestaw z kamerą? Nie wystarczy tańszy za Ok 100 zł bez kamerki?
https://botland.com.pl/moduly-i-zestawy-raspberry-pi-zero/8743-zestaw-raspberry-pi-zero-w-all-in-one-5903351240116.html

Michał
Gość
Michał

Czesc. Mam taki problem ze robie wszystko wg instrukcji a przy ładowaniu oczyszczacza daje mi takie cos

[2018-10-24 21:21:09] ERROR LOADING PLUGIN homebridge-mi-air-purifier:
[2018-10-24 21:21:09] /usr/local/lib/node_modules/homebridge-mi-air-purifier/index.js:296
getLockPhysicalControls: async function(callback) {
^^^^^^^^
SyntaxError: Unexpected token function
at Object.exports.runInThisContext (vm.js:76:16)
at Module._compile (module.js:542:28)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at Plugin.load (/usr/local/lib/node_modules/homebridge/lib/plugin.js:65:22)
at Server. (/usr/local/lib/node_modules/homebridge/lib/server.js:132:14)
[2018-10-24 21:21:09] ====================

czarkowm
Użytkownik
czarkowm

Czesc. Mam taki problem ze robie wszystko wg instrukcji a przy ładowaniu oczyszczacza daje mi takie cos

[2018-10-24 21:21:09] ERROR LOADING PLUGIN homebridge-mi-air-purifier:
[2018-10-24 21:21:09] /usr/local/lib/node_modules/homebridge-mi-air-purifier/index.js:296
getLockPhysicalControls: async function(callback) {
^^^^^^^^
SyntaxError: Unexpected token function
at Object.exports.runInThisContext (vm.js:76:16)
at Module._compile (module.js:542:28)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at Plugin.load (/usr/local/lib/node_modules/homebridge/lib/plugin.js:65:22)
at Server. (/usr/local/lib/node_modules/homebridge/lib/server.js:132:14)
[2018-10-24 21:21:09] ====================