Mit dem Upgrade auf core_2024.3.1 Generic x86-64 kann ich mein 8-fach Netzwerk Relais, welches über Modbus TCP eingebunden ist, nicht mehr schalten. Ich habe das ganze Netz abgesucht und nur diesen Hinweis gefunden:
Es wird folgende Fehlermeldung generiert:
[139963467207616] Timeout value out of range
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/components/websocket_api/commands.py", line 239, in handle_call_service
response = await hass.services.async_call(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/core.py", line 2319, in async_call
response_data = await coro
^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/core.py", line 2356, in _execute_service
return await target(service_call)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 905, in entity_service_call
single_response = await _handle_entity_call(
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 975, in _handle_entity_call
result = await task
^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/template/switch.py", line 161, in async_turn_on
await self.async_run_script(self._on_script, context=self._context)
File "/usr/src/homeassistant/homeassistant/components/template/template_entity.py", line 562, in async_run_script
await script.async_run(
File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 1600, in async_run
return await asyncio.shield(run.async_run())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 435, in async_run
await self._async_step(log_exceptions=False)
File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 487, in _async_step
self._handle_exception(
File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 512, in _handle_exception
raise exception
File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 485, in _async_step
await getattr(self, handler)()
File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 723, in _async_call_service_step
response_data = await self._async_run_long_action(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 685, in _async_run_long_action
return long_task.result()
^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/core.py", line 2319, in async_call
response_data = await coro
^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/core.py", line 2356, in _execute_service
return await target(service_call)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/modbus/modbus.py", line 184, in async_write_register
await hub.async_pb_call(
File "/usr/src/homeassistant/homeassistant/components/modbus/modbus.py", line 485, in async_pb_call
result = await self.hass.async_add_executor_job(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/concurrent/futures/thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/modbus/modbus.py", line 448, in pb_call
result: ModbusResponse = entry.func(address, value, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/pymodbus/client/mixin.py", line 150, in write_register
return self.execute(
^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/pymodbus/client/base.py", line 390, in execute
if not self.connect():
^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/pymodbus/client/tcp.py", line 168, in connect
self.socket = socket.create_connection(
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/socket.py", line 834, in create_connection
sock.settimeout(timeout)
ValueError: Timeout value out of range
Wenn ich wieder downgrade auf core_2024.3.0 funktioniert alles einwandfrei und es gibt auch keine Timeout-Fehler.
Hat jemand ein ähnliches Problem und kennt einen Lösungsansatz?
Mit der neuen HA Version kam wohl auch eine neue Version vom pyModBus mit. Hatte das gleiche Problem mit der Huawei Solar Integration. Ein Update der Integration 2 Tage später brachte die Lösung.
Das ist eine direkte TCP-Verbindung und läuft nicht über eine Integration. Deshalb wird sich das Problem leider nicht so einfach lösen. Für mich wäre das böse, weil ich entweder das Relais rauswerfen müsste oder aber HA nicht weiter updaten kann.
Ich brauche jemanden unter Euch, der sich mit den Modbus-Protokollen auskennt und mir erklären kann, welche Parameter sich in modbus-py verändert haben, um diesen Timeout-Fehler abfangen zu können.
Ich habe schon mit allen möglichen Paramtern, die in der Anleitung unter Modbus - Home Assistant beschrieben sind, experimentiert.
Keine Chance bisher.
Nach vielen Experimenten und der Codeverfolgung konnte dieses Problem durch das Hinzufügen einer Dummy-Entität umgangen werden.
Dies scheint nicht das gewünschte Ziel zu haben, eine Verbindung herzustellen, da die Dummy-Entität an einer nicht vorhandenen Adresse erstellt werden musste und tatsächlich zu anderen Kommunikationswarnungen führt.
hab bei mir jetzt eine Entität hinzugefügt und es funktioniert
ich glaube das funktioniert auch ohne das die Adresse wirklich funktioniert, hab mir aber dann einen Modbus Adresse gesucht wo ich auch Werte zurück bekomme.
Ich habe also keine ausgesprochene Sensor-Definition stehen, aber modbus ist nicht “empty”, weil ja switches definiert sind. Oder verstehe ich das falsch?
Vielleicht ist in package-Dateien die Schreibweise anders. Auf jeden Fall funktioniert das mit dieser Schreibweise genau so unter unter 2024.3.0 und ab 2024.3.1 kommt ein Timeout-Fehler. Daran kann es also eher nicht liegen, oder?
Ich habe jetzt ein Update auf 2024.3.3 gemacht und es kommt kein timeout-error mehr. Das Relay reagiert allerdings jetzt ziemlich träge, aber das müsste ich noch in den Griff bekommen können.
Wahrscheinlich muss ich das einfach auch noch richtig gruppieren und nicht über platform: template ansprechen.
Auf jeden Fall danke ich allen, die mir geantwortet haben.
Mein Problem war, dass tatsächlich keine ENTITÄT für den Modbus definiert war. In den bisherigen Workarounds, die zu dem Problem im Netz zu finden sind, ist immer von nicht definiertem “SENSOR” die Rede.
Es kommt also nicht darauf an, dass ein Sensor definiert sein muss, sondern es muss mindestens eine Entität vom Typ binary_sensors, climates, covers, fans. lights, sensors oder switches sein, damit der Timeout-Error ab 2024.3.1 nicht mehr auftritt.
Ein Template-Sensor, so wie ich den definiert hatte, wird NICHT als diesem Modbus-Hub zugeordnet erkannt und führt deshalb ab 2024.3.1 zu einem Timeout-Fehler, was in den HA-Versionen bisher toleriert wurde.
Die korrekte Syntax muss für mein Beispiel also lauten:
Zum Thema Modbus SMA habe ich seit vorhin auch ein Problem: Der Dienst scheint beendet zu sein, wie lässt er sich wieder starten? Vorausgegangen war ein mehrfacher Restart des HA weil das Netz weg war.
Diese Meldung bekomme im im HA Logfile:
2024-07-29 11:30:29.915 WARNING (MainThread) [homeassistant.components.modbus.modbus] modbus sma communication closed
Der Raspi bzw. Host des HA hat ne feste IP per DHCP. Der startete ja auch wieder. Aber ein paar Dienste wollten das nicht gleich mitmachen. Vor allem Sunspec (SMA) und eben der Modbus Client. Am Ende habe ich noch einen 4. Restart gemacht, dann war die Verbindung zum Wechselrichter per Modbus TCP wieder ok.
Fazit: Wenn ein oder zwei Neustarts nichts bringen, probiers ruhig noch öfters!