Publicitate

HomeKit este în sfârșit în sălbăticie, permițând controlul vocal prin Siri pentru o mână de dispozitive inteligente pentru consumatori.

Din păcate, mă refer la o mână literală - ceea ce ați cumpărat deja probabil nu este compatibil. Cu toate acestea, protocolul a fost deja proiectat invers și este disponibil un emulator open source pentru API-ul HomeKit: sau în simplu engleză, acum puteți crea dispozitive HomeKit „false”, iar Siri le va controla la fel ca oricare alt oficial HomeKit accesorii.

Astăzi, vom crea o lumină controlabilă Wi-Fi și o vom controla cu Siri. Iată o demonstrație.

Iată ce aveți nevoie:

  • Zmeura Pi (Am folosit un RPi2, există o mică diferență în versiunile Node de instalat având în vedere arhitectura ARM actualizată - vezi notele mai târziu).
  • Un broker MQTT instalat pe Raspberry Pi. Consultați secțiunea „Instalați Mosquitto pe Pi” dvs. în versiunea mea Ghid OpenHAB partea a 2-a Ghid pentru începători OpenHAB Partea 2: ZWave, MQTT, Reguli și GraficeOpenHAB, software-ul de automatizare casă open source, depășește cu mult capacitățile celorlalte sisteme de automatizare casnică de pe piață - dar nu este ușor de configurat. De fapt, poate fi absolut frustrant.
    instagram viewer
    Citeste mai mult
    . Nu este necesar să fie instalat special pe Pi - puteți folosi chiar și un server MQTT bazat pe cloud, dar, oricum avem nevoie de un Pi pentru acest tutorial, este convenabil.
  • NodeMCU v2 (compatibil Arduino)
  • LED-uri Neopixel (aș recomanda 4 pixeli pentru testare, apoi puteți adăuga o sursă de alimentare externă și adăugați câte doriți)

Instalarea podului HomeKit

Vom instala o aplicație NodeJS numită NodeJS-HAP până la Raspberry Pi: aceasta va forma o punte de legătură între solicitările HomeKit și dispozitivele Wi-Fi. Vom configura acest pod cu un singur accesoriu deocamdată, dar puteți adăuga câte doriți.

Instalez de fapt acest lucru pe serverul meu de acasă existent care rulează OpenHAB - sper să le conectez pe cele două la un moment dat data ulterioară, dar deocamdată, știu că pot coexista pe același Raspberry Pi. Dacă procedați la fel, doar în caz, creează o copie de rezervă clonă a cardului tău Pi actual Clonați cu ușurință cardul dvs. SD pentru calculatoare cu zmeură Pi fără problemeIndiferent dacă aveți un card SD sau mai multe, un lucru de care veți avea nevoie este capacitatea de a face copii de rezervă pentru a evita problemele care apar atunci când Raspberry Pi nu reușește să pornească. Citeste mai mult . Dacă totul nu merge bine, puteți reveni la asta.

Începeți să faceți o actualizare completă de la Terminal sau un an Sesiune SSH Configurarea zmeurului Pi pentru utilizare fără cap cu SSHRaspberry Pi poate accepta comenzi SSH atunci când este conectat la o rețea locală (fie prin Ethernet, fie prin Wi-Fi), permițându-vă să o configurați cu ușurință. Avantajele SSH depășesc ecranizarea zilnică ... Citeste mai mult .

Actualizare sudo apt-get. upgrade sudo apt-get. 

Este posibil să fie nevoie să le faci de două ori dacă a trecut ceva timp.

Acum instalați câteva pachete de bază de care vom avea nevoie:

sudo apt-get install npm git-core libnss-mdns libavahi-compat-libdnssd-dev. 

În continuare, vom instala cea mai recentă versiune de NodeJS. S-ar putea să fiți tentat să faceți asta apt-get, dar nu - această versiune este cu adevărat veche acum și nu va funcționa. În schimb, vizitați nodejs.org, căutați în descărcare / deblocare / cele mai recente-v5.x.0 / director și verificați care este linkul pentru cea mai recentă versiune. Te uiti dupa linux-armv7l pentru Raspberry Pi 2 sau linuxarmv6l pentru modelele RPi originale. Apoi, reglând adresele URL și numele directoarelor după cum este necesar, descărcați și instalați folosind următoarele comenzi.

