Cum sa faci o lumina Wi-Fi controlata de Siri

Cum sa faci o lumina Wi-Fi controlata de Siri / DIY

HomeKit este în cele din urmă afară în sălbăticie, permițând controlul vocii prin Siri pentru o mână de dispozitive de consum inteligente de acasă.

Din păcate, vreau să spun o mână literală - orice ați cumpărat deja probabil nu este compatibil. Cu toate acestea, protocolul a fost deja inversat și un emulator cu sursă deschisă pentru API-ul HomeKit este disponibil: sau în engleză simplă, puteți crea acum “fals” Dispozitivele HomeKit și Siri le vor controla la fel ca orice alt accesoriu oficial HomeKit.

Astăzi, vom crea o lumină controlabilă Wi-Fi și o vom controla cu Siri. Iată un demo.

Iată ce veți avea nevoie:

  • Raspberry Pi (Am folosit un RPi2, exista o diferenta mica in versiunile Node care se instaleaza avand in vedere arhitectura ARM imbunatatita - vezi notele mai tarziu).
  • Un broker MQTT instalat pe zmeura Pi. Consultați secțiunea “Instalați Mosquitto pe Pi” în ghidul meu OpenHAB Partea 2 Ghidul pentru începători OpenHAB Partea 2: ZWave, MQTT, reguli și cartografiere Ghidul începătorului OpenHAB Partea 2: ZWave, MQTT, reguli și cartografiere OpenHAB, software-ul pentru automatizarea casei open source, depășește cu mult capabilitățile altor sisteme de automatizare a locuinței pe piață - dar nu este ușor să te înființezi. De fapt, poate fi frustrant. Citeste mai mult . Nu trebuie să fie instalat specific pe Pi - puteți folosi chiar un server MQTT bazat pe cloud, dar din moment ce avem nevoie de un Pi pentru acest tutorial oricum, este convenabil.
  • NodeMCU v2 (compatibil cu Arduino)
  • LED-uri Neopixel (aș recomanda 4 pixeli pentru testare, atunci puteți adăuga o sursă externă de alimentare și puteți adăuga cât mai multe doriți)

Instalarea Bridge HomeKit

Vom instala o aplicație NodeJS numită HAP-NodeJS la Raspberry Pi: aceasta va forma o punte între cererile HomeKit și dispozitivele Wi-Fi. Vom configura acest pod cu un accesoriu pentru acum, dar puteți adăuga cât mai multe doriți.

De fapt, instalez acest lucru pe serverul de acasă existent pe care rulează OpenHAB - sper să le conectez la o dată ulterioară, dar pentru moment, știu că pot coexista pe același Raspberry Pi. Dacă faci același lucru, în caz contrar, faceți o copie de rezervă a clonei de pe cardul dvs. Pi actual Clonați cu ușurință cardul SD pentru probleme fără zmeură Pi Computing Clona cu ușurință cardul SD pentru probleme fără zmeură Pi Computing Fie că aveți unul Cardul SD sau mai multe, un lucru de care veți avea nevoie este capacitatea de a crea copii de rezervă pentru a evita problemele care apar atunci când Raspberry Pi nu reușește să boot. Citeste mai mult . Dacă totul merge prost, puteți restabili acest lucru.

Începeți prin a face un upgrade complet de la Terminal sau o sesiune SSH Setarea Raspberry dvs. Pi Pentru utilizare fără cap cu SSH Setarea dvs. de zmeură Pi Pentru utilizare fără cap cu SSH Raspberry Pi poate accepta comenzi SSH atunci când este conectat la o rețea locală (fie prin Ethernet sau Wi-Fi), permițându-vă să configurați cu ușurință. Beneficiile SSH merg dincolo de suprimarea screening-ului zilnic ... Read More .

sudo apt-get actualizare sudo apt-get upgrade 

Poate că trebuie să faceți aceste lucruri de două ori dacă a trecut ceva timp.

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

sudo apt-get instalează npm git-core libnss-mdns libavahi-compat-libdnssd-dev 

Apoi, vom instala cea mai recentă versiune a 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, navigați la descărcare / deblocare / cele mai recente-v5.x.0 / director și verificați ce legătură este pentru cea mai recentă versiune. Te uiti dupa linux-armv7l pentru Zmeura Pi 2 sau linuxarmv6l pentru modelele originale RPi. Apoi, ajustând adresele URL și numele directoarelor după cum este necesar, descărcați și instalați utilizând 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 nodul-v5.5.0-linux-armv7l sudo cp -R * / usr / local 

