Reklama
HomeKit jest wreszcie na wolności, umożliwiając sterowanie głosem za pośrednictwem Siri dla kilku inteligentnych urządzeń domowych.
Niestety mam na myśli dosłowną garść - wszystko, co już kupiłeś, prawdopodobnie nie jest kompatybilne. Jednak protokół został już poddany inżynierii wstecznej i dostępny jest emulator open source dla interfejsu API HomeKit: lub w zwykły angielski, możesz teraz tworzyć „fałszywe” urządzenia HomeKit, a Siri będzie nimi sterować, tak jak każdy inny oficjalny HomeKit akcesorium.
Dzisiaj stworzymy kontrolowane przez Wi-Fi światło i sterujemy nim za pomocą Siri. Oto demo.
Oto, czego potrzebujesz:
- Raspberry Pi (Użyłem RPi2, istnieje niewielka różnica w wersjach węzłów do zainstalowania, biorąc pod uwagę ulepszoną architekturę ARM - patrz uwagi później).
- Broker MQTT zainstalowany na Raspberry Pi. Zobacz sekcję „Zainstaluj Mosquitto na swoim Pi” w moim Przewodnik OpenHAB część 2 Przewodnik dla początkujących OpenHAB Część 2: ZWave, MQTT, zasady i wykresyOpenHAB, oprogramowanie do automatyzacji domu o otwartym kodzie źródłowym, znacznie przewyższa możliwości innych systemów automatyki domowej na rynku - ale konfiguracja nie jest łatwa. W rzeczywistości może być wręcz frustrujące. Czytaj więcej . Nie musi być instalowany specjalnie na Pi - możesz nawet użyć opartego na chmurze serwera MQTT, ale ponieważ i tak potrzebujemy Pi do tego samouczka, jest to wygodne.
- NodeMCU v2 (kompatybilny z Arduino)
- Neopikselowe diody LED (polecam do testowania 4 piksele, wtedy możesz dodać zewnętrzny zasilacz i dodać tyle, ile chcesz)
Instalowanie mostu HomeKit
Zamierzamy zainstalować aplikację NodeJS o nazwie HAP-NodeJS do Raspberry Pi: utworzy to pomost między żądaniami HomeKit a urządzeniami Wi-Fi. Na razie skonfigurujemy ten most z jednym akcesorium, ale możesz dodać tyle, ile chcesz.
Naprawdę instaluję to na moim istniejącym serwerze domowym z OpenHAB - mam nadzieję, że połączę je ze sobą później, ale na razie wiedz, że mogą współistnieć na tym samym Raspberry Pi. Jeśli robisz to samo, wystarczy walizka, wykonaj kopię zapasową obecnej karty Pi SD Łatwo sklonuj swoją kartę SD, aby bezproblemowo korzystać z Raspberry PiNiezależnie od tego, czy masz jedną kartę SD, czy kilka, potrzebna będzie tylko kopia zapasowa kart, aby uniknąć problemów, które występują, gdy Raspberry Pi nie uruchamia się. Czytaj więcej . Jeśli wszystko pójdzie nie tak, możesz to przywrócić.
Zacznij od pełnej aktualizacji z terminala lub Sesja SSH Konfigurowanie Raspberry Pi do bezgłowego korzystania z SSHRaspberry Pi może akceptować polecenia SSH po podłączeniu do sieci lokalnej (przez Ethernet lub Wi-Fi), umożliwiając łatwą konfigurację. Korzyści płynące z SSH wykraczają poza zakłócanie codziennych badań ... Czytaj więcej .
sudo apt-get update. sudo apt-get upgrade.
Być może będziesz musiał to zrobić dwa razy, jeśli minęło trochę czasu.
Teraz zainstaluj kilka podstawowych pakietów, których będziemy potrzebować:
sudo apt-get install npm git-core libnss-mdns libavahi-kompatybil-libdnssd-dev.
Następnie zainstalujemy najnowszą wersję NodeJS. Możesz mieć ochotę to zrobić apt-get, ale nie - ta wersja jest teraz naprawdę stara i nie będzie działać. Zamiast tego odwiedź nodejs.org, przejdź do download / release / latest-v5.x.0 / i sprawdź link do najnowszej wersji. Szukasz linux-armv7l dla Raspberry Pi 2 lub linuxarmv6l dla oryginalnych modeli RPi. Następnie dostosowując odpowiednio adresy URL i nazwy katalogów, pobierz i zainstaluj za pomocą następujących poleceń.
wget https://nodejs.org/download/release/latest-v5.x.0/node-v5.5.0-linux-armv7l.tar.gz. tar -xvf node-v5.5.0-linux-armv7l.tar.gz. cd node-v5.5.0-linux-armv7l. sudo cp -R * / usr / local.
Potwierdź, pisząc
wersja węzła.
Powinieneś zobaczyć wersję 5.5 (lub cokolwiek najnowszego pobrałeś).
Następnie mamy kilka modułów Node do zainstalowania.
sudo npm install -g npm. sudo npm install -g node-gyp.
W tym pierwszym poleceniu korzystamy z Menedżera pakietów węzłów (npm), aby zainstalować jego nowszą wersję. Sprytny!
Teraz, aby pobrać emulator HomeKit o nazwie HAP-NodeJS:
klon gita https://github.com/KhaosT/HAP-NodeJS.git. cd HAP-NodeJS. odbudowa npm. sudo npm install node-persist. sudo npm install srp.
W tym momencie uruchomiłem błąd: „#error Ta wersja węzła / NAN / v8 wymaga kompilatora C ++ 11“. Jeśli tak się stanie, zainstaluj nowszy kompilator C ++ za pomocą poleceń:
sudo apt-get install gcc-4.8 g ++ - 4.8. sudo update-alternatives --install / usr / bin / gccgcc / usr / bin / gcc-4.6 20. sudo update-alternatives --install / usr / bin / gcc gcc /usr/bin/gcc-4.8 50. sudo update-alternatives --install / usr / bin / g ++ g ++ /usr/bin/g++-4.6 20. sudo update-alternatives --install / usr / bin / g ++ g ++ /usr/bin/g++-4.8 50.
Teraz nie powinieneś mieć problemu. Kontynuuj uruchamianie tych poleceń, jeden po drugim:
sudo npm install srp. sudo npm install mdns --unsafe-perm. debugowanie sudo npm install. sudo npm install ed25519 --unsafe-perm. sudo npm install curve25519 --unsafe-perm.
To powinno być wszystko. Spróbuj uruchomić emulator z:
węzeł Core.js.
Jeśli pojawią się błędy mówiące, że nie można znaleźć takiego i takiego modułu, po prostu użyj instalacja sudo npm ponownie uruchom komendę i podaj nazwę brakującego modułu. Zakładając, że wszystko jest w porządku, powinieneś zobaczyć kilka ostrzeżeń, a Twój most HomeKit będzie działał. Tak wygląda sukces:

