Advertentie

Het Philips Hue-assortiment lampen is zeker niet goedkoop (er zijn enkele alternatieven Philips Hue-alternatieven die het echt waard zijnHet Philips Hue-systeem loopt voorop als het gaat om slimme verlichting, maar er zijn enkele waardige alternatieven. We hebben er drie gekozen die allemaal dezelfde basisfuncties en hackbaarheid bieden. Lees verder ), maar een ding dat ik echt op prijs stel, is het goed gedocumenteerde API Wat zijn API's en hoe veranderen open API's het internet?Heb je je ooit afgevraagd hoe programma's op je computer en de websites die je bezoekt met elkaar "praten"? Lees verder voor het maken van uw eigen Hue-apps. Vandaag laat ik je zien hoe je je Hue-lampen kunt bedienen vanaf een Arduino - en vervolgens een eenvoudige bewegingssensor toe te voegen.

Waarom doen we dit? Omdat domotica-systemen behoorlijk stijf en duur kunnen zijn. Door te leren hoe je de Hue vanuit Arduino kunt bedienen, open je de deuren voor een verscheidenheid aan op maat gemaakte domotica-projecten die simpelweg niet te verslaan zijn met standaardcomponenten. Als dingen samen hacken gewoon niet jouw ding is, probeer deze dan

instagram viewer
8 fantastische Hue-apps De 7 beste Philips Hue-apps voor Android en iPhoneOp zoek naar de beste Philips Hue-apps voor gebruik met je slimme lampen? Hier zijn verschillende geweldige apps voor iPhone en Android. Lees verder in plaats daarvan.

Het Hue-systeem

Laten we een beetje technisch worden, zodat u de onderliggende systemen kent waarmee u werkt. Hue-lampen creëren een Mesh-netwerk Mesh-netwerken: de toekomst van communicatieMesh-netwerken zijn bijna onkwetsbaar. In een mesh-netwerk zijn er geen knelpunten waar al het verkeer doorheen gaat. In plaats daarvan wordt informatie van het ene apparaat naar het volgende overgedragen totdat het zijn bestemming bereikt. Lees verder , met behulp van een kort bereik draadloos protocol genaamd ZigBee - specifiek zijn ze dat ZigBee Light Link gecertificeerd, wat betekent dat andere ZLL-producten ook naast de Hue zouden moeten werken (in theorie).

Hoewel technisch kort bereik, betekent de mesh-netwerkfunctie van ZigBee dat elke nieuwe lamp het netwerk uitbreidt en berichten doorgeeft aan andere lampen. Dit betekent dat als u problemen heeft met het regelen van een lamp aan de andere kant van het huis, u een andere lamp tussen de twee probeert te plaatsen.

Zigbee is een geweldig protocol, maar het is heel anders dan wifi 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 standaard webserver uitzendt.

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

Door met deze lokale webserver te communiceren, kunt u de huidige status van de lampen achterhalen en ze bedienen.

Het is een prachtig eenvoudig systeem en rijp voor doe-het-zelf-projecten. Een pluim voor Philips voor het zo hackbaar maken van dit ding.

Beginnen

Voordat u toegang krijgt tot de API-documentatie, moet u dit doen registreer als ontwikkelaar. Het is gratis, maar u moet de algemene voorwaarden accepteren. Doe dit nu.

Iedereen die bekend is met standaard webservices of Javascript zou met de Hue moeten kunnen werken: alle gegevens worden doorgegeven en ontvangen zoals JSON-pakketten Wat is JSON? Overzicht van een leekOf u nu van plan bent een webontwikkelaar te 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 .

Om dit in actie te kunnen zien, moet je het IP-adres van je Hue bridge weten. U kunt dit op verschillende manieren doen:

  • Bekijk de DHCP-adrestoewijzingstabel 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 je klaar bent, ga je gang en typ je het in met 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 hulpprogramma voor foutopsporing waarmee u de JSON-pakketten via een eenvoudige webinterface kunt verzenden en ontvangen. De eerste stap is het inschakelen van het ontwikkelaarsprofiel op de Hue Bridge zelf - dat om veiligheidsredenen standaard is uitgeschakeld. Plak het volgende in het BODY-veld, laat de URL staan ​​als /api/en stuur een POST-verzoek door op te klikken knop plaatsen:

{"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 die vereist dat elke nieuwe applicatie die u gebruikt fysiek geautoriseerd is. Ga je Bridge zoeken, druk op de knop en stuur hetzelfde verzoek opnieuw binnen 30 seconden. Deze keer krijg je een ander antwoord en wordt de gebruiker geautoriseerd. Als je een andere gebruikersnaam wilt gebruiken, lees dan de API-documenten over gebruikers creëren. Voorlopig is dit voldoende.

Zodra uw gebruiker is ingesteld, wordt de basis-URL waarmee u moet communiceren /api/newdeveloper/. U kunt een GET-verzoek sturen om alles te weten te komen wat uw Bridge momenteel weet over aangesloten lampen, 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": "Uitgebreid kleurenlicht", "name": "Slaapkamer 1", "modelid": "LCT001", 

Merk op dat de "Aan": waar staat geeft niet echt aan of de lamp aan is of niet; alleen dat volgens de Bridge-instellingen zou moeten aan zijn. "Bereikbaar": false kan zowel een lamp aangeven die te ver weg is, of gewoon uitgaan 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 naar uw licht) en stuur een PUT-verzoek met de volgende gegevens:

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

