Annons

Philips Hue-ljusutbudet är verkligen inte billigt (det finns några alternativ Philips Hue-alternativ som verkligen är värda detPhilips Hue-systemet leder laddningen 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 funktionsuppsättning och hackbarhet. Läs mer ), men en sak som jag verkligen uppskattar är den väl dokumenterade API Vad är API: er och hur ändrar öppna API: er InternetHar du någonsin undrat hur program på din dator och webbplatserna du besöker "pratar" med varandra? Läs mer för att skapa dina egna Hue-appar. Idag kommer jag att visa dig hur du styr dina Hue-lampor från en Arduino och sedan lägga till en enkel rörelsessensor.

Varför gör vi det här? Eftersom hemmeautomationssystem kan vara ganska styva och dyra. Genom att lära dig hur man styr Hue från Arduino öppnar du dörrarna för en mängd specialanpassade hemmeautomationsprojekt som helt enkelt inte kan slås av komponenten utanför hyllan. Om det inte är din sak att hacka saker tillsammans, prova dessa

instagram viewer
8 fantastiska nyansappar De 7 bästa Philips Hue-apparna för Android och iPhoneLetar du efter de bästa Philips Hue-apparna att använda med dina smarta lampor? Här är flera fantastiska appar för iPhone och Android. Läs mer istället.

Nyansystemet

Låt oss bli tekniskt lite så att du vet vilka underliggande system du arbetar med. Nyansljus skapar en nätverk Mesh Networks: The Future of CommunicationMesh-nätverk är nästan okränkbara. I ett nätverk finns det inga chockpunkter genom vilka all trafik passerar. Istället överförs information från en enhet till en annan tills den når sin destination. Läs mer , med ett trådlöst protokoll med kort räckvidd som heter ZigBee - specifikt är de det ZigBee Light Link certifierad, vilket innebär att andra ZLL-produkter också ska fungera tillsammans med Hue (i teorin).

Trots att det är tekniskt kort räckvidd, betyder nätverksfunktionen i ZigBee att varje ny glödlampa utökar nätverket och vidarebefordrar meddelanden till andra glödlampor. Det betyder att om du har problem med att kontrollera ett ljus på andra sidan huset, kan du försöka placera ett annat ljus mellan de två.

Zigbee är ett fantastiskt protokoll, men det är helt annorlunda än Wi-Fi eller ett trådlöst datornätverk, så vi behöver Philips Hue Bridge för att koppla ihop de två. Hue-bron har en modifierad open source-linux-firmware, som sänder en grundläggande webbserver.

Det här är vad du ser om du bara skriver in IP-adressen för din Hue-bro i din webbläsare. Du kan dock inte göra mycket härifrån.
Det här är vad du ser om du bara skriver in IP-adressen för din Hue-bro i din webbläsare. Du kan dock inte göra mycket härifrån.

Det är genom att interagera med den lokala webbservern som du kan ta reda på lampans aktuella status och kontrollera dem.

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

Börjar

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

Alla som känner till vanliga webbtjänster eller Javascript bör kunna arbeta med nyans: all data skickas och tas emot som JSON-paket Vad är JSON? En lekmannsöversiktOavsett om du planerar att vara en 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 runt om på nätet. Läs mer .

För att titta på detta i aktion måste du känna till IP-adressen för 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ätverkskartläggningsprogram som IP Scanner Home
  • Prova Philips UPnP mäklareverktyg
  • Ping “philips-hue.home”
nätverkskartläggning för att hitta bridge

När du är klar går du vidare och skriver den i din webbläsares adressfält med debug / clip.html bifogade URL: en. I mitt fall var detta:

http://192.168.1.216/debug/clip.html

Detta är ett felsökningsverktyg som låter dig skicka och ta emot JSON-paketen genom ett enkelt webbgränssnitt. Det första steget är att aktivera utvecklarprofilen på själva Hue Bridge - som avaktiveras som standard av säkerhetsskäl. Klistra in följande i fältet BODY, lämna webbadressen som /api/och skicka en POST-begäran genom att klicka på postknapp:

{"devicetype": "testanvändare", "username": "newdeveloper"}

Första gången du gör detta ser du en "länkknapp som inte trycks ned" någonstans i svaret. Detta är en säkerhetsfunktion som kräver att varje ny applikation du använder är fysiskt godkänd. Gå och hitta din Bridge, tryck på knappen och skicka samma begäran igen inom 30 sekunder. Den här gången får du ett annat svar och användaren kommer att godkännas. Om du vill använda ett annat användarnamn, läs API-dokumenten om skapa användare. För tillfället räcker detta.

När din användare har konfigurerats blir bas-URL: en du ska interagera med /api/newdeveloper/. Du kan skicka en GET-begäran för att ta reda på allt som din Bridge för närvarande vet om anslutna ljus, larm, scener och en kort logg över appar som har använts. Här är ett exempel på en del av statusinformationen för en enda glödlampa.


"state": {"on": true, "bri": 254, "nyans": 14910, "sat": 144, "effect": "none", "xy": [0.4596, 0.4105], "ct": 369, "alert": "none", "colormode": "ct", "nås": false}, "type": "Utökad färglampa", "name": "Sovrum 1", "modelid": "LCT001", 