wget https://nodejs.org/download/release/latest-v5.x.0/node-v5.5.0-linux-armv7l.tar.gz. tar -xvf nod-v5.5.0-linux-armv7l.tar.gz. cd nod-v5.5.0-linux-armv7l. sudo cp -R * / usr / local. 

Confirmați tastând

versiunea nodului. 

Și ar trebui să vedeți v5.5 (sau orice a fost cel mai recent pe care l-ați descărcat).

În continuare, avem câteva module Node de instalat.

sudo npm instalare -g npm. sudo npm install -g nod-gyp. 

În acea primă comandă, folosim efectiv Node Package Manager (npm) pentru a instala o versiune mai nouă. Inteligent!

Acum, pentru a descărca emulatorul HomeKit numit NodeJS-HAP:

clonă de git https://github.com/KhaosT/HAP-NodeJS.git. cd HAP-NodeJS. npm reconstruire. sudo npm install nod-persist. sudo npm instala srp. 

În acest moment, am apărut această eroare: „#error Această versiune a nodului / NAN / v8 necesită un compilator C ++ 11“. Dacă vi se întâmplă acest lucru, instalați un compilator C ++ mai recent cu comenzile:

sudo apt-get install gcc-4.8 g ++ - 4.8. sudo update-alternatives - instalare / 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 actualizare-alternative - instalare / usr / bin / g ++ g ++ /usr/bin/g++-4.8 50. 

Acum nu ar trebui să aveți nicio problemă. Continuați să executați aceste comenzi, una câte una:

sudo npm instala srp. sudo npm install mdns --unsafe-perm. sudo npm instala debug. sudo npm install ed25519 --unsafe-perm. sudo npm install curve25519 --unsafe-perm. 

Asta ar trebui să fie totul. Încercați să rulați emulatorul cu:

nod Core.js. 

Dacă primiți erori care spun că nu poate găsi un astfel de modul și un astfel de modul, utilizați doar instalare sudo npm comandați din nou și aplicați orice modul lipsește. Presupunând că totul este bine, ar trebui să vedeți câteva avertismente, iar podul dvs. HomeKit va funcționa. Așa arată succesul:

instalat hap-nodejs

Puteți vedea imediat că a creat deja un set de 6 dispozitive false. Ulterior, le vom folosi ca punct de plecare pentru propria noastră lumină Wi-Fi, dar le vom folosi doar pentru testare. De asemenea, puteți vedea mai multe informații de depanare dacă porniți serverul cu:

DEBUG = * nod Core.js

Acum săriți pe un dispozitiv Apple capabil să ruleze Siri. Apple, în mod curios, nu oferă o aplicație de stocare HomeKit decât pentru dezvoltatorii înregistrați, așa că descărcați gratuit Aplicația Elgato Eve, o aplicație de administrare HomeKit care vă permite să adăugați (chiar și non-Elgato) dispozitive în rețeaua dvs. HomeKit.

Pentru prima dată când lansați aplicația, va trebui să vă denumiți casa, mergeți mai departe și parcurgeți asta. Apoi selectați „Adaugă accesoriu”. Ignorați mesajul despre a fi aproape de el!

elgato ajun 1

Îți va spune să cauți un „Cod de configurare HomeKit” unic în continuare. Ignorați acest lucru și apăsați pe „Adăugați la [numele casei dvs.]”.

Îți va spune, de asemenea, că dispozitivul nu este certificat. Într-adevăr, nu este. Oricum, mergeți înainte. Când ajungeți pe ecran, cerând un cod accesoriu ...

elgato ajun 2

Alegeți să introduceți codul manual și introduceți următoarele:

031-45-154

Acest lucru poate fi găsit / modificat în Light_accessory.js fișier, dar mai multe despre asta mai târziu. Adăugați acest accesoriu în camera dvs. implicită, sunați-l Fake Lightși continuați să parcurgeți dialogurile pentru a alege pictograma etc.

