Philips Hue Lights van een Arduino regelen (en een bewegingssensor toevoegen)

Vandaag zal ik je laten zien hoe je je Hue-lampen bestuurt vanaf een Arduino - en dan een eenvoudige bewegingssensor toevoegt.

Vandaag zal ik je laten zien hoe je je Hue-lampen bestuurt vanaf een Arduino - en dan een eenvoudige bewegingssensor toevoegt.
Advertentie

Het Philips Hue-verlichtingsbereik is zeker niet goedkoop (er zijn enkele alternatieven Philips Hue-alternatieven die het echt waard zijn Philips Hue-alternatieven die het echt waard zijn Het Philips Hue-systeem is toonaangevend als het gaat om slimme verlichting, maar er zijn enkele waardige alternatieven. We hebben er drie gekozen die allemaal dezelfde basisfunctieset en hackability hebben Lees meer), maar een ding dat ik erg waardeer, is de goed gedocumenteerde API Wat zijn API's en hoe zijn open API's die het internet veranderen Wat zijn API's, En hoe veranderen open API's van internet Heb je je ooit afgevraagd hoe programma's op je computer en de websites die je bezoekt met elkaar "praten"? Lees meer voor het maken van uw eigen Hue-apps. Vandaag zal ik je laten zien hoe je je Hue-lampen bestuurt vanaf een Arduino - en dan een eenvoudige bewegingssensor toevoegt.

Waarom doen we dit? Omdat huisautomatiseringssystemen behoorlijk rigide en duur kunnen zijn. Door te leren hoe je de Hue van Arduino kunt bedienen, open je de deuren voor een aantal op maat gemaakte huisautomatiseringsprojecten die gewoonweg niet te overtreffen zijn met standaardcomponenten. Als je dingen samen hacken gewoon niet je ding is, probeer dan deze 8 fantastische Hue-apps 8 Fabulous Apps voor Philips Hue Lights 8 Fabulous Apps voor Philips Hue Lights Het Philips Hue-systeem heeft zijn eigen app, maar waarom genoegen nemen met de standaard wanneer er zoveel zijn coolere opties die er zijn? Deze 8 apps bieden fantastische opties voor een aantal echt coole effecten. Meer lezen in plaats daarvan.

Het Hue-systeem

Laten we een beetje technisch worden, zodat u weet met welke systemen u werkt. Hue-lichten creëren een mesh-netwerk Mesh-netwerken: de toekomst van communicatie Mesh-netwerken: de toekomst van communicatie Mesh-netwerken zijn bijna onkwetsbaar. In een mesh-netwerk zijn er geen knelpunten waar alle verkeer doorheen gaat. In plaats daarvan wordt informatie doorgegeven van het ene apparaat naar het volgende totdat het zijn bestemming bereikt. Read More, met behulp van een kort bereik draadloos protocol genaamd ZigBee - specifiek, ze zijn gecertificeerd met ZigBee Light Link, wat betekent dat andere ZLL-producten ook in combinatie met de Hue zouden moeten werken (in theorie).

Hoewel technisch gezien kortbereik, betekent de mesh-netwerkfunctie van ZigBee dat elke nieuwe lamp het netwerk uitbreidt en berichten doorgeeft aan andere lampen. Dit betekent dat als je problemen hebt met het besturen van een lamp aan de andere kant van het huis, probeer een ander licht tussen de twee te plaatsen.

Zigbee is een geweldig protocol, maar het is heel anders dan Wi-Fi of een bekabeld computernetwerk, dus we hebben de Philips Hue Bridge nodig om de twee samen te voegen. De Hue-bridge voert een aangepaste open source Linux-firmware uit, die een basisserver uitzendt.

Dit is wat u ziet als u gewoon het IP-adres van uw Hue-brug in uw browser typt. Je kunt hier echter niet veel doen.
Dit is wat u ziet als u gewoon het IP-adres van uw Hue-brug in uw browser typt. Je kunt hier echter niet veel doen.

Het is door te communiceren met deze lokale webserver dat u de huidige status van de lichten kunt achterhalen en deze kunt bedienen.

Het is een prachtig eenvoudig systeem en rijp voor doe-het-zelfprojecten. Een pluim voor Philips om dit ding zo hackbaar te maken.

Beginnen