Confirmați tastând

nod versiune 

Și ar trebui să vedeți v5.5 (sau oricare ar fi ultima versiune pe care ați descărcat-o).

Apoi, avem câteva module de nod pentru a le instala.

sudo npm instalare -g npm sudo npm instalare -g nod-gyp 

În prima comandă, folosim de fapt Node Package Manager (npm) pentru a instala o versiune mai nouă a acesteia. Inteligent!

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

git clone https://github.com/KhaosT/HAP-NodeJS.git cd HAP-NodeJS npm rebuild sudo npm instalare nod-persist sudo npm install srp 

În acest moment, am fugit de 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 instalare 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 / 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 / 4.8 50 

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

sudo npm instalare sud sudo npm instalare mdns --unesafe-perm sudo npm instalare debug sudo npm instalare ed25519 --unsafe-perm sudo npm instalare curve25519 --unsafe-perm 

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

nod Core.js 

Dacă primiți erori spunând că nu găsiți un astfel de modul, utilizați doar sudo npm install comanda din nou și aplicați numele oricărui modul care lipsea. Presupunând că totul este bine, ar trebui să vedeți câteva avertismente, iar podul HomeKit va fi difuzat. Acesta este rezultatul succesului:

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

DEBUG = * nod Core.js

Acum săriți la un dispozitiv Apple capabil să ruleze Siri. Apple curios nu oferă o aplicație HomeKit stoc, cu excepția dezvoltatorilor înregistrați, deci descarcă aplicația gratuită 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.

Prima dată când lansați aplicația va trebui să-ți numiți casa, continuați și treceți prin asta. Apoi selectați “Adăugați accesorii”. Ignorați mesajul de a fi aproape de el!

Vă va spune să căutați un lucru unic “Codul de instalare HomeKit” Următor →. Ignorați asta și loviți-vă “Adăugați la [numele casei dvs.]”.

De asemenea, vă va spune că dispozitivul nu este certificat. Într-adevăr, nu este. Du-te oricum. Când ajungeți la ecran cerând un cod accesoriu ...

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

031-45-154

Acest lucru poate fi găsit / schimbat în Light_accessory.js fișier, dar mai mult despre asta mai târziu. Adăugați acest accesoriu în camera dvs. implicită, sunați-l Lumină falsă, și continuați prin dialoguri 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 spunând “Suntem noi?” - asta e poligonul aplicației Elgato pentru starea luminoasă. Deschide Siri și spune-i “Activați lumina falsă”, apoi încercați să o opriți din nou. Sperăm că veți vedea unele mesaje de depanare de la HAP-NodeJS pentru a arăta că au primit comenzile.

Suntem noi? Nu. Porniți lumina! Opriți lumina!

Fantastic, pasul ăsta a terminat. Acum avem nevoie de o lumină reală, înainte să ne întoarcem să configuram podul din nou.

Construirea unei lumini Wi-Fi

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

Conectați cablul de alimentare roșu de la un fir Neopixel la pinul VIN, la sol albastru până la GND și cablul de semnal verde la pinul marcat D2 de pe NodeMCU. Fii foarte atent la polaritate: dacă amesteci pământul cu VIN, vei trimite un val de putere prin bord și o vei distruge în timpul procesului.

Dacă mediul dvs. Arduino nu este încă setat pentru a lucra cu ESP8266, continuați și urmați ghidul în ESP8266: Arduino Killer Faceți cunoștință cu Killer-ul Arduino: ESP8266 Faceți cunoștință cu Killer-ul Arduino: ESP8266 Ce se întâmplă dacă v-am spus că există un dispozitiv compatibil cu Arduino bord cu built-in Wi-Fi pentru mai puțin de 10 dolari? Ei bine, există. Citiți mai multe ghiduri, apoi reveniți după ce ați confirmat că lucrează. Instalați aceste biblioteci suplimentare:

  • PubSubClient al lui lmroy
  • NeoPixel-urile Adafruit

Codul pe care îl folosim este o modificare a utilizatorului Aditya Tannu - am eliminat funcționalitatea inutilă de actualizare a datelor, adăugată în unele funcții HSV care lipseau și am făcut mai ușor să creez mai multe lumini schimbând doar o singura variabilă. Dacă nu vedeți codul încorporat mai jos, îl veți găsi la acest Gest.

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

