So steuern Sie Philips Hue-Lichter von einem Arduino (und fügen Sie einen Bewegungssensor hinzu)

Heute zeige ich Ihnen, wie Sie Ihre Hue-Lichter von einem Arduino aus steuern - und dann einen einfachen Bewegungssensor hinzufügen.

Heute zeige ich Ihnen, wie Sie Ihre Hue-Lichter von einem Arduino aus steuern - und dann einen einfachen Bewegungssensor hinzufügen.
Werbung

Die Philips Hue Leuchten sind sicherlich nicht billig (es gibt einige Alternativen Philips Hue Alternativen, die es wirklich wert sind Philips Hue Alternativen, die es wirklich wert sind Das Philips Hue System ist führend in der Beleuchtung, wenn es um intelligente Beleuchtung geht, aber es gibt welche Wir haben drei ausgewählt, die alle denselben grundlegenden Funktionsumfang und dieselbe Hackbarkeit bieten (Lesen Sie mehr), aber eine Sache, die ich wirklich schätze, ist die gut dokumentierte API. Was sind APIs? Wie ändern APIs das Internet? Was sind APIs? Wie verändern offene APIs das Internet Haben Sie sich schon einmal gefragt, wie Programme auf Ihrem Computer und den von Ihnen besuchten Websites miteinander "reden"? Weitere Informationen zum Erstellen eigener Hue-Apps Heute zeige ich Ihnen, wie Sie Ihre Hue-Lichter von einem Arduino aus steuern - und dann einen einfachen Bewegungssensor hinzufügen.

Warum machen wir das? Weil Hausautomationssysteme ziemlich starr und teuer sein können. Indem Sie lernen, wie Sie den Farbton von Arduino steuern können, öffnen Sie die Türen zu einer Vielzahl von kundenspezifischen Hausautomatisierungsprojekten, die von Standardkomponenten nicht zu übertreffen sind. Wenn Sie zusammen Dinge hacken ist nicht Ihre Sache, versuchen Sie diese 8 fabelhaften Hue-Apps 8 Fabulous Apps für Philips Hue Lights 8 Fabulous Apps für Philips Hue-Lampen Das Philips Hue-System hat seine eigene App, aber warum sich mit der Standardeinstellung zufrieden, wenn es so viele gibt Kühler Optionen da draußen? Diese 8 Apps bieten fantastische Möglichkeiten für einige wirklich coole Effekte. Lesen Sie stattdessen mehr.

Das Farbton-System

Lassen Sie uns ein wenig technisch arbeiten, damit Sie die zugrunde liegenden Systeme kennen, mit denen Sie arbeiten. Hue-Lichter bilden ein Mesh-Netzwerk Mesh-Netzwerke: Die Zukunft der Kommunikation Mesh-Netzwerke: Die Zukunft der Kommunikation Mesh-Netzwerke sind nahezu unverwundbar. In einem Mesh-Netzwerk gibt es keine Drosselstellen, über die der gesamte Verkehr verläuft. Stattdessen werden Informationen von einem Gerät zum nächsten weitergegeben, bis es sein Ziel erreicht. Lesen Sie mehr, verwenden Sie eine kurze Reichweite Wireless-Protokoll namens ZigBee - speziell sind sie ZigBee Light Link zertifiziert, was bedeutet, dass andere ZLL-Produkte sollten auch neben dem Farbton (in der Theorie) arbeiten.

Obwohl es sich um eine technisch kurze Reichweite handelt, bedeutet die Mesh-Networking-Funktion von ZigBee, dass jede neue Glühbirne das Netzwerk erweitert und Nachrichten an andere Glühbirnen weiterleitet. Dies bedeutet, dass, wenn Sie Probleme haben, ein Licht auf der anderen Seite des Hauses zu kontrollieren, versuchen Sie, ein anderes Licht dazwischen zu setzen.

Zigbee ist ein großartiges Protokoll, aber es ist ziemlich anders als WLAN oder ein drahtgebundenes Computernetzwerk. Daher brauchen wir die Philips Hue Bridge, um die beiden miteinander zu verbinden. Die Hue-Bridge führt eine modifizierte Open-Source-Linux-Firmware aus, die einen Basis-Webserver ausstrahlt.

Dies sehen Sie, wenn Sie einfach die IP-Adresse Ihrer Hue-Bridge in Ihren Browser eingeben. Von hier aus kann man nicht viel machen.
Dies sehen Sie, wenn Sie einfach die IP-Adresse Ihrer Hue-Bridge in Ihren Browser eingeben. Von hier aus kann man nicht viel machen.

Durch die Interaktion mit diesem lokalen Webserver können Sie den aktuellen Status der Lichter ermitteln und steuern.

Es ist ein wunderschön einfaches System und reif für DIY-Projekte. Ein großes Lob an Philips, dieses Ding so hackbar zu machen.

Beginnend

Bevor Sie auf die API-Dokumentation zugreifen können, müssen Sie sich als Entwickler registrieren. Es ist kostenlos, aber Sie müssen die Bedingungen akzeptieren. Mach das jetzt.

Wer mit Standard-Webdiensten oder Javascript vertraut ist, sollte mit dem Farbton arbeiten können: Alle Daten werden als JSON-Pakete übergeben und empfangen. Was ist JSON? Ein Laien Überblick Was ist JSON? Überblick über Laien Ob Sie ein Webentwickler sein möchten oder nicht, es ist eine gute Idee, zumindest zu wissen, was JSON ist, warum es wichtig ist und warum es überall im Internet verwendet wird. Weiterlesen .

Um dies in Aktion zu sehen, müssen Sie die IP-Adresse Ihrer Hue-Bridge kennen. Es gibt einige Möglichkeiten, dies zu tun:

  • Sehen Sie sich die DHCP-Adresszuweisungstabelle in der Admin-Oberfläche Ihres Routers an
  • Führen Sie ein Netzwerk-Mapping-Programm wie IP Scanner Home aus
  • Probieren Sie das Philips UPnP-Broker-Tool aus
  • Ping "philips-hue.home"

Netzwerk-Mapping, um eine Brücke zu finden

Wenn Sie fertig sind, geben Sie es in die Adresszeile Ihres Browsers ein, wobei Sie an die URL " debug / clip.html" angehängt haben. In meinem Fall war das:

http://192.168.1.216/debug/clip.html 

Dies ist ein Debugging-Tool, mit dem Sie die JSON-Pakete über eine einfache Webschnittstelle senden und empfangen können. Der erste Schritt besteht darin, das Entwicklerprofil auf der Hue-Bridge selbst zu aktivieren - was aus Sicherheitsgründen standardmäßig deaktiviert ist. Fügen Sie Folgendes in das Feld BODY ein, belassen Sie die URL als / api / und senden Sie eine POST-Anfrage, indem Sie auf die Schaltfläche post klicken:

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

Wenn Sie dies zum ersten Mal tun, sehen Sie irgendwo in der Antwort einen "Link-Button nicht gedrückt". Dies ist eine Sicherheitsfunktion, die erfordert, dass jede neue Anwendung, die Sie verwenden, physisch autorisiert ist. Geh und finde deine Bridge, drücke die Taste und sende dieselbe Anfrage innerhalb von 30 Sekunden erneut . Diesmal erhalten Sie eine andere Antwort und der Benutzer wird autorisiert. Wenn Sie einen anderen Benutzernamen verwenden möchten, lesen Sie die API-Dokumentation zum Erstellen von Benutzern. Für jetzt wird dies ausreichen.

Sobald Ihr Benutzer eingerichtet ist, wird die Basis-URL, mit der Sie interagieren sollen, / api / newdeveloper / . Sie können eine GET-Anfrage senden, um alles zu erfahren, was Ihre Bridge aktuell über angeschlossene Lichter, Alarme, Szenen und ein kurzes Protokoll der verwendeten Apps weiß. Hier ist ein Beispiel für einige Statusinformationen, die für eine einzelne Glühbirne enthalten sind.

 "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",  

Beachten Sie, dass der Status "Ein": Wahr nicht anzeigt, ob die Glühbirne eingeschaltet ist oder nicht. nur dass laut den Bridge-Einstellungen es eingeschaltet sein sollte. "Erreichbar": false kann sowohl auf eine Lampe hinweisen, die zu weit entfernt ist, als auch einfach auf den Netzschalter geschaltet werden.

Ein letztes Beispiel, bevor wir dies in das Arduino integrieren: Stellen Sie sicher, dass eines Ihrer Lichter sichtbar und eingeschaltet ist und dass Sie wissen, welche Nummer es ist. Ändern Sie die URL in / api / newdevelopers / lights / 1 / state (Ändern der Nummer in Ihr Licht), und senden Sie eine PUT-Anfrage mit den folgenden Daten:

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

Du solltest dein Licht so reagieren sehen:

Farbton-Demo

Was Sie getan haben ist, einen neuen Zustand auf die Glühbirne zu schieben. Sie können auch "Übergangszeit" hinzufügen, bei der es sich um eine primitive Animationsmethode handelt, die angibt, wie viele Sekunden die Statusänderung dauern soll.

Die Farbe kann auf verschiedene Arten eingestellt werden, aber leider gibt es keine einfache Möglichkeit, einen RGB-Wert zu senden. Im obigen Beispiel haben wir Farbton, Sättigung und Brillianz gesendet. Versuchen Sie, den Farbtonwert zu ändern und die PUT-Anfrage erneut zu senden.

Arbeiten von Arduino

Es gibt eine vorhandene Hue / Arduino-Bibliothek mit dem Namen ArduinoHue, die von Philips selbst in der API-Dokumentation verlinkt ist. Das Problem mit dieser Bibliothek besteht jedoch darin, dass sie über die USB-Verbindung mit Ihrem PC kommuniziert, der auch ständig eine Python-Anwendung ausführen muss. Eugh . Sie können auch Ihren Computer das ganze Ding an diesem Punkt ausführen lassen und den Arduino komplett ausschneiden.

Stattdessen zeige ich Ihnen, wie Sie den Farbton vom Arduino mithilfe einer Ethernet-Abschirmung steuern können. Ihr Arduino muss nicht an einen Computer angeschlossen sein, so dass er unabhängig von jedem Ort betrieben werden kann, an dem Sie ein Ethernet-Kabel anschließen können. In der Tat sollte es auch mit einem Wi-Fi-Schild funktionieren, aber ich habe kein mit zu spielen.

Ehternet-Sheild-Box

Wenn Sie den Vorgang überspringen möchten, ist der vollständige Beispielcode unten eingebettet oder hier verfügbar. Ich habe es an einem Beispiel von Gilson Oguime angepasst. Wenn Sie noch nie zuvor mit Ihrem Ethernet-Shield gespielt haben, sollten Sie das Lernprogramm für Web-Clients schnell durchgehen. Ich gehe davon aus, dass Sie damit vertraut sind und den Code zum Einrichten eines Netzwerks nicht abdecken IP usw. Wir haben Ihnen auch gezeigt, wie Sie einen Mini-Webserver mit dem Ethernet-Schild erstellen. Geben Sie Ihrem Arduino-Projekt einen eigenen Mini-Webserver mit einem Ethernet-Schild. Geben Sie Ihrem Arduino-Projekt seinen eigenen Mini-Webserver mit einem Ethernet-Schild A Vor einiger Zeit habe ich Ihnen gezeigt, wie Sie ein Internet-Kontrollsystem für Ihren Arduino einrichten - aber es musste mit einem Computer über USB verbunden bleiben, um die Internetverbindung aufrechtzuerhalten .... Read More.

Erstellen von Statusänderungen

Wenn Sie einen neuen Status erstellen, um zu den Glühbirnen zu wechseln, erstellen Sie einfach eine neue String- Variable und entfernen alle doppelten Anführungszeichen. Ich habe auch eine zufällige () Funktion hinzugefügt, um eine etwas dynamische Animation zu erstellen. Versuchen Sie, die Farbtonvariable auch für verschiedene Farben zufällig zu machen.

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

Senden des Befehls

Um den Befehl tatsächlich zu senden, haben Sie eine Hilfsfunktion namens setHue (), die die Lichtnummer und die Befehlszeichenfolge wie folgt als Argument verwendet:

 setHue(1, command); 

Alles, was es dann tut, ist, dass es sich mit der Bridge verbindet, den Befehl als PUT-Anfrage ausspuckt, zusammen mit all dem anderen Unsinn, den das Erstellen einer HTTP-Anfrage beinhaltet.

 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 

Hinzufügen eines Bewegungssensors

Schließlich habe ich einen einfachen HC-SR501-Bewegungssensor an den digitalen I / O-Pin 2 angeschlossen. Wenn eine Bewegung erkannt wird, wird eine Reihe von Zuständen auf die Brücke für 2 Glühbirnen geschoben, um eine langsame, dynamische Animation zu erzeugen. Wenn der Bewegungssensor deaktiviert wird, wird ein einzelner Aus-Befehl an beide gesendet. Im Idealfall würden sie in den Zustand zurückversetzt, in dem sie waren, bevor Bewegung erkannt wurde, aber die Logik ist nicht so schlau - wir werden sie einfach ein- und ausschalten.

Einschränkungen

Obwohl es zugegebenermaßen nicht optimierter Code ist, dauert es fast eine Sekunde, bis die Netzwerkschnittstelle des Arduino eine einzige Befehlsanforderung sendet. Ich habe den gleichen Befehl von einem Mac aus mit der gleichen Ethernet-Verbindung getestet und war zehn- bis zwanzigmal schneller (hier ist das AppleScript für den Fall, dass Sie testen möchten). Folglich ist jede Art von schneller Animation (ich habe versucht, einen flackernden Kerzeneffekt zu erzeugen) einfach nicht von einem Arduino möglich. Dies sollte kein Problem für die meisten Projekte sein, nur für High-Speed-Lichtanimationen, aber es ist gut, sich der Einschränkung bewusst zu sein.

Es ist auch schwierig, alle JSON-Antworten, die Sie von der Bridge erhalten, vollständig zu analysieren. Es gibt einfach nicht genug RAM auf dem Arduino, um alle Rohdaten zu speichern. Aus diesem Grund sollten Sie sich hauptsächlich auf das Senden beschränken.

Hack den Farbton

Jetzt, wo Sie das Wissen besitzen, wie Sie Hue völlig unabhängig steuern können, öffnet sich eine Welt von Hue-Home-Automation-Hacks. Die wirkliche Frage ist: Was wirst du machen?

In this article