greenMikeEU / SmartMeterEVNSagemcom-T210-D

Dieses Projekt ermöglicht es den Smartmeter der EVN (Netz Niederösterreich) über die Kundenschnittstelle auszulesen.
GNU General Public License v3.0
68 stars 22 forks source link

Script bricht nach einiger Zeit ab und syncronisiert sich danach nicht mehr #27

Open Zorton16 opened 1 year ago

Zorton16 commented 1 year ago

Das Skript synchronisiert sich nach ein paar Tagen (2-3) nicht mehr und liefert nur mehr falsche Startbytes. Auch nach dem Restart des Skriptes funktioniert es nicht immer gleich auf anhieb. Hat hier jemand eine Idee was man dagegen machen könnte?

georg-x commented 1 year ago

Bei mir hilft regelmäßiges Neustarten, erledigt direkt der SystemD: https://github.com/georg-x/SmartMeterEVNSagemcom-T210-D/blob/main/smartmeter.service

mrantonSG commented 1 year ago

Ich verwende josi1024's script das via sdnotify das Programm neu startet sobald es keine Daten mehr liefert - läuft super https://github.com/josy1024/SmartMeterEVNSagemcom-T210-D

TweetsOfNiklas commented 1 year ago

Habe seit einigen Tagen ein ähnliches Problem. Bei händischem Starten des Skripts bekomme ich immer die Fehlermeldung:

sudo python3 AusleseSkript.py
Traceback (most recent call last):
  File "/home/admin/SmartMeterEVNSagemcom-T210-D-V2/AusleseSkript.py", line 117, in <module>
    daten = ser.read(size=282).hex()
  File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 577, in read
    raise SerialException(
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected or multiple access on port?)

Muss dann immer manuell den ganzen Raspberrypi mit "sudo reboot" neustarten.

mrantonSG commented 1 year ago

Habe seit einigen Tagen ein ähnliches Problem. Bei händischem Starten des Skripts bekomme ich immer die Fehlermeldung:

sudo python3 AusleseSkript.py
Traceback (most recent call last):
  File "/home/admin/SmartMeterEVNSagemcom-T210-D-V2/AusleseSkript.py", line 117, in <module>
    daten = ser.read(size=282).hex()
  File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 577, in read
    raise SerialException(
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected or multiple access on port?)

Muss dann immer manuell den ganzen Raspberrypi mit "sudo reboot" neustarten.

Wenn du deinen Raspi neu startest, musst du dann das Auslese script manuell starten, oder wird es automatisch gestartet?

TweetsOfNiklas commented 1 year ago

Habe seit einigen Tagen ein ähnliches Problem. Bei händischem Starten des Skripts bekomme ich immer die Fehlermeldung:

sudo python3 AusleseSkript.py
Traceback (most recent call last):
  File "/home/admin/SmartMeterEVNSagemcom-T210-D-V2/AusleseSkript.py", line 117, in <module>
    daten = ser.read(size=282).hex()
  File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 577, in read
    raise SerialException(
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected or multiple access on port?)

Muss dann immer manuell den ganzen Raspberrypi mit "sudo reboot" neustarten.

Wenn du deinen Raspi neu startest, musst du dann das Auslese script manuell starten, oder wird es automatisch gestartet?

Es wird automatisch gestartet. Ich hab auch gecheckt ob vor dem Neustart der Service läuft und das tut er auch korrekt.

mrantonSG commented 1 year ago

Habe seit einigen Tagen ein ähnliches Problem. Bei händischem Starten des Skripts bekomme ich immer die Fehlermeldung:

sudo python3 AusleseSkript.py
Traceback (most recent call last):
  File "/home/admin/SmartMeterEVNSagemcom-T210-D-V2/AusleseSkript.py", line 117, in <module>
    daten = ser.read(size=282).hex()
  File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 577, in read
    raise SerialException(
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected or multiple access on port?)

Muss dann immer manuell den ganzen Raspberrypi mit "sudo reboot" neustarten.

