Withings, ça push ma balance ?

Withings, ça push ma balance ?
Note de l’utilisateur

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.

bright-idea

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 » :

Eedomus - Capteur virtuel

Choisissez la pièce et sont nom :

Eedmus - Présence SdB

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 :

Eedomus - Présence SdB2

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

Eedomus - Balance

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.

Eedomus - Présence - Reset

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 :

Eedomus - Présence Papa

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 :

Eedomus - Presence Radio

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.
Pour le paramétrage Eedomus  changer :
  • ‘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 :
Eedomus - presence3

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.

  • Moi je dis bravo … Excellent, je vais pas tarder à te copier 😉
    A+

  • Olivier

    Salut!
    Bravo pour le tuto!
    Depuis un petit moment je cherchais une maniere de récupérer les infos withings sur l’eedomus.

    De mon côté ça ne marche pas…
    J’ai tout renseigné mais quand je lance runme.php
    j’ai que ça en retour: #!/usr/bin/php

    Une idée
    Merci d’avance 🙂

    • Surement un problème dans la config.
      Par défaut si tu prends le fichier sans toucher à la configuration tu devrais avoir :
      #!/usr/bin/php Probing API : OK Getting UserList : KO

      Est-ce bien le cas ?
      Sinon n’oubli pas d’activer les erreurs PHP qui sont souvent désactivées par défaut pour trouver l’origine de problème.

      • Olivier

        Re,
        Désolé d’encombrer les commentaires…

        Une fois les erreurs PHP activées
        j’ai ça :
        #!/usr/bin/php Parse error: syntax error, unexpected ‘<' in /volume1/web/Withing/myconf.php on line 22

        • Ma faute … j’ai pas publié sur GitHub la toute dernière version. Je te dis quand c’est bon

          • Voila, version Git synchronisée. tu peux re-récupérer l’ensemble des fichiers PHP. Désolé

          • Olivier

            Merci pour ton aide 😉
            J’ai repris ta mise à jour du coup maintenant j’ai ça:
            #!/usr/bin/php Parse error: syntax error, unexpected ‘MYURL’ (T_STRING) in /volume1/web/Withing/myconf.php on line 9
            J’ai vérifié mon adresse est la bonne….

          • tu aurais pas un problème de syntax sur la ligne du dessus (fin de guillemet non fermée, ou un « ; » qui a sauté ?).
            Est-ce que tu avais la meme ligne que moi avec le fichier de config d’origine ?

          • Olivier

            Merci beaucoup ça marche!!
            Je continue ton tuto!
            Merci encore pour ta patience 😉

  • nico2c

    salut,

    intéressent, j’aurais voulu recuperer une partie, mais j’y comprend pas grans chose.

    en fait, j’aimerai envoyer a mon nabaztag via openjabnab, les infos envoyés par withings lorsque je me pése, et par la suite faire des actions sur ma centrale MyFox, des que l’api sera en ligne officiellement.

    j’arrive pas a modifier ton fichier callback

  • 889laurent

    Merci pour ton tuto et tes script . Je voudrai faire la même cose que toi, mais sans passer par le EEdomus mais par une lifedomus. JE voudrai essayer d’adapter ton script !
    la LD pouvant ecouter en http ou udp, merci de me donner quelques pistes sur la méthode de parametrage des push. qhel est le forme du message push envoyé?

    • Lors de l’enrôlement au service, tu dois fournir une url (public) pour que les serveur de Withings va appeler (c’est pas directement la balance qui push). Il faudrait donc que tu es (1) une IP Fix (2) ouvrir le port web de ta LD depuis l’extérieure ce qui est n’est pas du tout recommandé.

      Pour éviter cela, je passe par une petite page php hébergée quelque part … mais tu peux aussi utiliser IFTT.
      A partir de cette page, tu peux intervenir en rebond vers ta LD, mais je ne connais pas assez la LD pour t’aider sur cette partie.

      En tout cas je suis curieux de tes retours sur la LD. Elle est un peu au dessus de mon budget (et des concurrents) mais j’en ai entendu beaucoup de bien. Quel est ton retour d’utilisateur sur la box ?

  • Enr37

    Je ne sais pas où tu prends la radio mais perso, que ce soit sur android, ios ou sur mon nas, il y a tjs un temps de recherche du canal (mise en cache peut etre). Peut etre que ton temps de latence vient de là. Je le garde l article sous le coude, je crois que le papa noyel m amene 2 play 3 dans sa hotte ^^

  • BeO

    Et avec la Withings Aura – c’est intégrable ?

    • Oui, mais non … le système calcule les données de la nuit une fois que l’utilisateur se leve … et cela prend un peu de temps. J’ai bien peur qu’il y ai un intervalle de plusieurs minutes. Cela étant dis … Aura etant intégré avec Nest, il y’a peut-etre une piste mais je n’ai pas trouvé grand chose de dispo dans la doc des API de withings