Les cartes et MyelectricalData

23/01 - Maj des screenshots / code de la carte EDF et ajout des screens infludb

Je me suis lancé dans l’aventure de la domotique il y a quelques semaines et après avoir passé beaucoup d’heures à ‹ jouer › avec Home Assistant, UI minimalist et Myelectricaldata je me suis dit que partager ici ma petite expérience pourra aider d’autres personnes qui débutent. Egalement, un GRAND merci à toutes celles zé ceux qui ont répondu avec bienveillance à mes questions de newbee ( @ClassicRed, @Galadan , @Stef33fr…). Voici donc ma modeste contribution…:

  1. Avant toute chose (et surtout pour éviter de devoir tout reinstaller): faites une sauvegarde AVANT d’installer ou vous lancer dans des grosses modifs ! Cela n’arrive pas qu’aux autres ^^ Et prenez votre temps pour lire les procédures d’installation proposées par chacun(es) des auteurs des add-ons et intégrations. Chaque ligne est importante :wink: !!

  2. Installez Studio code server - ce sera votre éditeur de fichiers préféré !

  3. Installez HACS: ✅ HACS : Ajoutez des modules et des cartes personnalisées

  4. Installez MQTT - Mosquitto et créez un utilisateur mqtt + mdp dans l’interface home assistant

  5. Installez SSH & Web Terminal - vous en aurez besoin à un moment ou un autre

  6. Installez Samba Share - cela aide pour copier directement des fichiers

  7. Si tout fonctionne c’est le moment de faire une sauvegarde ^^

  8. Installez ApexCharts ==> GitHub - RomRider/apexcharts-card: 📈 A Lovelace card to display advanced graphs and charts based on ApexChartsJS for Home Assistant

  9. Installez Influxdb (normalement la version proposée par défaut est celle < 2.0), créez une database mylelectricaldata puis créez un utilisateur dans l’interface Infludb (par exemple myelectricaldata avec mdp = myelectricaldata) a qui vous donnez tous les accés - voici quelques copies d’écran préparées par @ClassicRed pour vous aider:











  10. Il va nous falloir les data, pour cela il faut installer Myelectricaldata: GitHub - m4dm4rtig4n/myelectricaldata prenez bien le temps de tout lire et suivre pas à pas toutes les explications / procédures. Rien de bien compliqué, juste ne pas aller trop vite :wink:

  11. voici ma version du fichier de config.yaml qui fonctionne parfaitement (grâce aux conseils et aide de @ClassicRed :slight_smile: Attention ma config electrique est en HC/HP si vous n’avez pas ce type de contrat remplacer dans la section plan: HP/HC par Base

cycle: 14400
debug: false
home_assistant:
  card_myenedis: true
  discovery_prefix: homeassistant
  enable: true
influxdb:
  bucket: "myelectricaldata/autogen"
  enable: true
  hostname: a0d7b954-influxdb
  method: synchronous
  org: "-"
  port: 8086
  token: myelectricaldata:myelectricaldata
  batching_options:
    batch_size: 1000
    flush_interval: 1000
    jitter_interval: 0
    retry_interval: 5000
    max_retry_time: 180_000
    max_retries: 5
    max_retry_delay: 125_000
    exponential_base: 2
mqtt:
  client_id: myelectricaldata
  enable: true
  hostname: core-mosquitto
  port: 1883
  username: "mqtt"
  password: "mqtt"
  prefix: myelectricaldata
  retain: true
  qos: 0

myelectricaldata:
  *Votre numéro de PDL ici*:
    activation_date_daily: ""
    activation_date_detail: ""
    cache: true
    consumption: true
    consumption_detail: true
    consumption_detail_max_date: "2021-01-01"
    consumption_max_date: "2021-01-01"
    consumption_price_base: "0.1415"
    consumption_price_hc: "0.0984"
    consumption_price_hp: "0.1315"
    enable: true
    name: "Le Nom de votre Maison"
    offpeak_hours_0: "22H24-06H24"
    offpeak_hours_1: "22H24-06H24"
    offpeak_hours_2: "22H24-06H24"
    offpeak_hours_3: "22H24-06H24"
    offpeak_hours_4: "22H24-06H24"
    offpeak_hours_5: "22H24-06H24"
    offpeak_hours_6: "22H24-06H24"
    plan: HC/HP
    production: false
    production_detail: false
    production_detail_max_date: ""
    production_max_date: ""
    production_price: 0
    refresh_addresse: true
    refresh_contract: true
    token: <token obtenu après avoir suivit la procédure d'installation de MyElectrical data >

  1. une petite sauvegarde si tout fonctionne ? et si vous avez des soucis je vous recommande d’aller lire ce fil MyElectricalData
  2. Installez une première carte qui est top! GitHub - saniho/content-card-linky: cardLinky comptatible with sensor apiEnedis

    Avec cela vous avez déjà de quoi bien vous amuser ^^
    Vous en voulez un peu plus ? OK, une sauvegarde et on s’y met !
    Tous ce que je vais présenter se base sur l’interface UI minimalist GitHub - UI-Lovelace-Minimalist/UI: UI-Lovelace-Minimalist is a "theme" for HomeAssistant / Prepare & Download - UI Lovelace Minimalist et le tuto d’installation excellent (en anglais…): This Smart Home Dashboard Isn't Easy But It's Worth It... - YouTube Il se peut que certaines cartes ne soient pas installées (regardez dans les logs et les installer, si vous ne les trouvez pas, une petite recherche du nom de la carte sur votre browser devrait faire l’affaire). L’idée étant qu’une fois que vous aurez suivi ce tuto, vous aurez créé ce genre de vue:
    image
    qui vous permettra de savoir comment modifier tout cela pour générer votre propre interface et intégrer ces cartes (au moment ou j’écris de contenu j’ai encore un petit bug ;-)):


    Voici donc le code de ces cartes, des sensors associés et du configuration.yaml qui va bien:
    Configuration.yaml ==> la dernière ligne est l’ajout à faire:
