Hallo Christian,

Dein hartnäckiges Insistieren, ohne Impulse auszukommen, und Deine Zusatzinfos aus der 2. Nachricht haben mich noch mal überlegen lassen, wie es vielleicht doch gehen könnte, ohne das Standard-VZ-Konzept zu verbiegen: M.E. musst Du außerhalb des VZ Zählerstände selbst bilden.

Nach wie vor bin ich zwar der Überzeugung, Impulse wären richtig, und die Performance sollte akzeptabel sein -- mit den Hinweisen von Frank. Der Request
http://server/middleware.php/data/5f___c5.json?from=01-01-2010&to=now&tuples=1 antwortet mir in 1,5 sec bei 9 Mio Datensätzen des Stromzählers -- mit Aggregation. Er liefert den Gesamtverbrauch und eine Durchschnittsleistung sowie die Anzahl der Zeilen. Gut, vielleicht rechnet die Middleware in Wahrheit nur die Differenz aus Anfangs- und Endzählerstand und ist deshalb so schnell. Aber dasselbe bei einer S0-Wasseruhr (siehe https://wiki.volkszaehler.org/hardware/channels/meters/water/wasserzaehler_ohne_s0 -- etwas Werbung in eigener Sache ;-) erledigt die MW in 6,6 sec bei 227.000 Datensätzen. Ich habe einen Pi3 mit einer SSD, keiner SD-Karte. Wie oft willst Du die aktuellsten Daten abfragen, dass die Performance so entscheidend ist?

Aber zurück zu meiner Idee für Deinen Ansatz:

Du musst Zählerstände selbst bilden, außerhalb des Volkszählers. Dir helfen dazu weder die Middleware noch der vzlogger -- zumindest wüsste ich nicht, wie: Denn ich weiß nicht, wie man den letzten Zählerstand aus der MW rausbekommt. Ich habe zwar einen eHZ, der im Sekundentakt seinen Zählerstand in die Datenbank pumpt (daher die 9 Mio Datensätze ;-), der Request middleware.php/data/uuid.json?from=now liefert den aber nicht, nur die aktuelle Momentanleistung. Ein passender SQL-Befehl wäre

SELECT * FROM `data` where channel_id=1 ORDER by timestamp desc limit 1;

Der geht auf der DB in Millisekunden -- dem Index sei Dank.

Also wenn Dich das nicht schreckt (oder Du eine bessere Lösung hast -- lass es uns wissen!), könnte es so gehen:

1. Bei jedem Aufwachen sendet der ESP ein "Hallo Welt" an Deinen Server, der fragt dann aus der DB den letzten Stand des Einschaltzählers ab, den Du vom Typ AccumulatorInterpreter angelegt hast (siehe Franks Antworten), und addiert eins drauf. Diesen neuen Zählerstand schickst Du an die MW (oder schreibst ihn direkt in die DB).

2. Der aufgeweckte ESP sendet jede Sekunde (oder wie genau Du es halt willst) ein "Piep" an den Server, der fragt dann aus der DB den letzten Stand des Betriebsstundenzählers ab, den Du ebenfalls mit Typ AccumulatorInterpreter angelegt hast, und addiert eins (oder was immer die Zeit zwischen zwei Pieps ist) drauf. Diesen neuen Zählerstand schickst Du an die MW. Schläft der ESP ein, bleibt der Zähler mangels "Piep" stehen.

Wenn Du's ganz genau brauchst oder das Boot-up des ESP signifikant ist, kannst Du zusätzlich bei 1. den Betriebsstundenzähler um die gemessene Verzögerung bis zum ersten "Piep" hochzählen.

Dies, wie gesagt, meine Idee -- weder ganz noch in Teilen getestet, ein reiner Trockenschwimmkurs. Mit dem Einspeichern der Zählerstände und dem richtigen Kanal-Typ dazu müsste auch das Frontend sinnvolles anzeigen.

Lass uns wissen, ob's funktioniert -- so oder anders!

Gruß, Rupert

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Antwort per Email an