Zendure & EMQX --> auto discover mqtt

Bonjour à tous,

Mon probleme:

Je n’arrive pas à configurer correctement EMQX pour avoir l’auto decouverte de l’intergration mqtt
EMQX est bien connecté au service mqtt de zendure, je vois bien les topics dans mqtt explorer sous la racine « zendure/# »
je n’arrive pas à créer une regle dans EMQX pour la decouverte automatique.

Quelqu’un a-t-il deja fait ce style de regle?

Pour info j’ai du frigate / tasmota / opendtu / zigbeemqtt qui fonctionne bien avec EMQX.

J’ai réussi a avoir cela: /homeassistant/sensor/id zendure/sensor/device/dkMMx9ejsolarInputPower/config
avec tout les sensor de zendure dans device.
Mais pas de decouverte automatique.
Si quelqu’un a une idée, je suis preneur.
:wink:

Ma config home assistant:

System Information

version core-2025.3.4
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.13.2
os_name Linux
os_version 6.12.18-haos
arch x86_64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
HACS Data ok
GitHub API Calls Remaining 5000
Installed Version 2.0.5
Stage running
Available Repositories 1672
Downloaded Repositories 4
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 15.0
update_channel stable
supervisor_version supervisor-2025.03.3
agent_version 1.7.2
docker_version 28.0.1
disk_total 30.8 GB
disk_used 7.4 GB
healthy true
supported true
host_connectivity true
supervisor_connectivity true
ntp_synchronized true
virtualization kvm
board ova
supervisor_api ok
version_api ok
installed_addons Studio Code Server (5.18.3), Advanced SSH & Web Terminal (20.0.2), Terminal & SSH (9.16.0)
Dashboards
dashboards 7
resources 6
views 43
mode storage
Network Configuration
adapters lo (disabled), enp0s18 (enabled, default, auto), hassio (disabled), docker0 (disabled), veth223e4b9 (disabled), veth7a890d4 (disabled), veth7fc40ba (disabled), vethf3f04c6 (disabled), vethb5d650d (disabled), vethc3888fc (disabled), veth5485c56 (disabled)
ipv4_addresses lo (127.0.0.1/8), enp0s18 (192.168.199.61/24), hassio (172.30.32.1/23), docker0 (172.30.232.1/23), veth223e4b9 (), veth7a890d4 (), veth7fc40ba (), vethf3f04c6 (), vethb5d650d (), vethc3888fc (), veth5485c56 ()
ipv6_addresses lo (::1/128), enp0s18 (fe80::a43d:10f4:518f:7051/64), hassio (fe80::a8bc:90ff:feaf:a834/64), docker0 (fe80::70ff:98ff:fe1c:b2be/64), veth223e4b9 (fe80::ecca:a8ff:fe27:b2f2/64), veth7a890d4 (fe80::205c:14ff:fee2:556b/64), veth7fc40ba (fe80::f414:66ff:fe0a:df91/64), vethf3f04c6 (fe80::9852:a9ff:fe73:2372/64), vethb5d650d (fe80::a8b9:30ff:fe7c:6198/64), vethc3888fc (fe80::e024:c6ff:feb4:9f21/64), veth5485c56 (fe80::498:18ff:fed4:cdc6/64)
announce_addresses 192.168.199.61, fe80::a43d:10f4:518f:7051
Recorder
oldest_recorder_run 17 mars 2025 à 15:04
current_recorder_run 22 mars 2025 à 10:23
estimated_db_size 643.67 MiB
database_engine sqlite
database_version 3.48.0

Salut,

peux-tu donner des infos sur ce que tu as tenté de faire exactement?
J’ai EMQX mais je n’ai jamais eu à faire quoi que ce soit pour l’auto-discovery.
Soit l’intégration publie des topics d’auto-discovery pour HA, soit il n’y en a pas et il faut définir les entités à la main côté HA… (google sur Zendure MQTT senble donner des exemples où les entités sont configurées en YAML dans HA)

Sur quelle doc te bases tu pour activer cette découverte dans EMQX?

Bonjour @AlexHass ,
Tu as deja connecté EMQX sur un broker externe? là, c’est le cas :


et voici le conf du connector:

Comme cela rien n’est republié dans la partie Broker interne.
Donc j’ai crée une regle:

input :

et l’output:

du coups, j’ai bien dans mqtt explorer connecté au broker EMQX cela :

