Så här kontrollerar du Philips Hue Lights från en Arduino (och lägg till en rörelsessensor)

Så här kontrollerar du Philips Hue Lights från en Arduino (och lägg till en rörelsessensor) / DIY

Philips Hue-serien är inte billigt (det finns några alternativ Philips Hue-alternativ som egentligen är värda det Philips Hue-alternativ som verkligen är värda det Philips Hue-systemet leder ledningen när det gäller smart belysning, men det finns några värdefulla alternativ. Vi har valt tre som alla erbjuder samma grundläggande funktioner och hackability. Läs mer), men en sak som jag verkligen uppskattar är det väl dokumenterade API-programmet Vad är API-filer och hur är öppna API-filer som ändrar Internet Vad är API: er , Och hur är öppna API-filer som ändrar Internet Har du någonsin undrat hur program på din dator och de webbplatser du besöker "pratar" med varandra? Läs mer för att skapa egna Hue-appar. Idag visar jag dig hur du styr dina Hue-lampor från en Arduino - sedan lägger du till en enkel rörelsessensor.

Varför gör vi det här? Eftersom hemautomatiseringssystem kan vara ganska styva och dyra. Genom att lära dig hur man styr färgtonen från Arduino öppnar du dörrarna till en mängd olika skräddarsydda hemautomatiseringsprojekt som helt enkelt inte kan slås av av hylla-komponenter. Om hackning saker inte bara är din sak, prova dessa 8 fantastiska Hue-appar 8 Fantastiska Appar för Philips Hue Lights 8 Fantastiska Appar för Philips Hue Lights Philips Hue-systemet har sin egen app men varför lösa sig för standard när det finns så många kylare alternativ där ute? Dessa 8 apps ger dig fantastiska alternativ för några riktigt coola effekter. Läs mer istället.

Hue-systemet

Låt oss bli tekniskt lite så att du kan känna till de underliggande systemen du jobbar med. Hue-ljus skapar ett nätverksnätverk Nätsnät: Framtiden för kommunikationsnätsnät: Framtiden för kommunikation Mesh-nätverk är nästan oskadliga. I ett nätverksnät finns inga kvävpunkter genom vilka all trafik passerar. Istället skickas information från en enhet till nästa tills den når sin destination. Läs mer, med hjälp av ett trådlöst protokoll som kallas ZigBee - specifikt, de är ZigBee Light Link-certifierade, vilket betyder att andra ZLL-produkter också ska fungera tillsammans med nyans (i teorin).

Även om tekniskt korta sträckor innebär nätverksfunktionen hos ZigBee att varje ny glödlampa utökar nätverket, vidarebefordrar meddelanden till andra glödlampor. Detta innebär att om du har problem med att kontrollera ett ljus på andra sidan huset, försök placera ett annat ljus mellan de två.

Zigbee är ett bra protokoll, men det är helt annorlunda än Wi-Fi eller ett trådbundet datornätverk, så vi behöver Philips Hue Bridge för att gå med ihop de två tillsammans. Hue-broen kör en modifierad Linux-firmware med öppen källkod, som sänder en grundläggande webbserver.

Så här ser du om du bara skriver in din Hue-broens IP-adress i din webbläsare. Du kan dock inte göra mycket härifrån.

Det är genom att interagera med den här lokala webbservern så att du kan ta reda på ljusens nuvarande status och styra dem.

Det är ett vackert enkelt system, och moget för DIY-projekt. Kudos till Philips för att göra denna sak så hackbar.

Börjar

Innan du kan komma åt API-dokumentationen måste du registrera dig som en utvecklare. Det är gratis, men du måste acceptera villkoren. Gör det här nu.

Någon som är bekant med vanliga webbtjänster eller Javascript ska kunna arbeta med nyans: alla data skickas och tas emot som JSON-paket Vad är JSON? A Laymans översikt Vad är JSON? En Laymans översikt Oavsett om du planerar att vara webbutvecklare eller inte, är det en bra idé att åtminstone veta vad som är JSON, varför det är viktigt och varför det används över hela webben. Läs mer .

