Projekt Raspberry Pi – 4 – Dodajemy pozycję w HomeKit, wyświetlającą jakość powietrza na dworze
Od jakiegoś czasu przymierzałem się do wyświetlania temperatury na dworze w HomeKit, ale dzisiaj Beniamin Rychter wypuścił coś ciekawszego – możliwość wyświetlania danych AQI, PM2,5 i PM10 z najbliższej stacji pomiarowej. Plugin Homebridge-airly znajdziecie na GitHubie.
Ten projekt jest możliwy dzięki uprzejmości Botland, który dostarczył następujące elementy umożliwiające jego wykonanie:
- Zestaw Raspberry Pi Zero W Camera Noir Pack – 224,00 PLN
- Adapter OTG microUSB – USB – 9,90 PLN
- Adapter miniHDMI – HDMI – 5,90 PLN
Spis treści
- Instalacja i konfiguracja Raspbian (Wi-Fi, SSH i VNC).
- Instalacja Homebridge i konfiguracja Xiaomi Air Purifier 2.
- Uruchomienie kamery Raspberry Pi NOIR pod HomeKitem.
- Dodajemy pozycję w HomeKit, wyświetlającą jakość powietrza na dworze.
- Dodajemy prognozę pogody do HomeKit dla naszej ulicy.
- Dodajemy sterowanie TV, Apple TV i amplitunerem do HomeKit przez Homebridge i Logitech Harmony.
- Naprawiamy sterowanie TV, Apple TV i amplitunerem przez Homebridge i Logitech Harmony w HomeKit.
- Wywalamy Airly, bo zabili swoje publiczne API.
- Przenosimy Homebridge do nowego Home i rozwiązujemy problemy z HomeKitem.
Cała operacja jest banalnie prosta i zajęła mi jakieś 5 minut, wraz z logowaniem się do RPi. Jako ciekawostkę podpowiem, że mój Zero W już pracuje blisko dwa tygodnie bez żadnego potknięcia. Nie uaktualniałem go w żaden sposób i prawdopodobnie będę to musiał w końcu zrobić, ale tymczasem…
11:51:06 up 13 days, 40 min, 3 users, load average: 0.05, 0.16, 0.16
Przepis
- Logujemy się do Malinki poprzez SSH z Terminala:
ssh pi@192.168.xxx.xxx
. - Instalujemy plugin Homebridge-airly Beniamina Rychtera:
sudo npm install -g homebridge-airly
. - Zakładamy konto na Airly pod tym linkiem i logujemy się do niego. Trzeba będzie aktywować konto – przyjdzie w tej sprawie mail.
- Na koncie Airly znajdziemy API key, które musimy gdzieś sobie zapisać.
- Następnie potrzebujemy znać współrzędne miejsca, które nas interesuje – Airly na ich postawie będzie wyświetlało informacje z najbliższej stacji pomiarowej. Musimy pamiętać, że im dalej się znajdujemy od stacji pomiarowej, tym mniej dokładne będą wyniki i powinny służyć jedynie jako dane orientacyjne. Beniamin poleca skorzystać z serwisu Latitude and Longitude Finder. Wpisujemy tam swój adres i kopiujemy współrzędne w formacie jak ten:
54.111522
i22.930788
. - Na RPi wpisujemy:
cd /var/homebridge
. - Następnie warto zrobić kopię pliku konfiguracyjnego, w razie czego:
cp config.json config.json.bak
. - Teraz edytujemy go za pomocą
nano config.json
lub Waszego ulubionego edytora i dodajemy następujący tekst:"accessories": [{ "accessory": "Air", "apikey": "tutaj_wklejamy_API_key_ma_32_znaki", "latitude": "np_54.111522_ale_podajcie_tutaj_swoje", "longitude": "np_22.930788_ale_podajcie_tutaj_swoje", "name": "Airly Air Quality" }]
Jeśli macie już pozycję
accessories
to oczywiście dodajcie do niej jedynie odpowiednie linie, a nie powielacie całość. - Zapisujemy teraz plik:
^X
,y
iEnter
. - Mój plik
config.json
wygląda po powyższej operacji tak:{ "bridge": { "name": "Homebridge", "username": "XX:XX:XX:XX:XX:XX", "port": 51826, "pin": "031-45-154" }, "description": "HomePi Homebridge.", "accessories": [{ "accessory": "Air", "apikey": "MOJE_API", "latitude": "WSPOLRZEDNE_1", "longitude": "WSPOLRZEDNE_2", "name": "Airly Air Quality" }], "platforms": [{ "platform": "MiAirPurifierPlatform", "deviceCfgs": [{ "type": "MiAirPurifier2", "ip": "ADRES_IP", "token": "TOKEN", "airPurifierDisable": false, "airPurifierName": "MiAirPurifier2", "silentModeSwitchDisable": false, "silentModeSwitchName": "MiAirPurifier2 Silent Mode Switch", "temperatureDisable": false, "temperatureName": "MiAirPurifier2 Temperature", "humidityDisable": false, "humidityName": "MiAirPurifier2 Humidity", "buzzerSwitchDisable": true, "buzzerSwitchName": "MiAirPurifier2 Buzzer Switch", "ledBulbDisable": true, "ledBulbName": "MiAirPurifier2 LED Switch", "airQualityDisable": false, "airQualityName": "MiAirPurifier2 AirQuality" }] }] }
Zmieniłem oczywiście kilka danych, jak API, adres IP czy Token, abyście przypadkiem nie korzystali z moich, bo tam trzeba podać własne wartości.
- Teraz pozostaje zrestartować Homebridge:
sudo systemctl restart homebridge
. - Nowy czujnik powinien pojawić się automatycznie w aplikacji HomeKit.
Tak wygląda on w HomeKit – idealnie nie jest, bo trzeba wejść w detale, aby zobaczyć odpowiednie info, ale mamy wszystko w jednym miejscu.
Komentarze: 26
Jestem ciekaw czy wyjdziesz z Rpi poza HomeKit
W jakim sensie? Ta sztuka jest przeznaczona do Homebridge’a – nie chcę na niej nic innego stawiać.
Nie koniecznie na tej sztuce. Ogólnie czy będzie miał dom usiany malinkami.
Myślę nad tym. 🙃
Ostatnio prawie codziennie dodaję coś do HomeKit :) dziś widzę też
Nie chciałbyś spróbować dodać termostat eQ-3 Bluetooth? Sam próbuje w wtyczką homebridge-eq3ble jednak nie wykrywa termostatu.
Przydatna sprawa to plugin do Netatmo Wheather Station
Tak tylko, że Netatmo nie ma informacji o PM
To wiadomo. Mamy, korzystając z tej wtyczki i plugina do Netatmo sporo pomiarów, mówiących nam o jakości powietrza, i na zewnątrz i w pomieszczeniu.
Oczywiście mam ja zainstalowana :)
Czy do podłączenia każdego urządzenia potrzeba osobnego raspberry pi czy wszystko można podpiąć na jednym?
Zależy co i jak chcesz podłączyć. Ale ogólnie rzecz biorąc można wszystko postawić na jednej malinie 😊
Używając wtyczki https://www.npmjs.com/package/homebridge-airnow i konfigurając ją aby korzystała z danych serwisu Aqicn dostajemy dużo więcej danych – stężenie ozonu, dwutlenku siarki i azotu.
Ale duzo mniej stacji :/
Warto też dodać, że na chwilę obecną wtyczka niepoprawnie oblicza jakość powietrza ponieważ bazuje na indeksie AQI (0-300+), natomiast Airly używa CAQI (0-100). Zgłosiłem to już autorowi.
Dzisiaj pojawi się update.
można sobie samemu grzebnąć:
— index.js-org 2018-02-28 20:30:59.000000000 +0100
+++ index.js 2018-02-28 20:36:09.000000000 +0100
@@ -120,15 +120,15 @@
transformAQI: function (aqi) {
if (!aqi) {
return (0); // Error or unknown response
– } else if (aqi <= 50) {
+ } else if (aqi <= 25) {
return (1); // Return EXCELLENT
– } else if (aqi >= 51 && aqi <= 100) {
+ } else if (aqi >= 26 && aqi <= 50) {
return (2); // Return GOOD
– } else if (aqi >= 101 && aqi <= 150) {
+ } else if (aqi >= 51 && aqi <= 75) {
return (3); // Return FAIR
– } else if (aqi >= 151 && aqi <= 200) {
+ } else if (aqi >= 76 && aqi <= 100) {
return (4); // Return INFERIOR
– } else if (aqi >= 201) {
+ } else if (aqi >= 101) {
return (5); // Return POOR (Homekit only goes to cat 5, so combined the last two AQI cats of Very Unhealty and Hazardous.
} else {
return (0); // Error or unknown response.
coś w tym stylu
“… na dworze” – czyli w Krakowie nie będzie działać ? :)
Właśnie! Poważne pismo a takie błędy. Ile razy mam powtarzać, że “…na polu” ;)
Jo nie wnikom gdzio Wy chodzicio! Czy jakoś tak!
PS. Przyjechała już nowa turboduroduchawka dla mojego gulbulatora!
Jaki adres IP w config.json? Skad token? to to samo co apiKey?
Które IP? Mówisz o adresie Xiaomi? Token i API są opisane w tekście.
Trochę odgrzewam kotleta ale mam problem bo nie łączy mnie z siecią Airly. Pytanie jest takie czy kod API musi przejść przez jakieś serwery by działało ? W debugerze mam tylko komunikat Airly Network or Unknown Error. Wersja pluginu 1.1.6
U mnie to samo. Widziałem maila o czymś związanym z API – muszę poszukać go i co tam było napisane, bo to było z miesiąc temu.
https://developer.airly.eu/docs#general
Zmiana w zapisie – zaraz stestuje.
Dobra, nie mam pomysłu jak to uruchomić – za cienki jestem.