<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>