Salut à tous, alors aujourd’hui on va parler de consommation de durée et de machine à laver. D’où le titre « Connaître le temps de fonctionnement d’un appareil et sa consommation ». Je voulais vous présenter ce que j’avais mis en place. Mais c’était sans compter sur le Telegram. En effet à plusieurs dont moi nous avons dépatouillés un lecteur, qui cherchait à faire la même chose  à peu prés. Au final après les conseils et l’aide de tout le monde il est arrivé à quelque chose de sympa et je dois dire qu’il est allé assez loin.

Connaître le temps de fonctionnement d’un appareil et sa consommation
Bonjour a tous, c’est Billou02 (Laurent). Dans cet article, nous allons voir aujourd’hui comment savoir qu’un appareil fonctionne, combien il consomme et pendant combien de temps. Dans mon cas, ce sera une machine à laver. Oui j’avoue pour le titre « Connaître le temps de fonctionnement d’un appareil et sa consommation » j’ai pas cherché très loin mais au moins il est clair.

Matériel requis : un périphérique capable de transmettre à Jeedom la puissance consommée. J’utilise pour cela une prise NeoCoolCam Power Plug en Zwave. Elle supporte 2500w c’est plus que ce que mon appareil consomme. (2200w maxi sur l’étiquette arrière).

ATTENTION de bien choisir son équipement Z-wave ou autre protocole en fonction de la consommation de l’appareil  à surveiller.

Connaître le temps de fonctionnement d’un appareil et sa consommation – Configuration de ma prise

Nous allons rentrer dans la config de la prise pour vérifier deux ou trois valeurs. Pour cela cliquez sur Plugins / Protocole Domotique / Z-Wave. Choisir son périphérique puis bouton Configuration (a côté de paramètres). Une fois rentré dans la configuration du module, cliquez sur l’onglet Paramètres.

Connaître le temps de fonctionnement d’un appareil et sa consommation

Les configurations intéressantes pour notre cas sont ici les numéros 1, 2, 6.

⦁ Le numéro 1 sert à activer ou non le renvoi de la consommation au contrôleur.
⦁ Le second défini à quelle fréquence (en secondes) la valeur va être transmise au contrôleur. Au minimum, pour ma part, la prise Z-wave transmettra une valeur de consommation toutes les 300 secondes, soit 5 minutes.
⦁ Le numéro 6 sert lui à définir quelle puissance consommée (en % par rapport à la dernière valeur envoyée) déclenchera un envoi de valeur au contrôleur indépendamment du paramètre numéro 2.

Ces valeurs sont importantes mais pas figées, surtout le paramètre 2 et 6. Le numéro 1, lui est obligatoire, sinon la consommation n’est pas remontée au contrôleur.

Connaître le temps de fonctionnement d’un appareil et sa consommation

Voyons pourquoi

Il faut dans un premier temps faire un relevé du graphique de consommation du cycle principal de l’appareil à surveiller. Dans mon cas, une machine à laver qui fait aussi sèche linge, ce n’est pas si simple que ça en a l’air. Regardons le graphique de consommation.

Connaître le temps de fonctionnement d’un appareil et sa consommation

Que voit t’on ?

⦁ Mon cycle complet dure de 14h à 18h30 soit un peu plus de 4h30.
⦁ Il est réparti en 4 grandes phases (voir graphique).
⦁ Il y a quelques moments où la consommation est proche de zéro dans le cycle (vers 15h30).
⦁ Enfin une phase de défoulage du linge (tambour qui tourne doucement).

Après avoir analysé le fonctionnement de son appareil, on ajuste le paramètre numéro 2 et 6 pour ne pas avoir de faux positifs. Il y aura aussi un autre paramètre dans le scénario à ajuster, on verra cela plus tard…

Connaître le temps de fonctionnement d’un appareil et sa consommation – Point de vigilance

Attention toutefois (j’ouvre une petite parenthèse).
Pour obtenir des graphiques comme celui plus haut, il faut historiser la commande puissance de l’équipement. Pour cela on ouvre l’équipement Z-wave et on va sur l’onglet Commandes. Sur la ligne Puissance, on coche Afficher / Historiser et on clique sur l’engrenage au bout de la ligne. Ensuite onglet Configuration et rubrique Historique.

Dans la case Mode de lissage, je mets « Aucun ». Cette fonction sert à « lisser » l’historisation en faisant des moyennes des valeurs (pour diminuer la quantité dans la base de données). Dans notre cas, il ne faut pas (du moins pour la période de réglage / détection de faux positifs).

Par contre, je purge l’historique si plus vieux que 1 mois. Afin de limiter la quantité de données.

