Slik styrer du Philips Hue Lights fra en Arduino (og legg til en bevegelsessensor)

I dag skal jeg vise deg hvordan du styrer Hue-lysene fra en Arduino - og legger til en enkel bevegelsessensor.

I dag skal jeg vise deg hvordan du styrer Hue-lysene fra en Arduino - og legger til en enkel bevegelsessensor.
Annonse

Philips Hue-serien av lys er absolutt ikke billig (det finnes noen alternativer Philips Hue-alternativer som egentlig er verdt det. Philips Hue-alternativer som egentlig er verdt det. Philips Hue-systemet leder ledelsen når det gjelder smart belysning, men det er noen verdifulle alternativer. Vi har valgt tre som alle tilbyr det samme grunnleggende funksjonssettet og hackability. Les mer), men en ting som jeg virkelig setter pris på, er den veldokumenterte APIen Hva er APIer, og hvordan er åpne APIer som endrer Internett Hva er APIer, Og hvordan er åpne APIer forandre Internett Har du noen gang lurt på hvordan programmer på datamaskinen din og nettstedene du besøker, snakker til hverandre? Les mer for å lage dine egne Hue-apper. I dag skal jeg vise deg hvordan du styrer Hue-lysene fra en Arduino - og legger til en enkel bevegelsessensor.

Hvorfor gjør vi dette? Fordi hjemmeautomatiseringssystemer kan være ganske stive og dyre. Ved å lære å styre nyansen fra Arduino åpner du dørene til en rekke spesialtilpassede hjemmevirksomhetsprosjekter som ikke kan slås av av hyllekomponenter. Hvis hacking ting er bare ikke din ting, prøv disse 8 fantastiske Hue-appene. 8 Fabulous Apps for Philips Hue Lights 8 Fabulous Apps for Philips Hue Lights Philips Hue-systemet har sin egen app, men hvorfor sette seg til standard når det er så mange kulere alternativer der ute? Disse 8 appene gir deg fabelaktige muligheter for noen virkelig kule effekter. Les mer i stedet.

Hue-systemet

La oss få tekniske for litt, slik at du kan kjenne de underliggende systemene du jobber med. Hue-lys oppretter et nettverksnettverk Mesh-nettverk: Fremtiden for kommunikasjonsnettverk: Fremtiden for kommunikasjon Mesh-nettverk er nesten uskadelige. I et nettverksnettverk er det ingen choke poeng som alle trafikk passerer. I stedet sendes informasjon fra en enhet til den neste til den når målet. Les mer, ved hjelp av en kort rekkevidde trådløs protokoll kalt ZigBee - spesielt, de er ZigBee Light Link-sertifiserte, noe som betyr at andre ZLL-produkter også skal fungere sammen med Hue (i teorien).

Selv om det er teknisk kort rekkevidde, betyr nettverksfunksjonen til ZigBee at hver ny pære utvider nettverket, sender meldinger til andre pærer. Dette betyr at hvis du har problemer med å kontrollere et lys på den andre siden av huset, prøv å plassere et nytt lys mellom de to.

Zigbee er en flott protokoll, men det er ganske annerledes enn Wi-Fi eller et kablet datanettverk, så vi trenger Philips Hue Bridge for å bli sammen med de to sammen. Hue-broen kjører en modifisert åpen kildekode-linux-firmware, som sender en grunnleggende webserver.

Dette ser du om du bare skriver inn IP-adressen til Hue-broen din i nettleseren din. Du kan ikke gjøre mye herfra skjønt.
Dette ser du om du bare skriver inn IP-adressen til Hue-broen din i nettleseren din. Du kan ikke gjøre mye herfra skjønt.

Det er ved å samhandle med denne lokale webserveren, slik at du kan finne ut den nåværende statusen til lysene, og kontrollere dem.

Det er et vakkert enkelt system, og moden for DIY-prosjekter. Kudos til Philips for å gjøre denne tingen så hackbar.