Observera att ”On”: true status visar dig inte faktiskt om glödlampan är på eller inte; bara det enligt Bridge-inställningarna, det skall vara på. ”Nås”: false kan indikera både en lampa som är för långt borta eller helt enkelt stängd av vid strömbrytaren.

Ett sista exempel innan vi integrerar detta i Arduino: se till att ett av dina lampor är synligt och tänd, och att du vet vilket nummer det är. Ändra URL till /api/newdevelopers/lights/1/state (ändra numret till ditt ljus) och skicka en PUT-begäran med följande data:

{"nyans": 50100, "lör": 255, "bri": 255}

Du bör se ditt ljus reagera så här:

nyans demo

Vad du har gjort är att skjuta ett nytt tillstånd till glödlampan. Du kan också lägga till "övergångstid", som är en primitiv animeringsmetod som anger hur många sekunder du vill att tillståndsändringen ska ta.

Färgen kan ställas in ett antal olika sätt, men tyvärr finns det inget enkelt sätt att skicka ett RGB-värde. I exemplet ovan skickade vi nyans, saturation, och brightness. Försök ändra nyansvärdet och skicka PUT-begäran 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 detta bibliotek är att det kommunicerar via USB-anslutningen till din dator, som också måste ha ett Python-program ständigt. eugh. Du kan lika gärna låta din dator köra hela saken vid den punkten och skära ut Arduino helt.

Istället visar jag dig hur du kontrollerar nyans från Arduino med en Ethernet-sköld. Din Arduino behöver inte vara ansluten till en dator, så den kan fungera oberoende var du än kan sätta en Ethernet-kabel. Det borde faktiskt också fungera med en Wi-Fi-sköld, men jag har inte en att leka med.

för Ethernet-sheild-box

Om du vill hoppa över är hela provkoden inbäddad nedan eller tillgänglig här. Jag har anpassat det från ett exempel publicerat av Gilson Oguime. Om du aldrig har spelat med din Ethernet-sköld förut kanske du vill ha en snabb körning genom webbklientens handledning - Jag antar viss kännedom om detta och täcker inte koden som används för att upprätta en nätverks-IP etc. Vi har också visat dig hur man skapar en mini-webbserver med Ethernet-skölden Ge ditt Arduino-projekt sin egen mini-webserver, med ett Ethernet-sköldFör ett tag sedan visade jag hur du konfigurerar ett internetkontrollsystem för din Arduino - men det var tvungen att hålla kontakten till en dator via USB för att behålla internetanslutningen ... Läs mer .

Skapa tillståndsändringar

Att skapa ett nytt tillstånd för att pressa till glödlamporna är ett enkelt fall att skapa ett nytt Sträng variabel, och undgå alla dubbla citat. Jag har lagt till en slumpmässig() fungera där också för att skapa en något dynamisk animation. Försök att göra nyansvariabeln slumpmässig också för olika färger.

Strängkommando = "{\" på ": true, \" nu \ ": 50100, \" sat \ ": 255, \" bri \ ": 255, \" transittime \ ":" + String (slumpmässigt (15, 25)) ^ "}";

Skicka kommandot

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

setHue (1, kommando);

Allt det gör då är att den ansluter till bron, spottar ut kommandot som en PUT-begäran, tillsammans med allt annat nonsens som att skapa en HTTP-begäran innebär.


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 ("Innehållslängd:"); client.println (command.length ()); client.println ("Innehållstyp: text / vanlig; charset = UTF-8" ); client.println (); // blank linje före kroppen. client.println (kommando); // Hue-kommando. 

Lägga till en rörelsesensor

Slutligen kopplade jag en enkel HC-SR501 rörelsessensor till digital I / O-stift 2. När rörelse detekteras, skjuts en serie tillstånd till bron för 2 lampor för att skapa en långsam, dynamisk animering. När rörelsessensorn avaktiveras skickas ett enda av-kommando till båda. Helst skulle de återföras till det tillstånd de var i innan rörelse upptäcktes, men logiken är inte så smart - vi kommer bara att slå på och stänga av dem.

begränsningar

Även om visserligen ooptimerad kod tar det nästan en sekund innan nätverksgränssnittet för Arduino skickar en enda kommandoförfrågan. Jag testade samma kommando från en Mac med samma Ethernet-anslutning, och den kunde tio till tjugo gånger den hastigheten (här är AppleScript om du vill testa). Följaktligen är någon form av snabb animering (jag försökte skapa en flimrande ljuseffekt) helt enkelt inte möjlig från en Arduino. Detta borde inte vara ett problem för de flesta projekt, bara för animationer med hög hastighet, men det är bra att vara medveten om begränsningen.

Det är också svårt att helt analysera alla JSON-svar du kommer tillbaka från bron; det finns bara inte tillräckligt med RAM på Arduino för att lagra all rådata. Av denna anledning kanske du mest vill begränsa dig till att skicka.

Hacka nyansen

Nu när du är beväpnad med kunskapen om hur du styr Hue helt oberoende öppnar det en värld av Hue-hemmeautomatiseringshack. Den verkliga frågan är: vad kommer du att göra?

James har en kandidatexamen i artificiell intelligens och är CompTIA A + och Network + certifierad. Han är ledande utvecklare av MakeUseOf och tillbringar sin fritid med att spela VR-paintball och brädspel. Han har byggt datorer sedan han var liten.