Là ou j’attire votre attention, c’est que si vous mettez des valeurs petites au paramètre 2 plus haut (dans les paramètres Z-wave du périphérique, pour rappel, c’est le nombre de secondes entre chaque envoi de données), vous allez augmenter la quantité de valeurs dans la base de données. Si vous mettez aussi un chiffre petit dans le paramètre 6 (pourcentage de la puissance qui occasionne un envoi de données), vous allez aussi augmenter la quantité de valeurs dans la base de données. Les petites configurations Jeedom risqueraient de saturer voir de mettre un temps énorme a l’affichage de l’historique des valeurs. Donc il faut bien prendre soin de mettre des valeurs « juste ce qu’il faut, mais pas trop non plus ! ».

Tout ceci ayant pour but de ne pas saturer le réseau Z-wave de requêtes inutiles, et donc de conserver une certaine réactivité des équipements. Parenthèse fermée 😉 !!!! Oui bon je sais j’ai dit qu’elle serait petite.

Connaître le temps de fonctionnement d’un appareil et sa consommation – Le scénario

On parlait tout a l’heure de scénario…. c’est parti !

Connaître le temps de fonctionnement d’un appareil et sa consommation

On se calme, on va détailler cela.

Je rappelle donc, on parle d’une Machine A Laver (abréviation mal en début de mes variables). Le déclencheur de mon scénario est la puissance instantanée consommée relevée sur la prise Z-wave.

Dans un premier temps, on teste si la puissance est supérieure à 30w (stipule que la machine est démarrée) et que la variable mal_encours est à zéro (stipule qu’aucun cycle n’est en cours de mesure).

Si OUI ===> on fait

⦁ On mets la variable mal_encours à 1 pour indiquer que le cycle est en cours.
⦁ On relève via la variable mal_conso_debut, la valeur de la consommation cumulée. (elle va nous servir de point de départ de calcul pour la conso du cycle.)
⦁ On attribue à la variable mal_debut, la valeur #timestamp#……
⦁ On envoie un message Télégram pour indiquer que la machine à laver est démarrée.

Connaître le temps de fonctionnement d’un appareil et sa consommation

STOP !

Explications : #timestamp# est une fonction intéressante de Jeedom. #timestamp# est un compteur de secondes qui ne s’arrête jamais. Il a commencé le 1er Janvier 1970 et il incrémente de 1 à chaque seconde qui s’écoule. Si on le relève au début et à la fin du cycle, on obtient alors un écart en secondes qui servira de base pour notre calcul de temps de cycle.

Ensuite, notre machine tourne, nos valeurs de puissance arrivent…

A chaque valeur différente de puissance, on sera dans la phase SINON (pour rappel la variable mal_encours est a 1 pendant le cycle). Le test est simple, est-ce qu’on consomme moins de 5w et est-ce que mal_encours est à 1.

Lors de ces tests de valeurs, il se peut donc que l’on soit dans un moment de pause du cycle et que ces conditions soient vraies, mais le cycle n’est pour autant pas terminé. C’est pour cela que le bloc DANS est là (Merci @Sarakha63 pour ce petit bout de scénario qui m’a sorti de la mouise)…

Explications :

La puissance est inférieure à 5w (pendant la vidange de la machine à laver par exemple), et le cycle est en cours.
On lance le bloc DANS qui va effectuer un test 5 minutes plus tard (le fameux paramètre à modifier en fonction de votre appareil en plus des deux paramètre Z-wave de tout a l’heure).

On testera les choses suivantes :