För att titta på detta i åtgärd måste du veta IP-adressen på din Hue-bro. Det finns några sätt att göra detta:

  • Titta på DHCP-adresstilldelningstabellen i routerns administratörsgränssnitt
  • Kör ett nätverkskortsprogram som IP Scanner Home
  • Prova med Philips UPnP-mäklareverktyget
  • Ping “Philips-hue.home”

När du är klar, fortsätt och skriv den i adressfältet i din webbläsare med debug / clip.html bifogas URL-adressen. I mitt fall var detta:

http://192.168.1.216/debug/clip.html

Det här är ett felsökningsverktyg som låter dig skicka och ta emot JSON-paket via ett enkelt webbgränssnitt. Det första steget är att aktivera utvecklarprofilen på Hue Bridge själv - som är avstängd som standard av säkerhetsskäl. Klistra in följande i fältet BODY, lämna URL-adressen som / Api /, och skicka en POST-förfrågan genom att klicka på post-knappen:

"devicetype": "testanvändare", "användarnamn": "newdeveloper"

Första gången du gör det så ser du en “länkknappen inte tryckt” någonstans i svaret. Det här är en säkerhetsfunktion som kräver varje ny applikation du använder för att vara fysiskt behörig. Gå och hitta din Bridge, tryck på knappen och skicka samma förfrågan igen inom 30 sekunder. Den här gången får du ett annat svar, och användaren kommer att bli auktoriserad. Om du vill använda ett annat användarnamn läser du API-dokumenten om att skapa användare. För nu är det tillräckligt.

När din användare är inställd, blir basadressen du ska interagera med / Api / newdeveloper / . Du kan skicka en GET-förfrågan för att ta reda på allt som din Bridge för närvarande vet om anslutna lampor, larm, scener och en kort logg av appar som har använts. Här är ett urval av en del av statusinformationen för en enda lampa.

 "state": "on": true, "bri": 254, "nyans": 14910, "satt": 144, "effekt": "none", "xy": [0.4596, 0.4105], "ct" 369, "alert": "none", "colormode": "ct", "reachable": false, "type": "Extended color light" LCT001", 

Observera att “på”:Sann staten visar dig inte faktiskt om lampan är på eller inte; bara det enligt Bridge-inställningarna, det skall vara på. “nåbar”:falsk kan indikera både en lampa som är för långt bort eller helt enkelt avstängd vid strömbrytaren.

Ett sista exempel innan vi integrerar detta i Arduino: se till att en av dina lampor är synlig och på, och att du vet vilket nummer det är. Ändra webbadressen till / Api / newdevelopers / lampor / 1 / tillstånd (ändra numret till ditt ljus) och skicka en PUT-förfrågan med följande data:

"nyans": 50100, "satt": 255, "bri": 255

Du bör se din ljusreaktion så här:

Vad du har gjort är att driva en ny stat till glödlampan. Du kan också lägga till “transitiontime”, vilken är en primitiv animationsmetod som anger hur många sekunder du vill att tillståndsändringen ska ta.

Färgen kan ställas in på ett antal olika sätt, men det finns tyvärr inget enkelt sätt att skicka ett RGB-värde. I exemplet ovan skickade vi nyans, saturation och brightness. Försök ändra färgtonen och skicka PUT-förfrågan igen.

Arbetar från Arduino

Det finns ett befintligt Hue / Arduino-bibliotek som heter ArduinoHue som Philips själva länkar till i API-dokumentationen, men problemet med det här biblioteket är att det kommunicerar via USB-anslutningen till din dator, som också måste driva en Python-applikation ständigt. eugh. Du kan också låta din dator köra hela saken på den tiden och klippa ut Arduino helt.

