<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
Hallo Christian,<br>
<br>
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, <b>ohne das
Standard-VZ-Konzept zu verbiegen</b>: M.E. musst Du außerhalb des
VZ Zählerstände selbst bilden.<br>
<br>
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<br>
<a class="moz-txt-link-freetext" href="http://server/middleware.php/data/5f___c5.json?from=01-01-2010&to=now&tuples=1">http://server/middleware.php/data/5f___c5.json?from=01-01-2010&to=now&tuples=1</a>
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
<a class="moz-txt-link-freetext" href="https://wiki.volkszaehler.org/hardware/channels/meters/water/wasserzaehler_ohne_s0">https://wiki.volkszaehler.org/hardware/channels/meters/water/wasserzaehler_ohne_s0</a>
-- 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?<br>
<br>
Aber zurück zu meiner Idee für Deinen Ansatz:<br>
<br>
<b>Du musst Zählerstände selbst bilden, außerhalb des Volkszählers.
</b>Dir helfen dazu weder die Middleware noch der vzlogger --
zumindest wüsste ich nicht, wie: Denn ich weiß nicht, wie man den
letzten <b>Zählerstand</b> 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 <br>
<br>
<code class="sql"><span class="cm-keyword"><a target="mysql_doc"
class="cm-sql-doc"
href="http://ras3/phpmyadmin/url.php?url=https://dev.mysql.com/doc/refman/5.5/en/select.html">SELECT</a></span>
* <span class="cm-keyword">FROM</span> <span
class="cm-variable-2">`data`</span> <span class="cm-keyword">where</span>
channel_id=<span class="cm-number">1</span> <span
class="cm-keyword">ORDER</span> <span class="cm-keyword">by</span>
<span class="cm-builtin"><a target="mysql_doc" class="cm-sql-doc"
href="http://ras3/phpmyadmin/url.php?url=https://dev.mysql.com/doc/refman/5.5/en/date-and-time-types.html">timestamp</a></span>
<span class="cm-keyword">desc</span> <span class="cm-keyword">limit</span>
<span class="cm-number">1;<br>
</span></code><br>
Der geht auf der DB in Millisekunden -- dem Index sei Dank. <br>
<br>
Also wenn Dich das nicht schreckt (oder Du eine bessere Lösung hast
-- lass es uns wissen!), könnte es so gehen:<br>
<br>
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).<br>
<br>
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.<br>
<br>
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.<br>
<br>
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.<br>
<br>
Lass uns wissen, ob's funktioniert -- so oder anders!<br>
<br>
Gruß, Rupert<br>
<code class="sql"></code>
</body>
</html>