J’intègre le Power Boost EM112 de chez Carlo Gavazzi dans Home Assistant via le port RS485 (Modbus)

Information importante

A noter que l’intégration décrite ci-dessous ne peut fonctionner que si la clé USB/RS485 est le seul équipement du bus RS485 connectée au EM112. En effet (et grâce à l’aide d’Eric G.) J’ai compris qu’il ne pouvait y avoir qu’un seul équipement maitre sur le bus. Or le maitre est celui qui interroge et l’esclave celui qui répond. l’EM112 est donc esclave.

Mon idée première était de sniffer les trames de dialogues entre l’EM112 et ma Wallbox, la Wallbox étant maitre, je ne peux faire cela. Pour la beauté de l’exercice, j’ai testé avec deux maitres, cela fonctionne on retrouve des valeurs mais de temps en temps, quand les deux maitres posent une question ensemble, on se retrouve avec une erreur.

Si quelqu’un peut m’orienter vers une manière de “snifer” le bus 485 pour intercepter les informations que le EM112 envoie à une Wallbox par exemple, je suis preneur car à ce stade, je ne peux avoir une Wallbox et une Clé RS485/USB en parallèle (deux maitres).

 Matériel utilisé et drivers

L’équipement le plus cher de tout mon tableau (1.33€ sur Ali 😂), celle-ci fonctionne, visiblement il y a des fausses clés, j’ai peut-être eu de la chance mais ce vendeur est sérieux.

Evidemment dès réception, je l’ai ouverte pour trouver une référence, c’est une YYH-256

En cherchant sur les forum, on retrouve que c’est (probablement) un fork de CH341 les drivers de ce dernier sont même utilisés.

A noter que mes recherches de drivers ont été inutiles puisque la clé est nativement reconnue sur le RaspberryPi4/HAOS que j’utilise.

Je poste ici ce schéma qui donne les circuits utilisés, à noter que le quartz a disparu, ce n’est pas un oubli à la soudure, c’est une évolution de la clé (un composant gagné, c’est un composant gagné).

 

Je relie la clé USB au port RS485

La clé a deux connecteurs D+ et D-, il suffit de les connecter sur les broches B+(4) et A-(5) du EM112

Je connecte la clé sur le port USB du Raspi4

Je teste immédiatement la commande  lsusb sur la ligne de commande et je constate que quand la nouvelle clé est branchée, j’ai une ligne de plus, c’est plutôt bon signe.

Je passe les soucis de ports /dev/ttyUSB0 et /dev/ttyUSB1 qui changent à chaque démarrage, j’ai solutionné et documenté la solution sur :

Je note que j’utiliserai le port /dev/serial/by-id/usb-1a86_USB2.0-Ser_-if00-port0 pour me connecter à cette clé.

Je configure l’intégration Modbus qui est nativement dans HA

Dans mon fichier configuration, j’ajoute la ligne modbus: !include modbus.yaml

Et dans modbus.yaml, je déclare la clé

- name: modbus_hub
  type: serial
  #port: /dev/ttyUSB1
  port: /dev/serial/by-id/usb-1a86_USB2.0-Ser_-if00-port0
  baudrate: 9600
  bytesize: 8
  method: rtu
  parity: N
  stopbits: 1  
  retries: 5
  close_comm_on_error: false
  delay : 5
  timeout : 2
  message_wait_milliseconds : 1000

Je déclare chaque sensor 

A partir de là, je me plonge dans la documentation de Gavazzi et je vais chercher les lignes qui m’intéressent :

Pour avoir l’adresse de chaque sensor, je converti les adresses en hexa en décimal puis je déclare les 4 sensors dans modbus.yaml :

sensors:
  - name: EM112_W
    unit_of_measurement: W
    state_class: measurement
    device_class: energy
    slave: 1
    address: 4
    data_type: int32
    input_type: input
    precision: 0 
    scale: 0.1
    scan_interval: 10
    lazy_error_count : 999
    swap : word
    
  - name: EM112_A
    unit_of_measurement: A
    state_class: measurement
    device_class: current
    slave: 1
    address: 2
    data_type: int32
    input_type: input
    precision: 0
    scale: 0.001
    scan_interval: 10
    lazy_error_count : 999
    swap : word
    
  - name: EM112_VA
    unit_of_measurement: VA
    state_class: measurement
    device_class: energy
    slave: 1
    address: 6
    data_type: int32
    input_type: input
    precision: 0 
    scale: 0.1
    scan_interval: 10
    lazy_error_count : 999
    swap : word
    
  - name: EM112_kwh
    unit_of_measurement: kwh
    state_class: total_increasing
    device_class: energy
    slave: 1
    address: 16
    data_type: int32
    input_type: input
    precision: 0 
    scale: 0.1
    scan_interval: 10
    lazy_error_count : 999
    swap : word

Je vérifie le résultat

Parfait ! Il ne reste plus qu’à jouer à faire une jolie carte…

Rappel

Ne pas mettre en production en parallèle d’une Wallbox

Si quelqu’un peut m’orienter vers une manière de “snifer” le bus 485 pour intercepter les informations que le EM112 envoie à une Wallbox par exemple, je suis preneur car à ce stade, je ne peux avoir une Wallbox et une Clé RS485/USB en parallèle (deux maitres).

Bibliographie, Références