# Loads default set of integrations. Do not remove.
default_config:

# Load frontend themes from the themes folder
frontend:
  themes: !include_dir_merge_named themes

# Text to speech
tts:
  - platform: google_translate

automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
sensor: !include sensors.yaml # created by oc see saved files

Ensuite créez un fichier sensors.yaml à la racine de config:
image
Et copiez coller ce contenu après avoir remplacé par votre pdl :

- platform: template
  sensors:
    myelectricaldata_daily_cost:
      friendly_name: "Coût d'hier"
      unit_of_measurement: "€"
      value_template: "{{ states.sensor.myelectricaldata_consumption_<num pdl>.attributes.daily_cost }}"
    myelectricaldata_yesterday:
      friendly_name: "Hier"
      value_template: "{{ states.sensor.myelectricaldata_consumption_<num pdl>.attributes.day_2 }}"
      unit_of_measurement: "kWh"
    myelectricaldata_current_week:
      value_template: "{{ states.sensor.myelectricaldata_consumption_<num pdl>.attributes.current_week }}"
      friendly_name: "Conso de la semaine"
      unit_of_measurement: "KWh"
    myelectricaldata_current_month:
      value_template: "{{ states.sensor.myelectricaldata_consumption_<num pdl>.attributes.current_month }}"
      friendly_name: "Conso du mois"
      unit_of_measurement: "KWh"
    myelectricaldata_current_year:
      value_template: "{{ states.sensor.myelectricaldata_consumption_<num pdl>.attributes.current_year }}"
      friendly_name: "Conso de l'année'"
      unit_of_measurement: "KWh"
    myelectricaldata_last_week:
      value_template: "{{ states.sensor.myelectricaldata_consumption_<num pdl>.attributes.last_week }}"
      friendly_name: "Conso semaine dernière"
      unit_of_measurement: "KWh"
    myelectricaldata_last_month:
      value_template: "{{ states.sensor.myelectricaldata_consumption_<num pdl>.attributes.last_month }}"
      friendly_name: "Conso du mois dernier"
      unit_of_measurement: "KWh"
    myelectricaldata_last_year:
      value_template: "{{ states.sensor.myelectricaldata_consumption_<num pdl>.attributes.last_year }}"
      friendly_name: "Conso de l'année dernière'"
      unit_of_measurement: "KWh"
    myelectricaldata_last_update:
      value_template: "{{ as_timestamp(states.sensor.myelectricaldata_consumption_<num pdl>.attributes.lastUpdate,0) | timestamp_custom('%d-%m-%Y %H:%M',local=True)}}"
      friendly_name: "Date Mise à Jour"
    myelectricaldata_last_week_cost:
      value_template: "{{'%.2f'|format((states('sensor.myelectricaldata_last_week')|float) * 0.1410)}}"
      friendly_name: "Coût dernière semaine'"
      unit_of_measurement: "€"
    myelectricaldata_last_month_cost:
      value_template: "{{'%.2f'|format((states('sensor.myelectricaldata_last_month')|float) * 0.1410)}}"
      friendly_name: "Coût du mois dernier'"
      unit_of_measurement: "€"
    myelectricaldata_last_year_cost:
      value_template: "{{'%.2f'|format((states('sensor.myelectricaldata_last_year')|float) * 0.1410)}}"
      friendly_name: "Coût de l'année dernière'"
      unit_of_measurement: "€"
