psa_car_controller icon indicating copy to clipboard operation
psa_car_controller copied to clipboard

"sqlite3.OperationalError: database is locked" after short runtime on Raspberry Pi 3

Open gernot-h opened this issue 1 year ago • 15 comments

I tested psacc successfully some weeks ago on my Laptop and finally installed it on a Raspi 3 B.

Since it's installed on the Raspi, I didn't manage to get recording trips etc. working reliably. After some runtime, it stops writing to the database, printing this error:

2024-03-08 20:16:52,012 :: ERROR :: refresh_vehicle_info:
Traceback (most recent call last):
  File "/root/psa_car_controller/lib/python3.11/site-packages/psa_car_controller/psacc/application/psa_client.py", line 128, in __refresh_vehicle_info
    self.get_vehicle_info(car.vin)
  File "/root/psa_car_controller/lib/python3.11/site-packages/psa_car_controller/psacc/application/psa_client.py", line 111, in get_vehicle_info
    self.record_info(car)
  File "/root/psa_car_controller/lib/python3.11/site-packages/psa_car_controller/psacc/application/psa_client.py", line 197, in record_info
    Database.record_position(self.weather_api, car.vin, mileage, latitude, longitude, altitude, date, level,
  File "/root/psa_car_controller/lib/python3.11/site-packages/psa_car_controller/psacc/repository/db.py", line 269, in record_position
    conn.execute("INSERT INTO position(Timestamp,VIN,longitude,latitude,altitude,mileage,level,level_fuel,"
sqlite3.OperationalError: database is locked

I tried re-creating the database again and again and it always works for a few minutes or hours and then ends up in this state again. I've no clue where and how to start debugging this, any hint greatly appreciated. :-)

Config file kept detault settings

Environment (please complete the following information):

  • OS: Raspbian 12/Bookworm.
  • Brand and model of car: Opel Astra L PHEV
  • Application version: 3.4.1

gernot-h avatar Mar 08 '24 19:03 gernot-h

Same Here with 3.5.3

DPO99 avatar Feb 26 '25 17:02 DPO99

Same here with 3.5.6

bommel947 avatar Apr 12 '25 13:04 bommel947

Yep same here with 3.5.6. If i delete the database, within a few minutes i'll get the locked error again, and nothing displays in home assistant.

LilSlippinJimmy avatar Apr 15 '25 12:04 LilSlippinJimmy

Thank you so much for a great container @flobz :-) I am using version 3.5.6 as a container in Docker and pull data from cache every 5 mintes. I get the below "database is locked" messages a lot. Would highly appreciate if you are able to address this in a new version :-)

2025-04-29 16:28:59,165 :: ERROR :: refresh_vehicle_info: 
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 128, in __refresh_vehicle_info
    self.get_vehicle_info(car.vin)
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 111, in get_vehicle_info
    self.record_info(car)
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 216, in record_info
    Database.record_battery_soh(car.vin, charge_date, soh)
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/repository/db.py", line 285, in record_battery_soh
    conn.execute("INSERT INTO battery_soh(date, VIN, level) VALUES(?,?,?)", (date, vin, level))
sqlite3.OperationalError: database is locked
2025-04-29 16:30:00,243 :: INFO :: 172.23.0.1 - - [29/Apr/2025 16:30:00] "GET /get_vehicleinfo/MYVIN?from_cache=1 HTTP/1.1" 200 -
2025-04-29 16:30:59,168 :: ERROR :: refresh_vehicle_info: 
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 128, in __refresh_vehicle_info
    self.get_vehicle_info(car.vin)
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 111, in get_vehicle_info
    self.record_info(car)
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 216, in record_info
    Database.record_battery_soh(car.vin, charge_date, soh)
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/repository/db.py", line 285, in record_battery_soh
    conn.execute("INSERT INTO battery_soh(date, VIN, level) VALUES(?,?,?)", (date, vin, level))
sqlite3.OperationalError: database is locked
2025-04-29 16:32:59,181 :: ERROR :: refresh_vehicle_info: 
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 128, in __refresh_vehicle_info
    self.get_vehicle_info(car.vin)
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 111, in get_vehicle_info
    self.record_info(car)
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 216, in record_info
    Database.record_battery_soh(car.vin, charge_date, soh)
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/repository/db.py", line 285, in record_battery_soh
    conn.execute("INSERT INTO battery_soh(date, VIN, level) VALUES(?,?,?)", (date, vin, level))
