Philips Hue Lights van een Arduino regelen (en een bewegingssensor toevoegen)
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 bieden 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 laat ik je zien hoe je je Hue-lampen bestuurt vanaf een Arduino - en vervolgens 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 - in het bijzonder zijn ze gecertificeerd met ZigBee Light Link, wat betekent dat andere ZLL-producten ook naast 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.
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”
Als je klaar bent, ga je gang en typ je dit in de adresbalk van je browser debug / clip.html toegevoegd aan 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 te klikken knop plaatsen:
"devicetype": "test user", "username": "newdeveloper"
De eerste keer dat u dit doet, ziet u a “verbindingsknop niet ingedrukt” ergens in het antwoord. Dit is een beveiligingsfunctie waarbij elke nieuwe toepassing die u gebruikt, fysiek is toegestaan. Ga naar je bridge, druk op de knop en verzend dezelfde aanvraag opnieuw binnen 30 seconden. 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 lichtjes, 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", "bereikbaar": false, "type": "Uitgebreide kleurenverlichting", "naam": "Slaapkamer 1", "modelid": " LCT001",
Merk op dat de “op”: true status laat niet zien of de lamp aan staat of niet; alleen dat volgens de instellingen van Bridge, it moeten ga door. “bereikbaar”: false 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 dat een van je lichten zichtbaar en aan is en dat je weet welk nummer het is. Verander de URL in / Api / newdevelopers / verlichting / 1 / staat (verander het nummer naar je licht) en verzend een PUT-verzoek met de volgende gegevens:
"hue": 50100, "sat": 255, "bri": 255
Je zou je licht moeten zien reageren als volgt:
Wat je hebt gedaan, is een nieuwe staat naar de bol duwen. Je kunt ook toevoegen “overgangstijd”, Dit is een primitieve animatiemethode die aangeeft hoeveel seconden je wilt dat de status verandert.
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 verzonden tint, zauration, en brightness. Probeer de tintwaarde te wijzigen en het PUT-verzoek opnieuw te verzenden.
Werken vanuit Arduino
Er is een bestaande Hue / Arduino-bibliotheek genaamd ArduinoHue waarmee Philips zelf een koppeling maakt 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 Hue vanuit de Arduino kunt besturen een Ethernet-schild gebruiken. Uw Arduino hoeft niet op een computer te worden aangesloten, zodat hij onafhankelijk overal waar u een Ethernet-kabel kunt gebruiken, kan werken. Eigenlijk zou het ook met een Wi-Fi shield moeten werken, maar ik heb er geen om mee te spelen.
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 Toen ik geleden was, heb ik je laten zien hoe je een internetbedieningssysteem voor je Arduino kon instellen - maar het moest verbonden blijven met een computer via USB om de internetverbinding te behouden ... Lees meer .
Staatswijzigingen maken
Het creëren van een nieuwe staat om naar de bollen te duwen is een eenvoudig geval van het maken van een nieuwe Draad variabele en ontsnappen aan alle dubbele aanhalingstekens. Ik heb een toegevoegd willekeurig() functie daar ook om een ietwat 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, commando);
Het enige wat het dan doet, is dat het verbinding maakt met de brug, het commando uitspuugt als een PUT-verzoek, samen met alle andere onzin dat het maken van een HTTP-verzoek inhoudt.
client.print ("PUT / api /"); client.print (hueUsername); client.print ( "/ verlichting /"); 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 ("Inhoudstype: text / plain; charset = UTF-8"); client.println (); // lege regel vóór body client.println (opdracht); // Hue-opdracht
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, gebruikmakend van 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?
Ontdek meer over: Arduino, Philips Hue, Smart Lighting.