Mastodon
Zdjęcie okładkowe wpisu Projekt Raspberry Pi – 4 – Dodajemy pozycję w HomeKit, wyświetlającą jakość powietrza na dworze

Projekt Raspberry Pi – 4 – Dodajemy pozycję w HomeKit, wyświetlającą jakość powietrza na dworze

26
Dodane: 6 lat temu

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:


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.
  6. Dodajemy sterowanie TV, Apple TV i amplitunerem do HomeKit przez Homebridge i Logitech Harmony.
  7. Naprawiamy sterowanie TV, Apple TV i amplitunerem przez Homebridge i Logitech Harmony w HomeKit.
  8. Wywalamy Airly, bo zabili swoje publiczne API.
  9. 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

  1. Logujemy się do Malinki poprzez SSH z Terminala: ssh pi@192.168.xxx.xxx.
  2. Instalujemy plugin Homebridge-airly Beniamina Rychtera: sudo npm install -g homebridge-airly.
  3. Zakładamy konto na Airly pod tym linkiem i logujemy się do niego. Trzeba będzie aktywować konto – przyjdzie w tej sprawie mail.
  4. Na koncie Airly znajdziemy API key, które musimy gdzieś sobie zapisać.
  5. 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.11152222.930788.
  6. Na RPi wpisujemy: cd /var/homebridge.
  7. Następnie warto zrobić kopię pliku konfiguracyjnego, w razie czego: cp config.json config.json.bak.
  8. 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ść.

  9. Zapisujemy teraz plik: ^X, yEnter.
  10. 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.

  11. Teraz pozostaje zrestartować Homebridge: sudo systemctl restart homebridge.
  12. 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.



Wojtek Pietrusiewicz

Wydawca, fotograf, podróżnik, podcaster – niekoniecznie w tej kolejności. Lubię espresso, mechaniczne zegarki, mechaniczne klawiatury i zwinne samochody.

Zapraszamy do dalszej dyskusji na Mastodonie lub Twitterze .

Komentarze: 26

Nie koniecznie na tej sztuce. Ogólnie czy będzie miał dom usiany malinkami.

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.

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.

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

Właśnie! Poważne pismo a takie błędy. Ile razy mam powtarzać, że “…na polu” ;)

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.

Dobra, nie mam pomysłu jak to uruchomić – za cienki jestem.