J’intègre un Moniteur d’énergie 60A ZMAi-90 (23€) à Home Assistant via ESP Home

Contexte et objectifs

J’avais depuis quelques temps un ZMAi-90, je n’étais jamais arrivé à l’intégrer dans Jeedom. En passant sur Home Assistant, je me demande si ESP Home ne pourrait pas l’accepter. En effet le ZMAi-90 est équipé d’un esp8266.

Je cherche sur le net, pas de tuto, pas de vidéo, rien sur la possibilité d’installer ESP Home sur un ZMAi-90. … Je me lance.

Présentation du ZMAi-90

Cet équipement qui coûte moins de 23€ est équipé d’un relais avec un pouvoir de coupure donné à 60A (le relais est un relais 80A). A ce prix, il permet de mesurer la consommation d’énergie ce qui en fait un équipement particulièrement bon marché.

Les connecteurs sont de qualité et quand je l’ai ouvert, j’ai trouvé un produit bien structuré et bien réalisé.

Flasher le ZMAi-90

Je démonte le boitier

Je commence par démonter la bête, deux vis une au milieu en haut et une au milieu en bas, simple à dévisser, simple à ouvrir.

Le module est construit autour d’une carte haute tension et d’une carte basse tension qu’on va séparer de l’autre.

J’isole la carte électronique de commande.

La qualité du montage entre ces cartes me surprend, tant mieux, c’est très bien pensé, deux fois 4 fiches emboitées et une fixation de deux fiches soudées.

Ces 2×4 fiches ne sont pas soudées :

Sur le côté gauche, ces deux connecteurs sont à dessouder :

Je les dessoude donc pour séparer la carte de commande.

J’observe la carte électronique

La carte est équipé d’un TYWE3S, c’est un module Wi-Fi intégré à faible consommation développé par Tuya. Il se compose d’une puce RF sans fil hautement intégrée (ESP8266), de quelques périphériques, d’une pile de protocoles réseau Wi-Fi intégrée et de fonctions de bibliothèque variées.

Je repère rapidement les pins qui vont m’intéresser :

De l’autre côté

Le V9821 est une puce de mesure d’énergie monophasée fabriquée par Vango. A noter qu’il ne faudra pas que je l’alimente quand je flasherai l’ESP, j’explique cela juste après.

Je soude des connecteurs dupont sur les pins

Pour flasher l’ESP, j’ai besoin d’interagir avec les bornes Gnd/VCC/Rx/TX et pour mettre l’ESP en mode programmation, il faudra que je mette GPIO0 à GND. Je vais donc souder 5 fils sur ces 5 pins :

Pour me repérer, je vais souder 3V3 sur un fil rouge, GND sur un fil marron, Tx sur un fil jaune et Rx sur un fil orange.

Sur l’autre côté, je dois faire un sorte que le microcontrôleur ne démarre pas, pour cela, je mets sa borne RSTn à GND. Je repère la borne que j’ai coloré en jaune, je pointe 

J’identifie les pistes qui correspondent à cette broche car je ne suis pas équipé pour souder si petit. Les points jaunes sont reliés à la broche RSTn

Je soude un petit mal dupont dessus et je le relis au GND qui se trouve en haut à droite

Je raccorde les connecteurs dupont soudés au FDTI232

A noter que j’ai dû inverser le Tx et le RX, donc le jaune et le orange. Avec ces deux broches, c’est toujours une chance sur deux.

J’installe l’intégration ESP Home

Ici, je connecte la prise USB du FTDI232, attention il faut bien raccorder GPIO0 à GND pour que l’ESP se mette en programmation au moment de la connexion de l’USB. Pour cela, je fais toucher le fil noir à la borde GND.

Je débranche puis rebranche le connecteur USB.

Si le configuration du Wifi n’est pas proposé, je me reconnecte et je vais sur :

Je ferme web.esphome.io, retour dans Home assistant, onglet ESP Home, le device est arrivé.

J’ajoute le lien entre ESPHome et HA

Le plus simple est de passer par les notifications

Je peux le renommer.

L’appareil et son entité de mise à jour sont installés.

Je désoude et je remonte l’appareil

A ce stade, il n’y aura plus de manipulation, je dessoude tous les dupont et je remonte le boitier.

Je replace les deux vis à l’arrière et je reconnecte l’équipement sur le réseau électrique.

Je configure les capteurs du ZMAi-90 dans ESP Home

Je clique sur Edit.

La configuration du fichier Yaml du ZMAi-90 n’est pas simple mais j’ai trouvé un exemple dont je me suis inspiré.

Après plusieurs essais, voici le code de mon équipement :

substitutions:
  name: "ZMAi-90"
  node_name: zmai90

  # ZMAi-90 TuyaMCU datapoints
  dp_switch: "1"
  dp_total: "17"
  dp_power: "19"
  dp_current: "18"
  dp_voltage: "20"

esphome:
  name: esphome-web-1398e4
  friendly_name: ZMAi-90

esp8266:
  board: esp01_1m

# Enable logging
logger:
  baud_rate: 0 

# Enable Home Assistant API
api:
  encryption:
    key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

ota:


wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esphome-Web-1398E4"
    password: "xxxxxxxxxxxxxxx"

captive_portal:

time:
  platform: homeassistant
  id: g_time

uart:
  rx_pin: RX
  tx_pin: TX
  baud_rate: 9600

tuya:
  time_id: g_time

switch:
    - platform: "tuya"
      id: sw_power
      name: Jus
      switch_datapoint: $dp_switch
      icon: "mdi:power"

sensor:
  # total
  - platform: "tuya"
    id: total
    name: "Energy"
    sensor_datapoint: $dp_total
    accuracy_decimals: 3
    filters:
      - multiply: 0.001
    unit_of_measurement: "kWh"
    icon: "mdi:sigma"
    device_class: "energy"
    state_class: total_increasing

  # active power
  - platform: "tuya"
    id: power
    name: "Power"
    sensor_datapoint: $dp_power
    accuracy_decimals: 1
    filters:
      - multiply: 0.1
    unit_of_measurement: "W"
    icon: "mdi:flash"
    device_class: "power"
    state_class: measurement

  # current
  - platform: "tuya"
    id: current
    name: "Current"
    sensor_datapoint: $dp_current
    accuracy_decimals: 3
    filters:
      - multiply: 0.001
    unit_of_measurement: "A"
    icon: "mdi:current-ac"
    device_class: "current"
    state_class: measurement

  # voltage
  - platform: "tuya"
    id: voltage
    name: "Voltage"
    sensor_datapoint: $dp_voltage
    accuracy_decimals: 1
    filters:
      - multiply: 0.1
    unit_of_measurement: "V"
    icon: "mdi:sine-wave"
    device_class: "voltage"
    state_class: measurement

  - platform: uptime
    name: "Actif depuis"
    device_class: duration

  - platform: wifi_signal
    name: "Signal WiFi"    

Et voilà le résultat…