const char * ssid = "..."; const char * parola = "..."; const char * gazdă = "officalight"; IPAddress MQTTserver (192, 168, 1, 99);

Adresa IP a acestui dispozitiv 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 mai târziu dacă le activați de o sursă externă. Încărcați codul și să examinăm - să utilizați clientul dvs. preferat MQTT pentru a trimite comenzi (modificați numele gazdei în instrucțiunile de mai jos, dacă l-ați modificat).

  • Puteți trimite pe la rădăcină officelight canal pentru a-l activa. Trimiteți orice altă valoare acelui canal pentru ao dezactiva.
  • Puteți trimite un număr de la 0-360 la dimensiunea oficială / nuanța pentru a schimba culoarea. Folosim spațiul de culoare HSV, deci 0 și 360 sunt roșii, 120 sunt verzi și 240 albastre.
  • Trimiteți o valoare procentuală pentru luminozitate (0-100, nu includeți simbolul%).
  • Același lucru pentru saturație. O valoare de 100 va fi complet saturată (adică o culoare solidă) și zero va fi alb pur, indiferent de Hue specificat.

Odată ce ați confirmat că dispozitivul dvs. de iluminare cu comandă MQTT funcționează, treceți mai departe.

Configurarea unui nou accesoriu HomeKit

Întoarceți-vă la Raspberry Pi și închideți aplicația HAP-NodeJS dacă nu ați făcut-o deja. Navigați la /accesorii director. Pentru a face acest lucru ușor, puteți descărca direct codul care a fost deja asociat cu “officelight” fixâ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 modificarea anumitor nume de variabile (din nou, adaptate din lucrarea Adysan, simplificate pentru ușurința utilizării). Iată ce ar trebui să știți pentru a vă crea propriile accesorii personalizate pe baza acestui aspect.

  • Toate accesoriile trebuie să fie numite *_accessory.js
  • Modificați adresa IP în variabila de opțiuni din partea de sus a serverului dvs. MQTT
  • Dacă aveți un alt nume de dispozitiv, căutați / înlocuiți toate instanțele “officelight” cu numele dvs. unic de fixare. Puteți face o căutare / înlocuire în Nano apăsând CTRL și \, tastând termenul pentru a găsi, termenul de înlocuire, apoi lovit A (adică toate instanțele). Treceți prin fiecare dintre acestea pentru a afla exact care variabile sunt actualizate.
  • Creați un nume de utilizator hexazecimal unic pentru accesoriu (light.username = “1B: 2B: 3C: 5D: 6E: FF”;)
  • Nu modificați codul PIN. Urmează un format specific și, dacă nu știți ce faceți, nu se va putea împerechea. Nu există nici o problemă în menținerea lor la fel între lumini.
  • Îți poți da un alt dispozitiv “Numele Siri” când le adăugați la aplicația Elgato Eve și le modificați oricând, astfel încât să nu rămâneți blocați în alegerea inițială. Nu este nevoie să editați fișierele de configurare sau să reporniți serverul.
  • Odată ce aveți mai multe programe, puteți utiliza aplicația Elgato Eve pentru a le grupa după cameră sau pentru a crea scene specifice care constau în mai multe acțiuni complexe. Scenele pot consta în mai multe acțiuni, cum ar fi: activați lumina de birou, diminuați-o la 25%, rotiți-o și activați mașina de cafea.

Va trebui să adăugați din nou noul accesoriu prin intermediul aplicației dvs. HomeKit.

În cele din urmă, vrem să executăm aplicația noastră HAP-NodeJS ori de câte ori Pi este repornit. Adăugați următoarele la dvs. etc / rc.local fișier, chiar înainte de ieșire 0.

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

Puteți vedea că am combinat acest lucru cu alte comenzi pe care deja am setat să le pornesc de la boot.

Dacă aceasta 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 rulați din nou în modul de depanare, puteți ucide aplicația Nod care rulează cu:

Killall nod

Un ultim pas: navigați la directorul de accesorii și ștergeți GarageDoorOpener_accessory.js. La momentul scrisului, acesta este buggy și va provoca ruperea serverului după un timp.

Ce veți controla cu Siri?

Acum, că ați primit elementele de bază, nu există nicio limită pentru ceea ce puteți controla - dacă îl puteți codifica în Javascript, puteți să vă creați propriul fișier de acces. Există atât de mult potențial aici, cred că veți fi foarte distractiv. Dați-mi voie să știu în comentariile cu care veniți!

Explorați mai multe despre: Siri, Smart Lighting.