Wenn du deinen Raspi neu startest, musst du dann das Auslese script manuell starten, oder wird es automatisch gestartet?

Es wird automatisch gestartet. Ich hab auch gecheckt ob vor dem Neustart der Service läuft und das tut er auch korrekt.

Ok, dann vermute ich mal dass du das Programm manuell startest weil keine Daten mehr gesendet werden. Ich gehe davon aus (weils bei mir so war) dass das Skript allerdings noch läuft und daher den Fehler der belegten seriellen Schnittstelle bringt. Hat bei mir so ausgesehen:

image

Das ist auch der Grund warum ich jetzt Josefs Lösung verwende: wenn keine Daten mehr kommen, wird das Skript neu gestartet (nicht der raspi)

https://github.com/josy1024/SmartMeterEVNSagemcom-T210-D

funktioniert bei mir super:

image

hoff das hilf dir

LG, Anton

TweetsOfNiklas commented 1 year ago

Habe seit einigen Tagen ein ähnliches Problem. Bei händischem Starten des Skripts bekomme ich immer die Fehlermeldung:

sudo python3 AusleseSkript.py
Traceback (most recent call last):
  File "/home/admin/SmartMeterEVNSagemcom-T210-D-V2/AusleseSkript.py", line 117, in <module>
    daten = ser.read(size=282).hex()
  File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 577, in read
    raise SerialException(
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected or multiple access on port?)

Muss dann immer manuell den ganzen Raspberrypi mit "sudo reboot" neustarten.

Wenn du deinen Raspi neu startest, musst du dann das Auslese script manuell starten, oder wird es automatisch gestartet?

Es wird automatisch gestartet. Ich hab auch gecheckt ob vor dem Neustart der Service läuft und das tut er auch korrekt.

Ok, dann vermute ich mal dass du das Programm manuell startest weil keine Daten mehr gesendet werden. Ich gehe davon aus (weils bei mir so war) dass das Skript allerdings noch läuft und daher den Fehler der belegten seriellen Schnittstelle bringt. Hat bei mir so ausgesehen:

image

Das ist auch der Grund warum ich jetzt Josefs Lösung verwende: wenn keine Daten mehr kommen, wird das Skript neu gestartet (nicht der raspi)

https://github.com/josy1024/SmartMeterEVNSagemcom-T210-D

funktioniert bei mir super:

image

hoff das hilf dir

LG, Anton

Ich denke das funktioniert bei mir auch nicht korrekt. Ich hatte zum Beispiel jetzt über 24h keine Werte. Dann habe ich versucht das Skript manuell zu starten, es gab eine Fehlermeldung, aber jetzt läuft der Service anscheinend wieder und liefert auch wieder Daten. Perfekt wäre es, wenn das Ganze von alleine funktionieren würde.

fischercer commented 3 months ago

Bei mir hört das Skript auf Daten zu senden. Ich hab bei mir alles in einem docker container laufen und dort mit pystack mir den stackoutput geholt.

root@c5e291a0d65b:/usr/src/app# pystack remote 1 Traceback for thread 1 (python) [] (most recent call last): (Python) File "/usr/src/app/AusleseSkript.py", line 139, in <module> daten = ser.read(size=282).hex() (Python) File "/opt/venv/lib/python3.11/site-packages/serial/serialposix.py", line 565, in read ready, _, _ = select.select([self.fd, self.pipe_abort_read_r], [], [], timeout.time_left())

Es schaut so aus als würde das Skript auf Daten von der seriellen Schnittstelle warten aber keine bekommen. Nach einem Neustart des containers funktioniert es wieder. Das würde zu den Fehlerfällen weiter oben passen.

Von allem was ich bisher gelesen habe deutet das auf eine instabile serielle Schnittstelle hin. Ein wrapper um das ser.read könnte die serielle Verbindung neu aufbauen und das problem wäre gelöst. Wobei ich bin mir hier noch nicht sicher ob hier eine try/catch oder ein timer notwendig ist.