Obtenir le temps d'utilisation d'un appareil électrique sur une période donnée

A l’époque où j’étais sur Jeedom, j’avais un scénario pour la mise ne route qui regardait sur Puissance > x W puis 120 secondes plus si la Puissance > x W toujours alors c’est que la machine est bien démarrée.
De cette manière, on évite le ON/OFF par erreur entre autre

et pour le le scénario de OFF j’attendais 60 secondes pour affirmer que la machine est terminée

Je mettais un sleep dans le scénario

PS :
je viens de faire un vague de test pour faire un message embed discord (avec les infos sensor dedans) : un échec pour ce soir :slight_smile:
Par contre dans le fichier csv il y a un hic il y 7h60m ! et un 8h2m au lieu de 8h02 pas méchant celui ci je pense mais pas encore regardé

Ton scénario ne fonctionne pas avec mon lave-vaisselle :
en fin de cycle, pendant le séchage, celui-ci consomme presque rien mais n’a pas fini.

Sur le graph ci-joint, mon cycle est vraiment fini a 16h19 (le tout petit pique d’environ 20watt pendant moins d’une minutes ) et non 15h08 comme l’aurais indiquer ton Jeedom scénario :

Bizarre, moi j’ai un résultat différent mais pas forcement mieux :

07/04/2023 ; 14h19 ; 17h19 ; 3h0m ; 948Wh ; 0.14€ ;

Idéalement, il faudrait écrire 3h et non 3h0m

