Comme je l’évoquais rapidement dans un article précédent, je me suis intéressé plus avant a l’API offerte par Withings sur sa balance connectée.
1/ L’objectif
Je suis partie du constat suivant :
j’ai un Sonos dans ma salle de bain. C’est super pour écouter la musique, podcast ou la radio que l’on aime mais voila … quand je suis dans ma sale de bain, j’ai rarement mon smart-phone avec moi. Du coup … pas très pratique de lancer la musique. Il faut y avoir pensé avant … bref, à l’usage, le Sonos était rarement utilisé.
J’ai aussi une balance Withings, et je monte dessus tous les jours pour tracer mon poids. Pas que je suis hyper sensible a ma ligne, mais cela permet de suivre précisément la moyenne sur la semaine (la variation de poids quotidienne n’ayant pas d’intérêt en soi) et surtout en période d’entrainement marathon. La balance arrive a reconnaitre qui est l’utilisateur qui vient de se peser…. il y’a peut être quelque chose à faire.
Alors comment interconnecter ces deux éléments au travers de ma box domotique ? C’est ce que vous allez découvrir dans la suite de cet article.
2/ La réalisation
En étudiant les API Withing, j’ai trouvé mon bonheur : il est possible de faire du push vers une url externe lors de la détection d’un événement. De plus, un exemple d’API PHP est téléchargeable sur le site de withings.
les fichiers fournis ne sont plus compatible avec les dernières versions de PHP et nécessiterons donc quelques modifications pour fonctionner. Mais comme je suis bien bon, vous pourrez trouver le tout sur mon Github.
2.1 / Préparation coté Eedomus :
Nous allons créer un module virtuel dans l’Eedomus que nous alimenterons par la suite.
Un premier module qui servira pour indiquer la présence ou non d’une personne dans la salle de bain.
Créer un module « Etat » :
Choisissez la pièce et sont nom :
Puis allez configurer la liste de valeur. Il faut créer une première ligne avec la valeur « Personne », puis une ligne par personne configurée dans votre balance :
J’ai aussi créé un module par personne pour suivre son poids. Pour cela il faut créer pour chacun un module « Etat » de type valeur décimal
Il n’y a pas forcement d’intérêt à le faire, sauf si bien sur vous êtes un peu maso et que vous vouliez créer un règle qui fait dire à votre Sonos :
Tu as encore pris du poids !?! …. Mets toi au régime bonhomme !
Mais bon qui voudrait être accueilli comme ça de si bon matin ? … Très peu pour moi en tout cas 🙂 mais après tout ça vous regarde ^^
On vas ensuite créer les règles pour faire fonctionner tout ça.
Première étape, créer une macro qui va remettre l’état à « Personne » au bout de 20 minutes.
Bien sur … 20 minutes c’est à vous de voir en fonction du temps que vous passez dans la salle de bain.
Ensuite quelques règles en fonction de la personne qui est détectée :
Lorsque le module détecte la présence de XXX … faire …. YYYY. N’oubliez pas d’ajouter votre Macro afin que le module repasse à « Personne » au bout de 20 minutes.
Vous pouvez créer une règle sur le même principe : » Lorsque le module devient égale à Personne » => remettre le thermostat à la température de consigne.
Dans mon cas, j’ai également créé une règle spécifique pour les jours de la semaine :
Cette règle lance ma station de radio du matin uniquement les jours ou je travail.
Bien maintenant que tout fonctionne coté Eedomus passons coté Withings
2.2 / Préparation coté Withting :
Récupérer les fichiers sur le Github ICI et déposez les sur votre serveur. Attention : votre serveur doit pouvoir etre accessible depuis les serveurs de Withings, donc depuis internet. Vous pouvez comme moi le déposer sur un hébergeur externe type OVH ou autre; ou bien chez vous. Dans ce cas, vous devez êtes en IP fixe, et rediriger votre port 80 vers votre site (votre raspberry, votre Synology ou tout autre solution capable d’héberger du code php).
Editez la page de configuration (myconf.php) :
Pour le paramétrage Withings changer :
- ‘WITHING_EMAIL’ par l’email de votre compte withing
- ‘WITHING_PASSWORD’ par votre mot de passe
- http://VOTRESERVEUR/Withing/callback.php : par le chemin visible depuis internet vers la page callback.php. C’est cette adresse qu’utilisera les serveurs de withings pour vous notifier.
- ‘VOTRE_APIUSER’ par l’API user Eedomus
- ‘VOTRE_APISECRET’ par l’e SECRET de l’API Eedomus
- ‘VOTRE_DEVICE_ID’ par l’ID du module de virtuel de présence (celui ou l’on a configuré chacun des utilisateurs).
Nous configurerons la 3ieme partie un peu plus loin dans ce tutoriel
Lancer la page runme.php
vous devriez avoir quelque chose comme ca :
#!/usr/bin/php | |
Probing API : OK | |
Getting UserList : OK | |
Ensuring all users are public : OK | |
[user1id – user1publickey – User 1] Loading scale measures : OK | |
Sat, 12 Apr 2014 11:08:40 +0200 | |
Weight XX Kg | |
[user1id – user1publickey – User 1] Loading tensiometer measures : OK | |
[user2id – user2publickey – User 2] Loading scale measures : OK | |
Sat, 12 Apr 2014 16:18:37 +0200 | |
Weight XX Kg | |
[user2d – user2publickey – User 2] Loading tensiometer measures : OK |
Si c’est le cas, c’est que votre configuration Withings est OK.
vous allez pouvoir retrouver les userID et les Publickey de chacun de vos utilisateurs.
Editer donc la 3ieme partie de la page de configuration en conséquence, pour chaque utilisateur créer/modifier une ligne comme celle-ci :
array ('id' => <WITHING_USER_ID>, 'publickey' => '<WITHING_CLE_UTILISATEUR>', 'deviceid' => <EEDOMUS_DEVICE_ID>, 'pseudo' => '<PSEUDO_WITHING>')
- <WITHING_USER_ID> : ‘identifiant Withing de l’utilisateur.
- <WITHING_CLE_UTILISATEUR> : la clé public Withing de l’utilisateur
- <EEDOMUS_DEVICE_ID> : l’ID du module virtuel ou vous allez enregistrer le poids de la personne.
- <PSEUDO_WITHING> : (pas utilisé)permet juste de se souvenir le nom de l’utilisateur de cette ligne (par exemple « Papa » ou « Maman »).
Retourner dans l’Eedomus pour modifier les valeurs du module présence avec les userId Withings.
Vous devriez avoir quelque chose comme ça :
Lancer ensuite (subscription.php) pour enregistrer votre page comme callback pour chacun de vos utilisateurs.
Et voila … votre balance va maintenant pousser des notifications vers votre Eedomus.
Si vous voulez, vous pouvez charger l’historique de poids dans vos modules de poids grâce à la page loadhistorique.php en passant en paramètre le userId que vous voulez charger (http://votreserveur/loadhistorique.php?userid=12345)
3/ Bilan
Grâce à notre petite installation, ma radio se lance le matin de la semaine quand j’arrive dans ma salle de bain. Il faut noter qu’il y’a temps de latence variable entre la pesé et le lancement du script, je n’ai pas encore analysé d’ou provenant ce délai, probablement que la balance ne pousse pas tout de suite le poids au serveur withings ?? à creuser …
Dans cet exemple, on voit bien que ce qui fait la richesse de la domotique, est la capacité à créer des scénarios avancés. Pour réussir à avoir des scénarios très précis avoir une connaissance la plus fine possible de l’environnement. Par exemple : je sais qui est dans la salle de bain, je lance la bonne play list / radio … chose qu’un capteur de mouvement ne permet pas de faire par exemple.
Dans l’avenir, pour pouvoir créer une domotique aussi riche que possible grâce à l’internet des objets il faut donc
1/ Que toute notre myriade d’objets soit capable de s’interfacer pour obtenir une connaissance fine de l’état de la maison
2/ Une plateforme maître (typiquement un box domotique) portant la couche d’intelligence qui permet de déclencher les actions au moment ou l’utilisateur en a besoin, sans que celui ci n’ai a faire quoi que ce soit.