Chargeur EV AFYEEV 32A 22kw - Intégration dans Home Assistant et dans Solar Optimizer

Hello,

Dans la lignée de ce qui a été fait ici : Feyree Fey123 : intégration dans HA via Tuya Local, je vais vous donner un tuto pour installer et faire reconnaitre une borne AFYEEV 32A 22kw. (AFYEEV-Chargeur EV portable pour voiture électrique, boîtier de charge EVSE, station de charge pour voiture électrique, Wi-Fi, vs Control GB/T, 22KW, 32A, 3 phases Vope2 - AliExpress 34)

Cette borne est triphasée et permet d’aller de 6A à 32 A ce qui donne une belle plage pour faire du routage solaire.

1. installer l’intégration tuya-local

L’intégration est disponible ici GitHub - make-all/tuya-local: Local support for Tuya devices in Home Assistant. L’installation est classique via HACS et est décrite dans le readme de l’intégration, je n’y reviens pas,

2. faire reconnaitre la borne par l’intégration

Par défaut, la borne n’est pas reconnue par l’intégration. Heureusement cette dernière accepte facilement de prendre des nouvelles configurations.
Pour cela, il faut ajouter un fichier descriptif de la borne à installer dans le répertoire config/custom_components/tuya_local/devices

J’ai construit ce fichier qui devrait marcher directement:

name: EV charger
products:
  - id: aaaealnecwgwerjl
    name: AFYEEV 32A EV charger
primary_entity:
  entity: sensor
  class: enum
  name: Status
  icon: "mdi:ev-station"
  dps:
    - id: 3
      type: string
      name: sensor
      mapping:
        - dps_val: charger_free
          value: Disconnected
        - dps_val: charger_insert
          value: Connected
        - dps_val: charger_free_fault
          value: Fault (disconnected)
        - dps_val: charger_charging
          value: Charging
        - dps_val: charger_wait
          value: Waiting
        - dps_val: charger_end
          value: Charged
        - dps_val: charger_fault
          value: Fault
        - dps_val: charger_pause
          value: Pause
secondary_entities:
  - entity: number
    name: Set current
    icon: "mdi:ev-plug-type2"
    dps:
      - id: 4
        type: integer
        name: value
        unit: A
        range:
          min: 6
          max: 16
  - entity: sensor
    icon: "mdi:flash"
    name: Single phase power
    class: power
    dps:
      - id: 5
        type: integer
        name: sensor
        unit: W
        class: measurement
        precision: 1
        mapping:
          - scale: 3
  - entity: sensor
    icon: "mdi:flash"
    name: Total power
    class: power
    dps:
      - id: 9
        type: integer
        name: sensor
        unit: W
        class: measurement
        precision: 1
        mapping:
          - scale: 1
  - entity: sensor
    name: Fault reason
    icon: 'mdi:alert-outline'
    class: enum
    dps:
      - id: 10
        type: bitfield
        name: sensor
        mapping:
          - dps_val: 0
            value: "Ready"
          - dps_val: 1
            value: "Ov2 Cr Fault"
          - dps_val: 2
            value: "OV Vol"
          - dps_val: 4
            value: "Undervoltage alarm"
          - dps_val: 8
            value: "Contactor adhesion"
          - dps_val: 16
            value: "Contactor fault"
          - dps_val: 32
            value: "Earth fault"
          - dps_val: 64
            value: "Meter Hardware alarm"
          - dps_val: 128
            value: "Scram fault"
          - dps_val: 256
            value: "CP fault"
          - dps_val: 512
            value: "Meter Commu fault"
          - dps_val: 1024
            value: "Card reader fault"
          - dps_val: 2048
            value: "Cir short fault"
          - dps_val: 4096
            value: "Adhesion fault"
          - dps_val: 8192
            value: "Self test alarm"
          - dps_val: 16384
            value: "Leakage current fault"
  - entity: select
    name: Working mode
    icon: "mdi:list-box-outline"
    dps:
      - id: 14
        type: string
        name: option
        mapping:
          - dps_val: charge_now
            value: Charge now
          - dps_val: charge_pct
            value: Charge PCT
          - dps_val: charge_energy
            value: Charge energy
          - dps_val: charge_schedule
            value: Charge schedule
          - dps_val: charge_delay
            value: Charge delay
  - entity: switch
    name: Power switch
    icon: "mdi:power"
    dps:
      - id: 18
        type: boolean
        optional: true
        force: true
        name: switch
  - entity: sensor
    class: temperature
    name: Temperature
    # category: diagnostic
    dps:
      - id: 24
        type: integer
        name: sensor
        unit: °C
        class: measurement
        mapping:
          - scale: 1
  - entity: sensor
    name: Charge energy once
    class: energy
    dps:
      - id: 25
        type: integer
        name: sensor
        unit: kWh
        class: total_increasing
        optional: true
        mapping:
          - scale: 2
  - entity: sensor
    class: enum
    name: Online state
    icon: "mdi:wifi"
    dps:
      - id: 27
        optional: true
        type: string
        name: sensor
        mapping:
          - dps_val: offline
            value: Offline
          - dps_val: online
            value: Online
  - entity: number
    name: Timer
    # category: config
    icon: "mdi:car-clock"
    dps:
      - id: 28
        type: integer
        name: value
        unit: h
        optional: true
        range:
          min: 0
          max: 15