#YesterdayConsumptionMaxPower
    myelectricaldata_yesterdayconsumptionmaxpower:
      #value_template: "{{ float(states.sensor.myelectricaldata_consumption_<num pdl>.attributes.yesterdayconsumptionmaxpower) * 0.001 }}"
      value_template: "{{ states.sensor.myelectricaldata_consumption_<num pdl>.attributes.YesterdayConsumptionMaxPower }}"
      friendly_name: "Puissance Max d'hier"
      unit_of_measurement: "KVa"
#subscribed_power
    myelectricaldata_subscribed_power:
      value_template: "{{ states.sensor.myelectricaldata_consumption_<num pdl>.attributes.subscribed_power }}"
      friendly_name: "Puissance Souscrite"
      unit_of_measurement: "KVa"

Et enfin voici les cartes (inspirées par le travail de @Galadan entres autres) - remplacer par votre pdl après avoir créé votre propre fichier yaml dans la structure des views de ui minimalist - moi j’ai fait simple il s’appelle edf ^^:

title: "EDF"
path: "edf"
cards:
  - type: horizontal-stack
    cards:
      - type: custom:mushroom-entity-card
        entity: sensor.myelectricaldata_last_update
        icon_type: icon
        name: EDF - Maj le
        tap_action:
          action: navigate
          navigation_path: /ui-lovelace-minimalist/home
        hold_action:
          action: none
        double_tap_action:
          action: none
        icon: mdi:keyboard-backspace
        icon_color: light-blue
        fill_container: false

  - type: vertical-stack
    cards:
      - type: custom:button-card
        template: "card_apexcharts_elec"
        variables:
          graph_span: "7d"
          entity_1:
            entity_id: "sensor.myelectricaldata_yesterday"
            icon: "mdi:flash"
            name: "Hier"
            color: "blue"
          entity_2:
            entity_id: "sensor.myelectricaldata_current_week"
            icon: "mdi:flash"
            name: "Semaine"
            color: "yellow"
          entity_3:
            entity_id: "sensor.myelectricaldata_current_month"
            icon: "mdi:flash"
            name: "Mois"
            color: "green"
          entity_4:
            entity_id: "sensor.myelectricaldata_current_year"
            icon: "mdi:flash"
            name: "Année"
            color: "pink"
          entity_5:
            entity_id: "sensor.myelectricaldata_subscribed_power"
            icon: "mdi:flash"
            name: "Puissance"
            color: "red"
          entity_6:
            entity_id: "sensor.myelectricaldata_yesterdayconsumptionmaxpower"
            icon: "mdi:flash"
            name: "P. Max hier"
            color: "purple"
      - type: custom:apexcharts-card
        graph_span: 6d
        span:
          start: day
          offset: "-7d"
        header:
          show: true
          title: Coûts des 6 derniers jours et résumé d'hier
          show_states: true
          colorize_states: true
        series:
          - entity: sensor.myelectricaldata_consumption_<num pdl>
            yaxis_id: gauche
            name: Coût HP
            unit: €
            color: deepskyblue
            type: column
            group_by:
              duration: 1d
              func: max
            opacity: 0.8
            stroke_width: 4
            show:
              datalabels: true
            data_generator: >
              return entity.attributes.dailyweek.map((dailyweek, index) =>
              {     
                        return [new Date(dailyweek).getTime(), entity.attributes.dailyweek_costHP[index]];
                      });
          - entity: sensor.myelectricaldata_consumption_<num pdl>
            yaxis_id: gauche
            name: Coût HC
            unit: €
            color: orange
            type: column
            group_by:
              duration: 1d
              func: max
            opacity: 0.8
            stroke_width: 4
            show:
              datalabels: true
            data_generator: >
              return entity.attributes.dailyweek.map((dailyweek, index) =>
              {     
                        return [new Date(dailyweek).getTime(), entity.attributes.dailyweek_costHC[index]];
                      });
          - entity: sensor.myelectricaldata_consumption_<num pdl>
            yaxis_id: droite
            name: Coût total
            unit: €
            color: red
            type: line
            group_by:
              duration: 1d
              func: max
            opacity: 0.8
            stroke_width: 2
            show:
              datalabels: true
            data_generator: >
              return entity.attributes.dailyweek.map((dailyweek, index) =>
              {     
                        return [new Date(dailyweek).getTime(), entity.attributes.dailyweek_cost[index]];
                      });
        apex_config:
          xaxis:
            labels:
              show: true
          yaxis:
            - id: gauche
              min: 0
              max: 15
              opposite: false
              labels:
                show: false
            - id: droite
              min: 0
              max: 17
              opposite: true
              labels:
                show: false
          legend:
            show: false
          chart:
            stacked: true
  # Conso
  - type: vertical-stack
    cards:
      - type: custom:apexcharts-card
        graph_span: 6d
        span:
          start: day
          offset: "-7d"
        header:
          show: true
          title: Conso des 6 derniers jours
          show_states: true
          colorize_states: true
        series:
          - entity: sensor.myelectricaldata_consumption_<num pdl>
            yaxis_id: gauche
            name: Conso HP
            unit: KWh
            color: deepskyblue
            type: column
            group_by:
              duration: 1d
              func: max
            opacity: 0.8
            stroke_width: 4
            show:
              datalabels: true
            data_generator: >
              return entity.attributes.dailyweek.map((dailyweek, index) =>
              {     
                        return [new Date(dailyweek).getTime(), entity.attributes.dailyweek_HP[index]];
                      });
          - entity: sensor.myelectricaldata_consumption_<num pdl>
            yaxis_id: gauche
            name: Conso HC
            unit: KWh
            color: orange
            type: column
            group_by:
              duration: 1d
              func: max
            opacity: 0.8
            stroke_width: 4
            show:
              datalabels: true
            data_generator: >
              return entity.attributes.dailyweek.map((dailyweek, index) =>
              {     
                        return [new Date(dailyweek).getTime(), entity.attributes.dailyweek_HC[index]];
                      });
          - entity: sensor.myelectricaldata_consumption_<num pdl>
            yaxis_id: droite
            name: Conso totale
            unit: KWh
            color: red
            type: line
            group_by:
              duration: 1d
              func: max
            opacity: 0.8
            stroke_width: 2
            show:
              datalabels: true
            data_generator: >
              return entity.attributes.dailyweek.map((dailyweek, index) =>
              {     
                        return [new Date(dailyweek).getTime(), entity.attributes.daily[index]];
                      });
        apex_config:
          xaxis:
            labels:
              show: true
          yaxis:
            - id: gauche
              min: 0
              max: 85
              opposite: false
              labels:
                show: false
            - id: droite
              min: 0
              max: 150
              opposite: true
              labels:
                show: false
          legend:
            show: false
          chart:
            stacked: true