Voordat u toegang kunt krijgen tot de API-documentatie, moet u zich registreren als ontwikkelaar. Het is gratis, maar je moet de algemene voorwaarden accepteren. Doe dit nu.

Iedereen die bekend is met standaard webservices of Javascript, moet met de Hue kunnen werken: alle gegevens worden doorgegeven en ontvangen als JSON-pakketten Wat is JSON? Overzicht van A Layman Wat is JSON? Het overzicht van A Layman Of u nu een webontwikkelaar wilt zijn of niet, het is een goed idee om op zijn minst te weten wat JSON is, waarom het belangrijk is en waarom het overal op internet wordt gebruikt. Lees verder .

Als u dit in actie wilt bekijken, moet u het IP-adres van uw Hue-bridge weten. Er zijn een paar manieren om dit te doen:

  • Kijk naar de toewijzingstabel voor DHCP-adressen in de beheerdersinterface van uw router
  • Voer een netwerktoewijzingsprogramma uit, zoals IP Scanner Home
  • Probeer de Philips UPnP-makelaarstool
  • Ping "philips-hue.home"

netwerktoewijzing om bridge te vinden

Als u klaar bent, gaat u door en typt u het in de adresbalk van uw browser met debug / clip.html als bijlage bij de URL. In mijn geval was dit:

http://192.168.1.216/debug/clip.html 

Dit is een foutopsporingstool waarmee u de JSON-pakketten kunt verzenden en ontvangen via een eenvoudige webinterface. De eerste stap is om het ontwikkelaarsprofiel op de Hue-brug zelf in te schakelen - dat om beveiligingsredenen standaard is uitgeschakeld. Plak het volgende in het veld BODY, laat de URL achter als / api /, en verzend een POST-aanvraag door op de knop te klikken :

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

De eerste keer dat u dit doet, ziet u ergens in het antwoord een linkknop niet ingedrukt. Dit is een beveiligingsfunctie waarbij elke nieuwe toepassing die u gebruikt, fysiek is toegestaan. Ga naar je bridge, druk op de knop en verzend binnen 30 seconden hetzelfde verzoek opnieuw. Deze keer krijg je een ander antwoord en wordt de gebruiker geautoriseerd. Als u een andere gebruikersnaam wilt gebruiken, leest u de API-documenten over het maken van gebruikers. Voor nu is dit voldoende.

Zodra uw gebruiker is ingesteld, wordt de basis-URL waarmee u moet communiceren, / api / newdeveloper / . U kunt een GET-verzoek verzenden om te achterhalen wat uw bridge op dit moment weet van verbonden lichten, alarmen, scènes en een kort logboek met apps die zijn gebruikt. Hier is een voorbeeld van een deel van de statusinformatie voor een enkele lamp.

 "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 op dat de "aan": ware status niet echt laat zien of de lamp aan staat of niet; alleen dat volgens de Bridge-instellingen zou moeten zijn ingeschakeld. "Bereikbaar": onwaar kan zowel een lamp aangeven die te ver weg is, of eenvoudig uitgeschakeld met de aan / uit-schakelaar.

Nog een laatste voorbeeld voordat we dit in de Arduino integreren: zorg ervoor dat een van je lichten zichtbaar en aan is en dat je weet welk nummer het is. Wijzig de URL in / api / newdevelopers / lights / 1 / state (verander het nummer in uw light) en verzend een PUT-verzoek met de volgende gegevens:

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

Je zou je licht moeten zien reageren als volgt:

tint demo

Wat je hebt gedaan, is een nieuwe staat naar de bol duwen. U kunt ook 'transitiontime' toevoegen. Dit is een primitieve animatiemethode die aangeeft hoeveel seconden de statuswijziging moet duren.

De kleur kan op verschillende manieren worden ingesteld, maar helaas is er geen eenvoudige manier om een ​​RGB-waarde te verzenden. In het bovenstaande voorbeeld hebben we kleurschakering, saturatie en ernst verzonden. Probeer de tintwaarde te wijzigen en het PUT-verzoek opnieuw te verzenden.

Werken vanuit Arduino

Er is een bestaande Hue / Arduino-bibliotheek met de naam ArduinoHue waarnaar Philips zelf verwijst in de API-documentatie, maar het probleem met deze bibliotheek is dat deze communiceert via de USB-verbinding met uw pc, die ook constant een Python-toepassing moet uitvoeren. Eugh . Je kunt net zo goed je computer op dat punt laten draaien en de Arduino helemaal uitsnijden.

