Salut à tous, c’est Mathieu. Nous allons aujourd’hui voir le fonctionnement de certaines fonctions dans Jeedom, à savoir les fonctions statistics, statistics between, stateChanges, stateDuration, et lastChangeStateDuration. Nous allons voir ce qu’elles peuvent nous permettre de faire dans Jeedom, et dans des virtuels.

Fonctions dans Jeedom : les prérequis.

Alors là, c’est très simple, il vous suffit d’avoir un Jeedom installé. Normal, non ? Ensuite, il vous faudra installer le plugin virtuel. La documentation Jeedom nous explique que ce plugin va nous permettre de faire la création de périphériques virtuels et de leurs propriétés.

Un périphérique virtuel peut être créé pour les besoins suivants :

  • Consolider dans un seul périphérique des informations ou actions de plusieurs périphériques physiques/virtuels ;
  • Créer un périphérique alimenté par une source externe à Jeedom (Zibase, IPX800…) ;
  • Dupliquer un équipement pour le scinder en 2 par exemple ;
  • Effectuer un calcul sur plusieurs valeurs d’équipement ;
  • Exécuter de multiples actions (macro).

Alors, nous, dans notre exemple, ce plugin nous servira à effectuer des calculs sur plusieurs valeurs d’équipements.

Notez bien qu’il vous faudra historiser la commande que vous souhaitez analyser.

Fonctions dans Jeedom : la fonction statistics et statistics between

La documentation Jeedom nous définit ces deux fonctions ainsi. Les fonctions statistics(commande,calcul,période) et statisticsBetween(commande,calcul,start,end) nous donnent le résultat de calculs statistiques (sum, count, std, variance, avg, min, max) sur la période (period=[month,day,hour,min] ou expression PHP) ou entre les 2 bornes demandées (sous la forme Y-m-d H:i:s ou expression PHP).

Prenons un exemple.

Vous avez un Sonoff Pow ou tout autre objet connecté qui vous remonte la consommation instantannée d’un appareil. Vous souhaitez faire des statistiques sur votre objet afin de savoir combien il consomme par jour, par mois, et même par an.

Fonctions dans Jeedom

Nous allons donc créer un virtuel pour faire les statistiques de cet objet.

Fonctions dans Jeedom

Puis dans les commandes, nous allons ajouter des informations virtuelles. Si on veut complètement remplacer l’ancien widget par celui que nous créons en cemoment, nous rajoutons la consommation instatannée.

#[Garage][Chauffeau][Conso]#

Ensuite, nous allons ajouter la consommation d’hier. Nous utiliserons la fonction statisticsbetween, pour lui demander de nous faire la moyenne de son relevé entre hier 0:00 et hier 23:59. Cette moyenne, nous la multiplierons par 24 pour nous donner sa consommation journalière, et la diviserons par 1000 par obtenir un résultats en KWh sur la journée d’hier.