zendure/XXXXXXXXO6k5/sensor/device
dkMMx9ejsolarInputPower
dkMMx9ejpackInputPower
dkMMx9ejoutputPackPower
dkMMx9ejoutputHomePower
dkMMx9ejoutputLimit
dkMMx9ejremainOutTime
dkMMx9ejpackState
dkMMx9ejpackNum
dkMMx9ejelectricLevel
dkMMx9ejsocSet
dkMMx9ejpackData
dkMMx9ejsolarPower1
dkMMx9ejsolarPower2
dkMMx9ejpassMode
dkMMx9ejgridInputPower
dkMMx9ejacOutputPower
zendure/XXXXXXXXO6k5/switch
zendure/XXXXXXXXO6k5/dkMMx9ej
state = {"message_received_at":1743149724393,"pub_props":{},"qos":0,"topic":"XXXXXXXXO6k5/dkMMx9ej/state","payload":"{\"solarInputPower\":120,\"sn\":\"XXXXXXXX0798\"}","retain":false,"event":"$bridges/mqtt:serveur-mqtt-zendure","server":"mqtt-eu.zen-iot.com:1883","metadata":{"rule_id":"rule_zendure-to-republish"},"dup":false,"timestamp":1743149724393,"node":"emqx@127.0.0.1","id":"XXXXXXXX…

Dans les dkMMx9ej, j’ai conf pour home assistant :

dkMMx9ejsolarInputPower
config = {"message_received_at":1743149674305,"pub_props":{},"qos":1,"topic":"XXXXXXXXO6k5/sensor/device/dkMMx9ejsolarInputPower/config","payload":"{\"unique_id\":\"dkMMx9ejsolarInputPower\",\"state_topic\":\"XXXXXXXXO6k5/dkMMx9ej/state\",\"unit_of_measurement\":\"W\",\"command_topic\":\"XXXXXXXXO6k5/dkMMx9ej/solarInputPower/set\",\"name\":\"solarInputPower\",\"device_class\":\"power\",\"value_template\":\"{{ value_js…

Je suis interéssé de savoir comment tu as fait pour ne pas faire de configuration.
J’ai certainement loupé quelque chose, :blush:

Ok, bon ben non je ne peux pas t’aider.
Tu n’avais pas vraiment expliqué ce que tu tentais de faire.
Donc là tu veux connecter EMQX sur le broker du cloud de Zendure?

Oui, mais cela est fait, ce que je n’arrive pas à faire c’est auto discover ou la creation manuel du device zendure pour mqtt.
:thinking:

Voici un exemple de ce que je reçoit sur mqtt explorer :
topic: zendure/XXXXXXO6k5/dkMMx9ej/

state =
{
  "message_received_at": 1743151211018,
  "pub_props": {},
  "qos": 0,
  "topic": "XXXXXXO6k5/dkMMx9ej/state",
  "payload": "{\"solarPower2\":63,\"electricLevel\":8,\"solarPower1\":65,\"sn\":\"XXXXXX.....\",\"outputPackPower\":128}",
  "retain": false,
  "event": "$bridges/mqtt:serveur-mqtt-zendure",
  "server": "mqtt-eu.zen-iot.com:1883",
  "metadata": {
    "rule_id": "rule_zendure-to-republish"
  },
  "dup": false,
  "timestamp": 1743151211018,
  "node": "emqx@127.0.0.1",
  "id": "XXXXXX........."
}

dans configuration.yaml, j’ai :

# Configuration de mqtt en manuel
mqtt: !include mqtt.yaml
# FIN

et dans mqtt.yaml, j’ai:

sensor:
  - name: "Solar Input Power"
    unique_id: "Zendure.Solar_Input_Power"
    state_topic: "XXXXXXO6k5/dkMMx9ej/state"
    value_template: "{{ value_json.solarInputPower }}"
    unit_of_measurement: "W"
    device:
      name: "Zendure"
      identifiers: "Zendure_dkMMx9ej"
  - name: "Solar Power line 1"
    unique_id: "Zendure.Solar_Power_line_1"
    state_topic: "XXXXXXO6k5/dkMMx9ej/state"
    value_template: "{{ value_json.solarPower1 }}"
    unit_of_measurement: "W"
    device:
      name: "Zendure"
      identifiers: "Zendure_dkMMx9ej"
  - name: "Solar Power line 2"
    unique_id: "Zendure.Solar_Power_line_2"
    state_topic: "XXXXXXO6k5/dkMMx9ej/state"
    value_template: "{{ value_json.solarPower2 }}"
    unit_of_measurement: "W"
    device:
      name: "Zendure"
      identifiers: "Zendure_dkMMx9ej"

ce qui me donne :

Mais pas de data :cry:
La aussi, je pense faire une erreure quelque part, voir plusieurs!
peut etre que tu pourra m’orienté sur le yaml.

salut,
le soucis c’est que ton payload du topic MQTT est un json il faut le parser l tu envoies ça dans ton sensor
"{\"solarPower2\":63,\"electricLevel\":8,\"solarPower1\":65,\"sn\":\"XXXXXX.....\",\"outputPackPower\":128}"

c’est expliqué ici

justement, c’est la doc sur lequel je m’appuie

et dans les outils de développement/états tu observes quoi ?

je vais voir, c’est vrai j’ai tendense à oublier …

Faut surtout voir à quoi ça ressemble quand ça rentre dans MQTT côté HA.

En activant l’écoute dans l’intégration MQTT. (Intégration>MQTT>Configurer> Ecouter Topic #)

Exemple, dans mon yaml j’ai ça:

    - name: "Serveur0 Boot Wear Out"
      state_topic: "monitoring/proxmox"
      unit_of_measurement: "%"
      value_template: "{{ value_json.boot_wear }}"

le message sur le topics arrive comme ça:

Suivant ce qui arrive, il va falloir adapter son value_json

à l’ecoute j’ai cela qui remonte :

Message 2 reçu sur zendure/XXXXXXXXXO6k5/dkMMx9ej/state à 10:10 :

{"message_received_at":1743153048762,"pub_props":{},"qos":0,"topic":"XXXXXXXXXO6k5/dkMMx9ej/state","payload":"{\"solarInputPower\":109,\"sn\":\"XXXXXXXXX.....\"}","retain":false,"event":"$bridges/mqtt:serveur-mqtt-zendure","server":"mqtt-eu.zen-iot.com:1883","metadata":{"rule_id":"rule_zendure-to-republish"},"dup":false,"timestamp":1743153048762,"node":"emqx@127.0.0.1","id":"XXXXXXXXX......."}

QoS: 0 - Retain: false 

Message 14 reçu sur zendure/XXXXXXXXXO6k5/dkMMx9ej/state à 10:11 :

{"message_received_at":1743153096766,"pub_props":{},"qos":0,"topic":"XXXXXXXXXO6k5/dkMMx9ej/state","payload":"{\"packData\":[{\"sn\":\"CO4FHMG4M313521\"},{\"maxVol\":324,\"sn\":\"CO4FHMEFM254735\"}],\"sn\":\"XXXXXXXXX.......\"}","retain":false,"event":"$bridges/mqtt:serveur-mqtt-zendure","server":"mqtt-eu.zen-iot.com:1883","metadata":{"rule_id":"rule_zendure-to-republish"},"dup":false,"timestamp":1743153096766,"node":"emqx@127.0.0.1","id":"XXXXXXXXX......."}

QoS: 0 - Retain: false 

sur le meme topic tu reçois 2 payload différents …? j’ai bien les yeux ouverts ?

value_json.payload.solarPower1 du coup non ?

Oui @ddfdom , c’est bizzar, mais c’est comme cela que c’est fait quand je me connect dirrectement chez zendure avec mqtt explorer.

Effectivement ce n’est pas bon ça…

@lolo-95 to republish n’estp as bon, au lieue de republier le contenu du message, tu republie le message en entier, tu imbrique du MQTT dans du MQTT… faudrait que le payload… mais bon je n’ai jamais fait, je ne saurais te dire quelle est la bonne méthode.

1 « J'aime »

Non, c’est comme cela chez zendure, quand je me connect directement chez eux avec mqtt explorer, j’ai la meme architecture, la seul difference de rebublication c’est le zendure en tete de topic.
@AlexHass , et bien tu as raison au final, il y a une difference que je n’avais pas remarqué, exemple en direct:
topic: mqtt-eu.com/XXXXXO6k5/dkMMx9ej

state=
{
  "solarInputPower": 173,
  "sn": "XXXXXXXX....."
}
# 1s avant
{
  "solarPower2": 69,
  "electricLevel": 9,
  "solarPower1": 71,
  "solarInputPower": 170,
  "sn": "XXXXXXXX.....",
  "outputPackPower": 140
}
1 « J'aime »

Merci :clap:

Voici le resultat:

Pour que cela fonctionne, il faut reformater le payload dans EMQX, comme cela :

il me reste a faire tout le reste.
Si vous avez des commentaire je suis preneur.
encore merci à @AlexHass & @ddfdom

1 « J'aime »

Bon alors comme vous le constaté cela fonctionne, j’ai juste des ‹ undefined › qui passe de temps en temps pour solarInputPower mais pour solarPower1 c’est pratiquement toujours en ‹ undefined ›, donc il faut que je filtre cela, je cherche !