-
Notifications
You must be signed in to change notification settings - Fork 94
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Datalogger telegram processing loopt precies 1 minuut achter? #1383
Comments
Bedankt voor je vraag. Er zijn meerdere dingen die een rol kunnen spelen. Ik zou beginnen bij de interne klok van je slimme meter. DSMR-reader gebruikt de datumtijd uit het telegram (dus volgens de slimme meter) als waarheid, maar dat is in de praktijk niet altijd de huidige tijd. Het verschilt soms van enkele seconden tot zelfs een minuut. Het makkelijkste om dit te checken is om de derde regel van het laatste telegram in
Op een terminal van je VM kun je dan dit ernaast leggen om te zien wat het verschil is:
Je ziet het overigens ook wel op het dashboard van DSMR-reader bij het laatste telegram bovenin: bijvoorbeeld Kan het zijn dat dat al een grote afwijking heeft? |
Inderdaad. Daar is de afwijking ook te zien, zowel in de timestamp van de laatste telegram als op het dashboard ( Latest update received a minute ago ) Als ik je goed begrijp, dan zou het enkel gaan om een afwijking in weergave van tijd van de meter. Maar als ik de waarden via MQTT verkregen uit DSMR probeer te vergelijken met die op de display van de slimme meter zelf. Dan lukt me dat niet echt.... |
Schiet me wat tebinnen. Ik draai wel nog een verouderd datalogger script van: https://github.com/trizz/dsmr-remote-datalogger |
Mooi, dat verklaart in ieder geval het visuele gedeelte qua tijdstip. De volgende stap is kijken waar de vertraging in MQTT zit. Het hangt er vooral vanaf welke databron je gebruikt. Ik neem aan dat je een van de 3 telegram bronnen gebruikt in MQTT-berichten die gequeued worden door DSMR-reader (in dit geval door de datalogger), worden in de eerstvolgende "run" van het backend-proces in DSMR-reader verstuurd. Op welke waarde staat de backend-sleep in |
Sinds vanavond is DSMR-reader v4.16 overigens beschikbaar, met wijzigingen voor MQTT. Dus wellicht wil je ook updaten naar die versie. MQTT wordt er niet sneller door, maar wel beter te debuggen. Update: Ik zie nu pas dat je eerder aangaf Docker te gebruiken. In dat geval is het even wachten op een nieuwe Docker build door Xirixiz denk ik. Maar goed, het is geen vereiste voor nu, meer om eventueel later het debuggen te versimpelen. |
Thanks voor je uitgebreide hulp! De backend-sleep staat op dit moment op 1.0, ik had deze setting ook al gevonden en al eens mee "gespeeld" door 'm op 0.2 en op 0.0 te zetten en kort getest, maar ik zag er geen verandering in gedrag door. Misschien moet ik langer wachten voor het effect zichtbaar is? |
Nog in reactie hier op: Ik denk overigens dat het niet veel uit maakt. Zolang je telegrammen binnenkrijgt via dat oude script zou ik er zelf vooral niet aan zitten. |
Ik zou beginnen met debuggen van MQTT en als je daar niets in kan vinden, dan de logs van de datalogger en MQTT naast elkaar leggen om te zien hoelang de "vertraging" is. Uiteraard los van het tijdstip in het telegram zelf, want daar heb ik nog wel een oplossing voor, maar je moet eerst kijken of het pad van meting uitlezen tot MQTT vlot genoeg is. Voor nu kun je het beste debug-logging inschakelen in DSMR-reader: https://dsmr-reader.readthedocs.io/en/latest/how-to/troubleshooting/enabling-debug-logging.html |
Daarna zul je opzoek moeten naar de log van het backend proces. Ik weet niet precies waar die in docker staat, maar wellicht is dit een hint: xirixiz/dsmr-reader-docker#171 (comment) Als je daar een |
In de logs zelf ben je dan op zoek naar statements die beginnen met Dit is in de laatste release uitgebreid, zodat je exact kan zien welk bericht in de queue gaat en wanneer die verzonden wordt. Vandaar dat een upgrade naar v4.16 aan te raden is, wanneer beschikbaar en mogelijk. |
Blijkbaar was het docker-image snel klaar. Ik draai nu al v4.16 :-D Ik heb debuglogging aangezet en dit is een voorbeeld van wat ik voorbij zie komen in de backend log:
Ik zie er niet direct iets mis gaan. backend-sleep stond hier overigens nog op 1 seconde. |
Oke mooi dat je dat werkend heb. Nu ben je op zoek naar een manier om zowel deze log in de gaten te houden als de log van de datalogger. Dan kun je zien hoelang het duurt voordat je het bericht dat je in de datalogger ziet verschijnen vervolgens in de MQTT log ziet. Want dan kun je de conclusie trekken of er nog een (te grote) vertraging in DSMR-reader zit of niet. Het makkelijkste is om 1 veld in de gaten te houden wat constant verandert en uniek is, dus de datumtijd (los van of die inhoudelijk klopt). MQTTVoor de MQTT log zou je zoiets kunnen doen:
Je ziet dan als het goed is alleen deze regels:
DataloggerVoor de log van de remote datalogger weet ik niet precies hoe dat er uit ziet, maar ik lees wel dit: https://github.com/trizz/dsmr-remote-datalogger#usage
Als daar de ruwe telegrammen in komen die die leest, kun je die ook tailen en dan greppen op het datumtijd veld:
Als het goed is kun je nu beide logfiles volgens en kun je goed zien wanneer je een datumtijd in de datalogger-logfile ziet en hoelang het (ongeveer) duurt voordat je die in de andere log van uitgaande MQTT-berichten ziet. Ik zou verwachten dat daar hooguit enkele seconden tussen zit. |
Je zou trouwens in DSMR-reader ook deze tijdelijk aan kunnen zetten, zonder hem daadwerkelijk uit te lezen uit je MQTT broker: Dat is het ruwe telegram en dan is het wellicht nog extra gemakkelijk om beide logs naast elkaar te leggen en te zien wanneer een telegram gelezen wordt en wanneer die verstuurd wordt via MQTT. |
Ik zie trouwens onderaan je log:
Ik zie niet zo 1-2-3 een oorzaak, maar had je daar zelf iets herstart? En zo nee, zie je die foutmelding vaker? |
De remote datalogger geeft dit als ik de telegram dump door de code even aan te passen: `[2021-05-10 21:22:41,436 - ERROR] Sent telegram: /Ene5\XS210 ESMR 5.0 1-3:0.2.8(50) Dat doet me dan toch vermoeden dat de timestamp van de telegrams uit de P1 al afwijken? De waarde in Okay, ik heb even de log naast de meter gehouden, maar omdat het verbruik steeds een klein beetje schommelde was het lastig om te zien wat de vertraging is tussen de Meter's LCD waarde en de DSMR Datalogger Telegram... |
Ik denk dat je het inhoudelijke tijdstip als laatste moet tacklen. Voor nu ben je eerst op zoek naar hoelang het duurt van het verbruik (~4 seconden dus) tot het telegram uitlezen in de datalogger totdat het telegram verstuurd wordt via MQTT. Want als dat alsnog te lang duurt, kun je overriden wat je wilt, je krijgt dan nog steeds geen real-time data. En daar was je naar op zoek toch? Of dat uberhaupt via de slimme meter/dsmrreader snel genoeg kan?
|
Overigens synchroniseert de klok in de slimme meter wel af en toe, maar dat is dus het minste probleem en kun je idd in dsmrreader (of je script dat MQTT uitleest) overschrijven.
|
Nou, dat issue van die 4 seconden is dus al zichtbaar tussen de LCD op de Meter zelf, en de debug-output van de datalogger script op de pi die met de meter verbonden is... Ik weet niet wat ik daar nog aan kan doen... Edit: True, ik zou graag real-time data hebben, maar is dat mogelijk? |
Ik heb hier nog even naar gekeken, en zag deze melding ook wel in de logs van de vorige versie, maar nu komt ie elke 2 sec voor. Daarvoor alleen bij herstart van de MQTT server.. De melding is trouwens in v4.16 iets anders: Ik zie dat ook terug in mijn Mosquitto logs, continue een nieuwe login. Is dat niet wat zonde van de overhead om telkens een nieuwe verbinding op te zetten en weer af te tuigen, elke seconde? |
Ik ben nog steeds benieuwd naar de totale tijd tussen de datalogger en MQTT, dus los van het display. Had je die ook al kunnen meten? Want als daar ook nog (veel) vertraging in zit dan valt daar wellicht nog wat te winnen. |
Dit is ook niet hoe het hoort te werken. Ik zie nu dat dat een bijeffect is van de rework. Ik zal het fixen en een patch release maken. Workaround voor nu is om Quality of Service 2 te gebruiken. |
Oke dat is mooi om te horen! Dat betekent dat het erop lijkt dat je uiteindelijk slechts met een vertraging van 4, 5, 6 seconden moet werken tov het display. Niet helemaal realtime, maar ook zeker werkbaar toch? De minuut vertraging die je ervaart bestaat dan vooral uit het verschil in interne klok van de meter tov systeemtijd. Het is dan aan jezelf om te kijken of je het tijdstip wilt laten overschrijven door DMSR-reader of dat dat uberhaupt niet nodig is. Dat laatste hangt denk ik af van hoe je exact de verwerking doet van de gegevens tussen je inverter en uit DSMR-reader. |
En QoS level 2 is trouwens ook vrij zwaar, omdat er vier netwerkberichten heen en weer gaan voordat 1 MQTT-bericht gepubliceerd is. Na de fix release kun je weer QoS 0 gebruiken, hoewel ik denk dat dat (op een stabiel netwerk) hooguit eerder milliseconden scheelt dan bijvoorbeeld een seconde oid. Maar dat kun je dan later proberen. |
Ja, ik denk wel dat het werkbaar, is, maar om de berekeningen zo goed mogelijk kloppend te maken. Zou ik natuurlijk een meting van mijn inverter en de slimme meter van hetzelfde tijdstip moeten hebben om dit te kunnen verrekenen. Ik gebruik uiteindelijk Home Assistant om alles samen te laten komen, en daar maak ik ook die verrekening van (solar.opgewekteEnergie - dsmr.teruggeleverdeEnergie). |
Ik zit niet heel diep in deze materie qua teruglevering/verbruik in de praktijk (ik heb zelf geen teruglevering), maar je zou ook nog naar PVOutput kunnen kijken. Verder is het interessant om te weten dat bij onze zuiderburen vanaf volgend jaar iets per kwartier gemeten/gerekend wordt. Ik zit niet helemaal (meer) in de stof en kijk er in het najaar weer naar, maar hier staat het in #1084. |
En nee, dit is bewust buiten DSMR-reader gehouden om te voorkomen dat het zo groot en ononderhoudbaar wordt, dat het project uiteindelijk verzandt in iets wat "oppervlakkig veel dingen doet". Plus dat ik daar dus meer een rol zie in PVOutput, een platform helemaal gericht op teruglevering en alles. |
Groot gelijk heb je. |
De fix voor het onbedoeld herstarten in QoS 0 zit nu als het goed is in release v4.16.1 |
Ik heb zojuist geupgrade naar v4.16.1. Uit nieuwsgierigheid ben ik nog even de logfiles gaan controleren. Inderdaad op QoS 0 wordt deze melding niet meer gelogd. Wel zie ik in dezelfde log (dsmr_backend.log) veel meldingen verschijnen: In dsmr_datalogger.log wordt overigens ook continue gelogt: Ik stel de vraag even omdat ik me afvraag of dit verwacht gedrag is? Ik kan me voorstellen dat deze logging niet veel meerwaarde heeft en dus een negatieve impact kan hebben op performance en disk usage? |
Bedankt voor je melding. Dat is een debug-statement die ik gebruikt heb voor het schrijven van de tests gisteravond en die is per ongeluk meegekomen. Ik zal er een fix-release voor maken. |
Hoi!
Ik gebruik naar volle tevredenheid DSMR al een paar jaar. Fantastisch programma!
Nu heb ik een vraag mbt het processen van de Telegram berichten. Ik gebruik een DSMR docker image in een VM. Daarnaast een remote datalogger op een RBPi3B+ die via een P1 kabel aan mijn slimme meter hangt.
Alles lijkt naar behoren te werken, echter merk ik dat het processen van de Telegrams ongeveer precies één minuut vertraagt zijn. De timestamp die ik zie in de mqtt berichten lijken dit te bevestigen.
De reden waarom ik op zoek ben naar (near) realtime data, is omdat ik probeer om een duidelijk beeld te krijgen van het actuele stroomverbruik van mijn woning op het moment dat de zonnepanelen stroom terugleveren. Hiervoor moet ik de data uit de inverter (opgewerkte stroom) minus de DSMR data voor teruggeleverde stroom per gelijk tijdsinterval verrekenen.
Als de data uit DSMR echter 1 minuut oud is, en die van de inverter niet, dan krijg ik scheve uitkomsten...
Is er een manier om ervoor te zorgen dat DSMR de Telegrams direct verwerkt en doorzet naar MQTT zonder vertraging?
Groeten,
-Bart
The text was updated successfully, but these errors were encountered: