Wöchentlicher Gasverbrauch über einen impulszählenden ESP32 am Landis+Gyr-Zähler, jeden Montag per E-Mail an die Buchhaltung
Von English mit KI übersetzt ·
Werksleiter, Lackiererei in der Automobilindustrie. Die Buchhaltung möchte jeden Montag um 7 Uhr einen wöchentlichen Gaswert für die Lackieröfen, und im Moment liest jemand den Zähler am Sonntagabend von Hand ab. Nicht optimal.Der Zähler ist ein Landis+Gyr-Membranzähler mit Reed-Impulsausgang, 1 Impuls = 0,01 m³. Einer unserer Instandhalter hat einen ESP32 daran angeschlossen, der die Impulse per Interrupt zählt und die laufende Summe einmal pro Minute veröffentlicht:
{"gas_m3": 18234.57}
Das läuft seit einem Monat in Hermetry und das Diagramm sieht korrekt aus. Ich bin davon ausgegangen, dass es irgendwo einen geplanten Bericht gibt, der die Wochensumme per E-Mail verschickt, aber ich habe alles durchgeklickt und keinen gefunden. Wie machen das andere? Ich möchte nicht, dass jeden Montag jemand einen CSV-Export erstellt, genau das will ich loswerden.
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.
Von English mit KI übersetzt ·
Das würde ich auch gerne wissen, dasselbe gilt für die Gaszähler unserer Gebäude.
I’d like to know too, same thing for our buildings‘ gas meters.
Von English mit KI übersetzt ·
Bleibt der Impulszählerstand bei einem Stromausfall erhalten? Wenn der ESP32 nach einem Ausfall bei null beginnt, sind Ihre Wochensummen falsch.
Is the pulse total kept over a power cut? If the ESP32 starts from zero after an outage your weekly totals go wrong.
Von English mit KI übersetzt ·
Der Wert wird im FRAM gespeichert und übersteht Stromausfälle. Er wird nur auf null zurückgesetzt, wenn wir neue Firmware aufspielen.
It’s stored in FRAM, survives power cuts. It only goes back to zero when we flash new firmware.
Von English mit KI übersetzt ·
Ich dachte, es gibt in den Dashboards eine Option „Bericht senden“?
I thought there was a „send report“ option on dashboards?
Von English mit KI übersetzt ·
Ich glaube nicht. Auf der Seite Daten exportieren steht, dass es keine integrierten zeitgesteuerten oder per E-Mail versendeten Berichte gibt. Cards bieten einen CSV- und Excel-Download, aber dafür muss jemand klicken.
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.
Von English mit KI übersetzt ·
Banerjee hat recht, einen versendeten Bericht gibt es nicht. Wir machen das für etwa 20 Energiezähler mit einem kleinen Skript auf unserem eigenen Server, aufgebaut auf der History-API. Es war ein halber Arbeitstag und läuft seit einem Jahr unverändert.Fordern Sie das Aggregat increase an. Für einen Zähler wie gas_m3 liefert es, wie stark er pro Intervall gestiegen ist, und bei einem Zählerneustart (etwa nach Ihrem Firmware-Flash) zählt es ab null weiter, statt ins Negative zu gehen.
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
Wir starten es per Cron montags um 07:00. Einige Erkenntnisse:
- Tagesintervalle sind UTC-Tage. Wenn die Buchhaltung lokale Tage möchte, fordern Sie 1h an und addieren Sie die Werte selbst.
- Geben Sie dem API-Schlüssel die Voreinstellung Read-only und eine IP-Allowlist mit nur diesem Server. Schlüssel laufen standardmäßig nach 90 Tagen ab, also setzen Sie eine Erinnerung oder eine längere Gültigkeit (maximal ein Jahr).
- Pro Schlüssel und Anfrage höchstens 50 Schlüssel und 10.000 Datenpunkte, was für einen wöchentlichen Stundenabruf mehr als genug ist.
Wenn Sie keinen Server betreiben möchten, kann ein Flow mit einem Schedule-Trigger und einem HTTP-Request-Block Ihren eigenen Reporting-Dienst aufrufen, der den Bericht erstellt und versendet. Wir haben uns für das Skript entschieden.Exporting data beschreibt beide Optionen.
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.
Von English mit KI übersetzt ·
Läuft seit letzter Woche auf dem Reporting-Rechner, der ohnehin unsere Schichtberichte erstellt. Am ersten Montag war der Wert etwas daneben, weil ich 1d-Intervalle verwendet hatte und wir gerade auf Sommerzeit umgestellt hatten. Ich habe auf 1h-Intervalle umgestellt, jetzt stimmt er mit der manuellen Ablesung auf 0,1 m³ überein. Die Buchhaltung ist zufrieden, und sonntagabends liest niemand mehr den Zähler ab.
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.
Von English mit KI übersetzt ·
Dasselbe Muster funktioniert auch für Wasserzähler. increase hat uns geholfen, als ein Zähler mitten im Monat getauscht wurde und der neue bei 0 begann.
Same pattern works for water meters. increase saved us when a meter was swapped mid-month and the new one started at 0.
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.
Mitdiskutieren
Melde dich an, um Fragen zu stellen und zu beantworten, hilfreiche Beiträge mit „Gefällt mir“ zu markieren und die Antwort zu kennzeichnen, die dein Problem gelöst hat. Jeder Beitrag bringt Punkte und Stufen.

