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

So steuern Sie Philips Hue Lights von einem Arduino aus (und fügen Sie einen Bewegungssensor hinzu) / DIY

Die Philips Hue-Leuchtenpalette ist sicherlich nicht billig (es gibt einige Alternativen, die es wirklich wert sind.) Philips Hue-Alternativen, die sich wirklich lohnen Das Philips Hue-System ist führend, wenn es um intelligente Beleuchtung geht, aber es gibt einige lohnende Alternativen. Wir haben drei ausgewählt, die alle die gleichen grundlegenden Funktionen und Hacks bieten. Weitere Informationen), aber ich schätze die gut dokumentierte API Was sind APIs und wie sind offene APIs, die das Internet ändern , Und wie verändern sich offene APIs im Internet? Haben Sie sich jemals gefragt, wie Programme auf Ihrem Computer und die von Ihnen besuchten Websites miteinander "sprechen"? 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 aus steuern können, öffnen Sie die Tür zu einer Vielzahl von maßgeschneiderten Hausautomationsprojekten, die mit Standardkomponenten einfach nicht zu übertreffen sind. Wenn Sie nur Dinge zusammen hacken, probieren Sie diese 8 fantastischen Hue-Apps aus. 8 Fabelhafte Apps für Philips Hue-Lichter 8 Fabelhafte Apps für Philips Hue-Lichter Das Philips Hue-System hat eine eigene App, aber warum sollten Sie sich mit dem Standard zufrieden geben? coolere Optionen da draußen? Diese 8 Apps bieten fantastische Optionen für einige wirklich coole Effekte. Lesen Sie stattdessen mehr.

Das Hue-System

Lassen Sie uns ein wenig technisch machen, damit Sie die zugrunde liegenden Systeme kennen, mit denen Sie arbeiten. Hue-Lichter bilden ein Maschennetzwerk Mesh Networks: Die Zukunft der Kommunikation Mesh-Netzwerke: Die Zukunft der Kommunikation Mesh-Netzwerke sind nahezu unverwundbar. In einem Maschennetz gibt es keine Drosselstellen, durch die der gesamte Verkehr fließt. Stattdessen werden Informationen von einem Gerät zum nächsten weitergeleitet, bis sie ihr Ziel erreichen. Lesen Sie mehr, indem Sie ein drahtloses Protokoll mit kurzer Reichweite namens ZigBee verwenden. Speziell sind sie ZigBee Light Link-zertifiziert. Das bedeutet, dass andere ZLL-Produkte neben dem Hue auch funktionieren sollten (theoretisch)..

Obwohl es sich um eine technisch sehr geringe Reichweite handelt, bedeutet die ZigBee-Vernetzungsfunktion, dass jede neue Glühlampe das Netzwerk erweitert und Nachrichten an andere Glühlampen weiterleitet. Wenn Sie also Probleme haben, ein Licht auf der anderen Seite des Hauses zu steuern, setzen Sie ein anderes Licht zwischen die beiden.

ZigBee ist ein großartiges Protokoll, aber es unterscheidet sich erheblich von WLAN oder einem kabelgebundenen Computernetzwerk. Daher benötigen 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 grundlegenden Webserver sendet.

Dies wird angezeigt, 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 Leuchten ermitteln und steuern.

Es ist ein wunderschön einfaches System und reif für Heimwerkerprojekte. Ein großes Lob an Philips dafür, dass dieses Ding so hackbar ist.

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 Allgemeinen Geschäftsbedingungen akzeptieren. Mach das jetzt.

Jeder, der mit Standard-Webdiensten oder Javascript vertraut ist, sollte mit dem Hue arbeiten können: Alle Daten werden als JSON-Pakete übergeben und empfangen. Was ist JSON? Überblick über Laien Was ist JSON? Überblick über Laien Egal, ob Sie ein Webentwickler sind oder nicht, es ist eine gute Idee, zumindest zu wissen, was JSON ist, warum es wichtig ist und warum es überall im Web verwendet wird. Weiterlesen .

