300 moniteurs de postes électriques : faut-il vraiment un topic MQTT distinct par appareil ?
Traduit de English par IA ·
Lecteur de longue date, premier message. Nous remplaçons une installation de broker maison par Hermetry pour environ 300 moniteurs de postes (basés sur ESP32, avec notre propre firmware). Dans l’ancienne installation, chaque unité publiait sur grid/<site_id>/<unit_id>/telemetry et nous gardions un gros fichier ACL pour que chaque unité ne puisse écrire que dans sa propre branche. Ce fichier ACL était une source constante de problèmes : chaque nouveau site impliquait une modification et un rechargement du broker.En lisant la documentation Hermetry, je vois partout v1/telemetry et rien sur les topics par appareil. Cela signifie soit que c’est plus simple que je ne le pense, soit qu’il me manque une page. Avant d’écrire le nouveau firmware : faut-il configurer 300 topics quelque part, ou chaque appareil publie-t-il simplement sur le même topic ? Et si tous utilisent le même topic, qu’est-ce qui empêche l’unité 17 d’écrire des données en tant qu’unité 18 ?Je souhaiterais aussi conserver l’identifiant de site quelque part, car nos rapports le regroupent.
Long-time reader, first post. We’re replacing a home-grown broker setup with Hermetry for about 300 substation monitors (ESP32-based, our own firmware). In the old setup every unit published to grid/<site_id>/<unit_id>/telemetry and we kept a big ACL file so each unit could only write its own branch. That ACL file was a constant source of grief, every new site meant a change and a broker reload.
Reading the Hermetry docs I see v1/telemetry everywhere and nothing about per-device topics, which either means it’s simpler than I think or I’m missing a page. Before we write the new firmware: do we need to configure 300 topics somewhere, or does each device just publish to the same topic? And if they all use the same topic, what stops unit 17 from writing data as unit 18?
Would also like to keep the site id somewhere since our reports group by it.
Traduit de English par IA ·
Je pense que vous pouvez définir des topics personnalisés dans le profil d’appareil pour cela ? J’ai vu une option « Custom topics » quelque part lorsque je configurais le mien.
I think you set custom topics in the device profile for that? I saw a « Custom topics » option somewhere when I was setting up mine.
Traduit de English par IA ·
Dans la suite de ce message, nous recevrons 40 thermostats le trimestre prochain et je me pose la même question.
Following this, we have 40 thermostats coming next quarter and I had the same question.
Traduit de English par IA ·
Pas besoin de topics par appareil. Les 300 publient tous sur le même v1/telemetry. Hermetry sait qui parle grâce aux identifiants avec lesquels l’appareil s’est connecté, donc le token fait office d’adresse. L’unité 17 ne peut pas écrire en tant que 18 car elle n’a pas les identifiants de 18, et un appareil ne peut s’abonner qu’à ses propres topics de downlink (v1/attributes/set, v1/rpc/req/+ et ainsi de suite), donc il ne voit jamais non plus les messages d’un autre appareil. Aucun fichier ACL à maintenir.Kevin n’a pas tort de dire que les topics Custom existent, mais ils sont destinés aux firmwares que l’on ne peut pas modifier : le profil considère alors tout topic en dehors de v1/ comme de la télémétrie de cet appareil. Les limites sont une profondeur de topic de 8, une longueur de 128 et 50 topics distincts par appareil, et avec « Prefix keys with the topic », grid/s12/temp devient une clé du type grid.s12.temp. Comme vous écrivez un nouveau firmware, ignorez tout cela.Pour l’identifiant du site, je en ferais plutôt un attribut de l’appareil qu’une partie du topic. Il ne change pas à chaque minute, donc il n’a pas sa place dans la télémétrie.Référence avec le tableau complet des topics : MQTT topics and payload reference. Un point pratique tiré de mon propre passage à cette architecture : donnez à chaque unité ses propres identifiants. Deux appareils partageant un même token ne cessent de se déconnecter mutuellement.
No per-device topics needed. All 300 publish to the same v1/telemetry. Hermetry knows who’s talking from the credential the device logged in with, so the token is effectively the address. Unit 17 can’t write as unit 18 because it doesn’t have 18’s credential, and a device can only subscribe to its own downlink topics (v1/attributes/set, v1/rpc/req/+ and so on), so it never sees another device’s messages either. No ACL file to keep.
Kevin’s not wrong that Custom topics exist, but they’re for firmware you can’t change: the profile then takes any topic outside v1/ as telemetry of that device. Limits there are topic depth 8, length 128 and 50 distinct topics per device, and with « Prefix keys with the topic » grid/s12/temp becomes a key like grid.s12.temp. Since you’re writing new firmware, skip all of that.
For the site id I’d make it an attribute of the device instead of part of the topic. It doesn’t change every minute so it doesn’t belong in telemetry.
Reference with the full topic table: MQTT topics and payload reference. One practical thing from when I moved my own stuff: give every unit its own credential. Two devices sharing one token keep kicking each other off.
Traduit de English par IA ·
C’est bien moins de travail que ce que j’avais budgété. L’unité prototype publie sur v1/telemetry avec son propre token, l’identifiant du site est désormais un attribut et notre script de rapport le lit à partir de là. Supprimer le fichier ACL est la meilleure chose qui soit arrivée à ce projet.
That’s a lot less work than I’d budgeted. Prototype unit is publishing to v1/telemetry with its own token, site id is now an attribute and our report script reads it from there. Killing the ACL file is the best thing to happen to this project.
Traduit de English par IA ·
ah ok, donc les topics personnalisés sont la solution de secours pour les firmwares anciens. Je les avais confondus, merci.
ah ok, so custom topics are the legacy-firmware escape hatch. I’d mixed those up, thanks.
- 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.

