Mastodon
Zdjęcie okładkowe wpisu Projekt Raspberry Pi – 6 – Dodajemy sterowanie TV, Apple TV i amplitunerem do HomeKit przez Homebridge i Logitech Harmony

Projekt Raspberry Pi – 6 – Dodajemy sterowanie TV, Apple TV i amplitunerem do HomeKit przez Homebridge i Logitech Harmony

10
Dodane: 5 lat temu

Niedawno Paweł Okopień wrzucił informację o Logitech Harmony współpracującym z Homebridgem. Gdybym wiedział o tym wcześniej, to bym go ubiegł, ale nie wiedziałem, więc nadrabiam zaległości.


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.

Składniki

Poza RPi Zero W, wspomnianym powyżej, potrzebny będzie Logitech Harmony Hub, Logitech Harmony Companion (obecnie w promocji – kupujcie w ciemno!) lub Logitech Harmony Elite. Te są trudno dostępne w Polsce, więc polecam kupno ich na Amazonie – mój dotarł po dwóch dniach.

Konfiguracja Logitech Harmony

Swój Logitech Harmony Companion skonfigurowałem tak, że utworzyłem w nim jedną akcję TV, która:

  1. Włącza telewizor i przełącza go na odpowiednie wejście HDMI (akurat tego nie robi, bo na sztywno mam ustawione wejście HDMI, ale gdybym nie miał, to mógłbym to robić).
  2. Włącza amplituner i przełącza go na wejście TV/CBL, do którego podłączony jest Apple TV.
  3. Włącza Apple TV.

Podpowiem jeszcze, że osobno konfigurowałem pilota, którego dostałem w komplecie. Przyciski Volume Up/Down sterują amplitunerem, a całą resztę skonfigurowałem tak, aby sterować Apple TV, dzięki czemu na ławie mogę mieć tylko jednego pilota.

Po co?

Mam bardzo dobry amplituner, który niestety ma już swoje lata, co powoduje, że CEC w nim działa tylko prawidłowo przy wyłączaniu sprzętów. Sam telewizor ma już 10 lat, ale nadal działa lepiej niż dobrze, więc nie ma sensu jego wymiana. Do tego dochodzi jeszcze Apple TV. No i fakt, że każde z tych urządzeń ma swojego pilota. Finalnie sprowadza się to do następującej sytuacji:

  • włączenie Apple TV włącza Apple TV – TV i amplituner milczą
  • wyłączenie Apple TV wyłącza wszystko automatycznie (CEC)

Jak wiecie, mam HomePoda, za pomocą którego steruję głosowo wybranymi sprzętami. Skoro mogę z nim zintegrować Logitecha Harmony i dzięki temu sterować wszystkim głosowo, to musiałem to zrobić.

Przepis

Mój Raspberry Pi jest skonfigurowany zgodnie ze spisem treści powyżej. Ma integrację Xiaomi Air Purifier 2, kamery Rasperberry Pi NOIR, prognozy pogody i jakości powietrza. Od tamtej pory raz go restartowałem i nic nie zmieniałem – cały czas wszystko działa prawidłowo. Aby dodać do niego Logitecha Harmony, należy zrobić co następuje:

  1. Zalogować się na Raspberry Pi poprzez SSH.
  2. Wpisać komendę npm install homebridge-harmonyhub -g – jeśli zwróci błąd, to proszę skorzystać z komendy w punkcie nr 3.
  3. Wpisać komendę sudo chown -R $USER /usr/local && npm install homebridge-harmonyhub -g jeśli ta z punktu nr 2 zwróciła błąd.
  4. Otworzyć plik /var/homebridge/config.json do edycji.
{
    "bridge": {
        "name": "Homebridge",
        "username": "XX:XX:XX:XX:XX:XX",
        "port": 51826,
        "pin": "031-45-154"
    },
    "description": "HomePi Homebridge.",
    "accessories": [{
            "accessory": "Air",
            "apikey": "KLUCZ",
            "latitude": "xx.xxxxxx",
            "longitude": "yy.yyyyyy",
            "name": "DZIELNICA"
        },
        {
            "accessory": "Air",
            "apikey": "KLUCZ",
            "latitude": "xx.xxxxxx",
            "longitude": "yy.yyyyyy",
            "name": "MIASTO"
        }
    ],
    "platforms": [{
            "platform": "MiAirPurifierPlatform",
            "deviceCfgs": [{
                "type": "MiAirPurifier2",
                "ip": "192.168.xxx.xxx",
                "token": "xxx",
                "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"
            }]
        },
        {
            "platform": "WeatherStation",
            "name": "Pogoda DZIELNICA",
            "key": "xxx",
            "location": "pws:XXXXXXXXX",
            "interval": "4",
            "forecast": "3days"
        }
    ]
}