J’ai appelé ce fichier afyeev_ev_charger.yaml.
On se retrouve donc avec un contenu du répertoire config/custom_components/tuya_local/devices qui ressemble à ça:

Capture d’écran 2024-07-13 à 10.50.30

3. Redémarrer l’intégration pour prise en compte

Rien de plus simple. Il faut aller dans Paramètres/Intégration. Choisir l’intégration,
Capture d’écran 2024-07-13 à 10.51.43

cliquer sur ’ >’
et dans le menu ‹ … ›, choisir Redémarrer l'intégration

4. Configurez votre compte TuYa

C’est très bien décrit ici: Feyree Fey123 : intégration dans HA via Tuya Local, je n’y reviens pas.

5. Ajoutez votre borne dans l’intégration

Cliquez sur ‹ Ajouter un appareil › :
Capture d’écran 2024-07-13 à 10.53.33

Choisissez votre mode de configuration:
Capture d’écran 2024-07-13 à 10.55.16

Trouvez la borne dans la liste
Capture d’écran 2024-07-13 à 10.56.14

et vous devriez avoir un nouvel appareil avec toutes ces entités:

6. Intégration dans Solar Optimizer

Une page est dédiée à l’intégration Solar Optimizer, merci de vous y référer pour l’installation et la configuration: Intégration Solar Optimizer - Optimisation de sa consommation Solaire

La configuration que j’ai faite dans Solar Optimizer pour intégrer cette borne est la suivante:

algorithm:
  initial_temp: 1000
  min_temp: 0.1
  cooling_factor: 0.95
  max_iteration_number: 1000
devices:
...
  - name: "Prise recharge voiture garage"
    entity_id: "switch.chargeur_garage_power_switch"
    power_min: 3960
    power_max: 105600
    power_step: 1320
    check_usable_template: "{{ is_state('binary_sensor.titine_connection_status', 'on') and states('sensor.titine_remaining_battery_percent') | float(100) < 95 and not is_state('sensor.chargeur_garage_status', 'Disconnected' and states('sensor.pourcentage_enphase_charge_batterie') | float(0) > 30)}}"
    # 1 heure
    duration_min: 60
    duration_stop_min: 15
    action_mode: "service_call"
    activation_service: "switch/turn_on"
    deactivation_service: "switch/turn_off"
    power_entity_id: "number.chargeur_garage_set_current"
    # 5 min
    duration_power_min: 5
    change_power_service: "number/set_value"
    convert_power_divide_factor: 660

Explications: je suis en triphasé donc 1 A → 660 w chez moi.

Je déclenche la charge si j’ai 6x660 = 3960 w de disponible. Ca correspond au 6A min de la borne
et si les conditions suivantes sont réunies (check_usable_template) :

  1. la titine est branchée: is_state('binary_sensor.titine_connection_status', 'on')
  2. la titine est chargée à moins de 95 % (les derniers pourcents sont longs) : states('sensor.titine_remaining_battery_percent') | float(100) < 95
  3. la chargeur n’est pas deconnecté: not is_state('sensor.chargeur_garage_status', 'Disconnected'),
  4. la batterie Enphase de mon installation solaire est chargée à au moins 30% (pour privilégier la charge de la batterie): states('sensor.pourcentage_enphase_charge_batterie') | float(0) > 30

Je fais des steps de 1320 W (soit 2 A) pour suivre ce que sait faire la borne: 6A, 8A, 10A, …
et le max de puissance est 105600W soit 16A. Normalement, ca n’ira jamais jusque là.

