Créer un capteur de tendances pour Eedomus5 minute(s) de lecture

La box domotique Eedomus permet de faire des scénarii assez évolués. Les règles qui permettent d’associer des critères afin de déclencher un ordre en direction d’un actionneur sont puissantes et simples à la fois. Pour ma Smart Home, après avoir mis en place beaucoup de règles, j’ai eu besoin récemment de pouvoir identifier non pas la valeur d’un capteur mais simplement sa tendance. J’avais besoin de savoir si la valeur relevée augmentait, descendait ou restait stable. Ce petit script m’a aidé à construire un capteur de tendances pour Eedomus.

Identifier une tendance

L’histoire a démarré lorsque j’ai du non pas connaitre la valeur du taux d’humidité de la douche mais pouvoir identifier si ce taux augmentait, diminuait ou bien restait stable. Il me fallait ensuite utiliser cette tendance dans un scénario mais également pouvoir la consulter. En théorie ce n’est pas dur. Intellectuellement on se dit que ce n’est pas compliqué : il suffit de prendre la donnée relevée et de la comparer à celle reçue par la box précédemment. En pratique c’est un peu plus complexe qu’il n’y parait car:

  • Les historiques des valeurs sont disponibles sur la box Eedomus via l’API mais à ce jour seule l’API distante permet d’accéder à l’historique des relevés d’un périphérique. Je voulais que cela se fasse en local.
  • On peut stocker les historiques dans une base extérieure mais je ne voulais pas mettre à contribution un autre système que la box domotique
  • On peut dupliquer le relevé d’une sonde d’humidité (ou autre) sur un autre périphérique mais cette recopie de la donnée ne me plaisait pas.

J’ai donc soumis mon problème à Eedomus qui m’a proposé un script que j’ai pu tester et améliorer ensuite en fonction de sa mise à l’épreuve à la maison. Je vous le propose aujourd’hui car je suis certain qu’il pourra vous être utile également.

Le capteur de tendances est né!

Ce script peut être utilisé par un périphérique et être appelé en lui passant en paramètres 2 critères:

  • id : l’identifiant du périphérique dont les données sont à comparer
  • intervalle : l’intervalle de temps séparant les données à comparer

Lorsque l’on souhaite déterminer une tendance d’un relevé (hausse, baisse, stable) la solution la plus simple, celle qui a été retenue dans le cadre de ce script, consiste à comparer le dernier relevé avec un relevé précédent servant de référence.

Les régles de comparaison sont basiques:

  • si le dernier relevé > relevé précédent => tendance “en hausse”
  • si le dernier relevé < relevé précédent => tendance “en baisse”
  • si le dernier relevé = relevé précédent => tendance “stable”

L’intervalle que l’on communique au script, en même temps que l’identifiant numérique du périphérique qui nous intéresse, permet de dire si l’on souhaite comparer le dernier relevé à celui d’il y a 1, 2, 5, 10, 30 minutes ou plus.  Vous avez la main sur la valeur que vous souhaitez utiliser pour la comparaison.

Mise en place du capteur de tendances

Pour mettre en place cela c’est simple.  Il vous suffit de créer un capteur HTTP qui récupérera la tendance du périphérique à surveiller en se basant sur le script que je vous propose et qui renvoie un XML directement exploitable.

  • Télécharger le script prev_value.php ci-joint, le dé zipper et l’installer sur sa box Eedomus.
  • Créer un périphérique “Capteur HTTP” de la manière suivante:

eedomus_trend

L’url sera la suivante:

http://localhost/script/?exec=prev_value.php&id=[VAR1]&intervalle=[VAR2]

Dans la “Variable utilisateur 1” vous indiquerez l’id du périphérique à suivre. Le capteur d’humidité dans mon cas a comme id 22346.

Dans la “Variable utilisateur 1” vous indiquerez l’intervalle de temps (en minutes) entre 2 relevés à comparer pour déterminer la tendance.  Dans mon exemple j’ai indiqué le même intervalle que celui utilisé en tant que “Fréquence de la requête”.

  • Créer les valeurs suivantes pour ce périphérique “Capteur HTTP”

eedomus_trend_valeurs

C’est tout. Il ne vous reste plus qu’à patienter que le périphérique se mette à jour pour pouvoir exploiter dans votre domotique ce capteur de tendances.

Conclusion

Le Script proposé prend en charge la lecture du relevé et sa sauvegarde dans la box Eedomus pour une utilisation ultérieure. Il n’y a pas de bases de données à mettre en place pour stocker cela.  C’est simple à installer et à maintenir… car il n’y a pas de maintenance particulière car on ne fait appel à aucun système tiers. Si la box est arrêtée, les valeurs permettant au script de fonctionner ne sont pas perdues car elles sont stockées dans la mémoire de votre box Eedomus.

Pour le côté technique, le script fait appel à la possibilité de sauvegarder des données (variables) au sein de la box Eedomus via les fonctions spécifiques saveVariable et loadVariable. La première fonction a pour but de “Sauvegarder le contenu d’une variable, ce qui la rend réutilisable lors d’une prochaine exécution du script”. Quand à la seconde fonction, elle permet de “Charger le contenu d’une variable précédemment sauvée avec saveVariable()”.  

