Consommation hebdomadaire de gaz mesurée par un ESP32 à comptage d'impulsions sur notre compteur Landis+Gyr, envoyée chaque lundi par e-mail à la finance
Traduit de English par IA ·
Responsable de site, atelier de peinture automobile. La finance veut un chiffre hebdomadaire de gaz pour les fours de peinture chaque lundi à 7 h, et actuellement quelqu’un relève le compteur à la main le dimanche soir. Pas idéal.Le compteur est un compteur à membrane Landis+Gyr avec sortie impulsionnelle à contact Reed, 1 impulsion = 0,01 m³. Un de nos techniciens de maintenance a installé un ESP32 dessus, qui compte les impulsions par interruption et publie le total cumulé une fois par minute :
{"gas_m3": 18234.57}
Cela fonctionne dans Hermetry depuis un mois et le graphique semble correct. Je pensais qu’il existait un rapport planifié quelque part qui envoie le total hebdomadaire par e-mail, mais j’ai tout parcouru sans en trouver. Que font les autres dans ce cas ? Je préfère ne pas devoir exporter un CSV chaque lundi, c’est justement ce que je veux supprimer.
Plant manager, automotive paint shop. Finance wants a weekly gas figure for the paint ovens every Monday at 7, and right now someone reads the meter by hand on Sunday night. Not great.
The meter is a Landis+Gyr diaphragm meter with a reed pulse output, 1 pulse = 0.01 m³. One of our maintenance guys put an ESP32 on it that counts pulses on an interrupt and publishes the running total once a minute:
{"gas_m3": 18234.57}
That’s been in Hermetry for a month and the chart looks right. I assumed there’d be a scheduled report somewhere that mails a weekly total, but I’ve clicked through everything and can’t find one. What do people do for this? I’d rather not have a person export a CSV every Monday, that’s the thing I’m trying to get rid of.
Traduit de English par IA ·
Moi aussi, j’aimerais le savoir, c’est la même chose pour les compteurs de gaz de nos bâtiments.
I’d like to know too, same thing for our buildings’ gas meters.
Traduit de English par IA ·
Le total des impulsions est-il conservé lors d’une coupure de courant ? Si l’ESP32 repart de zéro après une panne, vos totaux hebdomadaires seront faux.
Is the pulse total kept over a power cut? If the ESP32 starts from zero after an outage your weekly totals go wrong.
Traduit de English par IA ·
La valeur est stockée dans une FRAM et survit aux coupures de courant. Elle ne revient à zéro que lorsque nous flashons un nouveau firmware.
It’s stored in FRAM, survives power cuts. It only goes back to zero when we flash new firmware.
Traduit de English par IA ·
Je pensais qu’il existait une option « Envoyer le rapport » sur les tableaux de bord ?
I thought there was a « send report » option on dashboards?
Traduit de English par IA ·
Je ne pense pas. La page Exporter les données indique qu’il n’existe pas de rapports intégrés planifiés ou envoyés par e-mail. Les cartes proposent un téléchargement CSV et Excel, mais il faut que quelqu’un clique.
I don’t think so. The Exporting data page says there are no built-in scheduled or e-mailed reports. Cards have a CSV and Excel download, but that’s someone clicking.
Traduit de English par IA ·
Banerjee a raison, il n’existe pas de rapport envoyé par e-mail. Nous faisons cela pour une vingtaine de compteurs d’énergie avec un petit script sur notre propre serveur, basé sur l’API d’historique. Cela représente une demi-journée de travail et il tourne sans modification depuis un an.Demandez l’agrégat increase. Pour un compteur comme gas_m3, il donne la hausse par intervalle, et il gère un redémarrage du compteur (par exemple après votre flash de firmware) en recomptant à partir de zéro au lieu de passer en négatif.
import requests, time, smtplib
from email.message import EmailMessage
BASE = "https://<host>/tenant/<tenantId>"
KEY = "sk_live_..." # Read-only telemetry key, IP allowlist = this server
now = int(time.time() * 1000)
week_ago = now - 7 * 24 * 3600 * 1000
r = requests.get(BASE + "/api/telemetry/series", headers={"Authorization": "Bearer " + KEY},
params={"kind": "iot_device", "entityId": "<meter device id>", "keys": "gas_m3",
"from": week_ago, "to": now, "bucket": "1h", "agg": "increase"}, timeout=30)
r.raise_for_status()
# sum the hourly increases and mail the total to finance
Nous le lançons avec cron à 07:00 le lundi. Quelques enseignements :
- Les intervalles journaliers sont des jours UTC. Si la finance veut des jours locaux, demandez des intervalles de 1h et additionnez-les vous-même.
- Donnez à la clé API le préréglage Read-only et une liste d’adresses IP autorisées ne contenant que ce serveur. Les clés expirent par défaut après 90 jours : programmez un rappel ou choisissez une durée plus longue (un an maximum).
- Au maximum 50 clés et 10 000 points par clé et par requête, ce qui est largement suffisant pour une lecture horaire hebdomadaire.
Si vous préférez ne pas faire tourner de serveur, un flux avec un déclencheur Schedule et un bloc de requête HTTP peut appeler votre propre service de reporting pour créer et envoyer le rapport. Nous avons opté pour le script.Exporting data présente ces deux options.
Banerjee’s right, there’s no mailed report. We do this for about 20 energy meters with a small script on our own server, built on the history API. It’s half a day of work and has run untouched for a year.
Ask for the increase aggregate. For a counter like gas_m3 it gives you how much it rose per bucket, and it handles a counter restart (your firmware flash) by counting from zero instead of going negative.
import requests, time, smtplib
from email.message import EmailMessage
BASE = "https://<host>/tenant/<tenantId>"
KEY = "sk_live_..." # Read-only telemetry key, IP allowlist = this server
now = int(time.time() * 1000)
week_ago = now - 7 * 24 * 3600 * 1000
r = requests.get(BASE + "/api/telemetry/series", headers={"Authorization": "Bearer " + KEY},
params={"kind": "iot_device", "entityId": "<meter device id>", "keys": "gas_m3",
"from": week_ago, "to": now, "bucket": "1h", "agg": "increase"}, timeout=30)
r.raise_for_status()
# sum the hourly increases and mail the total to finance
Run it from cron at 07:00 on Mondays. A few things we learned:
- Day buckets are UTC days. If finance wants local days, ask for 1h and add them up yourself.
- Give the API key the Read-only preset and an IP allowlist with just that server. Keys expire after 90 days by default, so set a reminder or a longer expiry (max a year).
- At most 50 keys and 10,000 points per key per request, which is nothing for a weekly hourly read.
If you’d rather not run a server, a flow with a Schedule trigger and an HTTP request block can poke your own reporting service to build and send it. We went with the script.
Exporting data lists both options.
Traduit de English par IA ·
En service depuis la semaine dernière sur le boîtier de reporting qui gère déjà nos rapports de poste. Le premier lundi, la valeur était un peu décalée car j’utilisais des tranches de 1d et nous venions de passer à l’heure d’été. Je suis passé à des tranches de 1h et elle correspond à la lecture manuelle à 0,1 m³ près. Le service financier est satisfait, et personne ne relève plus le compteur le dimanche soir.
Running since last week on the reporting box that already does our shift reports. First Monday the figure was off a little because I used 1d buckets and we’d just moved to summer time, switched to 1h buckets and it matches the manual reading to 0.1 m³. Finance is happy, and nobody reads the meter on Sunday night anymore.
Traduit de English par IA ·
Le même schéma fonctionne pour les compteurs d’eau. increase nous a sauvés lorsqu’un compteur a été remplacé en milieu de mois et que le nouveau a démarré à 0.
Same pattern works for water meters. increase saved us when a meter was swapped mid-month and the new one started at 0.
- 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.