Si la charge se déclenche, je la laisse au moins 1 h: duration_min: 60
Si la charge s’arrête, je ne la rédémarre pas avant 15min: `duration_stop_min: 15``
tout cela pour éviter les bagottements lors des passages nuageux.

Sur un changement d’ampérage, je laisse au moins 5 min avant de rechanger: duration_power_min: 5
L’ampérage est calculé est divisant la puissance voulue par 660: convert_power_divide_factor: 660

Qqes défauts de la borne

A savoir avant d’acheter:

  1. Le 6A n’est disponible que sur la borne. Depuis l’app et depuis HA il n’est pas possible de choisir 6A,
  2. La puissance consommée remontée dans l’app et dans HA sont fausses. Il y a toujours 484w d’affiché alors sur la borne on voit bien 0. J’ai été obligé de faire un helper pour forcer 0 si la borne n’est pas en charge.

Si c’est important pour vous, le mieux est d’en prendre une autre.

3 « J'aime »

C’est cool ton fichier yaml pour intégrer le chargeur.

Du coup, vu le titre, une deuxième partie va venir avec l’intégration dans ton Solar Optimizer ?

1 « J'aime »

C’est fait maintenant

1 « J'aime »

Salut

Quand tu as fait ton fichier YAML, l’ID du chargeur, c’est celui que tu retrouves dans les infos de l’appareil dans l’application Tuya (et aussi dans le projet Cloud si tu as un compte IoT Tuya) ?

Car j’ai voulu mettre mon ID (bf97…) en plus des 2 autres IDs définis dans le fichier feyree_ev_charger.yaml du projet :

name: EV charger
products:
  - id: hytatexziwaifxj1
    name: Feyree 32A 85-264V EV charger
  - id: bf97c7a244d1f0eb1awsij
    name: Feyree Fey123 8-32A EV charger
  - id: emvuyyax4lekiooj
    name: Feyree A_32A_1L ChargePoint

J’ai ensuite redémarré HA pour être certain que le fichier soit pris en compte ais quand j’intègre le chargeur, il me propose toujours le choix entre Goodcell et Loratap.

Tant pis, je laisse comme ça, ça marche mais c’était histoire de comprendre. Maintenant je vais m’attaquer à l’installation et l’intégration de Solar Optimizer.

Je suis en monophasé donc 1A vaut combien chez moi 220 W ? Ou plus 230W vu qu’on est en 230V (y a cette histoire de cosphi aussi, bref).

Ma charge minimale est de 8A donc 8A x 230V = 1840 pour power_mini
Ma charge maximale est de 16A donc 3680 pour power_max
L’incrément est de 1A donc 230 pour power_step

Ca te semble correct ?

Mais ton entity_id, c’est un switch pour commander la charge et c’est parce que tu l’as défini dans ton fichier YAML. Moi, j’ai pas de switch, j’ai des actions pour démarrer ou arrêter la charge :
image

et dans le yaml du fichier :

  - entity: select
    name: Toggle charging
    icon: "mdi:ev-plug-type2"
    category: config
    dps:
      - id: 124
        type: string
        name: option
        mapping:
          - dps_val: "OpenCharging"
            value: Start charging
          - dps_val: "CloseCharging"
            value: Stop charging
          - dps_val: "WaitOperation"
            value: Waiting for command

Et pour la configuration de Solar Optimizer, je dois intégrer en plus mes remontées de mes compteurs Linky (Puissance VA consommée - Puissance VA injectée pour avoir du négatif si injection) et Sagem (Puissance VA produite par les panneaux), c’est ça ?

IL faut mettre le productId et pas le deviceId.
Dans les API TuYa / Query device details :
Capture d’écran 2024-07-14 à 10.54.13

oui. 220 ca ira bien.

Oui. Regardes dans le readme. Il faut des valeurs négatives si tu réinjectes de mémoire.

C’est récupérable depuis HA ou faut des outils spécifiques Tuya ?

Bon, j’essaie de créer le YAML pour Solar Intergration mais je bloque sur les commandes pour démarrer ou arrêter la charge.

Dans le YAML de goodcell_ev_charger, il y a ça :

  - entity: select
    name: Toggle charging
    icon: "mdi:ev-plug-type2"
    category: config
    dps:
      - id: 124
        type: string
        name: option
        mapping:
          - dps_val: "OpenCharging"
            value: Start charging
          - dps_val: "CloseCharging"
            value: Stop charging
          - dps_val: "WaitOperation"
            value: Waiting for command

Et dans HA, quand je regarde l’état, j’ai ça :

Normalement, le state est à Waiting for command mais si j’envoie Stop charging ou CloseCharging, ça n’arrête pas la charge qui est en cours.

Et ensuite, je ne sais pas comment déclarer ça dans le YAML de Solar Optimizer :

    action_mode: "service_call"
    activation_service: "switch/turn_on"
    deactivation_service: "switch/turn_off"

Le service pour modifier un select est : input_select.select_option

Donc faut que tu essayes :

activation_service: « select/select_option/Start charging »

Pas sur que ca marche.

Si ça marche pas il faut que tu te fasses un switch virtuel qui fait le select.select_option.

1 « J'aime »

Bonjour, j’ai acheté presque la même borne suivie le tuto,
mais j’ai une erreur à l’intégration :
« Impossible de se connecter à votre appareil avec ces réglages. Il peut s’agir d’un problème intermittent ou les réglages sont incorrects. »
J’ai essayé en changeant le product ID mais rien de mieux.
la borne :

Hello, ce n’est pas la même que ce tuto mais plutot celle décrite ici: Feyree Fey123 : intégration dans HA via Tuya Local