Onduleur DEYE avec HACS - Sunsynk Power Flow Card

Bonjour à tous.

Après avoir galéré a avoir une config nickel suite à l’installation d’un onduleur Deye et d’un pack de Batteries chez moi (et bien sur des panneaux PV), voici les correspondances nécessaire entre Solar Assistant (Connecté au Deye “avec” MQTT). Si ca aide du monde, c’est cool :wink:

Voici ce que ca donne coté graphique :

Je suis en triphasé pour information.

Et voici le code:

Voir le code
type: custom:sunsynk-power-flow-card
cardstyle: lite
show_solar: true

battery:
  energy: 30000                      # Capacité totale de la batterie en Wh (30000 Wh = 30 kWh)
  shutdown_soc: 20                   # Seuil de SOC (%) pour état d’arrêt/alerte (affichage, calculs)
  show_daily: true                   # Affiche les totaux journaliers (charge/décharge) de la batterie

solar:
  show_daily: true                   # Affiche la production PV journalière
  mppts: 3                           # Nombre de trackers MPPT (PV1/PV2/PV3)

load:
  show_daily: true                   # Affiche la consommation journalière (côté charge)

grid:                                # Section “Réseau”
  show_daily_buy: true               # Affiche l’énergie quotidienne importée du réseau
  show_daily_sell: true              # Affiche l’énergie quotidienne injectée vers le réseau