Starter med

Før du kan få tilgang til API-dokumentasjonen, må du registrere deg som utvikler. Det er gratis, men du må godta vilkårene. Gjør dette nå.

Alle som er kjent med standard webtjenester eller Javascript, skal kunne arbeide med nyansen: alle data er bestått og mottatt som JSON-pakker Hva er JSON? A Laymans oversikt Hva er JSON? En Laymans oversikt Enten du planlegger å være en webutvikler eller ikke, er det en god ide å minst vite hva som er JSON, hvorfor det er viktig, og hvorfor det brukes over hele nettet. Les mer .

For å se på dette i aksjon, må du kjenne IP-adressen til Hue-broen din. Det er noen måter å gjøre dette på:

  • Se på DHCP-adressetildelingstabellen i rutens administrasjonsgrensesnitt
  • Kjør et nettverkskartprogram som IP Scanner Home
  • Prøv Philips UPnP-meglerverktøyet
  • Ping "philips-hue.home"

nettverkskartlegging for å finne bro

Når du er ferdig, gå videre og skriv den inn i nettleserens adresselinje med debug / clip.html vedlagt URL-adressen. I mitt tilfelle var dette:

http://192.168.1.216/debug/clip.html 

Dette er et feilsøkingsverktøy som lar oss sende og motta JSON-pakker gjennom et enkelt webgrensesnitt. Det første trinnet er å aktivere utviklerprofilen på Hue Bridge selv - som er deaktivert som standard av sikkerhetshensyn. Lim inn følgende i feltet BODY, la adressen være som / api /, og send en POST-forespørsel ved å klikke på postknappen :

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

Første gang du gjør dette, ser du en "koblingsknapp ikke trykket" et sted i svaret. Dette er en sikkerhetsfunksjon som krever hvert nytt program du bruker til å være fysisk autorisert. Gå og finn broen din, trykk på knappen, og send den samme forespørselen igjen innen 30 sekunder . Denne gangen får du et annet svar, og brukeren vil bli autorisert. Hvis du vil bruke et annet brukernavn, les API-dokumentene om å opprette brukere. For nå vil dette være tilstrekkelig.

Når brukeren er konfigurert, må basen nettadressen du skal samhandle med blir / api / newdeveloper / . Du kan sende en GET-forespørsel for å finne ut alt ditt Bridge nå vet om connnected lights, alarmer, scener og en kort logg av programmer som har blitt brukt. Her er et eksempel på noen av statusinformasjonen som finnes 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",  

Merk at "on": true state faktisk ikke viser deg om pæren er på eller ikke; bare det i henhold til Bridge-innstillingene, bør det være på. "Tilgjengelig": falsk kan indikere både en pære som er for langt unna, eller bare slått av ved strømbryteren.

Et siste eksempel før vi integrerer dette i Arduino: Pass på at et av lysene dine er synlige og på, og at du vet hvilket nummer det er. Endre nettadressen til / api / newdevelopers / lights / 1 / state (endre nummeret til lyset ditt), og send en PUT-forespørsel med følgende data:

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

Du bør se din lys reagere slik:

nyanse demo

Det du har gjort er å skyve en ny stat til pæren. Du kan også legge til "overgangstid", som er en primitiv animasjonsmetode som angir hvor mange sekunder du vil at statens endring skal ta.

Fargen kan settes på en rekke forskjellige måter, men dessverre er det ingen enkel måte å sende en RGB-verdi på. I eksemplet ovenfor sendte vi nyanse, satte urasjon og brihet. Prøv å endre fargetoneverdien og sende PUT-forespørselen på nytt.

Arbeider fra Arduino

Det finnes et eksisterende Hue / Arduino-bibliotek, kalt ArduinoHue, som Philips selv lenker til i API-dokumentasjonen, men problemet med dette biblioteket er at det kommuniserer via USB-tilkoblingen til PCen din, som også må kjøres en Python-applikasjon hele tiden. Eugh . Du kan like godt la datamaskinen kjøre hele greia på det tidspunktet, og kutte ut Arduino helt.