Od razu widać, że utworzono już zestaw 6 fałszywych urządzeń. Później wykorzystamy je jako punkt wyjścia do własnego oświetlenia Wi-Fi, ale na razie wykorzystamy je do przetestowania. Możesz również zobaczyć więcej informacji debugowania, jeśli uruchomisz serwer z:
DEBUG = * węzeł Core.js
Teraz przeskocz na urządzenie Apple zdolne do uruchomienia Siri. Firma Apple z ciekawością nie oferuje standardowej aplikacji HomeKit, z wyjątkiem zarejestrowanych programistów, więc pobierz ją bezpłatnie Aplikacja Elgato Eve, aplikacja do zarządzania HomeKit, która umożliwia dodawanie (nawet nie Elgato) urządzeń do sieci HomeKit.
Gdy uruchomisz aplikację po raz pierwszy, musisz nazwać swój dom, przejść dalej i przejść przez to. Następnie wybierz „Dodaj akcesorium”. Zignoruj wiadomość, że jesteś blisko!

Poinformuje Cię, aby poszukać unikalnego „kodu instalacyjnego HomeKit”. Zignoruj to i naciśnij „Dodaj do [nazwa swojego domu]”.
Informuje również, że urządzenie nie ma certyfikatu. Rzeczywiście tak nie jest. Idź naprzód. Gdy pojawi się ekran z prośbą o kod akcesorium…