entities:
  use_timer_248: false               # État/commande “Use timer” (registre 248) ; false = désactivé (pas d’horaires forçants)
  priority_load_243: switch.sunsynk_toggle_priority_load # Commutateur de “Priorité charges” (registre 243) pour l’onduleur
  inverter_status_59: sensor.device_mode                  # Mode/état de l’onduleur (ex. normal, bypass, etc.) (registre 59)
  grid_connected_status_194: binary_sensor.sunsynk_grid_connected_status # Connecté au réseau ou non (registre 194)
  inverter_voltage_154: sensor.deye_sunsynk_sol_ark_3_phase_ac_output_voltage # Tension AC de sortie de l’onduleur (r154)
  load_frequency_192: sensor.deye_sunsynk_sol_ark_3_phase_ac_output_frequency # Fréquence AC mesurée côté charge (r192)
  inverter_current_164: ac_output_current                 # Courant AC de sortie total de l’onduleur (r164)
  inverter_power_175: sensor.load_power                   # Puissance délivrée par l’onduleur vers la/les charges (r175)
  battery_voltage_183: sensor.deye_sunsynk_sol_ark_3_phase_battery_voltage # Tension batterie (r183)
  battery_soc_184: sensor.deye_sunsynk_sol_ark_3_phase_battery_state_of_charge # État de charge SOC (%) (r184)
  battery_power_190: sensor.deye_sunsynk_sol_ark_3_phase_battery_power # Puissance batterie (+ = décharge, - = charge) (r190)
  battery_current_191: sensor.deye_sunsynk_sol_ark_3_phase_battery_current # Courant batterie (r191)
  battery_temp_182: sensor.deye_sunsynk_sol_ark_3_phase_battery_temperature # Température batterie (r182)
  day_battery_charge_70: sensor.deye_sunsynk_sol_ark_3_phase_battery_energy_in # Énergie journalière chargée dans la batterie (r70)
  day_battery_discharge_71: sensor.deye_sunsynk_sol_ark_3_phase_battery_energy_out # Énergie journalière déchargée de la batterie (r71)
  grid_power_169: sensor.grid_power                       # Puissance instantanée au point de couplage réseau (import/export) (r169)
  day_grid_import_76: sensor.deye_sunsynk_sol_ark_3_phase_grid_energy_in # Énergie journalière importée depuis le réseau (r76)
  day_grid_export_77: sensor.deye_sunsynk_sol_ark_3_phase_grid_energy_out # Énergie journalière exportée vers le réseau (r77)
  grid_ct_power_172: sensor.deye_sunsynk_sol_ark_3_phase_grid_power_1 # Puissance lue par la pince/CT réseau Phase 1 (r172)
  grid_ct_power_L2: sensor.deye_sunsynk_sol_ark_3_phase_grid_power_2  # Puissance lue par la pince/CT réseau Phase 2
  grid_ct_power_L3: sensor.deye_sunsynk_sol_ark_3_phase_grid_power_3  # Puissance lue par la pince/CT réseau Phase 3
  day_load_energy_84: sensor.deye_sunsynk_sol_ark_3_phase_load_energy # Consommation journalière totale côté charge (r84)
  load_power_L1: sensor.deye_sunsynk_sol_ark_3_phase_load_power_1     # Puissance charge sur la phase L1
  load_power_L2: sensor.deye_sunsynk_sol_ark_3_phase_load_power_2     # Puissance charge sur la phase L2
  load_power_L3: sensor.deye_sunsynk_sol_ark_3_phase_load_power_3     # Puissance charge sur la phase L3
  essential_power: none                                   # Entité pour “charges essentielles” ; none = non fournie (la carte l’infère si possible)
  nonessential_power: none                                # Entité pour “charges non essentielles” ; none = non fournie (affecte l’affichage)
  aux_power_166: sensor.auxiliary_pv_power                # Puissance PV auxiliaire/secondaire (souvent PV via AUX) (r166)
  pv_total: sensor.deye_sunsynk_sol_ark_3_phase_auxiliary_pv_power     # Total PV instantané (somme des strings/entrées AUX)
  day_pv_energy_108: sensor.deye_sunsynk_sol_ark_3_phase_pv_energy     # Énergie PV journalière (r108)
  total_pv_generation: sensor.deye_sunsynk_sol_ark_3_phase_pv_energy   # Total PV cumulé (ou journalière selon capteur) — doublon ici
  pv1_power_186: sensor.deye_sunsynk_sol_ark_3_phase_auxiliary_pv_power_1 # Puissance PV string 1 (r186)
  pv2_power_187: sensor.deye_sunsynk_sol_ark_3_phase_auxiliary_pv_power_2 # Puissance PV string 2 (r187)
  pv3_power_188: sensor.deye_sunsynk_sol_ark_3_phase_auxiliary_pv_power_3 # Puissance PV string 3 (r188)
  pv1_voltage_109: sensor.deye_sunsynk_sol_ark_3_phase_auxiliary_pv_voltage_1 # Tension PV string 1 (r109)
  pv1_current_110: sensor.deye_sunsynk_sol_ark_3_phase_auxiliary_pv_current_1 # Courant PV string 1 (r110)
  pv2_voltage_111: sensor.deye_sunsynk_sol_ark_3_phase_auxiliary_pv_voltage_2 # Tension PV string 2 (r111)
  pv2_current_112: sensor.deye_sunsynk_sol_ark_3_phase_auxiliary_pv_current_2 # Courant PV string 2 (r112)
  pv3_voltage_113: sensor.deye_sunsynk_sol_ark_3_phase_auxiliary_pv_voltage_3 # Tension PV string 3 (r113)
  pv3_current_114: sensor.deye_sunsynk_sol_ark_3_phase_auxiliary_pv_current_3 # Courant PV string 3 (r114)

inverter:                           # Options spécifiques à l’onduleur/au rendu de la carte
  three_phase: true                 # Le système est triphasé (L1/L2/L3)
  auto_scale: true                  # Mise à l’échelle automatique des jauges/flèches selon les puissances
  autarky: power                    # Calcul de l’autarcie basé sur la puissance (vs énergie)
  model: deye                       # Modèle d’onduleur (utilise les conventions Deye)
  modern: true                      # Active le rendu “moderne” de la carte (visuel et interactions)

Petite mise à jour concernant le sens des flux…

Voir le code YAML
type: custom:sunsynk-power-flow-card
cardstyle: lite
show_solar: true
battery:
  energy: 30000
  shutdown_soc: 20
  show_daily: true
  invert_power: true
  show_absolute: false
solar:
  show_daily: true
  mppts: 3
load:
  show_daily: true
grid:
  show_daily_buy: true
  show_daily_sell: true
  show_nonessential: true