statisticsbetween(#[Garage][Chauffeau][Conso]#,avg,yesterday 00:00, yesterday 23:59)*24/1000

Puis, nous allons demander à Jeedom qu’il nous calcul la consommation sur la journée. Nous reprenons le même principe mais la période s’étend d’aujourd’hui à 0:00, jusqu’à maintenant. Donc, nous mettons la formule suivante.

statisticsbetween(#[Garage][Chauffeau][Conso]#,avg,today 00:00,now)*24/1000

Ok, vous suivez ? Alors, on va passer à l’étape du dessus…

Quelle est la consommation depuis le début de l’année ? Ici, la borne temporelle va s’étendre du premier jour de l’année jusqu’à maintenant. Ça c’est facile, on sait faire. Puis, on divise par 24 et on multiplie par 1000. Mais, il va falloir diviser par le nombre de jour passés depuis le début de l’année. Pour connaitre le nombre de jours écoulés, on va faire simple. On demande le numéro du mois en cours (la commande est #mois#), on lui enlève 1, puis on multiplie par le nombre de jours moyens dans un mois (30.4375), auquel on ajoute le nombre de jours dans le mois en cours (#jour#).

statisticsbetween(#[Garage][Chauffeau][Conso]#,avg,first day of this year 00:00,now)*24/1000*((#mois#)-1)/*30.4375)+#jour#)

Pour finir sur ces fonctions statistics, vous aurez donc cette page de configuration.

Fonctions dans Jeedom

 

Vous pourrez donc avoir ce rendu sur votre dashboard.

Fonctions dans Jeedom

 

Fonctions dans Jeedom : stateChanges, stateDuration, et lastChangeStateDuration

Ces trois fonctions sont relatives au changement d’état. Là encore, il vous faudra obligatoirement historiser votre commande. Ces fonctions sont très bien expliquées dans la documentation Jeedom.

  • stateDuration(commande,[valeur]) : Donne la durée en secondes depuis le dernier changement de valeur. Retourne -1 si aucun historique n’existe ou si la valeur n’existe pas dans l’historique. Return -2 si la commande n’est pas historisée.
  • lastChangeStateDuration(commande,valeur) : Donne la durée en secondes depuis le dernier changement d’état à la valeur passée en paramètre.
  • lastStateDuration(commande,valeur) : Donne la durée en secondes pendant laquelle l’équipement a dernièrement eu la valeur choisie. Attention, la valeur de l’équipement doit être historisée.
  • stateChanges(commande,[valeur], période) et stateChangesBetween(commande, [valeur], start, end) : Donnent le nombre de changements d’état (vers une certaine valeur si indiquée, ou au total sinon) sur la période. (period=[month,day,hour,min] ou expression PHP) ou entre les 2 bornes demandées (sous la forme Y-m-d H:i:s ou expression PHP).
Allez, on va quand même faire un petit exemple.

Prenons mon robot tondeuse. J’ai besoin de savoir combien de fois il a tondu, depuis quand il est hors de sa base. Si vous avez lu l’article sur mon robot, vous savez qu’il n’est pas connecté donc je lui ai mis un capteur d’ouverture de porte Xiaomi. Quand la valeur est 1, il tond (ou est coincé) et quand il charge c’est 0. Quand la valeur est sur 1 plus de 80 minutes, c’est qu’il est coincé.

Dans un premier temps, on va chercher à savoir combien de fois il a tondu. La commande est simple.

stateChanges(#[Exterieur][Wall-E][Sur sa base]#,1,Today)

Ensuite, nous allons chercher depuis combien de temps il tond. On va utiliser la fonction stateduration.

stateDuration(#[Exterieur][Wall-E][Sur sa base]#,1)/60

Cela nous renseigne donc le temps depuis lequel il est passé à 1 pour la dernière fois. Ce qui siginifie que s’il a tondu depuis 75 minutes et qu’il charge depuis 25 minutes, la valeur sera 100 minutes.

Enfin si vous souhaitez connaitre le temps de la dernière tonte, vous pouvez utiliser cette formule.

lastChangeStateDuration(#[Exterieur][Wall-E][Sur sa base]#,1)/60

Fonctions dans Jeedom

Fonctions dans Jeedom

Fonctions dans Jeedom : la conclusion

Nous avons abordé seulement que quelques fonctions, mais elles sont toutes très intéressantes. Elles nous permettent de mettre en valeur les données récoltées par nos différents capteurs. Elles nous permettent d’exploiter les données recueillis afin de mieux les traiter.



Partager sur :

Infos de l'auteur

Je m'appelle Mathieu, j'ai 35 ans, et je vis à Limoges. Je suis prof d'EPS, et passionné de domotique. Amateur de DIY et de bricolage, j'aime aussi la cuisine, le bon vin.

17 commentaires

  1. Laurent (Billou02) le

    Merci Mathieu pour ces nouvelles fonctions. je rajouterai même que si l’on veut uniquement des valeurs sans virgules (entiers) on peut encapsuler ces fonction dans une fonction round(valeur,0). 0 pour le nombre de décimales souhaitées

    round(stateDuration(#[Exterieur][Wall-E][Sur sa base]#,1)/60,0) donnera donc une valeur en minutes arrondie a l’entier proche.

  2. Merci pour cet article, très bien expliqué avec de bons exemples. J’ai des doutes sur l’utilisation des fonctions stateDuration et lastChangeStateDuration pour ton robot de tonte. Ta copie d’écran ne me rassures pas non plus……. :;)

  3. TaG - Pierre-Yves le

    Hello,

    Concernant ton calcul suivant :
    statisticsbetween(#[Garage][Chauffeau][Conso]#,avg,first day of this year 00:00,now)*24/1000*((#mois#)-1)/*30.4375)+#jour#)

    J’ai peu de temps en ce moment, mais pour avoir le nombre de jours précis, réellement écoulés, tu peux faire un bloc code php dans un scénario qui te donnera l’information.

    Un bloc code PHP dans un scénario avec ceci :

    $premierJour = new DateTime(‘2018-01-01 00:30:00’);
    $JourActuel = new DateTime(‘now’);
    $diff = $premierJour->diff($JourActuel);
    $nb_jours = $diff->days;

    $scenario->setData(« nbrJour »,$nb_jours);

    Pour tester, tu peux t’envoyer le résultat sur telegram ou autre moyen de communication via une commande action telegram avec le message ci-dessous

    résultat nombre de jour écoulés entre le début de l’année et aujourd’hui : variable(nbrJour)

    Si je ne suis pas hors sujet.

  4. Merci pour l’article aurait tu un tuto pour domotiser le chauffe eau avec le sonoff pow car je serais intéressé de savoir comment tu la brancher

  5. Ok moi j’ai juste un fil qui vas dans une prise murale je penses que c’est bon puis le sonoff vous l’avez laisser vierge vous avez pas fait de hack
    Merci

  6. Bonsoir,
    Merci pour les explications sur ces fonctions. Par contre, j’ai un énorme doute sur le calcul des kwh en partant des w.
    Prenons l’exemple d’un radiateur de 1000 w qui ne fonctionnerait qu’une heure par jour, 1h x 1000 w = 1 kwH / jour. 7 khw/semaine, 365 kwh/an
    Essaye d’appliquer ta formule en prenant ne serait ce qu’un point de mesure par heure…
    L’énergie consommée en wh est la surface sous la courbe Puissance=f(t) (c’est la valeur de l’intégrale de cette fonction). Je dis cela de mémoire car ça fait très longtemps que j’ai quitté les bancs de l’école 🙁
    D’après moi, la seule manière d’avoir une valeur en kwh est d’avoir le compteur intégré dans le device (la prise connectée Fibaro ou similaire, le « compteur » EDF, le compteur OWL…). Ou alors, faire des mesures par logiciel en continu et en quantités industrielles comme 1 par seconde…

  7. Merci Mathieu pour le tuto.
    Sur de la puissance elec, si tu n’as que quelques points par heure une calcul manuele de moyenne est dans les choux sauf a avoir un point toutes les quelques secondes. Comme évoqué par JC38 seule des valeurs déjà intégrés nativement dans des modules qui font un suivi temps réel sera effectif.
    ++

  8. très intéressant :
    en ce qui concerne le nombre de jours écoulés pour la date on peut prendre la fonction date(z) non ?
    question : Comment fais tu pour remonter la première valeur brute d’une période ? genre un compteur cumulatif de gaz, je cherche a avoir le compteur au premier du mois par exemple.
    Merci pour les infos.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.