Come controllare le luci Philips Hue da un Arduino (e aggiungere un sensore di movimento)

Come controllare le luci Philips Hue da un Arduino (e aggiungere un sensore di movimento) / Fai da te

La gamma di lampade Philips Hue non è certamente a buon mercato (ci sono alcune alternative Philips Hue Alternative che valgono davvero la pena Philips Hue Alternative che ne valgono davvero la pena Il sistema Philips Hue è all'avanguardia per quanto riguarda l'illuminazione intelligente, ma ci sono alcuni alternative degne di nota: ne abbiamo scelte tre che offrono tutte le stesse funzionalità e accessibilità di base Read More), ma una cosa che apprezzo molto è l'API ben documentata What Are APIs e How Are API aperte Modifica di Internet What Are APIs E come le API aperte cambiano Internet Ti sei mai chiesto come i programmi sul tuo computer e sui siti web visitati "parlano" tra loro? Leggi di più per creare le tue app di tonalità. Oggi ti mostrerò come controllare le luci Hue da un Arduino, quindi aggiungo un semplice sensore di movimento.

Perché stiamo facendo questo? Perché i sistemi di automazione domestica possono essere abbastanza rigidi e costosi. Imparando a controllare la tonalità da Arduino, apri le porte a una serie di progetti di automazione domestica su misura che non possono essere battuti da componenti standard. Se le azioni di hacking insieme non fanno per te, prova queste 8 favolose app Hue 8 App favolose per Philips Hue Lights 8 App favolose per Philips Hue Lights Il sistema Philips Hue ha una sua app, ma perché accontentarsi del default quando ci sono così tante opzioni più interessanti là fuori? Queste 8 app ti offrono fantastiche opzioni per effetti davvero fantastici. Leggi di più invece.

Il sistema di tonalità

Prendiamo tecnica per un po 'così saprai i sistemi sottostanti con cui stai lavorando. Le luci Hue creano una rete mesh Reti mesh: il futuro della comunicazione Reti mesh: il futuro della comunicazione Le reti mesh sono quasi invulnerabili. In una rete mesh, non ci sono punti di strozzatura attraverso i quali passa tutto il traffico. Invece, le informazioni vengono passate da un dispositivo a quello successivo fino a raggiungere la sua destinazione. Leggi di più, usando un protocollo wireless a corto raggio chiamato ZigBee - in particolare, sono certificati ZigBee Light Link, il che significa che anche altri prodotti ZLL dovrebbero funzionare a fianco della tonalità (in teoria).

Sebbene tecnicamente corto, la funzionalità di rete mesh di ZigBee significa che ogni nuova lampadina estende la rete, inoltrando messaggi ad altre lampadine. Ciò significa che se hai problemi a controllare una luce dall'altra parte della casa, prova a mettere un'altra luce tra i due.

Zigbee è un protocollo eccezionale, ma è molto diverso dal Wi-Fi o da una rete di computer cablata, quindi abbiamo bisogno del Philips Hue Bridge per unire le due cose insieme. Il bridge Hue esegue un firmware Linux open source modificato, che trasmette un server Web di base.

Questo è ciò che vedrai se digiti l'indirizzo IP del tuo bridge Hue nel tuo browser. Non puoi fare molto da qui però.

È interagendo con questo server web locale che puoi scoprire lo stato corrente delle luci e controllarle.

È un sistema meravigliosamente semplice e maturo per progetti fai-da-te. Complimenti a Philips per aver reso questa cosa così hackerabile.

Inziando

Prima di poter accedere alla documentazione dell'API, è necessario registrarsi come sviluppatore. È gratuito, ma è necessario accettare i termini e le condizioni. Fallo ora.

Chiunque abbia familiarità con i servizi Web standard o Javascript dovrebbe essere in grado di lavorare con la tonalità: tutti i dati vengono passati e ricevuti come pacchetti JSON Cos'è JSON? Panoramica di un Layman Cos'è JSON? Panoramica di un Layman Sia che tu abbia intenzione di diventare uno sviluppatore web o no, è una buona idea sapere almeno cosa è JSON, perché è importante e perché è usato in tutto il web. Leggi di più .

