Sådan styres Philips Hue Lights fra en Arduino (og Add a Motion Sensor)

I dag viser jeg dig hvordan du styrer dine Hue-lys fra en Arduino - så tilføjer du en simpel bevægelsesføler.

I dag viser jeg dig hvordan du styrer dine Hue-lys fra en Arduino - så tilføjer du en simpel bevægelsesføler.
Reklame

Philips Hue-sortimentet af lys er bestemt ikke billigt (der er nogle alternativer Philips Hue-alternativer, der rent faktisk er værd at det Philips Hue-alternativer, der rent faktisk er værd at det Philips Hue-system fører ledningen når det kommer til smart belysning, men der er nogle værdifulde alternativer. Vi har valgt tre, som alle tilbyder det samme grundlæggende funktionssæt og hackability. Læs mere), men en ting, som jeg virkelig værdsætter, er den veldokumenterede API Hvad er API'er, og hvordan er åbne API'er, der ændrer internettet Hvad er API'er, Og hvordan er åbne API'er, der ændrer internettet Har du nogensinde spekuleret på, hvordan programmer på din computer og de websteder, du besøger "snak" med hinanden? Læs mere for at lave dine egne Hue apps. I dag viser jeg dig hvordan du styrer dine Hue-lys fra en Arduino - så tilføjer du en simpel bevægelsesføler.

Hvorfor laver vi det her? Fordi hjemmeautomatiseringssystemer kan være ret stive og dyre. Ved at lære at styre farven fra Arduino åbner du dørene til en række specialfremstillede hjemmeautomatiseringsprojekter, der simpelthen ikke kan slås af med hyldekomponenter. Hvis hacking ting er bare ikke dine ting, prøv disse 8 fantastiske Hue apps 8 Fabulous Apps til Philips Hue Lights 8 Fabelagtige Apps til Philips Hue Lights Philips Hue-systemet har sin egen app, men hvorfor afgjort for standard når der er så mange køligere muligheder derude? Disse 8 apps giver dig fantastiske muligheder for nogle virkelig coole effekter. Læs mere i stedet.

The Hue System

Lad os blive tekniske lidt, så du kan kende de underliggende systemer, du arbejder med. Hue lys skaber et mesh netværk Mesh Networks: Fremtiden for Communication Mesh Networks: Fremtiden for Kommunikation Mesh netværk er næsten usandsynlige. I et maskenetværk er der ingen stødpunkter, hvorigennem hele trafikken passerer. I stedet sendes information fra en enhed til den næste, indtil den når sin destination. Læs mere ved at bruge en kort rækkevidde trådløs protokol kaldet ZigBee - specielt er de ZigBee Light Link-certificerede, hvilket betyder at andre ZLL-produkter også skal arbejde sammen med Hue (i teorien).

Selvom det er teknisk kort rækkevidde, betyder mesh netværksfunktionen hos ZigBee, at hver ny pære udvider netværket, genudsender meddelelser til andre pærer. Det betyder, at hvis du har problemer med at styre et lys på den anden side af huset, så prøv at placere et andet lys mellem de to.

Zigbee er en fantastisk protokol, men det er helt anderledes end Wi-Fi eller et kablet computernetværk, så vi har brug for Philips Hue Bridge til at slutte sammen sammen. Hue-broen kører en modificeret open source linux firmware, der sender en grundlæggende webserver.

Dette er hvad du vil se, hvis du bare indtaster din Hue-broens IP-adresse i din browser. Du kan dog ikke gøre meget herfra.
Dette er hvad du vil se, hvis du bare indtaster din Hue-broens IP-adresse i din browser. Du kan dog ikke gøre meget herfra.

Det er ved at interagere med denne lokale webserver, at du kan finde ud af lysets aktuelle status og kontrollere dem.

Det er et smukt simpelt system og moden til DIY projekter. Kudos til Philips for at gøre denne ting så hackable.

Til at begynde med

Før du kan få adgang til API dokumentationen, skal du registrere dig som udvikler. Det er gratis, men du skal acceptere vilkårene og betingelserne. Gør det nu.