Istället ska jag visa dig hur du styr färgtonen från Arduino med en Ethernet-skärm. Din Arduino behöver inte anslutas till en dator, så den kan fungera oberoende var du än kan lägga en Ethernet-kabel. Faktum är att det också ska fungera med en Wi-Fi-skärm, men jag har ingen att leka med.

Om du vill gå vidare, är hela provkoden inbäddad nedan eller tillgänglig här. Jag har anpassat det från ett exempel som publicerats av Gilson Oguime. Om du aldrig har spelat med din Ethernet-sköld tidigare kanske du vill springa snabbt igenom webbklientens handledning - jag antar en viss förtrogenhet med detta och kommer inte att täcka koden som används för att upprätta ett nätverk IP etc. Vi har också visat dig hur du skapar en mini-webbserver med Ethernet-skärmen Ge ditt Arduino-projekt sin egen Mini-Webserver, med en Ethernet-skärm Ge ditt Arduino-projekt sin egen Mini-Webserver med en Ethernet-skärm A för en tid sedan visade jag dig hur du installerade ett internetkontrollsystem för din Arduino - men det var nödvändigt att hålla kontakten med en dator via USB för att upprätthålla internetuppkopplingen ... Läs mer .

Skapa statsändringar

Att skapa ett nytt tillstånd för att trycka på glödlamporna är ett enkelt fall att skapa en ny Sträng variabel och flyr alla dubbla citat. Jag har lagt till en slumpmässig() funktionen där också för att skapa en lite dynamisk animering. Försök att göra färgtonen slumpmässig slumpmässig för olika färger.

String command = "\" on ": true, \" tint \ ": 50100, \" sat \ ": 255, \" bri \ ": 255, \" övergångstid \ ":" + String (slumpvis 25)) ^ "";

Sänder kommandot

För att faktiskt skicka kommandot har du en hjälparfunktion som heter setHue () som tar ljusnumret och kommandosträngen som ett argument, som så:

setHue (1, kommando);

Allt det gör då är det anslutet till bron, spetsar kommandot som en PUT-förfrågan, tillsammans med alla andra nonsens som skapar en HTTP-förfrågan involverar.

 client.print ("PUT / api /"); client.print (hueUsername); client.print ( "/ lampor /"); 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 linje före body client.println (command); // Hue kommando 

Lägga till en rörelsessensor

Slutligen kopplade jag en enkel HC-SR501 rörelsesensor till digital I / O-pin 2. När rörelse upptäcks trycks en serie stater till bron för 2 lampor för att skapa en långsam, dynamisk animering. När rörelsesensorn avaktiveras skickas ett enda avkommando till båda. Idealt sett skulle de återgå till det tillstånd de var i innan rörelsen upptäcktes, men logiken är inte så smart - vi ska bara slå dem på och av.

begränsningar

Även om visserligen inte optimerad kod, tar det nästan en sekund för nätverksgränssnittet hos Arduino att skicka en enda kommandoförfrågan. Jag testade samma kommando från en Mac, med samma Ethernet-anslutning, och det kunde klara tio till tjugo gånger så hög hastighet (här är AppleScript om du vill testa). Följaktligen är det inte möjligt med någon form av snabb animering (jag försökte skapa en blinkande ljus effekt) från en Arduino. Det här borde inte vara ett problem för de flesta projekt, bara för höghastighetsljusanimationer, men det är bra att vara medveten om begränsningen.

Det är också svårt att fullständigt tolka något JSON-svar du kommer tillbaka från bron. det finns bara inte tillräckligt med RAM på Arduino för att lagra alla rådata. Av denna anledning kan du oftast begränsa dig till att skicka.

Hack färgtonen

Nu när du är beväpnad med kunskapen om hur man kontrollerar Hue helt självständigt öppnar den en värld av Hue hemautomatiseringshackar. Den verkliga frågan är: vad ska du göra?

Utforska mer om: Arduino, Philips Hue, Smart Lighting.