Publicitate
Gama de lumini Philips Hue nu este cu siguranță ieftină (există câteva alternative Philips Hue alternative care sunt în valoare de faptSistemul Philips Hue conduce taxa în ceea ce privește iluminarea inteligentă, dar există câteva alternative demne. Am ales trei care toate oferă același set de caracteristici de bază și hackabilitate. Citeste mai mult ), dar un lucru pe care îl apreciez cu adevărat este cel bine documentat API-ul Ce sunt API-urile și cum se schimbă API-urile deschise pe InternetV-ați întrebat vreodată cum programele de pe computerul dvs. și site-urile pe care le vizitați „vorbesc” între ele? Citeste mai mult pentru crearea propriilor dvs. aplicații Hue. Astăzi vă voi arăta cum să controlați luminile Hue de la un Arduino - adăugând apoi un senzor de mișcare simplu.
De ce facem asta? Deoarece sistemele de automatizare la domiciliu pot fi destul de rigide și costisitoare. Învățând cum să controlați Hue de la Arduino, deschideți ușile către o varietate de proiecte de automatizare casnică, care pur și simplu nu pot fi bătute de componente din afara raftului. Dacă hacking lucrurile împreună nu este lucrul tău, încercați acestea
8 aplicații fabuloase Hue Cele mai bune 7 aplicații Philips Hue pentru Android și iPhoneCăutați cele mai bune aplicații Philips Hue pe care să le utilizați cu luminile inteligente? Iată câteva aplicații grozave pentru iPhone și Android. Citeste mai mult in schimb.Sistemul Hue
Vom obține un pic tehnic, astfel încât să știți sistemele de bază cu care lucrați. Hue lumini creează un rețea de plasă Rețele de plasă: Viitorul comunicăriiRețelele de plasă sunt aproape invulnerabile. Într-o rețea de plasă, nu există puncte de sufocare prin care trece tot traficul. În schimb, informațiile sunt transmise de la un dispozitiv la altul până când ajung la destinație. Citeste mai mult , folosind un protocol wireless de rază scurtă numit ZigBee - mai exact, acestea sunt ZigBee Light Link certificat, ceea ce înseamnă că și alte produse ZLL ar trebui să funcționeze alături de Hue (în teorie).
Deși o rază scurtă de acțiune din punct de vedere tehnic, funcția de rețea a rețelei ZigBee înseamnă că fiecare bec nou extinde rețeaua, transmitând mesaje către alte becuri. Aceasta înseamnă că, dacă aveți probleme cu controlul unei luminițe în cealaltă parte a casei, încercați să puneți o altă lumină între cele două.
Zigbee este un protocol minunat, dar este cu totul diferit de Wi-Fi sau de o rețea de calculatoare cu fir, așa că avem nevoie de Philips Hue Bridge pentru a le uni pe cele două. Podul Hue rulează un firmware linux open-source modificat, care transmite un server web de bază.
Interacționând cu acest server web local, puteți afla starea actuală a luminilor și le puteți controla.
Este un sistem destul de simplu și este potrivit pentru proiecte de bricolaj. Kudos lui Philips pentru că a făcut acest lucru atât de hackabil.
Început
Înainte de a putea accesa documentația API, va trebui să o faceți înregistrați-vă ca dezvoltator. Este gratuit, dar trebuie să acceptați termenii și condițiile. Faceți acest lucru acum.
Oricine este familiarizat cu serviciile web standard sau Javascript ar trebui să poată lucra cu Hue: toate datele sunt transmise și primite ca atare Pachete JSON Ce este JSON? Prezentare generală a unui LaymanIndiferent dacă intenționați să fiți un dezvoltator web sau nu, este o idee bună să știți cel puțin ce este JSON, de ce este important și de ce este utilizat în toată lumea. Citeste mai mult .
Pentru a analiza acest lucru în acțiune, va trebui să cunoașteți adresa IP a podului dvs. Hue. Există câteva modalități de a face acest lucru:
- Uitați-vă la tabelul de atribuire a adreselor DHCP din interfața de administrare a routerului
- Executați un program de mapare a rețelei ca IP Scanner Acasă
- Incearca Instrumentul de broker Philips UPnP
- Ping „philips-hue.home”
După ce ați terminat, mergeți mai departe și introduceți-l în bara de adrese a browserului depanare / clip.html anexat la adresa URL. În cazul meu, acesta a fost:
http://192.168.1.216/debug/clip.html
Acesta este un instrument de depanare care vă permite să trimiteți și să primiți pachetele JSON printr-o simplă interfață web. Primul pas este de a activa profilul dezvoltatorului pe Hue Bridge în sine - care este dezactivat implicit din motive de securitate. Inserați următoarele în câmpul BODY, lăsați URL-ul ca /api/și trimiteți o solicitare POST făcând clic pe butonul buton postare:
{"devicetype": "test user", "username": "newdeveloper"}
Prima dată când faceți acest lucru, veți vedea un „buton de legătură care nu a fost apăsat” undeva în răspuns. Aceasta este o caracteristică de securitate care necesită ca fiecare aplicație nouă pe care o utilizați să fie autorizată fizic. Mergeți și găsiți Bridge-ul dvs., apăsați butonul și trimiteți din nou aceeași solicitare în termen de 30 de secunde. De data aceasta veți primi un răspuns diferit, iar utilizatorul va fi autorizat. Dacă doriți să utilizați un nume de utilizator diferit, citiți documentele API despre crearea de utilizatori. Deocamdată, acest lucru va fi suficient.
După ce utilizatorul dvs. este configurat, adresa URL de bază cu care ar trebui să interacționați devine /api/newdeveloper/. Puteți trimite o solicitare GET pentru a afla tot ce știe în prezent Bridge dvs. despre lumini conectate, alarme, scene și un scurt jurnal de aplicații care au fost utilizate. Iată un eșantion cu câteva informații despre starea conținute pentru un singur bec.
"state": {"on": true, "bri": 254, "hue": 14910, "sat": 144, "effect": "none", "xy": [0.4596, 0.4105], "ct": 369, "alertă": "niciunul", "colormod": "ct", "accesibil": fals}, "tip": "Lumină de culoare extinsă", "nume": "Dormitor 1", "modelid": "LCT001",
Rețineți că „Pe“: true starea nu vă arată de fapt dacă becul este aprins sau nu; numai asta în conformitate cu setările Bridge, acesta ar trebui să fie pe. „Accesibil“: fals poate indica atât un bec care este prea departe, fie pur și simplu oprit la comutatorul de alimentare.
Cu un ultim exemplu înainte de a integra acest lucru în Arduino: asigurați-vă că una dintre luminile dvs. este vizibilă și aprinsă și că știți ce număr este. Modificați adresa URL la /api/newdevelopers/lights/1/state (schimbând numărul în lumina dvs.) și trimiteți o solicitare PUT cu următoarele date:
{"hue": 50100, "sat": 255, "bri": 255}
Ar trebui să vezi cum lumina ta reacționează astfel:
Ceea ce ați făcut este să împingeți o nouă stare către bec. Puteți adăuga, de asemenea, „timp de tranziție”, care este o metodă de animație primitivă care indică câte secunde doriți să schimbați starea.
Culoarea poate fi setată o serie de moduri diferite, dar, din păcate, nu există o modalitate simplă de a trimite o valoare RGB. În exemplul de mai sus, am trimis nuanţă, SATurationare și brightness. Încercați să schimbați valoarea nuanței și să trimiteți din nou cererea PUT.
Lucrând din Arduino
Există o bibliotecă Hue / Arduino existentă numită ArduinoHue la care Philips în sine se leagă în documentația API, dar problema cu această bibliotecă este că aceasta comunică prin conexiunea USB la computerul dvs., care trebuie, de asemenea, să ruleze o aplicație Python în mod constant. Eugh. La fel de bine puteți lăsa computerul să ruleze întregul lucru în acel moment și să tăiați Arduino în întregime.
În schimb, vă voi arăta cum să controlați Hue de la Arduino folosind un scut Ethernet. Arduino-ul dvs. nu este conectat la un computer, astfel încât poate funcționa independent oriunde puteți pune un cablu Ethernet. De fapt, ar trebui să funcționeze și cu un scut Wi-Fi, dar nu am cu cine să mă joc.
Dacă doriți să săriți înainte, codul complet al eșantionului este încorporat mai jos sau disponibil aici. L-am adaptat dintr-un exemplu postat de Gilson Oguime. Dacă nu ați jucat niciodată cu scutul Ethernet înainte, este posibil să doriți să treceți rapid prin tutorial de client web - Am să presupun un anumit nivel de familiaritate cu acest lucru și nu voi acoperi codul folosit pentru a stabili o IP de rețea etc. V-am arătat și noi cum se creează un mini-server web cu scutul Ethernet Dă-ți proiectului tău Arduino propriul mini-server web, cu un scut EthernetCu ceva timp în urmă, v-am arătat cum puteți configura un sistem de control internet pentru Arduino - dar a trebuit să rămână conectat la un computer prin USB pentru a menține conexiunea la internet ... Citeste mai mult .
Crearea modificărilor de stat
Crearea unui stat nou pentru a împinge către becuri este un caz simplu de a crea unul nou Şir variabilă și evadând toate ghilimelele duble. Am adăugat un Aleatoriu() funcționează și acolo pentru a crea o animație oarecum dinamică. Încercați să faceți și nuanța variabilă aleatorie pentru culori diferite.
String command = "{\" on ": true, \" hue \ ": 50100, \" sat \ ": 255, \" bri \ ": 255, \" transitiontime \ ":" + String (aleator (15, 25)) + "}";
Trimiterea comandamentului
Pentru a trimite efectiv comanda, aveți o funcție de ajutor numită setHue () care ia numărul de lumină și șirul de comandă ca argument, ca atare:
setHue (1, comandă);
Atunci nu face decât să se conecteze la bridge, să scutească comanda ca o solicitare PUT, împreună cu toate celelalte prostii pe care le implică crearea unei cereri HTTP.
client.print ("PUT / api /"); client.print (nume de utilizator hue); client.print ( "/ lumini /"); client.print (lightNum); client.println ("/ stat HTTP / 1.1"); client.println ( "keep-alive"); client.print ("Gazdă:"); client.println (hueHubIP); client.print ("Lungimea conținutului:"); client.println (lungime de comandă ()); client.println ("Tip de conținut: text / simplu; charset = UTF-8" ); client.println (); // linie goală înainte de corp. client.println (comanda); // Comanda Hue.
Adăugarea unui senzor de mișcare
În cele din urmă, am conectat un simplu Senzor de mișcare HC-SR501 la pinul I / O digital 2. Când este detectată mișcare, o serie de stări sunt împinse către pod pentru 2 becuri pentru a crea o animație lentă și dinamică. Când senzorul de mișcare se dezactivează, o singură comandă de dezactivare este trimisă ambelor. În mod ideal, aceștia ar fi reveniți la starea în care se aflau înainte de detectarea mișcării, dar logica nu este atât de inteligentă - o să le pornim și să le dezactivăm.
limitări
Deși este recunoscut cod neoptimizat, este nevoie de aproape o secundă pentru ca interfața de rețea a Arduino să trimită o singură solicitare de comandă. Am testat aceeași comandă de pe un Mac, folosind aceeași conexiune Ethernet și a fost capabil de zece până la douăzeci de ori de viteza respectivă (iată AppleScript în cazul în care doriți să testați). În consecință, orice fel de animație rapidă (încercam să creez un efect de lumânare pâlpâitor) nu este posibil dintr-un Arduino. Aceasta nu ar trebui să fie o problemă pentru majoritatea proiectelor, doar pentru animații de lumină de mare viteză, dar este bine să fiți conștienți de limitare.
De asemenea, este dificil să analizezi pe deplin orice răspuns JSON pe care îl primești înapoi de pe pod; pur și simplu nu există suficientă memorie RAM pe Arduino pentru a stoca toate datele brute. Din acest motiv, s-ar putea să doriți să vă limitați în mare parte la trimitere.
Hack the Hue
Acum, când sunteți înarmați cu modul în care puteți controla Hue complet independent, aceasta deschide o lume de sisteme de automatizare a casei Hue. Adevărata întrebare este: ce vei face?
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.