dein descriptor ist sehr groß. dein Zähler gibt wirklich alle diese Werte aus ?
Das Problem ist dass diese Daten eventuell nicht mehr in den IRQ Speicher der seriellen Schnittstelle passen (256 bytes)
dort gibt es dann Überläufe und fehlende Daten.
ABER wenn dein Script nur den Descriptor >D >B und >M enthält gibt es jedenfalls keinen Unterschied zur "alten" Version ausser dass der descriptor aus dem Script geladen wird und nicht aus dem Flash. (es wird dann im Scripter selbst keine Rechenzeit verbraucht)
Um festzustellen ob es an der grossen Datenmenge liegen könnte kannst du mal was versuchen
hier die beiden Zeilen auskommentieren dann dürfte eigentlich keine Lücke mehr entstehen.
case FUNC_LOOP:
SML_Counter_Poll();
//break;
//case FUNC_EVERY_50_MSECOND:
if (dump2log) Dump2log();
else SML_Poll();
eventuell kannst du auch mal die Puffergröße für einen einzelnen Eintrag vergrößern
#define SML_BSIZ 48
sollte nämlich ein einzelner SML Wert dort nicht hineinpassen, gäbe es auch Lesefehler.
#define SML_BSIZ 64
sollte eigentlich immer reichen
aber dein Stromzähler läuft richtig ?
die Gas und Wasserzähler sind ein Problem wenn sie auf Pollmode stehen
denn die Pollzeit wird nicht wirklich eingehalten. Wenn der ESP z.B. ein MQTT verschickt und da etwas warten muss kann er die Pollzeit von z.B. 10ms nicht einhalten.
Als grundsätzliche Empfehlung für die Counter wäre hier besser den IRQ Mode mit vorgeschalteter Hardware Entprellung zu nehmen. da sollte eigentlich nicht schief gehen.
der original Tasmota Counter arbeitet nur mit dem IRQ Mode kann aber nur eine Flanke entprellen und damit bräuchte er auch eine Hardware Entprellung für fehlerfreien Betrieb.