Enhver, der er bekendt med standardwebtjenester eller Javascript, skal kunne arbejde med farven: alle data er bestået og modtaget som JSON-pakker Hvad er JSON? A Layman's Overview Hvad er JSON? En Layman's Overview Uanset om du planlægger at være en webudvikler eller ej, er det en god idé at i det mindste vide, hvad der er JSON, hvorfor det er vigtigt, og hvorfor det bruges over hele nettet. Læs mere .

For at kigge på dette i aktion skal du kende IP-adressen på din Hue-bro. Der er et par måder at gøre dette på:

  • Se på DHCP-adressetildelingstabellen i din routerens admin-grænseflade
  • Kør et netværkskortprogram som IP Scanner Home
  • Prøv Philips UPnP-mæglerværktøjet
  • Ping "philips-hue.home"

netværk kortlægning for at finde bro

Når du er færdig, skal du gå videre og skrive den ind i din browserens adresselinje med debug / clip.html, der er vedhæftet webadressen. I mit tilfælde var dette:

http://192.168.1.216/debug/clip.html 

Dette er et fejlfindingsværktøj, der giver os mulighed for at sende og modtage JSON-pakkerne via en simpel webgrænseflade. Det første skridt er at aktivere udviklerprofilen på Hue Bridge selv - som er deaktiveret som standard af sikkerhedsmæssige årsager. Indsæt følgende i feltet BODY, forlad URL'en som / api /, og send en POST-anmodning ved at klikke på post-knappen :

 {"devicetype":"test user", "username":"newdeveloper"} 

Første gang du gør dette, vil du se et "link-knap, der ikke trykkes" et eller andet sted i svaret. Dette er en sikkerhedsfunktion, der kræver alle nye applikationer, du bruger til at være fysisk autoriseret. Gå og find din bro, tryk på knappen, og send den samme anmodning igen inden for 30 sekunder . Denne gang får du et andet svar, og brugeren vil blive autoriseret. Hvis du vil bruge et andet brugernavn, skal du læse API-dokumenterne om oprettelse af brugere. For nu vil det være tilstrækkeligt.

Når din bruger er indstillet, skal basen webadressen du interagerer med bliver / api / newdeveloper / . Du kan sende en GET-anmodning for at finde ud af alt, hvad din Bridge i øjeblikket ved om forbundne lys, alarmer, scener og en kort logfil af apps, der er blevet brugt. Her er et eksempel på nogle af statusoplysningerne for en enkelt pære.

 "state": { "on": true, "bri": 254, "hue": 14910, "sat": 144, "effect": "none", "xy": [ 0.4596, 0.4105 ], "ct": 369, "alert": "none", "colormode": "ct", "reachable": false }, "type": "Extended color light", "name": "Bedroom 1", "modelid": "LCT001",  

Bemærk, at "on": True State faktisk ikke viser dig, om pæren er på eller ej; kun det ifølge Bridge-indstillingerne, skal det være på. "Tilgængelig": Falsk kan indikere både en pære, der er for langt væk, eller simpelthen slukket ved afbryderen.

Et sidste eksempel før vi integrerer dette i Arduino: Sørg for at et af dine lys er synligt og på, og at du ved hvilket nummer det er. Skift webadressen til / api / newdevelopers / lights / 1 / state (skift nummer til dit lys), og send en PUT-anmodning med følgende data:

 {"hue": 50100, "sat":255, "bri":255} 

Du bør se din lysreaktion som denne:

nuance demo

Hvad du har gjort er at skubbe en ny stat til pæren. Du kan også tilføje "overgangstid", som er en primitiv animationsmetode, der angiver, hvor mange sekunder du vil have, at staten skal ændre sig.

Farven kan indstilles på flere forskellige måder, men desværre er der ingen enkel måde at sende en RGB-værdi på. I eksemplet ovenfor sendte vi nuance, sat uration og brihed. Prøv at ændre farvetoneværdien og sende PUT-anmodningen igen.

Arbejder fra Arduino

Der er et eksisterende Hue / Arduino bibliotek kaldet ArduinoHue, som Philips selv linker til i API dokumentationen, men problemet med dette bibliotek er, at det kommunikerer via USB-forbindelsen til din pc, som også skal køre en Python applikation hele tiden. Ægte . Du kan lige så godt lade computeren køre hele sagen på det tidspunkt og skære Arduino helt ud.