entities:
  use_timer_248: false
  priority_load_243: switch.sunsynk_toggle_priority_load
  inverter_status_59: sensor.device_mode
  grid_connected_status_194: binary_sensor.sunsynk_grid_connected_status
  inverter_voltage_154: sensor.deye_sunsynk_sol_ark_3_phase_ac_output_voltage
  load_frequency_192: sensor.deye_sunsynk_sol_ark_3_phase_ac_output_frequency
  inverter_current_164: ac_output_current
  inverter_power_175: sensor.load_power
  battery_voltage_183: sensor.deye_sunsynk_sol_ark_3_phase_battery_voltage
  battery_soc_184: sensor.deye_sunsynk_sol_ark_3_phase_battery_state_of_charge
  battery_power_190: sensor.deye_sunsynk_sol_ark_3_phase_battery_power
  battery_current_191: sensor.deye_sunsynk_sol_ark_3_phase_battery_current
  battery_temp_182: sensor.deye_sunsynk_sol_ark_3_phase_battery_temperature
  day_battery_charge_70: sensor.deye_sunsynk_sol_ark_3_phase_battery_energy_in
  day_battery_discharge_71: sensor.deye_sunsynk_sol_ark_3_phase_battery_energy_out
  grid_power_169: sensor.grid_power
  day_grid_import_76: sensor.deye_sunsynk_sol_ark_3_phase_grid_energy_in
  day_grid_export_77: sensor.deye_sunsynk_sol_ark_3_phase_grid_energy_out
  grid_ct_power_172: sensor.deye_sunsynk_sol_ark_3_phase_grid_power_1
  grid_ct_power_L2: sensor.deye_sunsynk_sol_ark_3_phase_grid_power_2
  grid_ct_power_L3: sensor.deye_sunsynk_sol_ark_3_phase_grid_power_3
  day_load_energy_84: sensor.deye_sunsynk_sol_ark_3_phase_load_energy
  load_power_L1: sensor.deye_sunsynk_sol_ark_3_phase_load_power_1
  load_power_L2: sensor.deye_sunsynk_sol_ark_3_phase_load_power_2
  load_power_L3: sensor.deye_sunsynk_sol_ark_3_phase_load_power_3
  essential_power: none
  nonessential_power: none
  aux_power_166: sensor.auxiliary_pv_power
  pv_total: sensor.deye_sunsynk_sol_ark_3_phase_auxiliary_pv_power
  day_pv_energy_108: sensor.deye_sunsynk_sol_ark_3_phase_pv_energy
  total_pv_generation: sensor.deye_sunsynk_sol_ark_3_phase_pv_energy
  pv1_power_186: sensor.deye_sunsynk_sol_ark_3_phase_auxiliary_pv_power_1
  pv2_power_187: sensor.deye_sunsynk_sol_ark_3_phase_auxiliary_pv_power_2
  pv3_power_188: sensor.deye_sunsynk_sol_ark_3_phase_auxiliary_pv_power_3
  pv1_voltage_109: sensor.deye_sunsynk_sol_ark_3_phase_auxiliary_pv_voltage_1
  pv1_current_110: sensor.deye_sunsynk_sol_ark_3_phase_auxiliary_pv_current_1
  pv2_voltage_111: sensor.deye_sunsynk_sol_ark_3_phase_auxiliary_pv_voltage_2
  pv2_current_112: sensor.deye_sunsynk_sol_ark_3_phase_auxiliary_pv_current_2
  pv3_voltage_113: sensor.deye_sunsynk_sol_ark_3_phase_auxiliary_pv_voltage_3
  pv3_current_114: sensor.deye_sunsynk_sol_ark_3_phase_auxiliary_pv_current_3
inverter:
  three_phase: true
  auto_scale: true
  autarky: power
  model: deye
  modern: true
battery2:
  invert_power: true
card_mod:
  style: |
    /* Fond crème + suppression totale des bordures noires */
    :host {
      --ha-card-border-width: 0;
      --ha-card-border-color: transparent;
      --ha-card-box-shadow: none;
    }
    ha-card {
      border: none !important;
      border-radius: 18px;
      padding: 14px 14px 10px;
      background: #fdfcf7;      /* blanc crème */
      color: #111;               /* texte lisible sur fond clair */
      box-shadow: 0 6px 18px rgba(0,0,0,0.10); /* ombre douce */
    }
    /* Optionnel : adoucir tout éventuel séparateur interne */
    ha-card * {
      border-color: transparent !important;
      box-shadow: none;
    }

