carconnectivity-connector-skoda 0.7.3__tar.gz → 0.8.1a1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of carconnectivity-connector-skoda might be problematic. Click here for more details.

Files changed (42) hide show
  1. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/CHANGELOG.md +6 -1
  2. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/PKG-INFO +1 -1
  3. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/setup_requirements.txt +1 -1
  4. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/src/carconnectivity_connector_skoda.egg-info/PKG-INFO +1 -1
  5. carconnectivity_connector_skoda-0.8.1a1/src/carconnectivity_connectors/skoda/_version.py +34 -0
  6. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/src/carconnectivity_connectors/skoda/auth/openid_session.py +5 -1
  7. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/src/carconnectivity_connectors/skoda/capability.py +1 -1
  8. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/src/carconnectivity_connectors/skoda/connector.py +17 -3
  9. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/src/carconnectivity_connectors/skoda/mqtt_client.py +7 -0
  10. carconnectivity_connector_skoda-0.7.3/src/carconnectivity_connectors/skoda/_version.py +0 -21
  11. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/.flake8 +0 -0
  12. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  13. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  14. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/.github/dependabot.yml +0 -0
  15. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/.github/workflows/build.yml +0 -0
  16. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/.github/workflows/build_and_publish.yml +0 -0
  17. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/.github/workflows/codeql-analysis.yml +0 -0
  18. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/.gitignore +0 -0
  19. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/LICENSE +0 -0
  20. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/Makefile +0 -0
  21. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/README.md +0 -0
  22. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/doc/Config.md +0 -0
  23. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/pyproject.toml +0 -0
  24. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/setup.cfg +0 -0
  25. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/src/carconnectivity_connector_skoda.egg-info/SOURCES.txt +0 -0
  26. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/src/carconnectivity_connector_skoda.egg-info/dependency_links.txt +0 -0
  27. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/src/carconnectivity_connector_skoda.egg-info/requires.txt +0 -0
  28. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/src/carconnectivity_connector_skoda.egg-info/top_level.txt +0 -0
  29. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/src/carconnectivity_connectors/skoda/__init__.py +0 -0
  30. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/src/carconnectivity_connectors/skoda/auth/__init__.py +0 -0
  31. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/src/carconnectivity_connectors/skoda/auth/auth_util.py +0 -0
  32. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/src/carconnectivity_connectors/skoda/auth/helpers/blacklist_retry.py +0 -0
  33. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/src/carconnectivity_connectors/skoda/auth/my_skoda_session.py +0 -0
  34. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/src/carconnectivity_connectors/skoda/auth/session_manager.py +0 -0
  35. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/src/carconnectivity_connectors/skoda/auth/skoda_web_session.py +0 -0
  36. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/src/carconnectivity_connectors/skoda/charging.py +0 -0
  37. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/src/carconnectivity_connectors/skoda/climatization.py +0 -0
  38. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/src/carconnectivity_connectors/skoda/command_impl.py +0 -0
  39. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/src/carconnectivity_connectors/skoda/error.py +0 -0
  40. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/src/carconnectivity_connectors/skoda/ui/connector_ui.py +0 -0
  41. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/src/carconnectivity_connectors/skoda/vehicle.py +0 -0
  42. {carconnectivity_connector_skoda-0.7.3 → carconnectivity_connector_skoda-0.8.1a1}/test/integration_test/carConnectivity.json +0 -0
@@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file.
5
5
  ## [Unreleased]
6
6
  - No unreleased changes so far
7
7
 
8
+ ## [0.8] - 2025-06-27
9
+ ### Added
10
+ - Support for adblue range
11
+
8
12
  ## [0.7.3] - 2025-06-20
9
13
  ### Fixed
10
14
  - Fixes bug that registers hooks several times, causing multiple calls to the servers
@@ -77,7 +81,8 @@ All notable changes to this project will be documented in this file.
77
81
  Initial release, let's go and give this to the public to try out...
78
82
  The API is not yet implemented completely but most functions already work
79
83
 
80
- [unreleased]: https://github.com/tillsteinbach/CarConnectivity-connector-skoda/compare/v0.7.3...HEAD
84
+ [unreleased]: https://github.com/tillsteinbach/CarConnectivity-connector-skoda/compare/v0.8...HEAD
85
+ [0.8]: https://github.com/tillsteinbach/CarConnectivity-connector-skoda/releases/tag/v0.8
81
86
  [0.7.3]: https://github.com/tillsteinbach/CarConnectivity-connector-skoda/releases/tag/v0.7.3
82
87
  [0.7.2]: https://github.com/tillsteinbach/CarConnectivity-connector-skoda/releases/tag/v0.7.2
83
88
  [0.7.1]: https://github.com/tillsteinbach/CarConnectivity-connector-skoda/releases/tag/v0.7.1
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: carconnectivity-connector-skoda
3
- Version: 0.7.3
3
+ Version: 0.8.1a1
4
4
  Summary: CarConnectivity connector for Skoda services
