Solutionné : Extraire de HA Linky la consommation électrique et son coût

Ajout : je vais voir du côté de Enedis si je peux extraire ma consommation électrique pour pouvoir l’utiliser dans Home Assistant. Pour les coûts, je verrai ensuite comment faire.

Bonjour.

J’ai configuré HA Linky pour avoir la consommation électrique et son coût dans Home Assistant. J’ai besoin de ces valeurs dans un programme Yaml : comment faire ?

Peux-tu nous expliquer ce qu’est un programma YAML ?

Pour configurer les couts dans HA Linky, tu as l’explication ici : GitHub - bokub/ha-linky: 📊 Home Assistant add-on for Linky smart meters · GitHub

Yaml, c’est le langage de programmation de base utilisé par les concepteurs de Home Assistant.

Et, comme je l’ai écrit dans mon message initial, j’ai déjà configuré les coûts dans HA Linky et Home Assistant me les affiche. Ce que je veux, c’est pouvoir les utiliser.

Décidément, utiliser les données de HA linky ou du lixee est à la mode.

Actuellement, la seule solution que j’ai trouvé (enfin, surtout l’IA :slight_smile: ), c’est d’aller taper dans la BDD du linky via l’intégration SQL native de HA.

@jimwest , peux-tu développer STP ?

regarde mon post ici https://forum.hacf.fr/t/suivi-conso-enedis/76626/35 tu y verras mes 2 requêtes journalières.

J’avais besoin (envie) de connaître ma conso détaillée HC/HP de la veille (après mise à jour vers 7h00 de l’intégration linky-ha), et aussi faire le calcul mensuel.
L’IA (pas moi, car je n’en avais pas les connaissances) m’a orienté vers du SQL pour récupérer en BDD (les tables de l’intégration) la conso à J-1 et d’affiner ces requêtes pour en retirer la conso en Kwh relatives à mes tranches HC.

Je pense donc que tu peux avoir une base de travail sur ce même principe, ou avoir une autre proposition peut-être plus simple.

Je l’avais déjà vu. Je confirme que c’est trop compliqué pour moi.

YAML est un langage de sérialisation de données (format de fichier) utilisé pour la configuration. Home Assistant l’utilise effectivement pour les fichiers de configuration (.yaml), mais ce n’est pas « le langage de programmation de base » des concepteurs.

Home Assistant est développé en Python, qui est le véritable langage de programmation utilisé pour créer le projet.

Distinction :

  • YAML = format de configuration (lisible par humains)
  • Python = langage de programmation (logique, automatisations, extensions)

En gros le YAML existe uniquement parce que nous humain en avons besoin.

Tu as le Dashboard Énergie et HA Linky remonte la consommation dans celui-ci. Tu veux utiliser ces données sous quelle forme ? Les afficher où ? Il nous faut plus d’informations pour t’aider.

Du côté de HA Linky, ici Stocker une statistique dans une entité · bokub/ha-linky Wiki · GitHub , j’ai trouvé une piste (c’est une action d’une automatisation) :

  # Action n°1: Je récupère les statistiques
  - action: recorder.get_statistics
    metadata: {}
    data:
      statistic_ids:
        - linky:1122334455 # Mon PRM
      # Début: hier à 00:00
      start_time: "{{ (now() - timedelta(hours=24)).replace(hour=0, minute=0, second=0, microsecond=0) }}"
      types:
        - change # Je récupère la variation
      period: day # Je groupe par jour
    response_variable: result # Je stocke le résultat dans une variable que j'appelle "result"

  # Action n°2: Je stocke mon résultat dans mon input_number
  - data:
      # Je prend le premier point [0], qui correspond à la variation sur un jour (hier)
      value: "{{ result.statistics['linky:1122334455'][0].change }}" 
    action: input_number.set_value
    target:
      entity_id: input_number.consommation_de_la_veille # Mon input_number
mode: single

Pour les spécialistes (ou amateurs éclairés :smiling_face:) de Yaml, comment modifier cela pour avoir, non pas la journée complète, mais des périodes comme 1h06 à 7h36 et 12h36 à 14h06 ?

Je veux pouvoir obtenir la consommation heures creuses et la consommation heures pleines.

Tu as MyElectricalData :

Avec, tu auras déjà une entité qui regroupe tout ce que tu cherches. Tu auras juste besoin de faire des templates sensor pour extraire les informations que tu veux.


Mais à faire gaffe avec ha-linky non ?

faire gaffe a quoi ?
Chacun utilise ça passerelle pour récupérer les données chez Enedis.
MyElectricalData, peut utiliser le dashboard énergie ( facultatif) , influxDB (faculatif), un dashboard détaillé dans la barre latéral et une carte dashboard :

pour la carte :

