VWsFriend sometimes crashes with an error that appears to be caused by inserting "warning light" information into the DB:
vwsfriend-1 | 2026-03-19T08:26:52+0000:INFO:warning_light_agent:Warning light 0xA743 in vehicle WVWZZZE1ZMPxxxxxx turned on
vwsfriend-1 | 2026-03-19T08:26:52+0000:INFO:weconnect_mqtt_base:Client successfully disconnected
vwsfriend-1 | Traceback (most recent call last):
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
vwsfriend-1 | 2026-03-19T08:26:52+0000:ERROR:vwsfriend_base:MQTT Connection failed
vwsfriend-1 | self.dialect.do_execute(
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
vwsfriend-1 | cursor.execute(statement, parameters)
vwsfriend-1 | psycopg2.errors.InvalidTextRepresentation: invalid input value for enum category: "ASSISTANCE"
vwsfriend-1 | LINE 1: ...L, NULL, 'Front Assist availability is limited.', 'ASSISTANC...
vwsfriend-1 | ^
vwsfriend-1 |
vwsfriend-1 |
vwsfriend-1 | The above exception was the direct cause of the following exception:
vwsfriend-1 |
vwsfriend-1 | Traceback (most recent call last):
vwsfriend-1 | File "/opt/venv/bin/vwsfriend", line 8, in <module>
vwsfriend-1 | sys.exit(main())
vwsfriend-1 | ^^^^^^
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/vwsfriend/vwsfriend_base.py", line 516, in main
vwsfriend-1 | mqttCLient.updateWeConnect(reraise=True)
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/weconnect_mqtt/weconnect_mqtt_base.py", line 462, in updateWeConnect
vwsfriend-1 | self.weConnect.update(updateCapabilities=self.updateCapabilities, updatePictures=self.updatePictures, selective=self.selective, force=True)
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/weconnect/weconnect.py", line 199, in update
vwsfriend-1 | self.updateComplete()
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/weconnect/addressable.py", line 533, in updateComplete
vwsfriend-1 | child.updateComplete()
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/weconnect/addressable.py", line 533, in updateComplete
vwsfriend-1 | child.updateComplete()
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/weconnect/addressable.py", line 533, in updateComplete
vwsfriend-1 | child.updateComplete()
vwsfriend-1 | [Previous line repeated 3 more times]
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/weconnect/addressable.py", line 96, in updateComplete
vwsfriend-1 | observer(element=self, flags=self.onCompleteNotifyFlags)
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/vwsfriend/agents/warning_light_agent.py", line 64, in __onCarCapturedTimestampChange
vwsfriend-1 | with self.session.begin_nested():
vwsfriend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 1971, in begin_nested
vwsfriend-1 | return self.begin(nested=True)
vwsfriend-1 | ^^^^^^^^^^^^^^^^^^^^^^^
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 1937, in begin
vwsfriend-1 | trans = trans._begin(nested=nested)
vwsfriend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
vwsfriend-1 | File "<string>", line 2, in _begin
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
vwsfriend-1 | ret_value = fn(self, *arg, **kw)
vwsfriend-1 | ^^^^^^^^^^^^^^^^^^^^
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 1043, in _begin
vwsfriend-1 | return SessionTransaction(
vwsfriend-1 | ^^^^^^^^^^^^^^^^^^^
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 958, in __init__
vwsfriend-1 | self._take_snapshot()
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 1087, in _take_snapshot
vwsfriend-1 | self.session.flush()
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 4331, in flush
vwsfriend-1 | self._flush(objects)
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 4466, in _flush
vwsfriend-1 | with util.safe_reraise():
vwsfriend-1 | ^^^^^^^^^^^^^^^^^^^
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
vwsfriend-1 | raise exc_value.with_traceback(exc_tb)
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 4427, in _flush
vwsfriend-1 | flush_context.execute()
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
vwsfriend-1 | rec.execute(self)
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
vwsfriend-1 | util.preloaded.orm_persistence.save_obj(
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
vwsfriend-1 | _emit_insert_statements(
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
vwsfriend-1 | result = connection.execute(
vwsfriend-1 | ^^^^^^^^^^^^^^^^^^^
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
vwsfriend-1 | return meth(
vwsfriend-1 | ^^^^^
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
vwsfriend-1 | return connection._execute_clauseelement(
vwsfriend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
vwsfriend-1 | ret = self._execute_context(
vwsfriend-1 | ^^^^^^^^^^^^^^^^^^^^^^
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
vwsfriend-1 | return self._exec_single_context(
vwsfriend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
vwsfriend-1 | self._handle_dbapi_exception(
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
vwsfriend-1 | raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
vwsfriend-1 | self.dialect.do_execute(
vwsfriend-1 | File "/opt/venv/lib/python3.12/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
vwsfriend-1 | cursor.execute(statement, parameters)
vwsfriend-1 | sqlalchemy.exc.DataError: (psycopg2.errors.InvalidTextRepresentation) invalid input value for enum category: "ASSISTANCE"
vwsfriend-1 | LINE 1: ...L, NULL, 'Front Assist availability is limited.', 'ASSISTANC...
vwsfriend-1 | ^
vwsfriend-1 |
vwsfriend-1 | [SQL: INSERT INTO warning_lights (vehicle_vin, start, start_mileage, "end", end_mileage, text, category, "messageId", priority, "serviceLead", "customerRelevance") VALUES (%(vehicle_vin)s, %(start)s, %(start_mileage)s, %(end)s, %(end_mileage)s, %(text)s, %(category)s, %(messageId)s, %(priority)s, %(serviceLead)s, %(customerRelevance)s) RETURNING warning_lights.id]
vwsfriend-1 | [parameters: {'vehicle_vin': 'WVWZZZE1ZMPxxxxxx', 'start': datetime.datetime(2026, 3, 19, 8, 26, 6, tzinfo=datetime.timezone.utc), 'start_mileage': 74619, 'end': None, 'end_mileage': None, 'text': 'Front Assist availability is limited.', 'category': 'ASSISTANCE', 'messageId': '0xA743', 'priority': 53, 'serviceLead': False, 'customerRelevance': None}]
vwsfriend-1 | (Background on this error at: https://sqlalche.me/e/20/9h9h)
After this error, the docker container needs to be restarted (it would probably be preferable to have an auto-restart on crash?)
VWsFriend sometimes crashes with an error that appears to be caused by inserting "warning light" information into the DB:
After this error, the docker container needs to be restarted (it would probably be preferable to have an auto-restart on crash?)