Powyżej widać konfigurację przed dodaniem Logitecha. Do niej, na końcu, należy dopisać:

},
{
        "platform": "HarmonyHub",
    "name": "Harmony Hub"
}

Finalnie otrzymujemy taką konfigurację:

{
    "bridge": {
        "name": "Homebridge",
        "username": "XX:XX:XX:XX:XX:XX",
        "port": 51826,
        "pin": "031-45-154"
    },
    "description": "HomePi Homebridge.",
    "accessories": [{
            "accessory": "Air",
            "apikey": "KLUCZ",
            "latitude": "xx.xxxxxx",
            "longitude": "yy.yyyyyy",
            "name": "DZIELNICA"
        },
        {
            "accessory": "Air",
            "apikey": "KLUCZ",
            "latitude": "xx.xxxxxx",
            "longitude": "yy.yyyyyy",
            "name": "MIASTO"
        }
    ],
    "platforms": [{
            "platform": "MiAirPurifierPlatform",
            "deviceCfgs": [{
                "type": "MiAirPurifier2",
                "ip": "192.168.xxx.xxx",
                "token": "xxx",
                "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"
            }]
        },
        {
            "platform": "WeatherStation",
            "name": "Pogoda DZIELNICA",
            "key": "xxx",
            "location": "pws:XXXXXXXXX",
            "interval": "4",
            "forecast": "3days"
    },
    {
            "platform": "HarmonyHub",
            "name": "Harmony Hub"
    }
    ]
}

Teraz pozostaje już tylko zrestartować Homebridge’a komendą sudo systemctl restart homebridge.

Jego restart trwa mniej więcej minutę, więc w trakcie restartu możecie na bieżąco powtarzać komendę sudo systemctl status homebridge, aby sprawdzać czy wszystko ładuje się prawidłowo. Na koniec powinno pojawić się coś w stylu:

Nov 26 13:39:17 HomePi homebridge[1846]: [2018-11-26 13:39:17] Homebridge is running on port 51826.
Nov 26 13:39:20 HomePi homebridge[1846]: [2018-11-26 13:39:20] [Harmony Hub] Fetching Logitech Harmony activities...
Nov 26 13:39:22 HomePi homebridge[1846]: [2018-11-26 13:39:22] [Harmony Hub] Found activities:
Nov 26 13:39:22 HomePi homebridge[1846]:         TV
Nov 26 13:39:22 HomePi homebridge[1846]:         PowerOff

Wynik operacji

Wystarczyło teraz uruchomić aplikację Home (pod iOS lub MacOS), a pozycja Living Room TV powinna być natychmiast dostępna.

Nazwa bierze się stąd, że urządzenie jest w pokoju Living Room, a akcja nazywa się TV – Homebridge i HomeKit przejmują tutaj nazwę nadaną podczas konfigurowania Logitech Harmony.