Um dies in Aktion zu sehen, müssen Sie die IP-Adresse Ihrer Hue-Bridge kennen. Dafür gibt es mehrere Möglichkeiten:

  • Schauen Sie sich die DHCP-Adressenzuweisungstabelle in der Admin-Benutzeroberfläche Ihres Routers an
  • Führen Sie ein Netzwerkzuordnungsprogramm wie IP Scanner Home aus
  • Probieren Sie das Philips UPnP-Broker-Tool aus
  • Klingeln “philips-hue.home”

Wenn Sie fertig sind, geben Sie es in die Adressleiste Ihres Browsers ein debug / clip.html an die URL angehängt. In meinem Fall war dies:

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 - dieses ist aus Sicherheitsgründen standardmäßig deaktiviert. Fügen Sie Folgendes in das Feld BODY ein, und belassen Sie die URL als / api /, und senden Sie eine POST-Anfrage, indem Sie auf klicken Post-Taste:

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

Wenn Sie dies zum ersten Mal tun, sehen Sie eine “Verknüpfungstaste nicht gedrückt” irgendwo in der Antwort. Dies ist eine Sicherheitsfunktion, die erfordert, dass jede neu verwendete Anwendung physisch autorisiert wird. Suchen Sie Ihre Bridge, drücken Sie die Taste und senden Sie dieselbe Anfrage erneut innerhalb von 30 Sekunden. Dieses Mal erhalten Sie eine andere Antwort und der Benutzer wird autorisiert. Wenn Sie einen anderen Benutzernamen verwenden möchten, lesen Sie die API-Dokumente zum Erstellen von Benutzern. Für den Moment reicht das aus.

Sobald Ihr Benutzer eingerichtet ist, wird die Basis-URL, mit der Sie interagieren sollten / api / neuer entwickler / . Sie können eine GET-Anfrage senden, um herauszufinden, was Ihre Bridge aktuell über angeschlossene Leuchten, Alarme, Szenen und ein kurzes Protokoll der verwendeten Apps weiß. Hier ist ein Beispiel einiger Statusinformationen, die für eine einzelne Glühlampe enthalten sind.

 "state": "on": true, "bri": 254, "hue": 14910, "sat": 144, "effect": "none", "xy": [0,4596, 0,4105], "ct" : 369, "alert": "none", "colormode": "ct", "erreichbar": false, "type": "Erweitertes Farblicht", "name": "Schlafzimmer 1", "modelid": " LCT001 ", 

Notiere dass der “auf”:wahr Zustand zeigt Ihnen nicht wirklich an, ob die Glühlampe eingeschaltet ist oder nicht; nur das entsprechend den Bridge-Einstellungen sollte auf sein. “erreichbar”:falsch kann sowohl eine zu weit entfernte Glühlampe anzeigen als auch einfach am Netzschalter ausgeschaltet werden.

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

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

Sie sollten sehen, wie Ihr Licht so reagiert:

Was Sie getan haben, ist, der Glühlampe einen neuen Zustand zu verleihen. Sie können auch hinzufügen “Übergangszeit”, Dies ist eine primitive Animationsmethode, 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 gesendet Farbton, saßuration und briGesundheit Ändern Sie den Farbtonwert und senden Sie die PUT-Anforderung erneut.

Arbeiten von Arduino

Es gibt eine vorhandene Hue / Arduino-Bibliothek namens ArduinoHue, mit der sich Philips in der API-Dokumentation selbst verlinkt. Das Problem dieser Bibliothek besteht jedoch darin, dass sie über die USB-Verbindung mit Ihrem PC kommuniziert, der ebenfalls ständig eine Python-Anwendung ausführen muss. Eugh. Sie können Ihren Computer an diesem Punkt genauso gut laufen lassen und den Arduino vollständig ausschneiden.

Stattdessen zeige ich Ihnen, wie Sie den Farbton vom Arduino aus steuern können mit einer Ethernet-Abschirmung. Ihr Arduino muss nicht an einen Computer angeschlossen sein, sodass er unabhängig von dem 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 keinen, mit dem ich spielen kann.