Per dare un'occhiata a questo in azione, devi conoscere l'indirizzo IP del tuo bridge Hue. Ci sono alcuni modi per farlo:

  • Guarda la tabella di assegnazione degli indirizzi DHCP nell'interfaccia di amministrazione del tuo router
  • Esegui un programma di mappatura di rete come IP Scanner Home
  • Prova lo strumento di broker UPnP Philips
  • ping “philips-hue.home”

Quando hai finito, vai avanti e digita nella barra degli indirizzi del browser con debug / clip.html aggiunto all'URL. Nel mio caso, questo era:

http://192.168.1.216/debug/clip.html

Questo è uno strumento di debug che consente di inviare e ricevere i pacchetti JSON attraverso una semplice interfaccia web. Il primo passo è abilitare il profilo sviluppatore sullo stesso Hue Bridge, che è disabilitato di default per ragioni di sicurezza. Incolla quanto segue nel campo BODY, lascia l'URL come / Api /, e inviare una richiesta POST facendo clic sul pulsante post:

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

La prima volta che lo fai, vedrai a “pulsante di collegamento non premuto” da qualche parte nella risposta. Questa è una funzione di sicurezza che richiede l'autorizzazione fisica di ogni nuova applicazione che usi. Vai e trova il tuo Bridge, premi il pulsante e invia di nuovo la stessa richiesta entro 30 secondi. Questa volta otterrai una risposta diversa e l'utente sarà autorizzato. Se desideri utilizzare un nome utente diverso, leggi i documenti dell'API sulla creazione di utenti. Per ora, questo sarà sufficiente.

Una volta che l'utente è configurato, l'URL di base con cui si deve interagire diventa / Api / newdeveloper / . Puoi inviare una richiesta GET per scoprire tutto ciò che il tuo bridge conosce attualmente su luci, allarmi, scene e un breve registro di app che sono state utilizzate. Ecco un esempio di alcune delle informazioni di stato contenute in una singola lampadina.

 "stato": "on": true, "bri": 254, "hue": 14910, "sat": 144, "effect": "none", "xy": [0.4596, 0.4105], "ct" : 369, "alert": "none", "colormode": "ct", "reachable": false, "tipo": "Luce colore estesa", "nome": "Camera 1", "modelid": " LCT001", 

Si noti che il “sopra”:vero lo stato in realtà non ti mostra se la lampadina è accesa o no; solo che secondo le impostazioni di Bridge, it dovrebbero essere su. “raggiungibile”: false può indicare sia una lampadina che è troppo lontana, o semplicemente spenta dall'interruttore di alimentazione.

Un ultimo esempio prima di integrare questo in Arduino: assicurati che una delle tue luci sia visibile e attiva e che tu sappia quale numero sia. Cambia l'URL in / Api / newdevelopers / luci / 1 / stato (cambiando il numero alla luce) e invia una richiesta PUT con i seguenti dati:

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

Dovresti vedere la tua luce reagire in questo modo:

Quello che hai fatto è stato spingere un nuovo stato nella lampadina. Puoi anche aggiungere “transitiontime”, che è un metodo di animazione primitivo che indica quanti secondi vorresti che lo stato cambiasse.

Il colore può essere impostato in diversi modi, ma sfortunatamente non esiste un modo semplice per inviare un valore RGB. Nell'esempio sopra, abbiamo inviato colore, satistruzione, e brightness. Prova a cambiare il valore della tonalità e a inviare di nuovo la richiesta PUT.

Funzionando da Arduino

Esiste una libreria Hue / Arduino denominata ArduinoHue a cui Philips si collega nella documentazione dell'API, ma il problema con questa libreria è che comunica tramite la connessione USB al PC, che deve anche eseguire costantemente un'applicazione Python. EuGH. Puoi anche lasciare che il tuo computer esegua l'intera operazione a quel punto e ritaglia tutto l'Arduino.