Teraz wystarczy, że powiem „Hey Siri, turn on the TV” albo „Hey Siri, turn on Living Room TV” (lub wiele innych fraz), a wszystkie sprzęty się włączą automatycznie. Można też oczywiście wcisnąć kafelek Living Room TV w aplikacji Home (drugie kliknięcie wyłączy wszystko).



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: 10

Super sprawa :) Ja zamówiłem “nieco” tańszy odpowiednik pilota Logitech. Mowa o BroadLink Mini 3. Ktoś już fajnie opisał dodanie go do Homebridge, by wykonywał automatyzację związaną z uruchamianiem TV i innych akcesoriów RTV. https://stephenradford.me/homekit-ir-blaster-controlling-my-tv-with-homekit/
Dam znać, jak to działa w praktyce.
Mam jeszcze pytanie, wiadomo coś o automatyzacji oczyszczaczy Xiaomi? Posiadam dwie wersje 2S i chciałbym, aby dane wartości PM2.5 wpływały na dalsze działania. Niestety aktualnie aplikacja Eve, ani też jej drogi odpowiednik Home sobie z tym nie radzą. Tylko tego brakuje do pełni szczęścia :)

Ja mam z tym pluginem problem taki, że po jakimś czasie przestaje działać. Po kilku dniach przestaje mi też działać sam pilot harmony. Muszę zrestartować Harmony Hub i wszystko wraca do normy. Wygląda na to, że w Harmony Hub API jest wyciek pamięci (lub inny problem), który ujawnia się przy zbyt intensywnym korzystaniu z tego API. HomeKit bardzo agresywnie używa API urządzeń i odpytuje o ich stan bardzo często. Wygląda na to, że Harmony sobie z tym nie radzi. Rozwiązaniem problemu jest codzienny restart Harmony Huba i aplikacji homebridge. Dzieje się automatycznie w środku nocy :)

Będę obserwował. Jak dokładnie restartujesz sobie RPi? Cron?

Korzystam dobre dwa miesiące i jest spokój wszystko działa. A mam trochę szerszą konfiguracje aktywnosci Harmony

Hej. Mam bramkę xiaomi spięta z homekitem przez raspberry i w apple jest trochę ubogo jeśli chodzi o automatyzację albo czegoś nie umiem zrobić… przed domem mam oświetlenie wzdłuż chodnika które włącza się po zmierzchu – mam czujnik ruchu i jak działałem na domoticzu czujka rozjaśniała mi swiatlo przed domem na określony czas a potem wracała do poprzedniego stanu (nadal włączona ale na 20%)
Czy da się wysterowac coś takiego w HomeKit?

Nie wiem, nie mam czujnika ruchu. Być może dałoby radę inaczej – po wykryciu przez HomeKit że wróciłeś do domu. Dla przykładu, mi automatyzacja wyłącza Xiaomi jak wyjdę z domu i włącza jak wrócę. Sprawdzałem – włączony już jest, jak wjeżdżam do garażu. Pewnie da się też coś zakombinować z czujnikiem ruchu.

Pośrednio działa. Scena włącza oświetlenie na 20%- czujka powoduje rozświetlenie to 50% – można ustawić czas powiedzmy 2min ale po wszystkim homekit wyłącza oświetlenie a nie wraca do poziomu 20%

Mam caly zestaw Aqara – BADZIESTWO jakich malo – znaczy sie od strony software – i NIE DAJCIE SIE WCIAGNAC W KIT o HomeKit!!!!!!

Ten Aqara app to nawet nie beta – to alfa wersja! :/

Fajna zabawa. Sam bawiłem się przez jakiś czas RPi0W, ale dla mnie ma jedną podstawową wadę, która zwie się Linux (w ich wydaniu nawet jeszcze bardziej toporny). Nie jestem w stanie przeskoczyć swojej awersji do tego (pożal się Boże) systemu. Rozważam natomiast zakup Rock64 z Android 7 z przeznaczeniem na typowy BoxTV. A do zabawy mam Arduino i ESP32 ;)