Wenn Sie weitergehen möchten, ist der vollständige Beispielcode unten eingebettet oder hier verfügbar. Ich habe es aus einem Beispiel von Gilson Oguime angepasst. Wenn Sie noch nie mit Ihrem Ethernet-Schild gespielt haben, möchten Sie vielleicht einen kurzen Durchlauf durch das Tutorial für den Web-Client machen. Ich gehe davon aus, dass Sie ein gewisses Maß an Vertrautheit damit haben und nicht den Code beschreiben, der zum Aufbau eines Netzwerks verwendet wird IP usw. Wir haben Ihnen außerdem 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 einen eigenen Mini-Webserver mit einem Ethernet-Schild A Ich habe Ihnen vor einiger Zeit gezeigt, wie Sie ein Internet-Steuerungssystem für Ihren Arduino einrichten - aber es musste über USB mit einem Computer verbunden bleiben, um die Internetverbindung aufrecht zu erhalten .

Zustandsänderungen erstellen

Das Erstellen eines neuen Zustands zum Drücken auf die Glühlampen ist ein einfacher Fall, wenn ein neuer erstellt wird String variabel und mit allen Anführungszeichen. Ich habe ein hinzugefügt zufällig() Funktion auch dort, um eine etwas dynamische Animation zu erstellen. Versuchen Sie, die Farbtonvariable auch für verschiedene Farben zufällig festzulegen.

String command = "\" on ": true, \" hue "": 50100, "sat": 255, "bri": 255, "Übergangszeit": "+ String (zufällig (15, 25)) + "";

Senden des Befehls

Um den Befehl tatsächlich zu senden, gibt es eine Hilfsfunktion namens setHue (), die die Lichtnummer und die Befehlszeichenfolge als Argument verwendet:

setHue (1, Befehl);

Dann stellt es nur eine Verbindung zur Bridge her, spuckt den Befehl als PUT-Anforderung aus, zusammen mit all dem anderen Unsinn, den das Erstellen einer HTTP-Anfrage mit sich bringt.

 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 (); // Leerzeile vor body client.println (Befehl); // Farbtonbefehl 

Bewegungssensor hinzufügen

Zum Schluss habe ich einen einfachen Bewegungssensor HC-SR501 mit dem digitalen E / A-Pin 2 verbunden. Wenn eine Bewegung erkannt wird, wird eine Reihe von Zuständen für 2 Lampen an die Brücke gedrückt, um eine langsame, dynamische Animation zu erzeugen. Wenn der Bewegungssensor deaktiviert ist, wird ein einzelner Ausschaltbefehl an beide gesendet. Im Idealfall würden sie wieder in den Zustand versetzt werden, in dem sie sich befanden, bevor Bewegung erkannt wurde, aber die Logik ist nicht so klug - wir werden sie nur ein- und ausschalten.

Einschränkungen

Zwar nicht optimierter Code, dauert es fast eine Sekunde, bis die Netzwerkschnittstelle des Arduino eine einzige Befehlsanforderung sendet. Ich habe den gleichen Befehl von einem Mac aus mit derselben Ethernet-Verbindung getestet und konnte die zehn- bis zwanzigfache Geschwindigkeit erreichen (hier das AppleScript, falls Sie testen möchten). Folglich ist jede Art schneller Animation (ich habe versucht, einen flackernden Kerzeneffekt zu erzeugen) von einem Arduino einfach nicht möglich. Dies sollte für die meisten Projekte kein Problem sein, nur für Hochgeschwindigkeits-Animationen, aber es ist gut, sich der Einschränkungen bewusst zu sein.

Es ist auch schwierig, JSON-Antworten, die Sie von der Brücke erhalten, vollständig zu analysieren. Es ist 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, da Sie mit dem Wissen, wie Sie Hue vollständig unabhängig steuern können, ausgestattet sind, eröffnet sich Ihnen eine ganze Welt von Hue-Hausautomationshacks. Die eigentliche Frage ist: was wirst du machen?

Erfahren Sie mehr über: Arduino, Philips Hue, Smart Lighting.