⦁ La puissance est elle toujours inférieure à 5w (5 minutes plus tard donc) ?
⦁ (date(‘His’) – collectDate(#[Salle de bains][Machine a laver][Puissance]#,’His’)) > 270

Pas d’inquiétude, je décrypte. On va faire un calcul simple au final même si la fonction paraît barbare.

date(‘His’) = Heures minutes secondes tout collé.
⦁ H = Heure au format 24h, avec zéros initiaux (00,01,02,….,23). Attention à la majuscule.
⦁ i = Minutes avec zéros initiaux (00,01,02,….59)
⦁ s = Secondes avec zéros initiaux (00,01,02,….59)

Donc pour 17h5m18s ça donnera 170518.

ensuite collectDate(#[Salle de bains][Machine a laver][Puissance]#,’His’)
C’est l’heure de collecte de la dernière valeur de puissance, au format tout collé comme au dessus, que la prise a remonté au contrôleur.

Donc si je déchiffre complètement, on vérifie que le temps entre maintenant et la dernière valeur remontée est supérieur à 270s (4m30).

Connaître le temps de fonctionnement d’un appareil et sa consommation

Pourquoi 4 min 30 ?

Rappelez vous le paramètre 2 de la prise Z-wave plus haut. La valeur est à 300. On remonte une valeur toutes les 300 secondes (5minutes) sauf si la puissance diffère de 20 % par rapport à la valeur précédente (paramètre 6). Pour mémoire, 20 % (qui peut paraître beaucoup) de 5w = 1w….

Donc si cette valeur est vraie, on est sûr que le cycle est terminé, car on aura reçu aucune valeur en 5 minutes de temps (ce qui veut dire que la valeur n’a pas changé). Pour info, ma machine à laver au repos en fin de cycle consomme 1w.

Ensuite on arrive a une ribambelle de variables… on détaille :

⦁ mal_encours = 0 . Le cycle est terminé.
⦁ mal_conso_fin = consommation de fin de cycle.
⦁ mal_conso_cyle = variable qui va contenir conso de fin de cycle – conso de début de cycle donc la valeur totale du nombre de Kwh consommé pour ce cycle de fonctionnement.
⦁ mal_fin = #timestamp#. Valeur en seconde de #timestamp# en fin de cycle.
⦁ mal_calcul_global = soustraction de #timestamp# de fin moins celui du début. Nous donne donc une valeur en secondes de la durée du cycle.

On va faire une pause, que je détaille ma méthode de calcul. Je précise bien que ceci est ma méthode, celle que je connais pour transformer des secondes en heures, minutes, secondes.
Je ne suis pas développeur, je ne connais pas de langage de programmation, je me renseigne juste au coup par coup suivant mes besoins pour les scénarios que je fais. Bien entendu, je reste ouvert si vous avez des suggestions dans les commentaires pour les améliorations 😉

Ma méthode est la suivante.

Nous prendrons pour illustrer cet article 16254s (valeurs du graphique plus haut)
#timestamp# de début : 1526299766
#timestamp# de fin : 1526316020

1526316020 – 1526299766 = 16254s

Pour le calcul des heures :

Je divise mon résultat en secondes (16254) par 3600 (nombre de secondes en une heure). J’obtiens donc un décimal (nombre à virgules) avec en entier le nombre d’heures. 16254 / 3600 = 4,515
J’utiliserai la fonction floor() qui sert à arrondir à l’entier inférieur.
mal_calcul_heures = floor(mal_calcul_global / 3600) = floor(16254 / 3600) = floor(4,515) = 4

Ensuite il faut enlever 4h en secondes à nos 16254s pour continuer le calcul. C’est ce que fait la variable mal_calcul_global2 qui va me servir pour la suite des calculs.
mal_calcul_global2 = mal_calcul_global – (mal_cacul_heures * 3600)
= 16254 – (4 * 3600) = 16254 – 14440 = 1854s

Ensuite pour les minutes :

Même principe avec la fonction floor() mais en la divisant par 60 (nombre de secondes dans une minute)
mal_calcul_minutes = floor(mal_calcul_global2 / 60)
= floor(1854 / 60) = floor (30,9) = 30

Enfin pour les secondes :

On soustrait à mal_calcul_global2 le nombre de minutes * 60s
mal_calcul_secondes = mal_calcul_global2 – (mal_calcul_minutes * 60)
mal_calcul_secondes = 1854 – (30 * 60) = 1854 – 1800 = 54
on a donc un résultat de
mal_calcul_heures (4) mal_calcul_minutes (30) mal_calcul_secondes (54)
soit 4h30m54s

On envoie donc enfin sur Télégram une notification comme quoi la machine à laver a fini son cycle, et on affiche mal_conso_cycle (les Kwh consommés pendant le cycle), ainsi qu’une mise en forme de mal_calcul_heures, mal_calcul_minutes, mal_calcul_secondes. Pour afficher le temps de fonctionnement.

Télégram nous indique un début de cycle à 14h09, une fin de cycle à 18h40, soit 4h31min.
Notre calcul a 6 secondes d’écart (arrondi).

Mais alors POURQUOI calculer un temps de fonctionnement d’appareil ?

Pour ma part, c’est un défi que je me suis lancé, sans plus xD. Sinon, en cas d’entretien périodique d’appareil genre lave vaisselle où il faut remplir tous les X lavages le bac de sel ou faire un détartrage de la machine à laver tous les X cycles, ces valeurs peuvent servir. A vous de trouver l’usage qui vous convient.

Quelques liens vers les fonctions utilisées ici :

Floor() : http://php.net/manual/fr/function.floor.php
Date() : http://php.net/manual/fr/function.date.php
Les autres fonctions sont dans la doc Jeedom : https://jeedom.github.io/core/fr_FR/scenario

Voilà qui clôture cet article qui va encore donner mal aux cheveux à certains.

Connaître le temps de fonctionnement d’un appareil et sa consommation

Perso, j’ai pas mal galéré pour faire ce scénario. Merci encore à la Team habituelle de Télégram du canal Entraide. Je le répète, il ne faut pas hésiter à venir, parler, etc.… Tout le monde peut aider à son niveau. Merci cher Doc (@sarakha63) pour ton aide sur le scénario qui fonctionne à merveille. Merci @Kouaw pour m’avoir aiguillé dans les fonctions à rechercher pour essayer de réussir mon scénario.

Je rends l’antenne… 😉

Connaître le temps de fonctionnement d’un appareil et sa consommation

Je suis très content de Billou02 pour le coup. En effet j’aime pas donner des scénarios tout cru quand j’aide quelqu’un. Tout simplement car je préfère faire comprendre les subtilités afin que la personne puisse facilement adapter d’elle même. Et quand je vois comment il explique certaines choses et comment il est allé plus loin, j’en déduis qu’il a excellemment compris. Bravo Billou02 pour ta première utilisation de variable de toi même !!

 

Erratum !

Un soucis de calcul a été remonté par un lecteur de Télégram (@toregreb) en effet, une erreur se produit dans certains cas sur la commande suivante :

(date(‘His’) – collectDate(#[Salle de bains][Machine a laver][Puissance]#,’His’)) > 270

Prenons deux valeurs pour expliquer l’erreur.

date(‘His’) = 152500 soit 15h25
collectDate(#[Salle de bains][Machine a laver][Puissance]#,’His’) = 152200 soit 15h22

la soustraction des deux nous donne 152500-152200 = 300
mais en fait ce n’est pas 300 secondes mais juste 3 minutes soit 180 secondes.

Pour corriger cela, il est nécessaire de remplacer la formule par

(date(‘U’) – collectDate(#[Salle de bains][Machine a laver][Puissance]#,’U’)) > 270

U = Secondes depuis l’époque Unix (1er Janvier 1970, 0h00 00s GMT).
soit une valeur en secondes. (même principe que le #timestamp# en fait)

Nous obtiendrons donc ainsi une soustraction de secondes, donc un calcul sans erreur.

Je laisse volontairement l’article en l’état car l’explication précédente peut servir aussi.

Merci @toregreb 🙂



Partager sur :

Infos de l'auteur

37 commentaires

  1. Salut Billou02, merci pour l’article ! J’ai une question qui me taraude, comment gères tu le calcul de la conso cumulé de la machine ?
    je dupliquerai bien ton scénario avec une pince ampèremétrique sur IPX mais j’arrive pas à avoir la conso cumulé, je n’ai que la conso instantané !?!

  2. Merci pour l’article, j’ai quelque chose de similaire, mais j’avais beaucoup trop de déclenchement , c’est pas ton cas ?
    J’ai du coup fait 1 déclenchement toutes les heures pour voir si la machine avait démarré puis une boucle toutes les 5 minutes pour voir quand c’est terminé : MAX(#[Maison][Wall Plug][Puissance]#,3 min) < 5

    Mais j'aime bien l'idée d'avoir la conso et le temps …
    Est-ce pénalisant du côté de Jeedom d'avoir autant de déclenchements ? Je m'embête peut être pour rien !

  3. Laurent (Billou02) le

    @FOUR, La consommation cumulée est interne au périphérique Z-Wave, il me renvoie Tension, Intensité, Puissance instantanée, et Puissance cumulée et l’état de la prise.

  4. Merci pour l’article, cependant je mettrais jamais 2500w sur une prise neocoolcam, ce n’est pas raisonnable, car mal construite et pas CE…donc BURN

  5. Laurent (Billou02) le

    @EMERIC Ce ne sont que de simples test si oui ou non, donc, très rapides pour nos Jeedom. Par contre, j’avoue être sur une machine plus véloce qu’un PI3 ou une Smart donc, je ne peux répondre si c’est pénalisant ou non pour les petites machines

  6. Laurent (Billou02) le

    @OLIVIER Pour l’instant, je n’ai aucun mauvais retour sur des prises de cette marque depuis que je les utilise. L’avenir me dira s’il faut que je penche dans ton sens ou pas.

  7. Laurent (Billou02) le

    @IOLO
    Merci mais pourquoi utiliser un plugin potentiellement buggé alors que Jeedom peut le faire de manière native ? C’est un peu comme rajouter une application Calculatrice a un smartphone…

  8. Bravo j’ai déjà lu un article similaire mais pas aussi poussé.
    Et puisque tu en parles, au sujet de la programmation … regarde la fonction division entière (intdiv) et l’opérateur modulo (%) qui peuvent grandement te simplifier la vie. Voir même DateInterval.

  9. Laurent (Billou02) le

    @BIDI
    Merci pour ces fonctions que je ne maîtrise (connais) pas. Je serai ravi de discuter avec toi de ceci sur le canal entraide de Télégram. N’hésite pas a m’interpeller la bas si tu y viens.

  10. Laurent (Billou02) le

    @CHRIS
    citation de l’article : « Je rappelle donc, on parle d’une Machine A Laver (abréviation mal en début de mes variables). Le déclencheur de mon scénario est la puissance instantanée consommée relevée sur la prise Z-wave. » 😉

    Par contre, je veux bien un retour sur la consommation d’eau ainsi que le matériel utilisé si tu peux

  11. David Carlier le

    Très intéressant.

    Quelqu’un aurait un lien vers du matériel compatible Jeedom NON ZWAVE qui ne coute pas un rein ?
    Et si possible directement en prise EU …

    David.

  12. J’ai acheter une prise Fibaro wallplug mais elle déclenche avec la machine à laver, certainement à cause de la puissance ?
    Vous avez une idée comment vous faite, un problème de conf jeedom ou la protection du wallplug ?
    Merci par avance et merci pour ces super Tuto.

  13. bonjour
    voila le resultat
    la machine a laver est terminée
    le cycle a Consommé 0.58999999999997 Kwh
    et il a duré 1h 21m 30s
    la consommation d’eau a ete de 47 Litres

    est ce que l’on peut laisser simplement 2 chiffres apres la virgule
    cdt

  14. Laurent (Billou02) le

    @CHRIS
    oui c’est possible avec la fonction ROUND
    round(valeur,[décimal]) : Donne un arrondi au-dessus, [décimal] nombre de décimales après la virgule.
    Tu dois certainement faire un calcul pour obtenir ta valeur 😉
    Le cycle a consommé round(variable(mal_conso_cycle),2) Kwh
    😉

  15. David Carlier le

    Merci.
    Effectivement je ne mettrai jamais cette prise sur ma machine à laver ou alors pour faire une bonne blague mais bon on va encore critiquer mon humour 😉

  16. Mickaël PICAUD le

    Pour éviter des opérations inutiles : gmdate(« H\hi\m », variable) pour convertir des secondes unix en temps « humain »

  17. Laurent (Billou02) le

    @MICKAEL PICAUD

    Merci pour ton retour.
    En effet pour un affichage dans un message Télégram c’est tout de suite plus simple. 🙂

  18. Salut Billou02,

    Merci pour la partage, super tuto! J’ai fait le même scénario avec un Fibaro FGWPE-102 mais le hic est que dès que le cycle se lance je reçois 1000 SMS (j’ai choisi Telegram+SMS), j’ai dû me planter quelque part.

    Merci

  19. Salut Billou02,

    Merci pour la partage, super tuto! J’ai fait le même scénario avec un Fibaro FGWPE-102 mais le hic est que dès que le cycle se lance je reçois 1000 SMS (j’ai choisi Telegram+SMS), j’ai dû me planter quelque part.

    Merci

  20. Salut Billou02,

    Merci pour la partage, super tuto! J’ai fait le même scénario avec un Fibaro FGWPE-102 mais le hic est que dès que le cycle se lance je reçois 1000 SMS (j’ai choisi Telegram+SMS), j’ai dû me planter quelque part.

    Merci!

  21. Pingback: La Presse du Mois de Juillet | NextDom

  22. bonjour
    j’ai mis le scenario machine a laver en place marche au top
    j’ai fait dupliquer ce scenario en changeant les valeurs et en mettant toute celle pour mon lave vaisselle
    ca marche pas
    qd il demare c’est ok mais le scenario ne m’indique pas la fin
    j’ai vue que la variable lv_encours ne se remet pas a zero quand il n’y a plus de conso
    voila la commande
    #[EDRT (ecodevice 2)][Conso Elec Lave Vaisselle][Instan Lave Vaisselle]# < 10 ET variable(lv_encours,0) == 1

    Dans 5 mn

    #[EDRT (ecodevice 2)][Conso Elec Lave Vaisselle][Instan Lave Vaisselle]# 270

    si vous avez une idee ca serais sympa car ca fait un moment que je cherche sans trouver
    cdt

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.