sqlite3.OperationalError: database is locked
2025-04-29 16:35:00,202 :: INFO :: 172.23.0.1 - - [29/Apr/2025 16:35:00] "GET /get_vehicleinfo/MYVIN?from_cache=1 HTTP/1.1" 200 -
2025-04-29 16:36:59,417 :: ERROR :: refresh_vehicle_info: 
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 128, in __refresh_vehicle_info
    self.get_vehicle_info(car.vin)
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 111, in get_vehicle_info
    self.record_info(car)
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 216, in record_info
    Database.record_battery_soh(car.vin, charge_date, soh)
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/repository/db.py", line 285, in record_battery_soh
    conn.execute("INSERT INTO battery_soh(date, VIN, level) VALUES(?,?,?)", (date, vin, level))
sqlite3.OperationalError: database is locked
2025-04-29 16:38:59,236 :: ERROR :: refresh_vehicle_info: 
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 128, in __refresh_vehicle_info
    self.get_vehicle_info(car.vin)
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 111, in get_vehicle_info
    self.record_info(car)
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 216, in record_info
    Database.record_battery_soh(car.vin, charge_date, soh)
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/repository/db.py", line 285, in record_battery_soh
    conn.execute("INSERT INTO battery_soh(date, VIN, level) VALUES(?,?,?)", (date, vin, level))
sqlite3.OperationalError: database is locked
2025-04-29 16:40:00,199 :: INFO :: 172.23.0.1 - - [29/Apr/2025 16:40:00] "GET /get_vehicleinfo/MYVIN?from_cache=1 HTTP/1.1" 200 -
2025-04-29 16:40:30,099 :: INFO :: <Request 'http://192.168.1.2:5050/charge_control?vin=MYVIN' [GET]>
2025-04-29 16:40:30,101 :: INFO :: 172.23.0.1 - - [29/Apr/2025 16:40:30] "GET /charge_control?vin=MYVIN HTTP/1.1" 200 -
2025-04-29 16:40:59,194 :: ERROR :: refresh_vehicle_info: 
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 128, in __refresh_vehicle_info
    self.get_vehicle_info(car.vin)
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 111, in get_vehicle_info
    self.record_info(car)
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 216, in record_info
    Database.record_battery_soh(car.vin, charge_date, soh)
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/repository/db.py", line 285, in record_battery_soh
    conn.execute("INSERT INTO battery_soh(date, VIN, level) VALUES(?,?,?)", (date, vin, level))
sqlite3.OperationalError: database is locked
2025-04-29 16:44:59,263 :: ERROR :: refresh_vehicle_info: 
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 128, in __refresh_vehicle_info
    self.get_vehicle_info(car.vin)
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 111, in get_vehicle_info
    self.record_info(car)
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 216, in record_info
    Database.record_battery_soh(car.vin, charge_date, soh)
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/repository/db.py", line 285, in record_battery_soh
    conn.execute("INSERT INTO battery_soh(date, VIN, level) VALUES(?,?,?)", (date, vin, level))
sqlite3.OperationalError: database is locked
2025-04-29 16:45:00,362 :: INFO :: 172.23.0.1 - - [29/Apr/2025 16:45:00] "GET /get_vehicleinfo/MYVIN?from_cache=1 HTTP/1.1" 200 -
2025-04-29 16:46:59,752 :: ERROR :: refresh_vehicle_info: 
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 128, in __refresh_vehicle_info
    self.get_vehicle_info(car.vin)
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 111, in get_vehicle_info
    self.record_info(car)
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 216, in record_info
    Database.record_battery_soh(car.vin, charge_date, soh)
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/repository/db.py", line 285, in record_battery_soh
    conn.execute("INSERT INTO battery_soh(date, VIN, level) VALUES(?,?,?)", (date, vin, level))
sqlite3.OperationalError: database is locked
2025-04-29 16:49:00,999 :: ERROR :: refresh_vehicle_info: 
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 128, in __refresh_vehicle_info
    self.get_vehicle_info(car.vin)
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 111, in get_vehicle_info
    self.record_info(car)
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 216, in record_info
    Database.record_battery_soh(car.vin, charge_date, soh)
  File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/repository/db.py", line 285, in record_battery_soh
    conn.execute("INSERT INTO battery_soh(date, VIN, level) VALUES(?,?,?)", (date, vin, level))
