« PHILLIPS HUE » : différence entre les versions

De knowledge
Aller à la navigation Aller à la recherche
mAucun résumé des modifications
 
(2 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
[[Fichier:PHILLIPS HUE LOGO.png|vignette]]
== Trouver l'IP du bridge. ==
== Trouver l'IP du bridge. ==
Il y a une chose à savoir avant: l'adresse IP du bridge HUE.
Il y a une chose à savoir avant: l'adresse IP du bridge HUE.
Ligne 5 : Ligne 7 :


[[Fichier:HUE-BRIDGE-MAC.png|sans_cadre]]
[[Fichier:HUE-BRIDGE-MAC.png|sans_cadre]]
La "petite maison" c'est si j'ai bien compris le symbole Apple Home?


Dans mon routeur je vois une entrée :
Dans mon routeur je vois une entrée :
Ligne 179 : Ligne 183 :


Lignes 55 à 67 la liste blanche des tokens autorisés. La sécurité est donc assez limité. On a un accès une fois on a acces a TOUS les tokens. On est tous root !
Lignes 55 à 67 la liste blanche des tokens autorisés. La sécurité est donc assez limité. On a un accès une fois on a acces a TOUS les tokens. On est tous root !
== Commande de la lumière ==
=== Liste des luminaires ===
<syntaxhighlight lang="http">
GET /api/username/lights
</syntaxhighlight>Nous donne la liste de tous les luminaires connectés au bridge.
C'est un objet JSON  du style :<syntaxhighlight lang="json-object" line="1">
{
"1": {
"state": {
"on": true,
"bri": 254,
"alert": "none",
"mode": "homeautomation",
"reachable": true
},
"swupdate": {
"state": "noupdates",
"lastinstall": "2024-05-22T12:15:38"
},
"type": "Dimmable light",
"name": "Plafonier",
"modelid": "LWB010",
"manufacturername": "Signify Netherlands B.V.",
"productname": "Hue white lamp",
"capabilities": {
"certified": true,
"control": {
"mindimlevel": 2000,
"maxlumen": 806
},
"streaming": {
"renderer": false,
"proxy": false
}
},
"config": {
"archetype": "classicbulb",
"function": "mixed",
"direction": "omnidirectional",
"startup": {
"mode": "safety",
"configured": true
}
},
"uniqueid": "00:17:88:01:02:fe:4f:c4-0b",
"swversion": "1.116.3",
"swconfigid": "7C1E5567",
"productid": "Philips-LWB010-1-A19DLv4"
},
...
}
</syntaxhighlight>Ici je n'ai donné qu'un seul luminaire mais la suite consiste en des objets  <code>"2"</code>:, <code>"3:"</code>....
En détail sur l'exemple ci dessus:
Ligne 3 à 9:<syntaxhighlight lang="json-object">
"state": {
"on": true,
"bri": 254,
"alert": "none",
"mode": "homeautomation",
"reachable": true
}
</syntaxhighlight>L'état du luminaire avec dans l'ordre : allumé, brillance au max, pas d'alertes, mode "homeautomation" et à l'état joignable.
Lignes 10 à 43: beaucoup d'informations.
=== Allumer/eteindre ===
On fait un "PUT" sur le "light"
Pour allumer:<syntaxhighlight lang="http">
PUT /api/username/lights/1/state
</syntaxhighlight>Avec les data:<syntaxhighlight lang="json-object">
{"on":true}
</syntaxhighlight>Qui nous réponds:<syntaxhighlight lang="json-object">
[
{
"success": {
"/lights/1/state/on": true
}
}
]
</syntaxhighlight>Pour éteindre c'est la même chose avec:<syntaxhighlight lang="json-object">
{"on":false}
</syntaxhighlight>
=== Luminosité ===
De la même façon un PUT peut changer la luminosité (briance)<syntaxhighlight lang="http">
PUT /api/username/lights/1/state
</syntaxhighlight>avec <syntaxhighlight lang="json-object">
{"bri":128}
</syntaxhighlight>Pour régler la luminosité a 50% (de 0 à 255)
Dans le cas d'un liminaire "couleur" on a un state du genre:<syntaxhighlight lang="json-object">
"state": {
on": true,
"bri": 254,
"hue": 0,
"sat": 204,
"effect": "none",
"xy": [
0.4578,
0.4101
],
"ct": 370,
"alert": "select",
"colormode": "ct",
"mode": "homeautomation",
"reachable": false
}
</syntaxhighlight>avec hue (teinte) et sat (saturation)
=== Couleurs définies en "xy" ===
Pour définir une couleur avec le plus de justesse possible Phillips nous propose un réglage assez subtil basé sur le "gamut" PHILLIPS:
[[Fichier:Gamut PHILLIPS.png|sans_cadre]]
On le trouve sur : https://viereck.ch/hue-xy-rgb/
Pour l'utiliser on clique sur une couleur et on a en haut les valeurs X et Y du gamut Phillips a donner dans la commande.
Si je choisis un beau violet
[[Fichier:Hue gamut purple.png|sans_cadre]]
Les valeurs affichées sont:
[[Fichier:Purple-to-xy.png|sans_cadre|378x378px]]
Donc avec la commande<syntaxhighlight lang="http">
PUT /api/username/lights/1/state
</syntaxhighlight>et les données :<syntaxhighlight lang="json-object">
{"xy":[0.475,0.387],"bri":254}
</syntaxhighlight>On est supposé avoir un beau violet.
Bon... pour ma part je n'ai pas acheté une ampoule PHILLIPS mais innr:<syntaxhighlight lang="json-object">
"type": "Extended color light",
"modelid": "RB 185 C",
"manufacturername": "innr",
"productname": "Extended color light",
</syntaxhighlight>Le gamut innr n'a pas l'air d'être le même....
La lampe innr nous donne :<syntaxhighlight lang="json-object">
"capabilities": {
"certified": false,
"control": {
"colorgamuttype": "other",
"colorgamut": [
[0.7,0.3],
[0.11,0.82],
[0.12,0.08]
],
"ct": {
"min": 153,
"max": 500
}
</syntaxhighlight>On peut en dire que:
* La lampe n'est pas certifiée PHILLIPS
* Le gamut est <code>"other"</code> (donc pas standard)
* Les trois points de <code>"colorgamut"</code> sont la valeur <code>[x,y]</code> de rouge vert et bleu. C'est à peu près ça si on teste.
* les températures de couleurs "ct" vont de 153 (froid) à 500 (chaud).
== Exemples en bash ==
On écrit un script qui allume et éteint le luminaire 8<syntaxhighlight lang="bash">
#!/usr/bin/bash
source setenv.sh
echo "Switch ON"
curl  -X PUT -d '{"on":true}' -s http://${HUE_BRIDGE}/api/${USERNAME}/lights/8/state > /dev/null
sleep 1
echo "Switch OFF"
curl  -X PUT -d '{"on":false}' -s http://${HUE_BRIDGE}/api/${USERNAME}/lights/8/state > /dev/null
</syntaxhighlight>Dans setenv.sh on fixe les valeurs de <code>HUE_BRIDGE</code> (l'IP du bridge) et <code>USERNAME</code>.
Le script allume la lumière une seconde et l'éteint.
Si on veut tester toutes les couleurs d'une LED RGB<syntaxhighlight lang="bash">
#!/usr/bin/bash
source setenv.sh
curl  -X PUT -d '{"on":true}' -s http://${HUE_BRIDGE}/api/${USERNAME}/lights/8/state > /dev/null
for ((i=7;i<=65535;i+=500))
do
        echo $i
        curl  -X PUT -d "{\"hue\":$i}" -s http://${HUE_BRIDGE}/api/${USERNAME}/lights/8/state > /dev/null
done
curl  -X PUT -d '{"on":false}' -s http://${HUE_BRIDGE}/api/${USERNAME}/lights/8/state > /dev/null
</syntaxhighlight>

Version actuelle datée du 5 décembre 2024 à 14:09

PHILLIPS HUE LOGO.png

Trouver l'IP du bridge.

Il y a une chose à savoir avant: l'adresse IP du bridge HUE.

Au dos du bridge on a un étiquette avec une tera floppée de de logos et de chiffres. Il faut trouver une étiquette qui ressemble à ça:

HUE-BRIDGE-MAC.png

La "petite maison" c'est si j'ai bien compris le symbole Apple Home?

Dans mon routeur je vois une entrée :

Mac-hue-routeur.png

Le chiffre d'en haut (a gauche en haut de la petite maison) sur l'étiquette du bridge HUE est la fin de l'adresse MAC que l'on peut voir côté routeur. L'IP est donnée dessous. Ici c'est 192.168.0.18. (Oui j'ai un routeur TP-link derrière une Freebox configurée en bridge)

Un autre solution est d'utiliser la commande arp.

Exemple-arp.png

On retrouve que mon adresse mac qui se termine par 3b19 est bien 192.168.0.18

On peut aussi utiliser un decodeur d'adresses mac. Par exemple : https://macaddress.io/

On lui donne la MAC et il réponds :

MAC-phillips-lighting.png

Pas de doute c'est la bonne adresse!

Par la suite cette IP sera désignée par hue-bridge.

Dans un navigateur si on teste http://hue-bridge on a une page qui s'affiche et donne toutes les licences utilisée par le soft du bridge.

On constate que le Bridge Philips Hue est une petite linux-box avec nginx, openssl ... il y a même un client MQTT ssl Mosquitto !

Connexion

Test

Pour une utilisation plus subtile on utilisera curl, un librairie python ou même des sockets en C mais pour les tests on a une jolie console de debug sur le serveur web:

http://hue-bridge/debug/clip.html

On a une jolie page :

Hue-debug-console.png

Si on teste avec l'URL :

GET /api/config

On récupère la configuration du bridge:

{
	"name": "Hue Bridge",
	"datastoreversion": "172",
	"swversion": "1967054020",
	"apiversion": "1.67.0",
	"mac": "--:--:--:--:3b:09",
	"bridgeid": "------------3B09",
	"factorynew": false,
	"replacesbridgeid": null,
	"modelid": "BSB002",
	"starterkitid": ""
}

L'adresse MAC est confirmée là aussi!

Récupérer un token

Par défaut tout le monde ne peut pas se connecter à un bridge HUE, Normal!

Le mécanisme est un classique "push button to pair".

On doit donner un nom à l'appareil client. On choisit ici TEST_CLIENT.

Pour obtenir le token on doit faire :

POST /api

Avec les données :

{"devicetype":"my_hue_app#davtest"}

On récupère la réponse :

[
	{
		"error": {
			"type": 101,
			"address": "",
			"description": "link button not pressed"
		}
	}
]

Logique il faut appuyer sur le bouton et on a quelques secondes pour lancer la commande de nouveau. Et on relance le même POST

[
	{
		"success": {
			"username": "Z3L********6OQtHo-fcUE9O******jWQNwffHgg"
		}
	}
]

On récupère un "username".

On le note bien précieusement! C'est lui qui nous permettra l'accès.

Dans la suite on désignera ce token user par username.

Récupérer la configuration

On peut récupérer la configuration du pont HUE avec l'URL :

GET /api/username/config

Attention la réponse est longue.

{
	"name": "Hue Bridge",
	"zigbeechannel": 15,
	"bridgeid": "------------3B09",
	"mac": "--:--:--:--:3b:09",
	"dhcp": true,
	"ipaddress": "192.168.0.18",
	"netmask": "255.255.255.0",
	"gateway": "192.168.0.1",
	"proxyaddress": "none",
	"proxyport": 0,
	"UTC": "2024-12-02T19:24:10",
	"localtime": "2024-12-02T20:24:10",
	"timezone": "Europe/Paris",
	"modelid": "BSB002",
	"datastoreversion": "172",
	"swversion": "1967054020",
	"apiversion": "1.67.0",
	"swupdate2": {
		"checkforupdate": false,
		"lastchange": "2024-11-21T06:58:12",
		"bridge": {
			"state": "noupdates",
			"lastinstall": "2024-10-25T12:05:18"
		},
		"state": "transferring",
		"autoinstall": {
			"updatetime": "T14:00:00",
			"on": true
		}
	},
	"linkbutton": false,
	"portalservices": true,
	"analyticsconsent": true,
	"portalconnection": "disconnected",
	"portalstate": {
		"signedon": false,
		"incoming": false,
		"outgoing": false,
		"communication": "disconnected"
	},
	"internetservices": {
		"internet": "connected",
		"remoteaccess": "connected",
		"time": "connected",
		"swupdate": "connected"
	},
	"factorynew": false,
	"replacesbridgeid": null,
	"starterkitid": "",
	"backup": {
		"status": "idle",
		"errorcode": 0
	},
	"whitelist": {
		"498********72-49f0-8faa-cad6******fae1gr": {
			"last use date": "2024-12-01T21:39:24",
			"create date": "2024-02-15T21:17:54",
			"name": "Hue#SM-S918B"
		},
		"Z3L********6OQtHo-fcUE9O******jWQNwffHgg": {
			"last use date": "2024-12-02T19:24:10",
			"create date": "2024-12-02T19:18:50",
			"name": "my_hue_app#davtest"
		}
	}
}

Lignes 2 à 31 le statut du bridge.

Ligne 32 l'état du bouton "link" : false le bridge n'est pas en mode appariement, true il est en mode appariement.

Lignes 33 à 41, je ne sais pas!

Lignes 42 à 47 la connectivité internet.

Lignes 48 à 54... je ne sais pas non plus.

Lignes 55 à 67 la liste blanche des tokens autorisés. La sécurité est donc assez limité. On a un accès une fois on a acces a TOUS les tokens. On est tous root !

Commande de la lumière

Liste des luminaires

GET /api/username/lights

Nous donne la liste de tous les luminaires connectés au bridge. C'est un objet JSON du style :

{
	"1": {
		"state": {
			"on": true,
			"bri": 254,
			"alert": "none",
			"mode": "homeautomation",
			"reachable": true
		},
		"swupdate": {
			"state": "noupdates",
			"lastinstall": "2024-05-22T12:15:38"
		},
		"type": "Dimmable light",
		"name": "Plafonier",
		"modelid": "LWB010",
		"manufacturername": "Signify Netherlands B.V.",
		"productname": "Hue white lamp",
		"capabilities": {
			"certified": true,
			"control": {
				"mindimlevel": 2000,
				"maxlumen": 806
			},
			"streaming": {
				"renderer": false,
				"proxy": false
			}
		},
		"config": {
			"archetype": "classicbulb",
			"function": "mixed",
			"direction": "omnidirectional",
			"startup": {
				"mode": "safety",
				"configured": true
			}
		},
		"uniqueid": "00:17:88:01:02:fe:4f:c4-0b",
		"swversion": "1.116.3",
		"swconfigid": "7C1E5567",
		"productid": "Philips-LWB010-1-A19DLv4"
	},
...
}

Ici je n'ai donné qu'un seul luminaire mais la suite consiste en des objets "2":, "3:"....

En détail sur l'exemple ci dessus:

Ligne 3 à 9:

"state": {
	"on": true,
	"bri": 254,
	"alert": "none",
	"mode": "homeautomation",
	"reachable": true
}

L'état du luminaire avec dans l'ordre : allumé, brillance au max, pas d'alertes, mode "homeautomation" et à l'état joignable.

Lignes 10 à 43: beaucoup d'informations.

Allumer/eteindre

On fait un "PUT" sur le "light"

Pour allumer:

PUT /api/username/lights/1/state

Avec les data:

{"on":true}

Qui nous réponds:

[
	{
		"success": {
			"/lights/1/state/on": true
		}
	}
]

Pour éteindre c'est la même chose avec:

{"on":false}

Luminosité

De la même façon un PUT peut changer la luminosité (briance)

PUT /api/username/lights/1/state

avec

{"bri":128}

Pour régler la luminosité a 50% (de 0 à 255) Dans le cas d'un liminaire "couleur" on a un state du genre:

"state": {
	on": true,
	"bri": 254,
	"hue": 0,
	"sat": 204,
	"effect": "none",
	"xy": [
		0.4578,
		0.4101
	],
	"ct": 370,
	"alert": "select",
	"colormode": "ct",
	"mode": "homeautomation",
	"reachable": false
}

avec hue (teinte) et sat (saturation)

Couleurs définies en "xy"

Pour définir une couleur avec le plus de justesse possible Phillips nous propose un réglage assez subtil basé sur le "gamut" PHILLIPS:

Gamut PHILLIPS.png

On le trouve sur : https://viereck.ch/hue-xy-rgb/

Pour l'utiliser on clique sur une couleur et on a en haut les valeurs X et Y du gamut Phillips a donner dans la commande.

Si je choisis un beau violet

Hue gamut purple.png

Les valeurs affichées sont:

Purple-to-xy.png

Donc avec la commande

PUT /api/username/lights/1/state

et les données :

{"xy":[0.475,0.387],"bri":254}

On est supposé avoir un beau violet. Bon... pour ma part je n'ai pas acheté une ampoule PHILLIPS mais innr:

"type": "Extended color light",
"modelid": "RB 185 C",
"manufacturername": "innr",
"productname": "Extended color light",

Le gamut innr n'a pas l'air d'être le même.... La lampe innr nous donne :

"capabilities": {
	"certified": false,
	"control": {
		"colorgamuttype": "other",
		"colorgamut": [
			[0.7,0.3],
			[0.11,0.82],
			[0.12,0.08]
		],
		"ct": {
			"min": 153,
			"max": 500
		}

On peut en dire que:

  • La lampe n'est pas certifiée PHILLIPS
  • Le gamut est "other" (donc pas standard)
  • Les trois points de "colorgamut" sont la valeur [x,y] de rouge vert et bleu. C'est à peu près ça si on teste.
  • les températures de couleurs "ct" vont de 153 (froid) à 500 (chaud).

Exemples en bash

On écrit un script qui allume et éteint le luminaire 8

#!/usr/bin/bash
source setenv.sh

echo "Switch ON"
curl  -X PUT -d '{"on":true}' -s http://${HUE_BRIDGE}/api/${USERNAME}/lights/8/state > /dev/null
sleep 1
echo "Switch OFF"
curl  -X PUT -d '{"on":false}' -s http://${HUE_BRIDGE}/api/${USERNAME}/lights/8/state > /dev/null

Dans setenv.sh on fixe les valeurs de HUE_BRIDGE (l'IP du bridge) et USERNAME.

Le script allume la lumière une seconde et l'éteint.

Si on veut tester toutes les couleurs d'une LED RGB

#!/usr/bin/bash
source setenv.sh

curl  -X PUT -d '{"on":true}' -s http://${HUE_BRIDGE}/api/${USERNAME}/lights/8/state > /dev/null

for ((i=7;i<=65535;i+=500))
do
        echo $i
        curl  -X PUT -d "{\"hue\":$i}" -s http://${HUE_BRIDGE}/api/${USERNAME}/lights/8/state > /dev/null
done

curl  -X PUT -d '{"on":false}' -s http://${HUE_BRIDGE}/api/${USERNAME}/lights/8/state > /dev/null