[vz-users] Zu kleine Leistungswerte gehen verloren?
Julian Sikorski
belegdol at gmail.com
Fr Jul 31 16:28:32 CEST 2026
Am 28.07.26 um 23:55 schrieb Julian Sikorski:
> Hallo zusammen,
>
> Ich schreibe Daten aus einem S0 Gaszähler parallel in InfluxDB und in
> MariaDB über middleware:
>
> "protocol" : "s0",
> "enabled" : true,
> "gpio" : 1007,
> "configureGPIO" : true,
> "debounce_delay" : 30,
> "high_wait" : 250,
> "resolution": 100,
> "channels": [{
> "uuid" : "54cfcba0-41ed-11f0-aa48-3b6ada3bc5b9",
> "middleware" : "http://odroidxu4.local:8080",
> "identifier" : "Impulse"
> },{
> "uuid" : "7b999202-beeb-11f0-a847-d6428ceaa5ba",
> "api": "influxdb",
> "host": "http://odroidxu4.local:8086",
> "identifier" : "Power"
> }]
>
>
> ich habe folgendes Verhalten beobachtet: seit dem 1. Mai ist es schon
> zweimal passiert, dass keine Leistung in InfluxDB geschrieben wurde
> obwohl es ein Impuls in MariaDB gibt:
>
> Time influxdb mariadb
> 16.06.2026, 09:46:41 21,3 1
> 16.06.2026, 10:00:02 44,9 1
> 16.06.2026, 21:28:16 1
> 16.06.2026, 21:28:59 830 1
> 16.06.2026, 21:29:26 1340 1
> 24.07.2026, 16:29:31 863 1
> 24.07.2026, 16:30:14 837 1
> 28.07.2026, 06:19:29 1
> 28.07.2026, 06:21:16 336 1
> 28.07.2026, 06:23:30 270 1
>
> Bei dem 2. Mal ist mir die vzlogger Dienst abgeschmiert und wurde erst
> an dem 28. Juli neugestartet. Kann es sein, dass für die erste Messung
> seit dem start des Dienstes keine Leistung berechnet werden kann, da man
> mindestens zwei Werte braucht? In diesem Fall wäre Leistung für die
> Berechnung der Zählerstände ungeeignet da für jedes Neustart von dem
> Dienst ein Impuls verloren geht.
> Für InfluxDB nutze ich die Leistungswerte da ich nicht hinbekommen habe
> die Leistung Dashboard (volkszähler Nachbildend) mittels InfluxQL in
> Grafana zu berechnen.
>
> LG,
> Julian
>
>
In der Tat gibt es Leistungswerte erst ab dem 2. Impuls:
https://github.com/volkszaehler/vzlogger/blob/2a4d18e4569fe184abb00db4764d61a0ca22291d/src/protocols/MeterS0.cpp#L419-L425
Ich habe es in Grafana mittels Flux hinbekommen die Leistung zu berechnen:
from(bucket: "vzlogger")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) =>
r._measurement == "vzlogger" and
r._field == "value" and
r.uuid == "7b999202-beeb-11f0-a847-d6428ceaa5ba"
)
|> elapsed(unit: 1ns)
|> map(fn: (r) => ({
r with
_value: float(v: "3.6e+13") / float(v: r.elapsed)
}))
|> aggregateWindow(
every: v.windowPeriod,
fn: mean,
createEmpty: true
)
|> map(fn: (r) => ({ r with uuid: "Gas" }))
|> drop(columns: ["_field", "_measurement"])
Mit InfluxQL geht es leider nicht, da sich ELAPSED() mit GROUP BY nicht
vertragen:
https://docs.influxdata.com/influxdb/v1/query_language/functions/#elapsed
Man könnte es zwar ohne Aggregation lassen (es gibt nicht so viele
Datenpunkte), dann sehen aber die Zeiten wo kein Gas benutzt wird doof aus.
LG,
Julian
Mehr Informationen über die Mailingliste volkszaehler-users