5
5
  Author: Till Steinbach
6
6
  License: MIT License
@@ -1,4 +1,4 @@
1
- flake8~=7.2.0
1
+ flake8~=7.3.0
2
2
  pylint~=3.3.7
3
3
  bandit~=1.8.5
4
4
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: carconnectivity-connector-skoda
3
- Version: 0.7.3
3
+ Version: 0.8.1a1
4
4
  Summary: CarConnectivity connector for Skoda services
5
5
  Author: Till Steinbach
6
6
  License: MIT License
@@ -0,0 +1,34 @@
1
+ # file generated by setuptools-scm
2
+ # don't change, don't track in version control
3
+
4
+ __all__ = [
5
+ "__version__",
6
+ "__version_tuple__",
7
+ "version",
8
+ "version_tuple",
9
+ "__commit_id__",
10
+ "commit_id",
11
+ ]
12
+
13
+ TYPE_CHECKING = False
14
+ if TYPE_CHECKING:
15
+ from typing import Tuple
16
+ from typing import Union
17
+
18
+ VERSION_TUPLE = Tuple[Union[int, str], ...]
19
+ COMMIT_ID = Union[str, None]
20
+ else:
21
+ VERSION_TUPLE = object
22
+ COMMIT_ID = object
23
+
24
+ version: str
25
+ __version__: str
26
+ __version_tuple__: VERSION_TUPLE
27
+ version_tuple: VERSION_TUPLE
28
+ commit_id: COMMIT_ID
29
+ __commit_id__: COMMIT_ID
30
+
31
+ __version__ = version = '0.8.1a1'
32
+ __version_tuple__ = version_tuple = (0, 8, 1, 'a1')
33
+
34
+ __commit_id__ = commit_id = 'g1d80033cd'
@@ -1,4 +1,4 @@
1
- """Implements a session class that handles OpenID authentication."""
1
+ """Implements a session class that handles OpenID authentication."""
2
2
  from __future__ import annotations
3
3
  from typing import TYPE_CHECKING
4
4
 
@@ -165,6 +165,10 @@ class OpenIDSession(requests.Session):
165
165
  # If expires_in is set and expires_at is not set we calculate expires_at from expires_in using the current time
166
166
  if 'expires_in' in new_token and 'expires_at' not in new_token:
167
167
  new_token['expires_at'] = time.time() + int(new_token.get('expires_in'))
168
+ if new_token['expires_in'] > 3600:
169
+ LOG.warning('unexpected Token expires_in > 3600s (%d)', new_token['expires_in'])
170
+ if new_token['expires_at'] > (time.time() + 3600):
171
+ LOG.warning('unexpected Token expires_at after more than 3600s')
168
172
  self._token = new_token
169
173
 
170
174
  @property
@@ -132,7 +132,7 @@ class Capability(GenericObject):
132
132
  LOCATION_DATA_DISABLED = 1013
133
133
  LICENSE_INACTIVE = 2001
134
134
  LICENSE_EXPIRED = 2002
135
- MISSING_LICENSE = 2003
135
+ LICENSE_MISSING = 2003
136
136
  USER_NOT_VERIFIED = 3001
137
137
  TERMS_AND_CONDITIONS_NOT_ACCEPTED = 3002
138
138
  INSUFFICIENT_RIGHTS = 3003
@@ -22,7 +22,7 @@ from carconnectivity.units import Length, Speed, Power, Temperature
22
22
  from carconnectivity.doors import Doors
23
23
  from carconnectivity.windows import Windows
24
24
  from carconnectivity.lights import Lights
25
- from carconnectivity.drive import GenericDrive, ElectricDrive, CombustionDrive
25
+ from carconnectivity.drive import GenericDrive, ElectricDrive, CombustionDrive, DieselDrive
26
26
  from carconnectivity.attributes import BooleanAttribute, DurationAttribute, TemperatureAttribute, EnumAttribute, LevelAttribute, \
27
27
  CurrentAttribute
28
28
  from carconnectivity.charging import Charging
@@ -407,7 +407,7 @@ class Connector(BaseConnector):
407
407
  if vehicle is not None:
408
408
  if vehicle.connection_state is not None and vehicle.connection_state.enabled \
409
409
  and vehicle.connection_state.value == GenericVehicle.ConnectionState.OFFLINE:
410
- vehicle.state._set_value(GenericVehicle.State.OFFLINE)
410
+ vehicle.state._set_value(GenericVehicle.State.OFFLINE) # pylint: disable=protected-access
411
411
  elif vehicle.in_motion is not None and vehicle.in_motion.enabled and vehicle.in_motion.value:
412
412
  vehicle.state._set_value(GenericVehicle.State.IGNITION_ON) # pylint: disable=protected-access