În cele din urmă, săriți înapoi la sesiunea SSH unde aveți HAP-NodeJS rulat. S-ar putea să fi văzut deja un mesaj care să spună „Suntem pornite?” - acesta este sondajul pentru aplicația Elgato pentru starea luminii. Deschide Siri și spune-i „Porniți lumina falsă”, apoi încercați să o stingeți din nou. Sperăm că veți vedea câteva mesaje de depanare de la HAP-NodeJS pentru a arăta că a primit comenzile.

Suntem în continuare? Nu. Porniți lumina! Oprirea luminii!

Fantastic, este primul pas terminat. Acum vom avea nevoie de o lumină reală, înainte de a reveni pentru a configura din nou podul.

Construirea unei lumini Wi-Fi

Partea hardware a acestui pas este surprinzător de simplă dacă începem doar cu patru Neopixeli, deoarece le putem alimenta direct de pe placa dev NodeMCU și conexiunea USB. Dacă aveți o bandă mai lungă, nu vă faceți griji - am definit acest lucru în software, astfel încât restul nu se va activa.

Conectați cablul de alimentare roșu de la un fir Neopixel la pinul VIN, sol albastru la GND și cablul verde de semnal la pinul marcat D2 de pe NodeMCU. Fiți foarte atenți la polaritate: dacă amestecați pământul și VIN, veți trimite o tensiune de putere prin placa dvs. și o veți distruge în acest proces.

Dacă mediul dvs. Arduino nu este încă configurat să funcționeze cu ESP8266, mergeți mai departe și urmați ghidul din versiunea mea ESP8266: Arduino Killer Faceți cunoștință cu Arduino Killer: ESP8266Ce se întâmplă dacă v-aș spune că există o placă dev-compatibilă cu Arduino cu Wi-Fi încorporat pentru mai puțin de 10 USD? Ei bine, există. Citeste mai mult ghidul apoi revine după ce ai confirmat că funcționează. Instalați aceste biblioteci suplimentare:

  • lmroy’s PubSubClient
  • NeoPixelii Adafruit

Codul pe care îl utilizăm este o modificare Utilizatorul Github Aditya Tannu - Am eliminat funcționalitatea inutilă de actualizare în aer, am adăugat unele funcții HSV care lipseau și am făcut mai ușor să creăm mai multe lumini doar schimbând o singură variabilă. Dacă nu puteți vedea codul încorporat mai jos, îl veți găsi la acest Gist.

Actualizați următoarele linii cu propriile informații de rețea și un nume unic pentru fiecare echipament pe care îl creați (gazdă).

const char * ssid = "..."; const char * parola = "..."; const char * host = "officelight"; IPAddress MQTTverver (192, 168, 1, 99);

Adresa IP a acestui aparat este obținută automat prin DHCP - nu contează dacă se schimbă, deoarece ne conectăm la același server MQTT de fiecare dată.

Deocamdată folosim doar 4 Neopixeli, dar puteți crește numărul ulterior dacă le alimentați de la o sursă externă. Încărcați codul și lăsați testul - utilizați clientul MQTT preferat pentru a trimite comenzi (ajustați numele gazdei în instrucțiunile următoare, dacă l-ați schimbat).

  • Puteți trimite pe la rădăcină officelight canal pentru a-l porni. Trimiteți orice altă valoare acelui canal pentru a-l opri.
  • Puteți trimite un număr de la 0-360 la officelight / nuanță pentru a schimba culoarea. Folosim Spațiu color HSV, deci 0 și 360 sunt roșii, 120 sunt verzi, iar 240 sunt albastre.
  • Trimiteți o valoare procentuală pentru luminozitate (0-100, nu includeți simbolul%).
  • La fel și pentru saturație. O valoare de 100 va fi complet saturată (adică o culoare solidă), iar zero va fi alb pur, indiferent de nuanța specificată.

După ce ați confirmat corpul de iluminat MQTT funcționează, continuați.