dernier petit point de détail, les données en T-1 ne sont pas toujours dispos, pour contourner cela je n’affiche que les datas des 6 derniers jours en jouant sur ces 2 paramètres pour chacun des graphes:

        graph_span: *6d*
        span:
          start: day
          offset: *"-7d"*

Remplacer 6d par 7d pour afficher T-1

Dans un monde parfait vous devriez pouvoir visualiser vos données ; le reste ? a vous d’explorer et partager vos propres créations ?

4 « J'aime »

Hello

Super boulot !! :+1: :+1: :+1: :wink: :wink:

2 « J'aime »

Hello @FROlCi , super taff et merci pour ta participation au projet.
Je mettrais un lien vers ton post dans le Wiki de MyElectricalData si ca ne te dérange pas.

1 « J'aime »

Hello @M4dm4rtig4n, waou quel honneur et merci pour la reconnaissance ^^ ce sera avec plaisir.

1 « J'aime »

Super taf!
Merci du partage !!

@FROlCi , tu as essayé ça: EDF - Dernière maj le + {{(states.sensor.myelectricaldata_last_update).state}}

C’est fait et merci pour les écrans ! pour éviter d’alourdir trop ce fil et si ok pour toi tu peux supprimer ton post ?

Je vois ca avec un modo

1 « J'aime »

Voilà c’est fait !
:+1:

1 « J'aime »

@Pulpy-Luke , 1000 merci

1 « J'aime »

pas mieux… Du coup je suis passé sur une autre approche :wink:
image
J’ai maj le code des cartes dans le post initial