413
413
  elif vehicle.position is not None and vehicle.position.enabled and vehicle.position.position_type is not None \
@@ -1301,10 +1301,11 @@ class Connector(BaseConnector):
1301
1301
  else:
1302
1302
  if engine_type == GenericDrive.Type.ELECTRIC:
1303
1303
  drive = ElectricDrive(drive_id=drive_id, drives=vehicle.drives)
1304
+ elif engine_type == GenericDrive.Type.DIESEL:
1305
+ drive = DieselDrive(drive_id=drive_id, drives=vehicle.drives)
1304
1306
  elif engine_type in [GenericDrive.Type.FUEL,
1305
1307
  GenericDrive.Type.GASOLINE,
1306
1308
  GenericDrive.Type.PETROL,
1307
- GenericDrive.Type.DIESEL,
1308
1309
  GenericDrive.Type.CNG,
1309
1310
  GenericDrive.Type.LPG]:
1310
1311
  drive = CombustionDrive(drive_id=drive_id, drives=vehicle.drives)
@@ -1335,9 +1336,22 @@ class Connector(BaseConnector):
1335
1336
  'currentSoCInPercent',
1336
1337
  'currentFuelLevelInPercent',
1337
1338
  'remainingRangeInKm'})
1339
+ if 'adBlueRange' in range_data and range_data['adBlueRange'] is not None:
1340
+ # pylint: disable-next=protected-access
1341
+ for drive in vehicle.drives.drives.values():
1342
+ if isinstance(drive, DieselDrive):
1343
+ # pylint: disable-next=protected-access
1344
+ drive.adblue_range._set_value(value=range_data['adBlueRange'], measured=captured_at, unit=Length.KM)
1345
+ drive.adblue_range.precision = 1
1346
+ else:
1347
+ for drive in vehicle.drives.drives.values():
1348
+ if isinstance(drive, DieselDrive):
1349
+ # pylint: disable-next=protected-access
1350
+ drive.adblue_range._set_value(value=None, measured=captured_at, unit=Length.KM)
1338
1351
  log_extra_keys(LOG_API, '/api/v2/vehicle-status/{vin}/driving-range', range_data, {'carCapturedTimestamp',
1339
1352
  'carType',
1340
1353
  'totalRangeInKm',
1354
+ 'adBlueRange',
1341
1355
  'primaryEngineRange',
1342
1356
  'secondaryEngineRange'})
1343
1357
  return vehicle
@@ -70,6 +70,8 @@ class SkodaMQTTClient(Client): # pylint: disable=too-many-instance-attributes
70
70
  self.delayed_access_function_timers: Dict[str, threading.Timer] = {}
71
71
 
72
72
  self.tls_set(cert_reqs=ssl.CERT_NONE)
73
+
74
+ self._retry_refresh_login_once = True
73
75
 
74
76
  def connect(self, *args, **kwargs) -> MQTTErrorCode:
75
77
  """
@@ -321,6 +323,7 @@ class SkodaMQTTClient(Client): # pylint: disable=too-many-instance-attributes
321
323
  self._skoda_connector.car_connectivity.garage.add_observer(observer=self._on_carconnectivity_vehicle_enabled,
322
324
  flag=observer_flags,
323
325
  priority=Observable.ObserverPriority.USER_MID)
326
+ self._retry_refresh_login_once = True
324
327
  self._subscribe_vehicles()
325
328
 
326
329
  # Handle different reason codes
@@ -338,6 +341,10 @@ class SkodaMQTTClient(Client): # pylint: disable=too-many-instance-attributes
338
341
  LOG.error('Could not connect (%s): Client identifier not valid', reason_code)
339
342
  elif reason_code == 134:
340
343
  LOG.error('Could not connect (%s): Bad user name or password', reason_code)
344
+ if self._retry_refresh_login_once == True:
345
+ self._retry_refresh_login_once = False
346
+ LOG.info('trying a relogin once to resolve the error')
347
+ self._skoda_connector.session.login()
341
348
  elif reason_code == 135:
342
349
  LOG.error('Could not connect (%s): Not authorized', reason_code)
343
350
  elif reason_code == 136:
@@ -1,21 +0,0 @@
1
- # file generated by setuptools-scm
2
- # don't change, don't track in version control
3
-
4
- __all__ = ["__version__", "__version_tuple__", "version", "version_tuple"]
5
-
6
- TYPE_CHECKING = False
7
- if TYPE_CHECKING:
8
- from typing import Tuple
9
- from typing import Union
10
-
11
- VERSION_TUPLE = Tuple[Union[int, str], ...]
12
- else:
13
- VERSION_TUPLE = object
14
-
15
- version: str
16
- __version__: str
17
- __version_tuple__: VERSION_TUPLE
18
- version_tuple: VERSION_TUPLE
19
-
20
- __version__ = version = '0.7.3'
21
- __version_tuple__ = version_tuple = (0, 7, 3)