Rassurez-vous le script prend tout cela en charge et vous n’avez pas à vous soucier d’autre chose que de l’installer pour pouvoir bénéficier de la fonctionnalité de détermination de tendance. Le script permet de définir les tendances de n’importe quel périphérique de votre box eedomus, n’importe quel capteur provenant de n’importe quel protocole domotique compris par la box. Pourquoi s’en priver pour simplifier la création de scénarii?

Faites-en bon usage!

14 Comments

  1. EnR37 Enr37 said:

    Merci à toi et à la team eedomus. A mettre en place au retour des vacances :-))

    lundi 15 août 2016
    Reply
  2. droopyjj said:

    Bonjour hervé,
    je n’y connais rien de rien en programmation
    Juste une petite question: je veux faire dire a mon karotz les températures de plusieurs sondes
    je souhaiterai mettre ces températures en variable et les ressortir dans une phrase
    La procédure classique avec last value id… ne me permet pas d’avoir une lecture fluide puisque je suis obligé de faire une macro dont les lignes de valeurs s’enchainent plus ou mois bien
    Y a t-il un moyen de modifier ton scripte pour mémoriser mes variable et les insérer dans une phrase? (dans une valeur ex=http://192.168.0.30/cgi-bin/tts?voice=julie&text=dans%20le%20salon,%20il%20fait%20(&loadvariable…)&cache=0)

    jeudi 22 septembre 2016
    Reply
    • Hervé Hervé said:

      Bonjour droopyjj
      A priori tu n’as pas besoin de ce script pour cela. Il faut que tu
      – crée un périphérique de type HTTP-Actionneur,
      – lui affecte une valeur ayant
      comme URL: http://192.168.0.30/cgi-bin/tts?voice=julie&cache=0&text=
      et comme paramètre : Il fait [LAST_VALUE PERIPH_ID=101010] degrés dans le salon et [LAST_VALUE PERIPH_ID=202020] dans la cuisine.

      En remplaçant bien sûr la valeur 101010 et 202020 avec les identifiants des capteurs de températures.
      Ça devrait marcher.

      jeudi 22 septembre 2016
      Reply
      • droopyjj said:

        Bonjour Hervé
        Merci pour ta réponse
        En revanche, c’est ce que j’ai fait , mais je ne suis pas satisfait du résultat car je suis obligé de creer plusieurs lignes:
        1 ere ligne pour dire: dans le salon il fait
        2 ieme ligne pour récuperer la valeur de ma sonde et pour le dire
        3 ieme ligne pour dire degres et à l’exterieur il fait
        4 ieme ligne pour récuperer la valeur de la sonde exterieur et la dire
        Ca ne s’enchaine pas bien (beaucoup moins bien qu’avec la veralight)
        Donc je cherche une autre solution
        Si tu as une idée..je suis preneur…donc ton fichier..:)

        jeudi 22 septembre 2016
        Reply
        • Hervé Hervé said:

          Je ne comprends pas pourquoi tu fais plusieurs lignes. Ça ne tient pas en une seule? On peut mettre plusieurs “LAST_VALUE PERIPH_ID” dans une seule valeur.

          jeudi 22 septembre 2016
          Reply
  3. droopyjj said:

    bah, je ne crois pas et d’apres ce que j’ai compris, il n’est pas possible non plus de mettre du texte avec le rappel de la valeur , c’est pour cela que je fais plusieurs ligne
    Encore une fois, je n’y connais pas grand chose….

    vendredi 23 septembre 2016
    Reply
    • Hervé Hervé said:

      Si si ça marche je le fais à la maison. Essaye!

      vendredi 23 septembre 2016
      Reply
  4. droopyjj said:

    desole, mais comment fais tu?
    peux tu m’envoyer une copie d’ecran sur mon mail?
    je suis nul donc pas capable de faire autre chose que de la copie de ce qu’on me prémâche
    cdt

    vendredi 23 septembre 2016
    Reply
    • Hervé Hervé said:

      Bonjour droopyjj ,
      Comme expliqué plus haut.
      – tu fais une seule ligne avec comme URL:
      http://[VAR1]/cgi-bin/tts?voice=julie&cache=0&text=

      -tu le affecte comme paramètre :
      Il%20fait%20[LAST_VALUE PERIPH_ID=101010]%20degrés%20dans%20le%20salon%20et%20[LAST_VALUE PERIPH_ID=202020]%20dans%20la%20cuisine.

      samedi 24 septembre 2016
      Reply
  5. droopyjj said:

    OK merci!!
    Je test…. je comprends pas …mais je test…
    Merci!

    samedi 24 septembre 2016
    Reply
  6. droopyjj said:

    Un grand Merci!!!!
    Ca marche!!!

    dimanche 25 septembre 2016
    Reply
    • Hervé Hervé said:

      Je t’en prie. Content que tu y sois parvenu! Fais-en bon usage 🙂

      dimanche 25 septembre 2016
      Reply
  7. Olivier said:

    Bonjour Hérvé,
    Tout d’abord bravo pour votre que je consulte très régulièrement. Ce petit commentaire pour savoir si je pouvais formaliser ce tuto pour un plugin pour l’eedomus (et donc etre dispo sur le store pour tt le monde)? Je souhaite l’utiliser ce tuto un peu partout dans ma maison et pouvoir le transformer en plugin serait plus facile pour moi pour mettre en place mes diverses tendances dans l’eedomus.

    mercredi 18 avril 2018
    Reply

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Prouvez que vous êtes humain: * Time limit is exhausted. Please reload CAPTCHA.