Je zou je licht als volgt moeten zien reageren:

tint demo

Wat je hebt gedaan, is een nieuwe staat naar de lamp brengen. U kunt ook 'overgangstijd' toevoegen, een primitieve animatiemethode die aangeeft hoeveel seconden u wilt dat de statuswijziging duurt.

De kleur kan worden ingesteld een aantal verschillende manieren, maar helaas is er geen eenvoudige manier om een ​​RGB-waarde te verzenden. In het bovenstaande voorbeeld hebben we verzonden tint, zaurineren, en brightness. Wijzig de tintwaarde en verzend het PUT-verzoek opnieuw.

Werken vanuit Arduino

Er is een bestaande Hue / Arduino-bibliotheek genaamd ArduinoHue waar Philips zelf naar linkt in de API-documentatie, maar het probleem met deze bibliotheek is dat het communiceert via de USB-verbinding met uw pc, die ook een Python-applicatie moet draaien constant. Eugh. Je kunt net zo goed je computer het hele ding laten draaien op dat moment en de Arduino volledig uitknippen.

In plaats daarvan laat ik je zien hoe je de Hue vanuit de Arduino bedient met behulp van een Ethernet-schild. Je Arduino hoeft niet te zijn aangesloten op een computer, dus hij kan onafhankelijk werken overal waar je een Ethernet-kabel kunt plaatsen. In feite zou het ook moeten werken met een wifi-schild, maar ik heb er geen om mee te spelen.

ehternet-sheild-box

Als je verder wilt gaan, is de volledige voorbeeldcode hieronder ingesloten, of beschikbaar Hier. Ik heb het aangepast van een gepost voorbeeld door Gilson Oguime. Als je nog nooit met je Ethernet-schild hebt gespeeld, wil je misschien een snelle doorloop door de webclient tutorial - Ik ga ervan uit dat ik hiermee enigszins vertrouwd ben en ga niet in op de code die wordt gebruikt om een ​​netwerk-IP op te zetten, enz. We hebben je ook laten zien hoe u een mini-webserver maakt met het Ethernet-schild Geef uw Arduino-project zijn eigen mini-webserver, met een Ethernet ShieldEen tijdje geleden liet ik je zien hoe je een internetcontrolesysteem voor je Arduino instelt, maar het moest via USB verbonden blijven met een computer om de internetverbinding te behouden ... Lees verder .

Staatsveranderingen creëren

Het creëren van een nieuwe staat om naar de bollen te duwen is een eenvoudig geval van het creëren van een nieuwe Draad variabele en ontsnapt aan alle dubbele aanhalingstekens. Ik heb een willekeurig() functie daar ook om een ​​ietwat dynamische animatie te creëren. Probeer de tint ook willekeurig te maken voor verschillende kleuren.

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

Het commando verzenden

Om de opdracht daadwerkelijk te verzenden, hebt u een helperfunctie genaamd setHue () die het lichte nummer en de opdrachtreeks als argument gebruikt, zoals zo:

setHue (1, opdracht);

Het enige dat 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 (); // lege regel voor body. client.println (opdracht); // Hue-opdracht. 

Een bewegingssensor toevoegen

Eindelijk heb ik een eenvoudige bedraad HC-SR501 bewegingssensor naar digitale I / O pin 2. Wanneer beweging wordt gedetecteerd, wordt een reeks toestanden naar de brug geduwd voor 2 lampen om een ​​langzame, dynamische animatie te creëren. Wanneer de bewegingssensor wordt gedeactiveerd, wordt naar beide een eenmalige opdracht gestuurd. Idealiter zouden ze worden teruggezet in de staat waarin ze zich bevonden voordat beweging werd gedetecteerd, maar de logica is niet zo slim - we gaan ze gewoon in- en uitschakelen.

Beperkingen

Hoewel weliswaar niet-geoptimaliseerde code, duurt het bijna een seconde voordat de netwerkinterface van de Arduino één opdrachtverzoek verzendt. Ik testte dezelfde opdracht van een Mac, met dezelfde Ethernet-verbinding, en het was in staat tot tien tot twintig keer die snelheid (hier is de AppleScript voor het geval u wilt testen). Bijgevolg is elke vorm van snelle animatie (ik probeerde een flikkerend kaarseffect te creëren) gewoon niet mogelijk vanaf een Arduino. Dit zou voor de meeste projecten geen probleem moeten zijn, alleen voor snelle lichtanimaties, maar het is goed om je bewust te zijn van de beperking.

Het is ook moeilijk om alle JSON-reacties die je van de bridge terugkrijgt volledig te parseren; er is gewoon niet genoeg RAM op de Arduino om alle onbewerkte gegevens op te slaan. Om deze reden wilt u zich misschien vooral beperken tot verzenden.

Hack de tint

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

James heeft een BSc in Artificial Intelligence en is CompTIA A + en Network + gecertificeerd. Hij is de hoofdontwikkelaar van MakeUseOf en brengt zijn vrije tijd door met het spelen van VR paintball en bordspellen. Hij bouwt al pc's sinds hij een kind was.