I stedet vil jeg vise deg hvordan du kontrollerer fargen fra Arduino ved hjelp av et Ethernet skjold . Din Arduino trenger ikke kobles til en datamaskin, så den kan operere uavhengig hvor som helst du kan sette en Ethernet-kabel. Faktisk bør det også fungere med et Wi-Fi-skjold, men jeg har ikke en til å leke med.

ehternet speilene-box

Hvis du ønsker å hoppe over, er den fulle prøvekoden innebygd nedenfor, eller tilgjengelig her. Jeg har tilpasset det fra et eksempel skrevet av Gilson Oguime. Hvis du aldri har spilt med Ethernet-skjoldet ditt før, kan du ha en rask løp gjennom webklientopplæringen - jeg antar noe kjent med dette og vil ikke dekke koden som brukes til å etablere et nettverk IP etc. Vi har også vist deg hvordan du oppretter en mini-webserver med Ethernet-skjoldet. Gi ditt Arduino-prosjekt sin egen Mini-Webserver, med et Ethernet-skjold. Gi Arduino-prosjektet sin egen Mini-Webserver, med et Ethernet-skjerm A for lenge siden viste jeg deg hvordan du konfigurerer et Internett-kontrollsystem for din Arduino - men det måtte forbli koblet til en datamaskin via USB for å opprettholde internettforbindelsen .... Les mer.

Opprette statlige endringer

Opprette en ny stat for å presse på pærene er et enkelt tilfelle av å opprette en ny String- variabel, og unnslippe alle de dobbelte sitatene. Jeg har også lagt til en tilfeldig () -funksjon i det også for å lage en noe dynamisk animasjon. Prøv å gjøre fargetone varianten tilfeldig for forskjellige farger.

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

Sender kommandoen

For å sende kommandoen, har du en hjelperfunksjon kalt setHue () som tar lysnummeret og kommandostrengen som et argument, slik som:

 setHue(1, command); 

Alt det gjør da er det kobles til broen, spytter ut kommandoen som en PUT-forespørsel, sammen med alle de andre tullene som skaper en HTTP-forespørsel innebærer.

 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 

Legge til en bevegelsessensor

Til slutt koblet jeg en enkel HC-SR501 bevegelsessensor til digital I / O pin 2. Når bevegelse oppdages, skyves en rekke stater til broen for 2 pærer for å lage en langsom, dynamisk animasjon. Når bevegelsessensoren deaktiveres, sendes en enkelt avkommando til begge. Ideelt sett ville de vende tilbake til staten de var i før det ble oppdaget bevegelse, men logikken er ikke så smart - vi skal bare slå dem på og av.

begrensninger

Selv om det til og med ikke er optimalisert kode, tar det nesten et sekund for nettverksgrensesnittet til Arduino å sende en enkelt kommandopåmelding. Jeg testet samme kommando fra en Mac, med samme Ethernet-tilkobling, og det var i stand til ti til tyve ganger så høyt (her er AppleScript hvis du vil teste). Følgelig er noen form for rask animasjon (jeg forsøkte å skape en flimrende lys effekt) bare ikke mulig fra en Arduino. Dette bør ikke være et problem for de fleste prosjekter, bare for høyhastighets lys animasjoner, men det er godt å være oppmerksom på begrensningen.

Det er også vanskelig å analysere alle JSON-responsene du kommer tilbake fra broen. det er bare ikke nok RAM på Arduino til å lagre alle rådataene. Av denne grunn vil du kanskje for det meste begrense deg til å sende.

Hakk fargen

Nå som du er bevæpnet med kunnskapen om hvordan du kontrollerer Hue helt uavhengig, åpner den opp en verden av Hue home automation hacks. Det virkelige spørsmålet er: hva vil du gjøre?

In this article