Wybierz ręcznie wprowadzić kod i wpisz następujące dane:
031-45-154
Można to znaleźć / zmienić w Light_accessory.js plik, ale więcej o tym później. Dodaj to akcesorium do domyślnego pokoju, zadzwoń Fake Lighti przechodź przez okna dialogowe, aby wybrać ikonę itp.
Na koniec wróć do sesji SSH, na której działa HAP-NodeJS. Być może widziałeś już komunikat „Jesteśmy na?” - to odpytywanie aplikacji Elgato o statusie światła. Otwórz Siri i powiedz jej, aby „Włącz fałszywe światło”, a następnie spróbuj ponownie go wyłączyć. Mamy nadzieję, że zobaczysz kilka komunikatów debugowania od HAP-NodeJS, aby pokazać, że otrzymał polecenia.
Jestesmy umówien? i; dogadaliśmy się? Nie. Włączanie światła! Wyłączanie światła!
Fantastycznie, to już pierwszy krok. Teraz potrzebujemy rzeczywistego światła, zanim wrócimy, aby ponownie skonfigurować most.
Budowanie światła Wi-Fi
Strona sprzętowa tego kroku jest zaskakująco prosta, jeśli zaczniemy od zaledwie czterech Neopikseli, ponieważ możemy zasilać je bezpośrednio z płyty programistów NodeMCU i połączenia USB. Jeśli masz dłuższy pasek, nie martw się - zdefiniowaliśmy to w oprogramowaniu, więc reszta po prostu się nie włącza.
Podłącz czerwony kabel zasilający z nici Neopixel do styku VIN, niebieski uziemienie do GND, a zielony kabel sygnałowy do styku oznaczonego D2 na NodeMCU. Uważaj na polaryzację: jeśli pomieszasz ziemię z VIN, wyślesz przypływ mocy przez tablicę i zniszczysz ją.
Jeśli środowisko Arduino nie jest jeszcze skonfigurowane do pracy z ESP8266, postępuj zgodnie z instrukcjami w moim ESP8266: Arduino Killer Poznaj Arduino Killer: ESP8266Co jeśli powiem ci, że jest płyta deweloperska kompatybilna z Arduino z wbudowanym Wi-Fi za mniej niż 10 USD? Cóż, jest. Czytaj więcej przewodnik, a następnie wróć po potwierdzeniu, że działa. Zainstaluj te dodatkowe biblioteki:
- PubSubClient lmroy
- NeoPixels Adafruita
Kod, którego używamy, jest modyfikacją Użytkownik Github, Aditya Tannu - Usunąłem niepotrzebną aktualizację bezprzewodową, dodałem w niektórych brakujących funkcjach HSV i ułatwiłem tworzenie większej ilości świateł, zmieniając tylko jedną zmienną. Jeśli nie widzisz kodu osadzonego poniżej, znajdziesz go pod adresem ten Istota.
Zaktualizuj następujące wiersze, dodając własne informacje o sieci i unikalną nazwę dla każdego tworzonego urządzenia (hosta).
const char * ssid = "..."; const char * hasło = "..."; const char * host = "officelight"; Adres IP MQTTserver (192, 168, 1, 99);
Adres IP tego urządzenia jest automatycznie uzyskiwany przez DHCP - nie ma znaczenia, czy się zmieni, ponieważ za każdym razem łączymy się z tym samym serwerem MQTT.
Na razie używamy tylko 4 neopikseli, ale możesz zwiększyć liczbę później, jeśli zasilisz je ze źródła zewnętrznego. Prześlij kod i przetestuj - użyj swojego ulubionego klienta MQTT do wysyłania poleceń (zmień nazwę hosta w poniższych instrukcjach, jeśli ją zmieniłeś).
- Możesz wysłać na do korzenia światło urzędowe kanał, aby go włączyć. Wyślij dowolną inną wartość do tego kanału, aby go wyłączyć.
- Możesz wysłać numer od 0-360 do światła / odcienia, aby zmienić kolor. Używamy Przestrzeń kolorów HSV, więc 0 i 360 są czerwone, 120 to zielony, a 240 to niebieski.
- Wysyłasz wartość procentową jasności (0-100, nie dołączaj symbolu%).
- To samo dotyczy nasycenia. Wartość 100 będzie w pełni nasycona (tj. Jednolity kolor), a zero będzie czystą bielą, niezależnie od określonego odcienia.
Po potwierdzeniu, że oprawa oświetleniowa napędzana MQTT działa, przejdź dalej.
Konfigurowanie nowego akcesorium HomeKit
Wróć z powrotem do Raspberry Pi i zakończ aplikację HAP-NodeJS, jeśli jeszcze tego nie zrobiłeś. Przejdź do /accessories informator. Aby to ułatwić, możesz bezpośrednio pobrać kod, który został już sparowany z urządzeniem „officelight”, wpisując następujące polecenie:
wget https://gist.githubusercontent.com/jamesabruce/a6607fa9d93e41042fee/raw/12e4fd1d1c2624e7540ba5e17c3e79bc6bdec5fd/Officelight_accessory.js
Zasadniczo jest to duplikat domyślnego lekkiego akcesorium, ze zmienionymi niektórymi nazwami zmiennych (ponownie, dostosowanymi do pracy Adysana, uproszczonymi dla łatwości użycia). Oto, co powinieneś wiedzieć na temat tworzenia własnych niestandardowych akcesoriów na tej podstawie.
- Wszystkie akcesoria muszą mieć nazwę *_accessory.js
- Zmień adres IP w zmiennej opcji u góry na serwer MQTT
- Jeśli masz inną nazwę urządzenia, wyszukaj / zamień wszystkie wystąpienia „światło urzędowe”Z unikalną nazwą urządzenia. Możesz wykonać wyszukiwanie / zamianę w Nano, naciskając CTRL i \, wpisując termin do znalezienia, termin do zastąpienia, a następnie naciśnij ZA (co oznacza wszystkie wystąpienia). Przejrzyj każdą z nich, aby dowiedzieć się dokładnie, które zmienne są aktualizowane.
- Utwórz unikalną szesnastkową nazwę użytkownika dla akcesorium (light.username = „1B: 2B: 3C: 5D: 6E: FF”;)
- Nie zmieniaj kodu PIN. Ma określony format i jeśli nie wiesz, co robisz, nie będzie można go sparować. Nie ma problemu z utrzymaniem ich bez zmian między światłami.
- Możesz nadać swojemu urządzeniu inną nazwę „Siri”, dodając je do aplikacji Elgato Eve i edytować je w dowolnym momencie, aby nie utknąć przy pierwszym wyborze. Nie ma potrzeby edytowania plików konfiguracyjnych ani restartowania serwera.
- Gdy masz już wiele urządzeń, możesz użyć aplikacji Elgato Eve, aby pogrupować je według pokoju lub stworzyć określone sceny składające się z wielu złożonych działań. Sceny mogą składać się z wielu działań, takich jak: włączenie oświetlenia biurowego, przyciemnienie do 25%, zmiana koloru na czerwony i aktywacja ekspresu do kawy.
Musisz ponownie dodać nowe akcesorium do wybranej aplikacji HomeKit.
Wreszcie, chcemy uruchomić naszą aplikację HAP-NodeJS przy każdym ponownym uruchomieniu Pi. Dodaj następujące elementy do swojego etc / rc.local plik, tuż przed wyjście 0.
węzeł sudo /home/pi/HAP-NodeJS/Core.js dev / null &
Widzisz, połączyłem to z kilkoma innymi poleceniami, które już ustawiłem, aby uruchamiały się przy starcie systemu.

Jeśli używasz rc.local po raz pierwszy, może być konieczne ustawienie go jako wykonywalnego:
sudo chmod 755 /etc/rc.local
Jeśli z jakiegoś powodu musisz ponownie uruchomić go w trybie debugowania, możesz zabić działającą aplikację Node za pomocą:
węzeł killall
Ostatni krok: przejdź do katalogu akcesoriów i usuń GarageDoorOpener_accessory.js. W momencie pisania jest to błędne i po pewnym czasie powoduje uszkodzenie serwera.
Co będziesz kontrolować za pomocą Siri?
Teraz, gdy znasz już podstawy, naprawdę nie ma ograniczeń co możesz kontrolować - jeśli możesz to kodować w JavaScript, możesz stworzyć własny plik akcesoriów. Tutaj jest tak duży potencjał, myślę, że będziesz się dobrze bawić. Daj mi znać w komentarzach, co wymyśliłeś!
James ma licencjat z zakresu sztucznej inteligencji i jest certyfikowany przez CompTIA A + i Network +. Jest głównym programistą MakeUseOf i spędza wolny czas grając w paintball VR i gry planszowe. Buduje komputery od dziecka.