Salut.

Ton interface est vraiment pas mal.

Quel est le modèle de ton onduleur DEYE ?

Solar Assistant ne te sert que a visualiser les flux ou peut tu commander le DEYE, pour gérer le 0 injection par exemple.

Bonsoir @Reinald ,

Désolé du temps de réponse.

C’est un Tri en 18Kw, je n’ai pas le modèle exacte mais oui, solar Assistant me permet de visualiser (pas tout :() et de piloter le deye (Via MQTT).

Concernant la charge, j’y suis depuis plusieurs mois. Ce n’est pas facile mais j’approche du but. Pas simple à pilote la bete…

Quand tu parle le Zero injection, c’est pour garder et stocker la prod des PV dans tes batteries?

La partie pilotage du DEYE m’intéresse beaucoup. J’aimerais savoir si tu parviens à modifier les horaires ainsi que les seuils minimum de batterie dans le mode « Time Of Use ».

L’idée serait de pouvoir effectuer une charge à 100% une fois par semaine afin de préserver le pack batterie durant l’hiver. J’aimerais également pouvoir ajuster le seuil minimum en fonction des prévisions de production du jour, dans le but d’optimiser à la fois la durée de vie du parc batterie (le plus souvent proche de 50%) et son utilisation (utilisation de la capacité maximale).

J’avoue ne pas m’être encore penché sur Solar Assistant, il va falloir visiblement. De base je pensais interfacer mon futur Deye en Modbus.

Salar assistant etait “vendu” avec le deye, je l’utilise du coup.

Ce que tu veux faire, je l’ai fait. Je recharge en heure creuse. La batterie oscille entre 20% et 50/60% suivant les jour et 100% quand il y a du soleil. Voici mon code (Merci le chat, GPT :stuck_out_tongue:, il aide beaucoup mais pas encore assez lol ):

alias: Deye — Charge HC (30% → cible + relance -10%)
description: >
  Charge réseau en heures creuses selon le jour : - Week-end (samedi, dimanche)
  : cible 60 % - Semaine (lundi à vendredi) : cible 50 % Logique : - démarre si
  SoC < 30 % en HC, - coupe quand le SoC atteint la cible, - si la charge
  s'arrête avant la cible, la relance, - si la cible a été atteinte et que le
  SoC retombe 10 points plus bas
    avant la fin des HC, relance une charge,
  - hors HC, remet tout dans l'état normal et réinitialise le flag. Après toute
  charge nocturne, UseTimer reste OFF jusqu'à la fin des HC.
triggers:
  - trigger: time_pattern
    minutes: /1
  - trigger: homeassistant
    event: start
  - trigger: state
    entity_id: sensor.deye_sunsynk_sol_ark_3_phase_battery_state_of_charge
  - trigger: state
    entity_id:
      - select.deye_sunsynk_sol_ark_3_phase_grid_charge
      - switch.deye_sunsynk_sol_ark_3_phase_grid_charge_point_1
      - switch.deye_sunsynk_sol_ark_3_phase_grid_charge_point_2
      - switch.deye_sunsynk_sol_ark_3_phase_grid_charge_point_3
      - switch.deye_sunsynk_sol_ark_3_phase_use_timer
conditions: []
actions:
  - choose:
      - conditions:
          - condition: time
            after: "00:06:00"
            before: "07:46:00"
          - condition: template
            value_template: >
              {% set soc =
              states('sensor.deye_sunsynk_sol_ark_3_phase_battery_state_of_charge')|float(0)
              %} {% set wd = now().weekday() %} {% set weekend = wd in [5, 6] %}
              {% set target = 60 if weekend else 50 %} {{ soc >= target }}
        sequence:
          - action: select.select_option
            data:
              option: Disabled
            target:
              entity_id: select.deye_sunsynk_sol_ark_3_phase_grid_charge
          - delay: "00:00:15"
          - action: switch.turn_off
            target:
              entity_id: switch.deye_sunsynk_sol_ark_3_phase_use_timer
          - delay: "00:00:15"
          - action: switch.turn_off
            target:
              entity_id:
                - switch.deye_sunsynk_sol_ark_3_phase_grid_charge_point_1
                - switch.deye_sunsynk_sol_ark_3_phase_grid_charge_point_2
                - switch.deye_sunsynk_sol_ark_3_phase_grid_charge_point_3
          - action: input_boolean.turn_on
            target:
              entity_id: input_boolean.deye_hc_60_atteint
      - conditions:
          - condition: time
            after: "00:06:00"
            before: "07:46:00"
          - condition: template
            value_template: >
              {% set soc =
              states('sensor.deye_sunsynk_sol_ark_3_phase_battery_state_of_charge')|float(0)
              %} {% set wd = now().weekday() %} {% set weekend = wd in [5, 6] %}
              {% set target = 60 if weekend else 50 %} {% set relaunch = target
              - 10 %} {% set flag =
              is_state('input_boolean.deye_hc_60_atteint','on') %}

              {% set grid =
              states('select.deye_sunsynk_sol_ark_3_phase_grid_charge') %} {%
              set use_timer_on =
              is_state('switch.deye_sunsynk_sol_ark_3_phase_use_timer','on') %}
              {% set p1 =
              is_state('switch.deye_sunsynk_sol_ark_3_phase_grid_charge_point_1','on')
              %} {% set p2 =
              is_state('switch.deye_sunsynk_sol_ark_3_phase_grid_charge_point_2','on')
              %} {% set p3 =
              is_state('switch.deye_sunsynk_sol_ark_3_phase_grid_charge_point_3','on')
              %}

              {% set currently_charging = (grid == 'Enabled' and not
              use_timer_on and p1 and p2 and p3) %}

              {{ (not currently_charging)
                 and (
                   soc < 30
                   or (not flag and soc < target)
                   or (flag and soc < relaunch)
                 )
              }}
        sequence:
          - action: switch.turn_on
            target:
              entity_id:
                - switch.deye_sunsynk_sol_ark_3_phase_grid_charge_point_1
                - switch.deye_sunsynk_sol_ark_3_phase_grid_charge_point_2
                - switch.deye_sunsynk_sol_ark_3_phase_grid_charge_point_3
          - delay: "00:00:15"
          - action: switch.turn_off
            target:
              entity_id: switch.deye_sunsynk_sol_ark_3_phase_use_timer
          - delay: "00:00:15"
          - action: select.select_option
            target:
              entity_id: select.deye_sunsynk_sol_ark_3_phase_grid_charge
            data:
              option: Enabled
      - conditions:
          - condition: or
            conditions:
              - condition: time
                before: "00:06:00"
              - condition: time
                after: "07:46:00"
        sequence:
          - action: select.select_option
            data:
              option: Disabled
            target:
              entity_id: select.deye_sunsynk_sol_ark_3_phase_grid_charge
          - delay: "00:00:15"
          - action: switch.turn_on
            target:
              entity_id: switch.deye_sunsynk_sol_ark_3_phase_use_timer
          - delay: "00:00:15"
          - action: switch.turn_off
            target:
              entity_id:
                - switch.deye_sunsynk_sol_ark_3_phase_grid_charge_point_1
                - switch.deye_sunsynk_sol_ark_3_phase_grid_charge_point_2
                - switch.deye_sunsynk_sol_ark_3_phase_grid_charge_point_3
          - action: input_boolean.turn_off
            target:
              entity_id: input_boolean.deye_hc_60_atteint
mode: restart

Petite subtilité, les ordres de démarrage et d’arret de charge doivent prendre leur temps et il faut vérifier l’etat de temps en temps. Je ne sais pas si ca vient du SolarAssistant ou pas.

Il faudrai que quelqu’un puisse nous dire si c’est pas plus stable en direct (ModBus)

Autre point, j’ai des PV avec micro onduleurs et une chaine de PV sans, le deye sait les distinguer mais pas SA…