Configurarea unui nou accesoriu HomeKit

Întoarceți-vă la Raspberry Pi și încheiați aplicația HAP-NodeJS dacă nu ați făcut-o deja. Navigați la /accessories director. Pentru a face acest lucru ușor, puteți descărca direct codul care a fost deja asociat cu aparatul „officelight”, introducând următoarele:

wget https://gist.githubusercontent.com/jamesabruce/a6607fa9d93e41042fee/raw/12e4fd1d1c2624e7540ba5e17c3e79bc6bdec5fd/Officelight_accessory.js

În esență, acesta este un duplicat al accesoriului luminos implicit, cu unele nume de variabile schimbate (din nou, adaptate din munca Adysan, simplificate pentru ușurința de utilizare). Iată ce ar trebui să știți pentru crearea propriilor dvs. accesorii personalizate pe baza acestui lucru.

  • Toate accesoriile trebuie numite *_accessory.js
  • Modificați adresa IP din variabila de opțiuni din partea de sus la serverul dvs. MQTT
  • Dacă aveți un nume diferit, puteți căuta / înlocui toate instanțele din „officelight”Cu numele tău unic. Puteți efectua o căutare / înlocuire în Nano apăsând CTRL și \, tastând termenul pentru a găsi, termenul pentru a înlocui, apoi apăsați A (adică toate instanțele). Parcurgeți fiecare dintre acestea pentru a afla exact ce variabile sunt actualizate.
  • Creați un nume de utilizator hexadecimal unic pentru accesoriu (light.username = "1B: 2B: 3C: 5D: 6E: FF";)
  • Nu schimbați codul PIN. Urmează un format specific și, dacă nu știți ce faceți, nu va putea să se asocieze. Nu este nicio problemă să le păstrați la fel între lumini.
  • Puteți da accesoriului dvs. un alt „nume Siri” atunci când le adăugați în aplicația Elgato Eve și le puteți edita oricând, astfel încât să nu rămâneți blocați cu alegerea inițială. Nu este nevoie să editați fișierele de configurare sau să reporniți serverul.
  • După ce aveți mai multe accesorii, puteți utiliza aplicația Elgato Eve pentru a le grupa pe camere sau pentru a crea scene specifice constând în mai multe acțiuni complexe. Scenele pot consta în mai multe acțiuni, cum ar fi: aprindeți lumina de birou, întunecați la 25%, faceți-o roșie și activați mașina de cafea.

Va trebui să adăugați din nou accesoriul dvs. prin intermediul aplicației HomeKit la alegere.

În cele din urmă, vrem să rulăm aplicația noastră HAP-NodeJS ori de câte ori Pi-ul este repornit. Adăugați următoarele pentru dvs. etc / rc.local dosar, chiar înainte de iesirea 0.

nod sudo /home/pi/HAP-NodeJS/Core.js  dev / null &

Puteți vedea că am combinat acest lucru cu alte comenzi pe care le-am setat deja să pornească la pornire.

nodul de rulare rclocal la pornire

Dacă este prima dată când utilizați rc.local, poate fi necesar să îl setați ca executabil:

sudo chmod 755 /etc/rc.local

Dacă din anumite motive trebuie să-l executați din nou în modul de depanare, puteți ucide aplicația Nod care rulează cu:

nodul killall

Un ultim pas: navigați în directorul accesoriilor și ștergeți GarageDoorOpener_accessory.js. În momentul scrierii, acest lucru este buggy și va face ca serverul să se spargă după un timp.

Ce veți controla cu Siri?

După ce ați descris elementele de bază, nu există nicio limită la ceea ce puteți controla - dacă îl puteți codifica în Javascript, puteți crea propriul dvs. fișier accesoriu. Există atât de mult potențial aici, cred că te vei distra foarte mult. Lasă-mă să știu în comentarii cu ce ai venit!

James are licență în inteligență artificială și este certificat CompTIA A + și Network +. Este dezvoltatorul principal al MakeUseOf și își petrece timpul liber jucând VR paintball și boardgames. Construiește calculatoare de când era mic.