il faut juste un broker MQTT ( genre mosquitto broker).

ok, c’est juste que tu m’avais répondu à ma question ici : https://forum.hacf.fr/t/linky-donnees-plus-mises-a-jour-api-500/74772/9

Mais là tu sembles plus sur de toi :slight_smile:

L’utilisation des deux ne devrait pas poser de problèmes.

Enfin en tout cas ça donne une idée pour une intégration …

C’est bon grâce l’IA Le Chat de Mistral. Le petit français a réussi là où les mastodontes Gemini, Perplexity et ChatGPT ont échoué et m’ont fait perdre beaucoup de temps ! J’ai la consommation en heures creuses et même le pourcentage de ces heures creuses par rapport à la consommation à la journée de l’avant-hier.

Et tu as fait comment ? Plus sympa d’indiquer la solution choisie pour aider les autres.

alias: Calculer pourcentage énergie heures creuses (avant-hier)
triggers:
  - at: "07:30:00"
    trigger: time
actions:
  - data:
      statistic_ids:
        - linky:XXX…XXX
      start_time: >-
        {{ (now() - timedelta(days=2)).replace(hour=0, minute=0, second=0,
        microsecond=0) }}
      end_time: >-
        {{ (now() - timedelta(days=1)).replace(hour=0, minute=0, second=0,
        microsecond=0) }}
      types:
        - change
      period: day
    response_variable: result_total
    action: recorder.get_statistics
  - data:
      statistic_ids:
        - linky:XXX…XXX
      start_time: >-
        {{ (now() - timedelta(days=2)).replace(hour=1, minute=0, second=0,
        microsecond=0) }}
      end_time: >-
        {{ (now() - timedelta(days=2)).replace(hour=7, minute=30, second=0,
        microsecond=0) }}
      types:
        - change
      period: hour
    response_variable: result_creuses_matin
    action: recorder.get_statistics
  - data:
      statistic_ids:
        - linky:XXX…XXX
      start_time: >-
        {{ (now() - timedelta(days=2)).replace(hour=12, minute=30, second=0,
        microsecond=0) }}
      end_time: >-
        {{ (now() - timedelta(days=2)).replace(hour=14, minute=0, second=0,
        microsecond=0) }}
      types:
        - change
      period: hour
    response_variable: result_creuses_midi
    action: recorder.get_statistics
  - data:
      value: >-
        {% set total = result_total.statistics['linky:XXX…XXX'][0].change
        %} {% set creuses_matin =
        result_creuses_matin.statistics['linky:XXX…XXX'] |
        map(attribute='change') | sum %} {% set creuses_midi =
        result_creuses_midi.statistics['linky:XXX…XXX'] |
        map(attribute='change') | sum %} {% set creuses_total = creuses_matin +
        creuses_midi %} {% set pourcentage = (creuses_total / total) * 100 if
        total > 0 else 0 %} {{ pourcentage | round(2) }}
    target:
      entity_id: input_number.pourcentage_heures_creuses
    action: input_number.set_value
mode: single
  • Le XXX…XXX, c’est le n° PRM. Il apparaît à trois endroits.
  • Ça concerne l’avant veille du jour où c’est déclenché.
  • Mes heures creuses : 1h06 - 7h36 & 12h36 - 14h06. J’ai dû les transformer en 1h00 - 7h30 & 12h30 - 14h00 parce que, je cite kokub (le créateur de HA Linky) : « La configuration des horaires ne fonctionne que pour les heures pile et les demi-heures, autrement dit, les minutes différentes de :00 et :30 pourraient créer des valeurs inattendues ».
  • Après exécution, la consommation en heures creuses est dans l’entrée « eConsommation » et le pourcentage de ces heures creuses par rapport à la consommation à la journée, dans l’entrée « Pourcentage Heures Creuses » (cf image plus bas).
  • Il semblerait que, dans les 2 lignes « period: hour », il n’y ait pas la possibilité de remplacer « hour » pour avoir des périodes de 30 minutes.
  • Le code vient de l’IA Le Chat de Mistral. Le petit français a réussi là où les mastodontes Gemini, Perplexity et ChatGPT ont échoué et m’ont fait perdre beaucoup de temps !

Voilà. J’espère avoir été suffisamment exhaustif.

J’ai juste une question. Dans la ligne « period: hour » par quoi remplacer « hour » si l’on veut 30 minutes ?

A priori, on ne peut pas choisir 30 min. La documentation se trouve ici :

The time period to group statistics by (5minute, hour, day, week, or month).

Je ne comprends pas trop comment il peut fonctionner sur 5minute car apparemment il se base sur les Long-term statistics.

Statistics are only available for entities that store Long-term statistics

Il faudrait que je creuse un jour.