sqlite3.OperationalError: database is locked
2025-04-29 16:49:03,510 :: INFO :: save config change
2025-04-29 16:50:00,202 :: INFO :: 172.23.0.1 - - [29/Apr/2025 16:50:00] "GET /get_vehicleinfo/MYVIN?from_cache=1 HTTP/1.1" 200 -

elgeniskogen avatar Apr 29 '25 16:04 elgeniskogen

Same here, since change to version 3.5.6 in HACS Implementation. Support would be very helpful... :(

gwgittrash avatar May 23 '25 14:05 gwgittrash

From few weeks I've same problem on my instance

SabatoArdolino avatar Aug 25 '25 09:08 SabatoArdolino

Upgrading to 3.5.7 fixed the issue for me https://github.com/flobz/psa_car_controller/releases/tag/v3.5.7

Bushrider avatar Aug 27 '25 22:08 Bushrider

Hi I also updated to 3.5.7, but have still the same error...

Image

gwgittrash avatar Aug 28 '25 09:08 gwgittrash

Try to redo OTP config

Bushrider avatar Aug 28 '25 09:08 Bushrider

Still also getting this error and i've updated to 3.5.7. I've tried to re-do the OTP config, but the database error still occurs. @flobz

2025-08-28 10:44:22,440 :: ERROR :: Exception on /get_vehicleinfo/VXXXXXX [GET] Traceback (most recent call last): File "/usr/lib/python3/dist-packages/flask/app.py", line 2525, in wsgi_app response = self.full_dispatch_request() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/flask/app.py", line 1822, in full_dispatch_request rv = self.handle_user_exception(e) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/flask/app.py", line 1820, in full_dispatch_request rv = self.dispatch_request() ^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/flask/app.py", line 1796, in dispatch_request return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/web/view/api.py", line 48, in get_vehicle_info response=json.dumps(APP.myp.get_vehicle_info(vin, from_cache).to_dict(), default=str), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 111, in get_vehicle_info self.record_info(car) File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 216, in record_info Database.record_battery_soh(car.vin, charge_date, soh) File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/repository/db.py", line 286, in record_battery_soh conn.execute("INSERT INTO battery_soh(date, VIN, level) VALUES(?,?,?)", (date, vin, level)) sqlite3.OperationalError: database is locked

LilSlippinJimmy avatar Aug 28 '25 09:08 LilSlippinJimmy

Also for me ... also after recreate the token

SabatoArdolino avatar Aug 28 '25 10:08 SabatoArdolino

Same Problem after refreshing of th OTP: _2025-08-28 13:21:57,037 :: ERROR :: refresh_vehicle_info: Traceback (most recent call last): File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 128, in _refresh_vehicle_info self.get_vehicle_info(car.vin) File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 111, in get_vehicle_info self.record_info(car) File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/application/psa_client.py", line 216, in record_info Database.record_battery_soh(car.vin, charge_date, soh) File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psacc/repository/db.py", line 286, in record_battery_soh conn.execute("INSERT INTO battery_soh(date, VIN, level) VALUES(?,?,?)", (date, vin, level)) sqlite3.OperationalError: database is locked`

I retried, OTP was successful but I had the following Log: _2025-08-28 13:24:02,273 :: ERROR :: Can't refresh remote token, please redo otp procedure Traceback (most recent call last): File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/psa/RemoteClient.py", line 157, in refresh_remote_token self.manager.refresh_token_now() File "/usr/local/lib/python3.11/dist-packages/psa_car_controller/common/utils.py", line 23, in wrapper raise RateLimitException psa_car_controller.common.utils.RateLimitException 2025-08-28 13:24:02,274 :: ERROR :: Can't configure MQTT Client

gwgittrash avatar Aug 28 '25 11:08 gwgittrash

I have the same problem with version v3.5.7 Has anyone found a solution yet?

Scarry1990 avatar Sep 20 '25 05:09 Scarry1990

Same problem here! After container-restart whole gui is empty. (trips, ...)

mts75 avatar Sep 24 '25 08:09 mts75

I've noted that when you get subscription errors ( to PSA services ), connection refused, or Ratelimit Exceptions in PSA CC logs, to get this fixed:

  • redo OTP procedure
  • just after, disable the plugin (or exit the docker) during an hour
  • meanwhile, if possible, get a new Public IP address
  • if you have a script along with the plugin, adjust the polling each 10 minutes (and not less)

and check if errors, including the locked database ones, still occur.

Trebila avatar Sep 24 '25 16:09 Trebila