Sur quel topic MQTT mon appareil doit-il publier ses données de télémétrie ?
Traduit de English par IA ·
J’ai un petit capteur ESP32 et je veux envoyer la température et l’humidité à Hermetry via MQTT. Quelle adresse de broker, quels identifiants et quel topic dois-je utiliser, et à quoi ressemble le payload JSON ?
I have a small ESP32 sensor and want to send temperature and humidity to Hermetry over MQTT. Which broker address, credentials and topic do I use, and what does the JSON payload look like?
Traduit de English par IA ·
Connexion
- Hôte : utilisez l’hôte du broker affiché sur la carte Détails de connexion de l’appareil. Vous pouvez aussi le lire via l’API REST :
GET /api/iot/devices/{deviceId}/connectionrenvoie l’hôte et le port MQTT, la base HTTPS et les topics. - Port : utilisez
8883(TLS).- Le port non chiffré
1883ne fonctionne que si le profil d’appareil active Plain MQTT. - Ce paramètre est désactivé par défaut, donc une connexion sur 1883 est refusée tant que quelqu’un ne l’active pas.
- Le port non chiffré
- Protocole : MQTT 3.1.1. Un CONNECT MQTT 5 est refusé avec CONNACK 1.
- Paramètres de session : envoyez clean session = true et utilisez le keepalive MQTT.
- TLS :
- TLS 1.2 minimum, 1.3 de préférence.
- SNI est requis, connectez-vous donc par nom d’hôte et non par adresse IP.
- Vérifiez le certificat du serveur avec votre bundle d’autorités de certification habituel et le nom d’hôte.
- Les petits appareils comme un ESP32 peuvent demander des enregistrements TLS de 4 Ko (
max_fragment_length).
Identifiants (jeton d’accès, connexion par défaut)
- Client ID : n’importe quel ID valide : 1 à 64 caractères parmi
A–Z a–z 0–9 . _ : - - Nom d’utilisateur : le jeton d’accès de l’appareil
- Mot de passe : vide
Un CONNECT sans nom d’utilisateur est refusé. Lorsqu’un appareil est créé via POST /api/iot/devices, le jeton d’accès n’est renvoyé qu’une seule fois : enregistrez-le à ce moment-là.
Topic
Publiez la télémétrie sur v1/telemetry. Tout autre topic sous v1/ qui n’est pas connu est rejeté. Trois topics rejetés en une minute ferment la session.
Charge utile (payload)
L’une de ces formes fonctionne :
- Un objet plat :
{"temperature": 21.5, "humidity": 40}
- Un objet avec un horodatage en millisecondes :
{"ts": 1759572000000, "values": {"temperature": 21.5, "humidity": 40}}
- Un tableau de l’une ou l’autre forme.
Si la connexion est refusée
- 4 (nom d’utilisateur ou mot de passe incorrect) : attendez au moins 5 minutes
- 5 (non autorisé) : attendez selon le calendrier long
La raison du code 5 n’est pas envoyée à l’appareil. Elle est écrite dans le journal de l’appareil.
Sources
Connection
- Host: use the broker host shown on the device's Connection details card. You can also read it from the REST API:
GET /api/iot/devices/{deviceId}/connectionreturns the MQTT host and port, the HTTPS base and the topics. - Port: use
8883(TLS).- Plain port
1883works only if the device profile turns on Plain MQTT. - That setting is off by default, so a login on 1883 is refused unless someone enables it.
- Plain port
- Protocol: MQTT 3.1.1. An MQTT 5 CONNECT is refused with CONNACK 1.
- Session settings: send clean session = true and use MQTT keepalive.
- TLS:
- TLS 1.2 minimum, 1.3 preferred.
- SNI is required, so connect by host name, not by IP address.
- Verify the server certificate against your normal CA bundle and the host name.
- Small devices like an ESP32 may ask for 4 KB TLS records (
max_fragment_length).
Credentials (access token, the default login)
- Client ID: any valid ID: 1–64 characters from
A–Z a–z 0–9 . _ : - - Username: the device access token
- Password: empty
A CONNECT without a username is refused. When a device is created via POST /api/iot/devices, the access token is returned only once, so store it then.
Topic
Publish telemetry to v1/telemetry. Anything else under v1/ that isn't a known topic is rejected. Three rejected topics in a minute close the session.
Payload
Any of these forms works:
- A flat object:
{"temperature": 21.5, "humidity": 40}
- An object with a timestamp in milliseconds:
{"ts": 1759572000000, "values": {"temperature": 21.5, "humidity": 40}}
- An array of either form.
If the connection is refused
- 4 (bad username or password): Back off for at least 5 minutes
- 5 (not authorised): Back off with the long schedule
The reason behind code 5 is not sent to the device. It is written to the device's Log.
Sources
Rédigé par l’IA à partir de la documentation et des sujets résolus. Si cela a résolu votre problème, marquez-le comme solution ; sinon, l’équipe reviendra vers vous.
- Vous devez être connecté pour répondre à ce sujet.
Rejoignez la discussion
Connectez-vous pour poser et répondre à des questions, aimer les messages utiles et marquer la réponse qui a résolu votre problème. Chaque contribution rapporte des points et des niveaux.