Invece, ti mostrerò come controllare la tonalità da Arduino utilizzando uno scudo Ethernet. Non è necessario che il tuo Arduino sia collegato a un computer, in modo che possa operare indipendentemente ovunque sia possibile inserire un cavo Ethernet. In effetti, dovrebbe funzionare anche con uno scudo Wi-Fi, ma non ne ho uno con cui giocare.

Se desideri saltare in avanti, il codice di esempio completo è incorporato qui sotto o disponibile qui. L'ho adattato da un esempio pubblicato da Gilson Oguime. Se non hai mai giocato con lo scudo Ethernet in precedenza, potresti voler eseguire rapidamente un tutorial sul web client - presumo un certo livello di familiarità con questo, e non coprirò il codice utilizzato per stabilire una rete IP ecc. Vi abbiamo anche mostrato come creare un mini server web con lo scudo Ethernet. Date al vostro progetto Arduino un proprio mini-server Web, con uno scudo Ethernet. Date al vostro progetto Arduino un mini-server Web, con uno scudo Ethernet tempo fa, ti ho mostrato come configurare un sistema di controllo internet per il tuo Arduino, ma doveva rimanere connesso a un computer tramite USB per mantenere la connessione Internet ... Continua a leggere .

Creare modifiche di stato

Creare un nuovo stato da spingere alle lampadine è un semplice caso di creazione di un nuovo Stringa variabile e sfuggire a tutte le virgolette. Ho aggiunto un casuale() funziona anche lì per creare un'animazione piuttosto dinamica. Prova a rendere casuale la variabile hue per diversi colori.

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

Invio del comando

Per inviare effettivamente il comando, hai una funzione di aiuto chiamata setHue () che prende come argomento il numero luce e la stringa di comando, in questo modo:

setHue (1, comando);

Tutto ciò che fa è che si connette al bridge, sputa il comando come una richiesta PUT, insieme a tutte le altre sciocchezze che implicano la creazione di una richiesta HTTP.

 client.print ("PUT / api /"); client.print (hueUsername); client.print ( "/ luci /"); 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 (); // riga vuota prima del corpo client.println (comando); // comando Hue 

Aggiunta di un sensore di movimento

Infine, ho collegato un semplice sensore di movimento HC-SR501 al pin I / O digitale 2. Quando viene rilevato un movimento, una serie di stati viene spinta sul ponte per 2 lampadine per creare un'animazione dinamica e lenta. Quando il sensore di movimento si disattiva, viene inviato a entrambi un comando di spegnimento. Idealmente, verrebbero ripristinati allo stato in cui si trovavano prima che venisse rilevato un movimento, ma la logica non è così intelligente - li accenderemo e spegneremo.

limitazioni

Anche se il codice è certamente non ottimizzato, ci vuole quasi un secondo per l'interfaccia di rete dell'Arduino per inviare una singola richiesta di comando. Ho provato lo stesso comando da un Mac, usando la stessa connessione Ethernet, ed era in grado di eseguire da dieci a venti volte quella velocità (ecco AppleScript nel caso in cui desideri testare). Di conseguenza, qualsiasi tipo di animazione veloce (stavo tentando di creare un effetto di candela tremolante) non è possibile da un Arduino. Questo non dovrebbe essere un problema per la maggior parte dei progetti, solo per animazioni di luce ad alta velocità, ma è bene essere consapevoli della limitazione.

È anche difficile analizzare completamente qualsiasi risposta JSON che si ottiene dal bridge; non c'è abbastanza RAM sull'arduino per archiviare tutti i dati grezzi. Per questo motivo, potresti volerti limitare principalmente all'invio.

Hack the Hue

Ora che sei armato della conoscenza di come controllare Hue in modo completamente indipendente, si apre un mondo di hack per la domotica di Hue. La vera domanda è: cosa farai?

Scopri di più su: Arduino, Philips Hue, Smart Lighting.