I stedet viser jeg dig hvordan du styrer nuance fra Arduino ved hjælp af et Ethernet-skærm . Din Arduino behøver ikke være forbundet til en computer, så den kan fungere uafhængigt hvor som helst du kan sætte et Ethernet-kabel. Faktisk skal det også fungere med et Wi-Fi-skjold, men jeg har ikke en til at spille med.

ehternet-skjold-box

Hvis du gerne vil springe videre, er den fulde prøvekode indlejret nedenfor eller tilgængelig her. Jeg har tilpasset det fra et eksempel indsendt af Gilson Oguime. Hvis du aldrig har spillet med dit Ethernet-skjold før, vil du måske hurtigt køre gennem webklientvejligheden - jeg antager noget niveau af fortrolighed med dette og vil ikke dække den kode, der bruges til at etablere et netværk IP osv. Vi har også vist dig, hvordan du opretter en mini-webserver med Ethernet-skjoldet. Giv dit Arduino-projekt sin egen Mini-Webserver med et Ethernet-skjold Giv dit Arduino-projekt sin egen Mini-Webserver med et Ethernet-skærm A For længe siden viste jeg dig, hvordan du konfigurerede et internetkontrolsystem til din Arduino - men det skulle forblive forbundet til en computer via USB for at opretholde internetforbindelsen .... Læs mere.

Oprettelse af statsændringer

Oprettelse af en ny stat til at skubbe til pærerne er et simpelt tilfælde af at oprette en ny String- variabel og undslippe alle de dobbelte citater. Jeg har tilføjet en tilfældig () funktion der også for at skabe en noget dynamisk animation. Prøv at gøre farvetone variabel tilfældig for forskellige farver.

 String command = "{\"on":true, \"hue\":50100, \"sat\":255, \"bri\":255, \"transitiontime\":"+String(random(15, 25))+"}"; 

Sende kommandoen

For faktisk at sende kommandoen har du en hjælperfunktion kaldet setHue (), der tager lysnummeret og kommandostrengen som et argument, som sådan:

 setHue(1, command); 

Alt det gør, er det forbinder til broen, spytter kommandoen som en PUT-anmodning sammen med alle de andre tuller, der skaber en HTTP-anmodning, involverer.

 client.print("PUT /api/"); client.print(hueUsername); client.print("/lights/"); client.print(lightNum); client.println("/state HTTP/1.1"); client.println("keep-alive"); client.print("Host: "); client.println(hueHubIP); client.print("Content-Length: "); client.println(command.length()); client.println("Content-Type: text/plain;charset=UTF-8"); client.println(); // blank line before body client.println(command); // Hue command 

Tilføjelse af en bevægelsesføler

Endelig har jeg ledet en simpel HC-SR501 bevægelsesføler til digital I / O-pin 2. Når bevægelse er detekteret, skubbes en række stater til broen til 2 pærer for at skabe en langsom, dynamisk animation. Når bevægelsesføleren deaktiveres, sendes en enkelt-off-kommando til begge. Ideelt set ville de vende tilbage til den tilstand, de var i, før der blev registreret bevægelse, men logikken er ikke så smart - vi skal bare slå dem til og fra.

Begrænsninger

Selv om det ganske vist ikke er optimeret kode, tager det næsten et sekund for Arduino-netværksinterfacet at sende en enkelt kommandoforespørgsel. Jeg testede den samme kommando fra en Mac med den samme Ethernet-forbindelse, og den kunne klare ti til tyve gange den hastighed (her er AppleScript, hvis du vil teste). Derfor har enhver form for hurtig animation (jeg forsøgte at skabe en flimrende lys effekt) bare ikke muligt fra en Arduino. Dette bør ikke være et problem for de fleste projekter, kun for høj hastighed lys animationer, men det er godt at være opmærksom på begrænsningen.

Det er også svært at analysere alle JSON-responser, du kommer tilbage fra broen. der er bare ikke nok RAM på Arduino til at gemme alle de rå data. Af denne grund vil du måske for det meste begrænse dig til at sende.

Hakk farven

Nu hvor du er bevæbnet med kendskabet til, hvordan du kontrollerer Hue helt uafhængigt, åbner det en verden af ​​Hue home automation hacks. Det reelle spørgsmål er: hvad vil du lave?

In this article