fmartinou / tydom2mqtt

Deltadore Tydom to MQTT Bridge
https://fmartinou.github.io/tydom2mqtt/
MIT License
86 stars 49 forks source link

reconnect when connection is lost and update devices status #104

Closed CyrilP closed 11 months ago

Neo33ASM commented 11 months ago

@fmartinou ça te dirait de merge cette branche au moins pour tester ? J'ai des souci également qui font qu'un restart est nécessaire pour débloquer la situation

Neo33ASM commented 11 months ago

@fmartinou je peux même préciser mon souci et j'en connais la cause : tous les jours mon routeur reboot à 6h du mat, et c'est cette perte de réseau qui cause le dysfonctionnement permanent de l'addon.

J'ai donc programmé un reboot quotidien de l'addon dans HomeAssistant, mais un fix serait plus "propre"

fmartinou commented 11 months ago

Hi!

Let's give it a try! 😃

fmiermont commented 10 months ago

@fmartinou avec la dernière version ça ne semble pas vraiment résolu; J'ai mon routeur qui reboot toutes les semaines, HA est connecté dessus, donc le lien réseau tombe. Et l'addon se retrouve alors planté, je dois le redémarrer. Les logs donnent ça :

future: <Future finished exception=ConnectionClosedError(None, None, None)>
websockets.exceptions.ConnectionClosedError: no close frame received or sent
2023-08-12 03:30:58,549 - asyncio              - ERROR   - Future exception was never retrieved
future: <Future finished exception=ConnectionClosedError(None, None, None)>
websockets.exceptions.ConnectionClosedError: no close frame received or sent
2023-08-12 03:30:58,549 - asyncio              - ERROR   - Future exception was never retrieved
future: <Future finished exception=ConnectionClosedError(None, None, None)>
websockets.exceptions.ConnectionClosedError: no close frame received or sent
2023-08-12 03:30:58,550 - asyncio              - ERROR   - Future exception was never retrieved
future: <Future finished exception=ConnectionClosedError(None, None, None)>
websockets.exceptions.ConnectionClosedError: no close frame received or sent
2023-08-12 03:30:58,551 - asyncio              - ERROR   - Task exception was never retrieved
future: <Task finished name='Task-2' coro=<listen_tydom() done, defined at /app/main.py:41> exception=NameError("name 'websockets' is not defined")>
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/websockets/legacy/protocol.py", line 959, in transfer_data
    message = await self.read_message()
              ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/websockets/legacy/protocol.py", line 1029, in read_message
    frame = await self.read_data_frame(max_size=self.max_size)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/websockets/legacy/protocol.py", line 1104, in read_data_frame
    frame = await self.read_frame(max_size)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/websockets/legacy/protocol.py", line 1161, in read_frame
    frame = await Frame.read(
            ^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/websockets/legacy/framing.py", line 68, in read
    data = await reader(2)
           ^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/asyncio/streams.py", line 729, in readexactly
    await self._wait_for_data('readexactly')
  File "/usr/local/lib/python3.11/asyncio/streams.py", line 522, in _wait_for_data
    await self._waiter
  File "/usr/local/lib/python3.11/asyncio/selector_events.py", line 970, in _read_ready__get_buffer
    nbytes = self._sock.recv_into(buf)
             ^^^^^^^^^^^^^^^^^^^^^^^^^
ConnectionResetError: [Errno 104] Connection reset by peer
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
  File "/app/main.py", line 49, in listen_tydom
    incoming_bytes_str = await tydom_client.connection.recv()
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/websockets/legacy/protocol.py", line 568, in recv
    await self.ensure_open()
  File "/usr/local/lib/python3.11/site-packages/websockets/legacy/protocol.py", line 935, in ensure_open
    raise self.connection_closed_exc()
websockets.exceptions.ConnectionClosedError: no close frame received or sent
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/app/main.py", line 56, in listen_tydom
    except websockets.ConnectionClosed as e:
           ^^^^^^^^^^
NameError: name 'websockets' is not defined
2023-08-13 17:45:47,271 - mqtt.MqttClient      - INFO    - set_positionCmd message received (topic=cover/tydom/1658669537_1658669537/set_positionCmd, message=UP)
2023-08-13 17:45:47,288 - sensors.Cover        - INFO    - 1658669537 positionCmd UP
2023-08-13 17:45:47,295 - asyncio              - ERROR   - Task exception was never retrieved
future: <Task finished name='Task-38374' coro=<MqttClient.on_message() done, defined at /app/mqtt/MqttClient.py:77> exception=ConnectionClosedError(None, None, None)>
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/websockets/legacy/protocol.py", line 959, in transfer_data
    message = await self.read_message()
              ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/websockets/legacy/protocol.py", line 1029, in read_message
    frame = await self.read_data_frame(max_size=self.max_size)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/websockets/legacy/protocol.py", line 1104, in read_data_frame
    frame = await self.read_frame(max_size)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/websockets/legacy/protocol.py", line 1161, in read_frame
    frame = await Frame.read(
            ^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/websockets/legacy/framing.py", line 68, in read
    data = await reader(2)
           ^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/asyncio/streams.py", line 729, in readexactly
    await self._wait_for_data('readexactly')
  File "/usr/local/lib/python3.11/asyncio/streams.py", line 522, in _wait_for_data
    await self._waiter
  File "/usr/local/lib/python3.11/asyncio/selector_events.py", line 970, in _read_ready__get_buffer
    nbytes = self._sock.recv_into(buf)
             ^^^^^^^^^^^^^^^^^^^^^^^^^
ConnectionResetError: [Errno 104] Connection reset by peer
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
  File "/app/mqtt/MqttClient.py", line 131, in on_message
    await Cover.put_positionCmd(tydom_client=self.tydom, device_id=device_id, cover_id=endpoint_id,
  File "/app/sensors/Cover.py", line 124, in put_positionCmd
    await tydom_client.put_devices_data(device_id, cover_id, 'positionCmd', positionCmd)
  File "/app/tydom/TydomClient.py", line 256, in put_devices_data
    await self.connection.send(a_bytes)
  File "/usr/local/lib/python3.11/site-packages/websockets/legacy/protocol.py", line 635, in send
    await self.ensure_open()
  File "/usr/local/lib/python3.11/site-packages/websockets/legacy/protocol.py", line 935, in ensure_open
    raise self.connection_closed_exc()
websockets.exceptions.ConnectionClosedError: no close frame received or sent

J'imagine c'est que lié !