4 octobre 2017

Prémisse de la maison connectée

L'achat d'un assistant vocal est probablement un des premiers équipements d'une maison connectée, surtout si l'on y associe des ampoules (ex: Philips Hue).


Piloter uniquement ces dernières à l'aide de la voix n'est pas toujours satisfaisant. Comme l'interface de gestion de ces ampoules basées sur le protocole ZigBee (sorte de Bluetooth light) est conçue sur une architecture applicative de type REST (pas RESTfull cependant), il est donc aisé de les piloter à l'aide de simples requêtes HTTP. Pour ce faire, il faut toutefois disposer d'un environnement OS (desktop, laptop, nano ordinateur (ex: raspberry ou arduino), voire encore un smartphone quelconque). A titre d'exemple, voici le code (très simple, en shell) pour allumer une ampoule Hue.

#!/bin/bash
# Lampe de la Cuisine (était: OFF, devient: ON)
LIGHT=1

IP="192.168.1.22"
ID="******************-***************************************"

curl -s \
 --header "Content-type: application/json" \
 --request PUT \
 --data '{"on": true}' \
 http://$IP/api/$ID/lights/$LIGHT/state | json_pp

Au préalable, il faut retrouver l'adresse IP du Hub Philips Hue, ainsi que son ID. Pour ce faire, il faut exécuter les actions ci-dessous depuis une session shell quelconque.

# 1. Obtention de l'adresse IP du Hub Hue
$ curl https://www.meethue.com/api/nupnp <CR>
[{"id":"********************","internalipaddress":"192.168.1.22"}]

# 2. A l'aide de l'adresse IP, il est possible d'obtenir les infos sur le Hub et
#     sur les ampoules Philips.
#     Lorsque l'on appuie sur le bouton central du Hub, on obtient l'ID nommé 'username'
$ curl -data '{"devicetype": "my_hue_app#mac pseudo"}' -X POST http://$IP/api <CR>
[
       {
               "error": {
                       "type": 101,
                       "address": "",
                       "description": "link button not pressed"
               }
       }
]
$

# 3. Détails des lampes gérées par le Hub Hue
$ curl https://192.168.1.22/api/$ID/lights
{
       "1": {
               "state": {
                       "on": false,
                       "bri": 254,
                       "alert": "select",
                       "reachable": false
               },
               "swupdate": {
                       "state": "noupdates",
                       "lastinstall": null
               },
               "type": "Dimmable light",
               "name": "Hue white lamp 1",
               "modelid": "LWB010",
               "manufacturername": "Philips",
               "uniqueid": "00:17:88:01:02:25:3f:33-0b",
               "swversion": "1.15.2_r19181",
               "swconfigid": "60083D2F",
               "productid": "Philips-LWB010-1-A19DLv3"
       },
       "2": {
               "state": {
                       "on": false,
                       "bri": 254,
                       "alert": "none",
                       "reachable": true
               },
               "swupdate": {
                       "state": "noupdates",
                       "lastinstall": null
               },
               "type": "Dimmable light",
               "name": "Hue white lamp 2",
               "modelid": "LWB010",
               "manufacturername": "Philips",
               "uniqueid": "00:17:88:01:02:57:2c:ab-0b",
               "swversion": "1.15.2_r19181",
               "swconfigid": "60083D2F",
               "productid": "Philips-LWB010-1-A19DLv3"
       }
}
$

En conséquence, à l'aide de l'ordonnanceur local à son environnement OS (ex: crontab dans le cas de Linux), il est possible de programmer le déclenchement et l'arrêt de lumière d'une ampoule Hue quelconque, comme c'est le cas avec ce type d'équipement ci-dessous.

prise programmable ou programmateur électrique (environ: 5€)

Ceci reste un peu fastidieux en terme de gestion, mais réalisable toutefois. Avant d'aborder une solution Open Source qui apporte une gestion centralisée de tous les équipements connectés de la maison, voici quelques liens intéressants relatifs aux ampoules Philips Hue.

  • Info technique sur les ampoules Hue (ici),
  • Site officiel de Philips Hue (ici),
  • Site développeur de Philips Hue (ici),
  • Obtention adresse IP locale du Hub Hue (ici),
  • Interface Web UI de commandes HTTP sur ampoules Hue: http://$IP/debug/clip.html
  • Informations générales sur les ampoules Hue (ici).

Lors de cette recherche d'information, j'ai découvert une application Open Source nommée Home Assistant écrite en Python 3. Ce nom est un peu confondant avec celui de Google Assistant, élément de la chaîne de services pour le Google Home. J'ai poussé ma curiosité à l'installer et à la tester. Pour ce faire, je me suis appuyé sur l'un de mes boîtiers Raspberry (Pi 3) ou Docker (up-to-date) était déjà installé.

nano ordinateur Raspberry (environ: 40€)

A l'aide d'une image Docker trouvée sur Internet, j'ai déployé en quelques minutes la solution. Sa prise en main a été moins rapide bien qu'une documentation associée soit assez riche et une communauté d'adeptes assez active. Bref, après quelques recherches, je suis arrivé à créer quelques services sur cette plate-forme. Le premier résultat me permet de gérer les 2 services suivants :

  • mettre le volume sonore du Google Home à 20% tous les matins. En effet, lorsque je me lève tôt, j'évite de déranger ceux qui dorment encore en mettant la radio ou la musique avec un volume sonore élevé.

  • mettre automatiquement le soir et le matin pour une durée limitée la lumière dans certaines pièces de la maison.

Pour ces deux actions, il faut configurer la partie automatisation de la plate-forme Home-Assistant de la façon suivante.

$ cat automations.yaml <CR>
# Déclenchement action à 3 heures du matin [volume son Google Home (cuisine) à 20%]
- alias: 'Google Home Cuisine (set AM volume)'
 trigger:
   platform: time
   at: '03:00:00'
 action:
   service: media_player.volume_set
   data:
     entity_id: media_player.cuisine
     volume_level: '0.20'

#  Pilotage automatique (tous les jours) de la lumière de la salle
- alias: 'Lampe Salle (ON 19:30)'
 trigger:
   platform: time
   at: '19:30:00'
 action:
   service: light.turn_on
   entity_id: light.salle

- alias: 'Lampe Salle (OFF 22:00)'
 trigger:
   platform: time
   at: '22:00:00'
 action:
   service: light.turn_off
   entity_id: light.salle

#  Pilotage automatique (tous les jours) de la lumière de la cuisine
- alias: 'Lampe Cuisine (ON 06:05)'
 trigger:
   platform: time
   at: '06:05:00'
 action:
   service: light.turn_on
   entity_id: light.cuisine

- alias: 'Lampe Cuisine (OFF 06:15)'
 trigger:
   platform: time
   at: '06:15:00'
 action:
   service: light.turn_off
   entity_id: light.cuisine
$

La page de garde de l'application Web UI est la suivante, sachant qu'il existe aussi une interface Mobile UI (moins riche toutefois).


Naturellement, ceci n'est qu'un début, j'envisage d'améliorer et d'enrichir l'environnement. Par exemple, la lampe de la salle sera allumée automatiquement à la tombée de la nuit, sans fixer une heure déterminée, comme c'est le cas dans cette première itération.

Aucun commentaire:

Enregistrer un commentaire