Par contre changer ça, c’est un peut la galère et pas facile , … ( le code incriminé est {{ ((((state_attr('automation.lave_vaisselle_fin','last_triggered')) - (state_attr('automation.lave_vaisselle_start','last_triggered'))).seconds % 3600 )/60 )| round }}m

il faudrait y rajouter un test, si c’est 60 ou 0, ne rien mettre (même pas le m)

Tu pense qu’il faudrait écrire 8h02 et non 8h2m ? ( si oui, il doit y avoir une fonction python pour que le nombre soit forcement sur 2 chiffres mais je connais pas.

Sinon, peut-être qu’on peut demander une évolution sur easy-time ( nouvelle fonctionne de macro ) pour permettre d’afficher « joliment » des différences de temps :
GitHub - Petro31/easy-time-jinja: Easy Time calculations for Home Assistant templates

Oui oui je comprends bien la difficulté, je partageais déjà le soucis vu sur les tests
J’ai un vrai cycle aujourd’hui sur mon lave vaisselles on verra ce que cela donne

J’ai pas encore pris le temps de regarder le sujet macro sur le temps les évolutions vont plus vite que moi :slight_smile:

Mais oui dans l’idéal il faudrait écrire sur 2 digit c’est plus propre je trouve et autorisé aussi le 36hxx pas pour la machine à laver mais pour d’autres usages sur temps long sur deux journées plus !!

Les calculs sur dates et times sont pénibles c’est clair mais c’est la base

J’ai trouver comment faire (et rendre le code également un peut plus lisible également)
au début, il faut rajouter ça :

{%- set time = ((state_attr('automation.lave_linge_fin','last_triggered')) - (state_attr('automation.lave_linge_start','last_triggered'))).seconds -%}
{%- set minutes = ((time % 3600) / 60) | round | int -%}
{%- set hours = ((time % 86400) / 3600) | int -%}

Du coup, on peut remplacer ce gros pâter

{{ (((state_attr(''automation.lave_vaisselle_fin'',''last_triggered''))
        - (state_attr(''automation.lave_vaisselle_start'', ''last_triggered''))).seconds
        / 3600 )| int }}h{{ ((((state_attr(''automation.lave_vaisselle_fin'',''last_triggered''))
        - (state_attr(''automation.lave_vaisselle_start'',''last_triggered''))).seconds
        % 3600 )/60 )| round }}m

par

{{ '{:01}h{:02}m'.format(hours, minutes) }}
1 « J'aime »

Top ça pas certain de mettre en route to day mais je regarde

@roumano , super simplification. Je vais essayer aussi.
Lorsque tu dis « au début, il faut rajouter ça : », tu parles du début des actions de l’automatisation des notifications je présume. Correct?
De mon côté, je galère pour la mise en forme des notifications. Le formatage du Yaml pour arriver à générer des retours à la ligne est loin d’être évident, malgré la lecture de multiples threads sur les options de formatage de texte.
Je vais bien finir par y arriver, mais à chaue fois il faut attendre de lancer un lave-vaisselle pour tester :wink:

Au début de la notification, comme ça :

service: notify.lave_vaisselle
data:
  message: >
    {%- set time =
    ((state_attr('automation.lave_vaisselle_fin','last_triggered')) -
    (state_attr('automation.lave_vaisselle_start','last_triggered'))).seconds
    -%} {%- set minutes = ((time % 3600) / 60) | round | int -%} {%- set hours =
    ((time % 86400) / 3600) | int -%} {{ now().strftime("%d/%m/%Y") }} ; {{
    ((state_attr('automation.lave_vaisselle_start','last_triggered')) |
    as_local).strftime("%Hh%M") }} ; {{
    (state_attr('automation.lave_vaisselle_fin','last_triggered')|
    as_local).strftime("%Hh%M") }} ; {{ '{:01}h{:02}m'.format(hours, minutes) }}
    ; {{ states('sensor.lave_vaisselle_power_cycle') | round }}Wh ; {{
    (states('sensor.lave_vaisselle_power_cycle') | float(default=0) *
    (states('sensor.edf_tempo_current_cost')| float(default=0)) /1000) |
    round(2) }}€ ;

Tu peut lancer manuellement l’automatisation, …

Bonsoir

Sans avoir vraiment eu le temps de regarder je viens de copier coller à l’instant le dernier bout de code en changeant avec mes sensors et j’ai ce retour

Error: Error rendering data template: TypeError: unsupported operand type(s) for -: 'NoneType' and 'datetime.datetime'

EDIT :
Une erreur sur le nom de mon automation !!
Un sujet ICC encore une fois :wink:

Voici une adaptation de la notification
image

En fait 2 en une soit en texte soit en fields via l’automation HA

1 « J'aime »

Avec les images ça passe sur smartphone ?
Tu peut partager ton code?
Merci et bon boulot, ça présente bien

Oui oui je peux partager mais j’étais pas en posture de pouvoir le faire (ipad et métro au moment du screen)

Dès que je suis sur le PC je partage le code sans soucis.

Sur téléphone c’est plus ramassé mais les images passe il faut les avoir sur une adresse https://
Pour faire ça j’ai déposé des images sur imgur.com si je me trompe pas l’adresse dans mon code marchera tant que je supprime pas l’image.

J’ai aussi ajouté un bout pour publier les résultats en mqtt afin d’utiliser ces infos dans un flow éventuel de Node Red car mon centre de notification est dans Node Red.

Bref je mettrais tout ça au propre :smiley:

@roumano et tous ceux qui sont intéressés :wink:

Voici le code de la notification via bot discord

Notification discord simple sans fields
service: notify.VOTRE_BOT_DISCORD
data:
  message: ""
  target:
    - "CHANNEL_ID"
  data:
    embed:
      title: ""
      description: >-
        {%- set time =
        ((state_attr('automation.lave_vaisselle_fin_notification','last_triggered'))
        -
        (state_attr('automation.lave_vaisselle_start','last_triggered'))).seconds-%}
        {%- set minutes = ((time % 3600) / 60) | round | int -%} {%- set hours =
        ((time % 86400) / 3600) | int -%} Le cycle s'est déroulé de
        **{{((state_attr('automation.lave_vaisselle_start','last_triggered')) |
        as_local).strftime("%Hh%M") }}** à **{{
        (state_attr('automation.lave_vaisselle_fin_notification','last_triggered')
        | as_local).strftime("%Hh%M") }}**

        Pour une durée de **{{ '{:01}h{:02}'.format(hours, minutes) }}**

        Le cycle à consommé
        **{{states('sensor.pc_cuisine_lave_vaisselles_energy_kwh_heure') | round
        }}** Wh

        Pour un coût de
        **{{(states('sensor.pc_cuisine_lave_vaisselles_energy_kwh_heure') |
        float * (states('input_number.hp_energy_cout')| float)) | round(2) }}**
        €
      url: https://www.home-assistant.io
      color: 199363
      author:
        name: Gestion des machines
        url: https://www.home-assistant.io
        icon_url: https://i.imgur.com/f9u45dD.png
      footer:
        text: "HA - Lave-Vaisselles Fin : Notification"
        icon_url: https://www.home-assistant.io/images/favicon-192x192-full.png
      thumbnail:
        url: https://i.imgur.com/f9u45dD.png 

Pour avoir ceci :
image

Sinon pour utiliser le fields :

Notification discord avec fields uniquement
service: notify.VOTRE_BOT_DISCORD
data:
  message: ""
  target:
    - "CHANNEL_ID"
  data:
    embed:
      title: ""
      description: ""

      url: https://www.home-assistant.io
      color: 199363
      author:
        name: Gestion des machines
        url: https://www.home-assistant.io
        icon_url: https://i.imgur.com/f9u45dD.png
      footer:
        text: "HA - Lave-Vaisselles Fin : Notification"
        icon_url: https://www.home-assistant.io/images/favicon-192x192-full.png
      thumbnail:
        url: https://i.imgur.com/f9u45dD.png
      fields:
        - name: Début du cycle
          value: >-
            {{((state_attr('automation.lave_vaisselle_start','last_triggered'))
            | as_local).strftime("%Hh%M") }}
          inline: true
        - name: Fin du cycle
          value: >-
            {{(state_attr('automation.lave_vaisselle_fin_notification','last_triggered')
            | as_local).strftime("%Hh%M") }}
          inline: true
        - name: Durée du cycle
          value: >-
            {%- set time =
            ((state_attr('automation.lave_vaisselle_fin_notification','last_triggered'))
            -
            (state_attr('automation.lave_vaisselle_start','last_triggered'))).seconds-%}
            {%- set minutes = ((time % 3600) / 60) | round | int -%} {%- set
            hours = ((time % 86400) / 3600) | int -%} **{{
            '{:01}h{:02}'.format(hours, minutes) }}**
          inline: true
        - name: Consommation
          value: >-
            {{ states('sensor.pc_cuisine_lave_vaisselles_energy_kwh_heure') |
            round }} Wh
          inline: true
        - name: Coût
          value: >-
            {{(states('sensor.pc_cuisine_lave_vaisselles_energy_kwh_heure') |
            float * (states('input_number.hp_energy_cout')| float)) | round(2)
            }} €
          inline: true

        - name: Nombre de cycle
          value: >-
            {{states('counter.cycle_lave_vaisselles') | float(default=0) |
            round(0)}}
          inline: true

pour avoir ceci
image

Ne pas oublier de modifier les sensors et les entités à votre propre usage.
Les valeurs sur mes screens sont des valeurs fictives de test bien entendu

Le test grandeur nature
Sur mon Jeedom :
image

Sur HA avec les automatisation de ce post :
image

Il semble que j’ai un soucis sur la partie conso qui n’est pas énorme :slight_smile:

Bonjour

Sur le principe si je veux faire un cumul des heures de fonctionnement, de la consommation il faut que je crée un input number que je prend et auquel j’additionne la valeur toute fraiche et le résultat je le remets dans l’input number ?
Cela joue le rôle d’une variable ?

Est-ce le bon départ la bonne démarche ?

Et avec un utility_meter :face_with_monocle:

Ca ne semble en effet pas énorme… si tu trouves un problème, merci de partager. J’ai les mêmes ordre de grandeur de mon côté sur ce type d’appareil. La somme de ma consommation remontée par le ZLinkee correspond bien à mon relevé EDF, et la prise semble aussi OK, donc je n’ai pas trouvé de problème de mon côté.

Le problème que je vois à ça c’est que la prise consomme même si le lave vaisselle ne fonctionne pas alors certes pas énorme mais 1W quand même sur la durée cela commence à faire.

Alors j’ai regardé mais sous Jeedom j’ai la même chose avec une autre méthode de calcul
Après la machine consomme que pendant la chauffe de l’eau et le séchage et donc c’est pas non plus la mort un peu au début et à la fin donc pour moi c’est ok (le vrai contrôle est la pince ampèremétrique)

1 « J'aime »

Tu peux créer un template qui soustrait 1w x 24h au sensor qui sert de base a ton utility meter et le tour est joué :wink:

Quand je disait que j’ai résolu, ce n’est pas tout à fait vrai.
Voici le message que j’obtiens pour valider le démarrage:

Invalid config for [sensor.history_stats]: extra keys not allowed @ data['hours']. Got 24
offset None should be format 'HH:MM', 'HH:MM:SS' or 'HH:MM:SS.F' for dictionary value @ data['duration']. Got None. (See ?, line ?). 

Avez-vous une idée ?

Alors c’est plus complexe que ça j’ai pas 24h entre deux machines !!
donc il faudrait faire la différence entre le dernier lancement et le nouveau lancement de machine puis multiplier par 1W ! Moi je trouve çà un peu compliqué.

Je préfère stocker dans une variable et additionner au fur et à mesure la conso ou autre

J’ai pas suivi ton soucis du départ désolé :frowning:
tu as fait quoi comme config ?
il y a des soucis de format semble t il