In plaats daarvan zal ik je laten zien hoe je de tint van de Arduino kunt besturen met behulp van een Ethernet-schild . Uw Arduino hoeft niet op een computer te worden aangesloten, zodat hij onafhankelijk overal waar u een Ethernet-kabel kunt gebruiken, kan werken. In feite zou het ook met een Wi-Fi shield moeten werken, maar ik heb er geen om mee te spelen.

ehternet-schild-box

Als u wilt overslaan, is de volledige voorbeeldcode hieronder ingesloten of hier beschikbaar. Ik heb het aangepast aan de hand van een voorbeeld van Gilson Oguime. Als je nog nooit met je Ethernet-shield hebt gespeeld, wil je misschien eerst even de handleiding van de webclient doorlopen - ik ga ervan uit dat ik hier vertrouwd mee ben en zal de code die wordt gebruikt om een ​​netwerk op te zetten niet afdekken. IP etc. We hebben u ook laten zien hoe u een miniserver met het Ethernet-schild maakt Geef uw Arduino-project zijn eigen mini-webserver, met een Ethernet-schild Geef uw Arduino-project zijn eigen mini-webserver, met een Ethernet-schild A terwijl ik geleden was, heb ik je laten zien hoe je een internetbedieningssysteem voor je Arduino kunt instellen - maar het moest verbonden blijven met een computer via USB om de internetverbinding te behouden .... Lees meer.

Staatswijzigingen maken

Een nieuwe status maken om naar de bollen te duwen, is een eenvoudig geval van het maken van een nieuwe String- variabele en het ontsnappen van alle dubbele aanhalingstekens. Ik heb daar ook een willekeurige functie () aan toegevoegd om een ​​enigszins dynamische animatie te maken. Probeer de tint ook variabel willekeurig te maken voor verschillende kleuren.

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

Het commando verzenden

Om de opdracht daadwerkelijk te verzenden, hebt u een helperfunctie met de naam setHue () die het lichtnummer en de opdrachtreeks als argument gebruikt, zoals:

 setHue(1, command); 

Het enige wat het dan doet, is dat het verbinding maakt met de bridge, het commando uitspuugt als een PUT-verzoek, samen met alle andere onzin die het maken van een HTTP-verzoek met zich meebrengt.

 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 

Een bewegingssensor toevoegen

Ten slotte heb ik een eenvoudige HC-SR501 bewegingssensor aangesloten op digitale I / O-pin 2. Wanneer beweging wordt gedetecteerd, wordt een reeks statussen naar de brug geduwd voor 2 lampen om een ​​langzame, dynamische animatie te maken. Wanneer de bewegingsopnemer wordt gedeactiveerd, wordt een enkelvoudig commando aan beide verzonden. Idealiter zouden ze worden teruggezet naar de staat waarin ze zich bevonden voordat beweging werd gedetecteerd, maar de logica is niet zo slim - we gaan ze gewoon aan en uit zetten.

beperkingen

Hoewel het weliswaar niet-geoptimaliseerde code is, duurt het bijna een seconde voor de netwerkinterface van de Arduino om een ​​enkel opdrachtverzoek te verzenden. Ik testte hetzelfde commando van een Mac, met dezelfde Ethernet-verbinding, en het kon tien tot twintig keer zo snel (hier is de AppleScript voor het geval je zou willen testen). Bijgevolg is elke vorm van snelle animatie (ik probeerde een flikkerend kaarseffect te creëren) gewoon niet mogelijk vanaf een Arduino. Dit zou geen probleem moeten zijn voor de meeste projecten, alleen voor snelle lichtanimaties, maar het is goed om op de hoogte te zijn van de beperking.

Het is ook moeilijk om elke JSON-reactie die je van de brug krijgt volledig te analyseren; er is gewoon niet genoeg RAM op de Arduino om alle onbewerkte gegevens op te slaan. Om deze reden zou je jezelf meestal willen beperken tot verzenden.

Hack de tint

Nu je gewapend bent met de kennis van hoe je Hue volledig onafhankelijk kunt besturen, wordt een wereld van Hue-domotica-hacks geopend. De echte vraag is: wat ga je maken?

In this article