Essaye comme ça:

- type: custom:button-card
  label: |
    [[[
      return "EDF - Dernière maj le " + states['sensor.myelectricaldata_last_update'].state;
    ]]]
   template: card_title

image

ou:

- type: custom:button-card
  name: |
    [[[
      return "Electricité - Mise à jour le " + states['sensor.myelectricaldata_last_update'].state;
    ]]]
  template: card_title

image

1 « J'aime »

Re

un petit delire en rajoutant les tarifs

- name: "Electricité Conso Veille"
  unit_of_measurement: 'kWh'      
  state: >   
    {{ states.sensor.myelectricaldata_consumption_21xxxxxx249.attributes.day_1 |float| round(2)}}
  icon: "mdi:flash"
  device_class: "energy"
  state_class: "measurement"  
  
- name: "Electricité Coût Année / Abo"
  unit_of_measurement: 'EUR'      
  state: >   
    {{ (states.sensor.myelectricaldata_consumption_2121xxxxxx342249.attributes.current_year|float*0.1740+136.32)|float|round(2) }}
  icon: "mdi:flash"
  device_class: "monetary"
  state_class: "total_increasing"  
  
- name: "Electricité Coût Semaine / Abo"
  unit_of_measurement: 'EUR'      
  state: >   
    {{ (states.sensor.myelectricaldata_consumption_2121xxxxxx42249.attributes.current_week|float*0.1740+2.84)|float|round(2) }}
  icon: "mdi:flash"
  device_class: "monetary"
  state_class: "total_increasing" 

- name: "Electricité Coût Jour / Abo"
  unit_of_measurement: 'EUR /kWh'      
  state: >   
    {{ (states.sensor.myelectricaldata_consumption_212xxxxxx2249.state|float*0.1740+0.379)|float|round(2) }}
  icon: "mdi:flash"
  device_class: "monetary"
  state_class: "total_increasing"
          
  
- name: "Electricité Conso kWh Arrondie"
  unit_of_measurement: 'kWh'      
  state: >   
    {{ states.sensor.myelectricaldata_consumption_2121xxxxxx2249.state |float| round(2)}}
  icon: "mdi:flash"
  device_class: "energy"
  state_class: "total_increasing"  
  
- name: "Electricité Coût Mois / Abo"
  unit_of_measurement: 'EUR'      
  state: >   
    {{ (states.sensor.myelectricaldata_consumption_2121xxxxxxx2249.attributes.current_month|float*0.1740+11.36)|float|round(2) }}
  icon: "mdi:flash"
  device_class: "monetary"
  state_class: "total_increasing" 

1 « J'aime »

Merci, maintenant je sais comment mettre des variables dans un titre :wink: !! Donc 2 options pour avoir soit une version sobre avec ta solution ou un peu plus ‹ funky › avec mon plan B ^^ qui inclus le retour sur la home page


ou l’option initiale de UI Minimalist avec le chip return + ton code

1 « J'aime »

Tu as utilisé les chip du theme?
image

Non pas encore pensé à creuser ce sujet ^^ J’ai suivi ton exemple initial et donc je suis preneur du code de ton screen exemple pour jouer un peu aussi ! :wink: Merki

Bonjour,

j’ai un petit souci lorsque

Une idée ?

Merci

J’ai créé cette carte sur la base ui minimalist qui donne cette structure et done le ‹ template › est dans cette arborescence
image
Le fichier ui minimalist initial contient


ce qui te permet de créer la base de départ:
image

Normalement, si tu as suivit le tuto de mise en route de ui minimalist apexchart devrait être correctement configuré pour commencer. Si tu ne passes pas par ui minimalist il va falloir creuser le sujet des templates et lire la doc apexcharts etc… et là je suis très light (mon mode newbee est toujours ON ^^
hth

Hello,

Je partage la nouvelle version de ma carte (sous thème Minimalist).
Il manque l’évolution (en %) sur l’année, un pull request est en cours pour l’ajout.

Les couts KWh et Abo sont des input_number, que je vais réutiliser dans les calculs des coûts semaine, mois et année, cela évitera de devoir changer les template des sensors.

4 « J'aime »

Waou! Faudra que tu me partages ton code stp - en ce moment je suis un peu en retrait - grosse charge de travail avec le boulot et les journées sont devenues très très courtes :frowning:

1 « J'aime »

J’adore c’est propre et pragmatique :ok_hand:

2 « J'aime »