fairecasoimeme / Zlinky_TIC

Téléinformation Linky autoalimenté ZigBee 3.0
291 stars 21 forks source link

Récupération de la puissance active #125

Closed navycrow closed 1 year ago

navycrow commented 1 year ago

bonjour, Afin de récupérer la puissance active instantanée que le linky ne sait pas retourner nativement, je me base sur l'index totaliseur EAST. J'ai fait une petit automatisation sous HA qui me calcul cela. Afin d'affiner le calcul, je souhaite changer les valeurs de reporting minimum_report_interval, maximum_report_interval et reportable change par défaut (60/900/100) à une valeur plus faible (15/60/10). Je parviens à changer la valeur mini et j'obtiens bien un rafraichissement de la valeur au minimum toutes les 15 s. mais je ne peux pas changer la valeur max. Ca me retourne une erreur INVALID VALUE. Concernant le reportable change, dés que je le modifie. Il n'y a plus aucune rafraichissement. Quelle valeur dois-je mettre pour avoir un rafraichissement dès que 10 watts sont ajoutés ? image image

SylvainPer commented 1 year ago

De mémoire, le max doit au moins être strictement supérieur à 60, donc mini 61s, sinon tente 70s. Pour le change, 1 fonctionne donc 10 c'est bon.

navycrow commented 1 year ago

effectivement 61 c'est ok. merci Mon petit souci concernant le reportable_change était lié à une petite coquille dans mon script. Tout fonctionne parfaitement maintenant. Merci

waako commented 1 year ago

@navycrow Tu peux partager ton script HA pour récupérer la puissance active instantanée ?

navycrow commented 1 year ago

Voici l'automatisation à associer avec une entrée numérique Je précise qu'il ne s'agit pas d'un récupération mais d'un calcul entre 2 périodes. Il y a peut-être une meilleur solution mais cela reste, dans mon cas du moins, assez proche de la réalité.

`alias: "Linky : Calcul de la puissance active V2" description: >- A chaque changement de valeur de l'index totaliseur (EAST), la puissance active moyenne est calculé sur la dernière période

Mise à jour du 02/11/2022 :

waako commented 1 year ago

Merci @navycrow

Après avoir créer le helper input_number.zlinky_tic_active_power, ça marche parfaitement (je n'ai pas renommé le sensor EAST donc petite difference ci dessous).

Pour d'autre que ça intéresserais, voici le code de l'automation yaml prêt à utiliser 😄

alias: "Linky : Calculate Puissance Active"
description: >-
  A chaque changement de valeur de l'index totaliseur (EAST), la puissance
  active moyenne est calculé sur la dernière période

  Mise à jour du 02/11/2022 :

  - suppression de la condition d'augmentation (il faut que ça s'actualise lorsque les panneaux solaires produisent et que l'index du compteur n'augmente pas)

  Mise à jour du 03/11/2022 :

  - affichage du mini entre la puissance active calculée et la puissance apparente ou entre la puissance active existante et la puissance apparente selon l'augmentation d'énergie, la puissance active ne devant pas être supérieure à la puissance apparente

trigger:
  - platform: state
    entity_id:
      - sensor.lixee_zlinky_tic_summation_delivered
condition: []
action:
  - service: notify.persistent_notification
    data:
      message: "trigger : {{ trigger }}"
      title: Puissance active
    enabled: false
  - variables:
      apparent_power: |
        {{ trigger.to_state.state }}
      active_power_old: |
        {{ states("input_number.zlinky_tic_active_power") }}
      energy_diff_wh: >
        {% if trigger.to_state.state not in ('unavailable', 'unknown') and
        trigger.from_state not in ('unavailable', 'unknown') %}
          {{ ((trigger.to_state.state|float - trigger.from_state.state|float) * 1000)|int }}
        {% else %}
          0
        {% endif %}
      time_diff_s: >
        {{ (as_timestamp(trigger.to_state.last_changed) -
        as_timestamp(trigger.from_state.last_changed))|round(3) }}
      active_power_new: |
        {% if energy_diff_wh > 0 %}
          {{ min(apparent_power,(energy_diff_wh * 3600 / time_diff_s)|int) }}
        {% else %}
          {{ min(apparent_power, active_power_old) }}
        {% endif %}
  - service: input_number.set_value
    data:
      value: "{{ active_power_new|int }}"
    target:
      entity_id: input_number.zlinky_tic_active_power
    enabled: true
  - service: notify.persistent_notification
    data:
      message: >-
        apparent_power : {{ apparent_power }} / active_power_old : {{
        active_power_old }} / energy_diff_wh : {{energy_diff_wh}} / time_diff_s:
        {{time_diff_s}} / active_power_new : {{ active_power_new }}
      title: Puissance active
    enabled: false
mode: single