Jak zrobić DIY Wi-Fi kontrolowane Siri

  • Michael Cain
  • 0
  • 4855
  • 1077
Reklama

HomeKit jest wreszcie na wolności, umożliwiając sterowanie głosem za pomocą Siri w przypadku 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 języku angielskim można teraz utworzyć “imitacja” Urządzenia HomeKit, a Siri będzie nimi sterować tak jak każde inne oficjalne akcesorium HomeKit.

Dziś stworzymy kontrolowane przez Wi-Fi światło i sterujemy nim za pomocą Siri. Oto demo.

Oto, czego będziesz potrzebować:

  • Raspberry Pi (użyłem RPi2, istnieje niewielka różnica w wersjach Node 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 Przewodniku OpenHAB część 2 Przewodnik dla początkujących OpenHAB Część 2: ZWave, MQTT, zasady i wykresy Przewodnik dla początkujących OpenHAB Część 2: ZWave, MQTT, zasady i wykresy OpenHAB, oprogramowanie do automatyzacji domu typu open source, 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. . 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 (do testowania zalecam 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 na 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ę połączyć je później, ale na razie wiem, że mogą one współistnieć na tym samym Raspberry Pi. Jeśli robisz to samo, na wszelki wypadek zrób kopię zapasową bieżącej karty SD Pi. Łatwo sklonuj kartę SD, aby uzyskać bezproblemowe przetwarzanie Raspberry Pi. Łatwo sklonuj kartę SD, aby zapewnić bezproblemowe przetwarzanie Raspberry Pi bez względu na to, czy ją masz. Karta SD lub kilka, jedna rzecz będzie potrzebna do tworzenia kopii zapasowych kart, aby uniknąć problemów, które występują, gdy Raspberry Pi nie uruchamia się. . Jeśli wszystko pójdzie nie tak, możesz to przywrócić.

Rozpocznij od pełnej aktualizacji terminala lub sesji SSH Konfigurowanie Raspberry Pi do bezgłowego korzystania z SSH Konfigurowanie Raspberry Pi do bezgłowego korzystania z SSH Raspberry Pi może akceptować polecenia SSH po podłączeniu do sieci lokalnej (albo przez Ethernet lub Wi-Fi), umożliwiając łatwą konfigurację. Korzyści płynące z SSH wykraczają poza zakłócanie codziennych badań… .

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óre będą nam potrzebne:

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ź, jaki jest 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 git https://github.com/KhaosT/HAP-NodeJS.git cd HAP-NodeJS npm odbuduj sudo npm zainstaluj węzeł-keep sudo npm install srp 

W tym momencie uruchomiłem ten 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 sudo npm debugowanie instalacji sudo npm instalacja ed25519 --unsafe-perm sudo npm instalacja 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 naszego własnego światła 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, na którym można uruchomić Siri. Apple z ciekawością nie oferuje standardowej aplikacji HomeKit, z wyjątkiem zarejestrowanych programistów, więc pobierz bezpłatną aplikację Elgato Eve, aplikację do zarządzania HomeKit, która umożliwia dodawanie (nawet nie Elgato) urządzeń do sieci HomeKit.

Przy pierwszym uruchomieniu aplikacji musisz nazwać swój dom, przejść dalej i przejść przez to. Następnie wybierz “Dodaj akcesorium”. Zignoruj ​​wiadomość o byciu blisko niego!

Powie ci, abyś poszukał unikalnego “Kod instalacyjny HomeKit” Kolejny. Zignoruj ​​to i naciśnij “Dodaj do [nazwa 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 Light, i 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ż wiadomość “Jestesmy umówien? i; dogadaliśmy się?” - to odpytywanie aplikacji Elgato o statusie światła. Otwórz Siri i każ jej to zrobić “Włącz fałszywe światło”, następnie spróbuj go ponownie wyłączyć. Mamy nadzieję, że zobaczysz kilka komunikatów debugowania z 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ę i VIN, wyślesz przypływ mocy przez swoją tablicę i zniszczysz ją podczas procesu.

Jeśli twoje środowisko Arduino nie jest jeszcze skonfigurowane do pracy z ESP8266, śmiało i postępuj zgodnie ze wskazówkami w moim ESP8266: Arduino Killer Poznaj Arduino Killer: ESP8266 Poznaj Arduino Killer: ESP8266 Co jeśli powiem ci, że jest program kompatybilny z Arduino wyżywienie z wbudowanym Wi-Fi za mniej niż 10 USD? Cóż, jest. przewodnik, a następnie wróć, gdy potwierdzisz, że to działa. Zainstaluj te dodatkowe biblioteki:

  • lmroy's PubSubClient
  • Adafruit's NeoPixels

Używany przez nas kod jest modyfikacją użytkownika Github, Adityi Tannu - usunąłem niepotrzebną aktualizację bezprzewodową, dodałem niektóre brakujące funkcje HSV i ułatwiłem tworzenie większej ilości świateł, zmieniając tylko jedna zmienna. Jeśli nie widzisz kodu osadzonego poniżej, znajdziesz go w tej Gist.

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 przetestujmy - 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 przestrzeni kolorów HSV, więc 0 i 360 to kolor czerwony, 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 upewnieniu się, ż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 /Akcesoria informator. Aby to ułatwić, możesz bezpośrednio pobrać kod, który został już sparowany z “światło urzędowe” urządzenie, 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, z kilkoma zmienionymi 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). Przejdź przez 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 inny charakter “Imię Siri” dodając je do aplikacji Elgato Eve i edytuj je w dowolnym momencie, aby nie utknąć w swoim pierwotnym 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 akcji. 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 rozruchu.

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 spowoduje uszkodzenie serwera.

Co będziesz kontrolować dzięki 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ś!




Jeszcze bez komentarzy

O nowoczesnej technologii, prostej i niedrogiej.
Twój przewodnik w świecie nowoczesnych technologii. Dowiedz się, jak korzystać z technologii i gadżetów, które nas otaczają każdego dnia i dowiedz się, jak odkrywać ciekawe rzeczy w Internecie.