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:
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,
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 › :
Choisissez votre mode de configuration:
Trouvez la borne dans la liste
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) :
- la titine est branchée:
is_state('binary_sensor.titine_connection_status', 'on')
- la titine est chargée à moins de 95 % (les derniers pourcents sont longs) :
states('sensor.titine_remaining_battery_percent') | float(100) < 95
- la chargeur n’est pas deconnecté:
not is_state('sensor.chargeur_garage_status', 'Disconnected')
, - 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:
- Le 6A n’est disponible que sur la borne. Depuis l’app et depuis HA il n’est pas possible de choisir 6A,
- 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.