Hallo,
das Thema scheint schon hier und hier behandelt worden zu sein, ich weiß aber nicht so recht, wie ein guter Lösungsansatz aussehen würde.
Betroffen ist das Trovis-Plugin. Alle paar Tage (sehr unregelmäßig) kommt es offensichtlich zu vereinzelten Lesefehlern aus der Schnittstelle /dev/trovis. Diese ist per Service (socat) auf IP+Port eines RS232-LAN-Adapters im Netzwerk gemapped. Die Device wird im Minutentakt wie eine serielle Schnittstelle per pymodbus ausgelesen, dann kommt irgendwann Tage später:
Das geht dann für 2-3 Tage sporadisch so weiter (stunden-/tagelang ist alles ok, dann wieder mal ein oder einige wenige Lesefehler, dann wieder alles ok). Irgendwann kommt dann:
Danach ist dann wieder für 10/12/14 Tage Ruhe, selbst wenn kein Neustart durchgeführt wird.
Als Lösung könnte man natürlich das Plugin so umschreiben, dass die Verbindung zur Schnittstelle jedesmal neu aufgebaut wird, oder über try/except ausgelesen wird. Ich bin mir aber nichtmal sicher, ob dort tatsächlich das Problem liegt, denn im Grunde müsste man die gesamte Strecke shNG --> Plugin mit Abfrage-Routinen ---> /dev/trovis-Dienst --> Adapter jedesmal neu aufbauen (samt Service-Neustart). Schließlich hat ja auch der Adapter einen seriellen Buffer, der vielleicht nur nicht schnell genug antwortet.
Hat jemand einen Tip, wie man hier sinnvoll an eine Fehlerbehebung herangehen könnte?
/tom
das Thema scheint schon hier und hier behandelt worden zu sein, ich weiß aber nicht so recht, wie ein guter Lösungsansatz aussehen würde.
Betroffen ist das Trovis-Plugin. Alle paar Tage (sehr unregelmäßig) kommt es offensichtlich zu vereinzelten Lesefehlern aus der Schnittstelle /dev/trovis. Diese ist per Service (socat) auf IP+Port eines RS232-LAN-Adapters im Netzwerk gemapped. Die Device wird im Minutentakt wie eine serielle Schnittstelle per pymodbus ausgelesen, dann kommt irgendwann Tage später:
Code:
2019-12-30 01:16:28 ERROR plugins.trovis557x.poll_device Method plugins.trovis557x.poll_device exception: 'AttributeError' object is not iterable Traceback (most recent call last): File "/usr/local/smarthome/lib/scheduler.py", line 522, in _task obj() File "/usr/local/smarthome/plugins/trovis557x/__init__.py", line 84, in poll_device self.verarbeiteWerte(ids_mit_werten, 'register') File "/usr/local/smarthome/plugins/trovis557x/__init__.py", line 238, in verarbeiteWerte for id, buswert in _ids_mit_werten: TypeError: 'AttributeError' object is not iterable
Code:
2019-12-30 10:42:58 ERROR lib.scheduler Needing more worker threads than the specified maximum of 20!
Als Lösung könnte man natürlich das Plugin so umschreiben, dass die Verbindung zur Schnittstelle jedesmal neu aufgebaut wird, oder über try/except ausgelesen wird. Ich bin mir aber nichtmal sicher, ob dort tatsächlich das Problem liegt, denn im Grunde müsste man die gesamte Strecke shNG --> Plugin mit Abfrage-Routinen ---> /dev/trovis-Dienst --> Adapter jedesmal neu aufbauen (samt Service-Neustart). Schließlich hat ja auch der Adapter einen seriellen Buffer, der vielleicht nur nicht schnell genug antwortet.
Hat jemand einen Tip, wie man hier sinnvoll an eine Fehlerbehebung herangehen könnte?
/tom
Kommentar