Oglas
Asortiman svjetla tvrtke Philips Hue sigurno nije jeftin (postoje neke alternative Alternativa za Philips Hue koje se zapravo isplatiSustav Philips Hue vodi napunjenost kada je u pitanju pametna rasvjeta, ali postoje neke vrijedne alternative. Odabrali smo tri koja sve nude isti skup značajki i mogućnost hakiranja. Čitaj više ), ali jedna stvar koju zaista cijenim je dobro dokumentirana API Što su API-ji i kako otvoreni API-ji mijenjaju internetJeste li se ikad zapitali kako programi na vašem računalu i web stranice koje posjetite međusobno "razgovaraju"? Čitaj više za izradu vlastitih Hue aplikacija. Danas ću vam pokazati kako upravljati svojim Hue svjetlima iz Arduino - zatim dodavati jednostavan senzor pokreta.
Zašto ovo radimo? Jer sustavi kućne automatizacije mogu biti prilično kruti i skupi. Učeći kako kontrolirati Hue iz Arduino-a, otvarate vrata raznim projektima kućne automatizacije po mjeri koji jednostavno ne mogu biti pobijeđeni komponentama koje nisu na polici. Ako hakiranje stvari nije stvar, pokušajte s ovim
8 nevjerojatnih Hue aplikacija 7 najboljih aplikacija Philips Hue za Android i iPhoneTražite li najbolje Philips Hue aplikacije koje biste mogli koristiti sa svojim pametnim svjetlima? Evo nekoliko sjajnih aplikacija za iPhone i Android. Čitaj više umjesto toga.Hue sustav
Neka je malo tehničko, tako da ćete znati temeljne sustave s kojima radite. Hue svjetla stvaraju mrežna mreža Mrežne mreže: Budućnost komunikacijeMrežne mreže su gotovo neranjive. U mrežnoj mreži ne postoje točke gušenja kroz koje prolazi sav promet. Umjesto toga, informacije se prenose s jednog uređaja na drugi sve dok ne dosegnu svoje odredište. Čitaj više , koristeći bežični protokol kratkog dometa zvan ZigBee - konkretno oni jesu ZigBee Light Link certificirano, što znači da bi i drugi ZLL proizvodi također trebali raditi uporedo s Hueom (u teoriji).
Iako je tehnički kratak domet, značajka mrežnog umrežavanja ZigBee znači da svaka nova žarulja proširuje mrežu, prenoseći poruke drugim žaruljama. To znači da ako imate problema s upravljanjem svjetlom s druge strane kuće, pokušajte smjestiti drugo svjetlo između njih.
Zigbee je sjajan protokol, ali sasvim je različit od Wi-Fi-ja ili ožičene računalne mreže, tako da nam treba Philips Hue Bridge da njih dvoje spojimo zajedno. Most Hue pokreće modificirani linux firmware otvorenog koda koji emitira osnovni web poslužitelj.
Pomoću ovog lokalnog web poslužitelja možete saznati trenutni status lampica i upravljati njima.
To je lijep jednostavan sustav i zreo za "uradi sam" projekte. Kudos Philipsu da ovo učini tako hakiranim.
Počevši
Prije nego što pristupite dokumentaciji API-ja, morat ćete registrirajte se kao programer. Besplatno je, ali morate prihvatiti uvjete i odredbe. Učini to sada.
Svatko tko je upoznat sa standardnim web uslugama ili Javascriptom trebao bi biti u mogućnosti raditi s Hueom: svi se podaci prenose i primaju kao JSON paketi Što je JSON? Pregled laikaBilo da planirate biti web programer ili ne, dobra je ideja barem znati što je JSON, zašto je to važno i zašto se koristi diljem weba. Čitaj više .
Da biste ovo pogledali na djelu, morat ćete znati IP adresu mosta Hue. Postoji nekoliko načina za to:
- Pogledajte tablicu dodjele DHCP adrese u administracijskom sučelju vašeg usmjerivača
- Pokrenite program za mapiranje mreže kao što je Početna stranica za skener IP
- Probajte Alat za brokere tvrtke Philips UPnP
- Ping "philips-hue.home"
Kada završite, nastavite s upisom u adresnu traku preglednika ispravljanje / clip.html dodan u URL. U mom slučaju to je bilo:
http://192.168.1.216/debug/clip.html
Ovo je alat za uklanjanje pogrešaka koji vam omogućuje slanje i primanje JSON paketa putem jednostavnog web sučelja. Prvi korak je omogućiti profil programera na samom Hue Bridgeu - koji je prema sigurnosnim razlozima onemogućen. Zalijepite sljedeće u polje BODY, a URL ostavite kao /api/i poslati POST zahtjev klikom na gumb za objavu:
{"devicetype": "testni korisnik", "username": "newdeveloper"}
Prvi put kada to učinite, vidjet ćete „gumb gumba koji nije pritisnut“ negdje u odgovoru. Ovo je sigurnosna značajka koja zahtijeva da svaka nova aplikacija koju koristite mora biti fizički ovlaštena. Idite i pronađite svoj most, pritisnite gumb i ponovo pošaljite isti zahtjev u roku od 30 sekundi. Ovaj put dobit ćete drugačiji odgovor i korisnik će biti ovlašten. Ako želite koristiti neko drugo korisničko ime, pročitajte dokumente API-ja o tome stvaranje korisnika. Za sada će to biti dovoljno.
Jednom kada vaš korisnik postavi, osnovni URL s kojim biste trebali komunicirati postaje /api/newdeveloper/. Možete poslati GET zahtjev da saznate sve što vaš Bridge trenutno zna o spojenim svjetlima, alarmima, prizorima i kratkom dnevniku upotrebljenih aplikacija. Slijedi uzorak nekih informacija o statusu sadržanih za jednu žarulju.
"stanje": {"on": istina, "bri": 254, "nijansa": 14910, "sat": 144, "efekt": "nijedan", "xy": [0.4596, 0.4105], "ct": 369, "alarm": "nijedan", "colormode": "ct", "dosegljiv": false}, "type": "prošireno svjetlo u boji", "name": "spavaća soba 1", "modelid": „LCT001”
Imajte na umu da je „On”: istina stanje vam zapravo ne pokazuje je li žarulja uključena ili ne; samo to prema postavkama Mosta, to Treba li biti na. „Dostupni”: lažna može naznačiti da je žarulja predaleko ili jednostavno isključena na sklopci napajanja.
Još jedan posljednji primjer prije nego što to integriramo u Arduino: provjerite je li jedno od vaših svjetala vidljivo i uključeno i da znate koji je broj. Promijenite URL u /api/newdevelopers/lights/1/state (promijenite broj na vaše svjetlo) i pošaljite PUT zahtjev sa sljedećim podacima:
{"nijansa": 50100, "sat": 255, "bri": 255}
Trebali biste vidjeti svoje svjetlo kako ovako reagira:
Ono što ste napravili je da gurnete novo stanje žarulji. Možete dodati i "tranitiontime", što je primitivna metoda animacije koja pokazuje koliko sekundi želite da promijeni stanje.
Može se postaviti boja na više različitih načina, ali nažalost ne postoji jednostavan način slanja RGB vrijednosti. U gornjem primjeru smo poslali nijansa, saturacija i BRIghtness. Pokušajte promijeniti vrijednost nijanse i ponovno poslati PUT zahtjev.
Radi od Arduina
Postoji postojeća Hue / Arduino knjižnica ArduinoHue na koje se sami Philips vežu u API dokumentaciji, ali problem ove knjižnice je u tome što je to komunicira preko USB veze s računalom, što također treba pokrenuti Python aplikaciju konstantno. Eugh. U tom ćete trenutku također pustiti vaše računalo da pokrene čitavu stvar i u potpunosti izrezati Arduino.
Umjesto toga, pokazat ću vam kako kontrolirati nijansu Arduino koristeći Ethernet štit. Vaš Arduino ne mora biti povezan s računalom, tako da može raditi neovisno gdje god možete staviti Ethernet kabel. Zapravo bi trebao raditi i sa Wi-Fi štitom, ali nemam se s kime igrati.
Ako želite preskočiti unaprijed, cijeli uzorak koda je ugrađen u nastavku, ili dostupno ovdje. Prilagodio sam to iz primjera objavljenog autor Gilson Oguime. Ako se nikada prije niste igrali sa svojim Ethernet štitom, možda biste trebali brzo proći kroz tutorial web klijenta - Pretpostavit ću određenu razinu poznavanja ovoga i neću pokrivati kôd koji se koristi za uspostavljanje mrežnog IP-a itd. Također smo vam pokazali kako stvoriti mini web-poslužitelj s Ethernet štitom Dajte svom projektu Arduino vlastiti mini web-poslužitelj, s Ethernet štitomPrije nekog vremena pokazao sam vam kako postaviti internetski sustav kontrole za svoj Arduino - ali morao je ostati povezan s računalom putem USB-a da bi održao internetsku vezu ... Čitaj više .
Stvaranje promjena stanja
Stvaranje nove države koja se gura u žarulje jednostavan je slučaj stvaranja novog Niz varijablu i izbjegavanje svih dvostrukih navodnika. Dodao sam slučajna () i tamo stvoriti pomalo dinamičnu animaciju. Pokušajte i varijablu nijanse napraviti slučajnom za različite boje.
String command = "{\" on ": true, \" hue \ ": 50100, \" sat \ ": 255, \" bri \ ": 255, \" tranitiontime \ ":" + string (random (15, 25)) + "}";
Slanje naredbe
Za stvarno slanje naredbe, imate pomoćnu funkciju nazvanu setHue () koja uzima svjetlosni broj i naredbeni niz kao argument, kao što je:
setHue (1, naredba);
Sve što se tada radi je da se poveže na most, ispruži naredbu kao PUT zahtjev, zajedno sa svim ostalim glupostima koje uključuje stvaranje HTTP zahtjeva.
client.print ("PUT / api /"); client.print (hueUsername); client.print ( "/ svjetla /"); client.print (lightNum); client.println ("/ stanje HTTP / 1.1"); client.println ( "Keep-Alive"); client.print ("Domaćin:"); client.println (hueHubIP); client.print ("Duljina sadržaja:"); client.println (command.length ()); client.println ("Vrsta sadržaja: tekst / običan; charset = UTF-8" ); client.println (); // prazna linija prije tijela. client.println (naredba); // Hue naredba.
Dodavanje senzora pokreta
Napokon, spojio sam jednostavno HC-SR501 senzor kretanja na digitalni I / O pin 2. Kad se otkrije gibanje, niz stanja se gura na most za dvije žarulje kako bi se stvorila spora, dinamična animacija. Kad se senzor kretanja deaktivira, obojici se šalje jedna naredba za isključivanje. U idealnom slučaju bili bi vraćeni u stanje u kojem su bili prije otkrivanja pokreta, ali logika nije tako pametna - mi ćemo ih samo uključiti i isključiti.
Ograničenja
Iako je neprilagođeni kod, potrebno je gotovo sekundu da mrežno sučelje Arduinoa pošalje jedan jedini zahtjev za naredbu. Isprobao sam istu naredbu s Maca, koristeći istu Ethernet vezu, i bila je sposobna deset do dvadeset puta veća od ove brzine (ovdje je AppleScript u slučaju da želite testirati). Prema tome, bilo kakva brza animacija (pokušavala sam stvoriti treperavu svijeću) nije moguća sa Arduina. To ne bi trebao biti problem za većinu projekata, samo za animacije velike brzine svjetla, ali dobro je biti svjestan ograničenja.
Teško je i u potpunosti analizirati svaki JSON odgovor koji se vrati s mosta; na Arduinu jednostavno nema dovoljno RAM-a za pohranjivanje svih neobrađenih podataka. Iz tog razloga se možda želite ograničiti na slanje.
Hack Hue
Sada kada ste naoružani znanjem kako potpuno samostalno kontrolirati Hue, to otvara svijet hakira za kućnu automatizaciju Hue. Pravo pitanje je: što ćete napraviti?
James je diplomirao iz umjetne inteligencije i certificiran je CompTIA A + i Network +. Vodeći je programer MakeUseOf-a, a svoje slobodno vrijeme provodi igrajući VR paintball i boardgames. Gradio je računala još od djeteta.