carconnectivity-connector-seatcupra 0.1a13__py3-none-any.whl → 0.1a15__py3-none-any.whl

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: carconnectivity-connector-seatcupra
3
- Version: 0.1a13
3
+ Version: 0.1a15
4
4
  Summary: CarConnectivity connector for Seat and Cupra services
5
5
  Author: Till Steinbach
6
6
  License: MIT License
@@ -37,7 +37,7 @@ Classifier: Topic :: Software Development :: Libraries
37
37
  Requires-Python: >=3.9
38
38
  Description-Content-Type: text/markdown
39
39
  License-File: LICENSE
40
- Requires-Dist: carconnectivity>=0.4a6
40
+ Requires-Dist: carconnectivity>=0.4a8
41
41
  Requires-Dist: oauthlib~=3.2.2
42
42
  Requires-Dist: requests~=2.32.3
43
43
  Requires-Dist: jwt~=1.3.1
@@ -1,10 +1,10 @@
1
1
  carconnectivity_connectors/seatcupra/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- carconnectivity_connectors/seatcupra/_version.py,sha256=2nICb-m4-uY75MTKsmT4DgQRnEbdd7i9DdsoukRc60w,509
2
+ carconnectivity_connectors/seatcupra/_version.py,sha256=C1vm3bxABjgmaD2Hpd79Ue7W_YMKggXDlANMpHBdVTI,509
3
3
  carconnectivity_connectors/seatcupra/capability.py,sha256=Oe9tC_u69bj6VmOuNJ21RKoETe2j3QyZCoz-VgcZPQ0,4523
4
4
  carconnectivity_connectors/seatcupra/charging.py,sha256=BJe_5GEB0JkP78tpU6kyKpwuwjDZHvm-kt3PTlpQHeU,3336
5
5
  carconnectivity_connectors/seatcupra/climatization.py,sha256=0xxWlxrheAPzkVT8WRQtbm6ExZmVdgW7lUdOXyS_qWY,1695
6
6
  carconnectivity_connectors/seatcupra/command_impl.py,sha256=mtw8ZwJLmf79fPDZ1N3ImLfB8Gt9JPbzjMuIo2y5v3M,2879
7
- carconnectivity_connectors/seatcupra/connector.py,sha256=UIorOzqnbnIwKr1IreCDDvFPB5L5g_4hdS3vspqv-Rk,100863
7
+ carconnectivity_connectors/seatcupra/connector.py,sha256=ACP_TJitI1nQqxDzsiMn0HGdRAvoyY3NAZhpm8BltN4,101979
8
8
  carconnectivity_connectors/seatcupra/vehicle.py,sha256=s0G-HqG5qcwStDxD3649KgLMa3lKPZ4TOGWRJEuQzsQ,3403
9
9
  carconnectivity_connectors/seatcupra/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  carconnectivity_connectors/seatcupra/auth/auth_util.py,sha256=Y81h8fGOMSMgPtE4wI_TI9WgE_s43uaPjRLBBINhj4g,4433
@@ -14,8 +14,8 @@ carconnectivity_connectors/seatcupra/auth/session_manager.py,sha256=ZIDvC848T3fy
14
14
  carconnectivity_connectors/seatcupra/auth/vw_web_session.py,sha256=CcI6m68IyRs6WsMDu-IsW3Dj85vyGiMmxvFqNETMHO0,10929
15
15
  carconnectivity_connectors/seatcupra/auth/helpers/blacklist_retry.py,sha256=f3wsiY5bpHDBxp7Va1Mv9nKJ4u3qnCHZZmDu78_AhMk,1251
16
16
  carconnectivity_connectors/seatcupra/ui/connector_ui.py,sha256=SNYnlcGJpbWhuLiIHD2l6H9IfSiMz3IgmvXsdossDnE,1412
17
- carconnectivity_connector_seatcupra-0.1a13.dist-info/LICENSE,sha256=PIwI1alwDyOfvEQHdGCm2u9uf_mGE8030xZDfun0xTo,1071
18
- carconnectivity_connector_seatcupra-0.1a13.dist-info/METADATA,sha256=OCSdxFdOXRtkkNDtzjWcDlcFGxRMTCQHQ8cq2AX-HzI,5641
19
- carconnectivity_connector_seatcupra-0.1a13.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
20
- carconnectivity_connector_seatcupra-0.1a13.dist-info/top_level.txt,sha256=KqA8GviZsDH4PtmnwSQsz0HB_w-TWkeEHLIRNo5dTaI,27
21
- carconnectivity_connector_seatcupra-0.1a13.dist-info/RECORD,,
17
+ carconnectivity_connector_seatcupra-0.1a15.dist-info/LICENSE,sha256=PIwI1alwDyOfvEQHdGCm2u9uf_mGE8030xZDfun0xTo,1071
18
+ carconnectivity_connector_seatcupra-0.1a15.dist-info/METADATA,sha256=O10hztHSKmJMu8BqxiB6qh1isOsQv7gfOnU9M7vVffw,5641
19
+ carconnectivity_connector_seatcupra-0.1a15.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
20
+ carconnectivity_connector_seatcupra-0.1a15.dist-info/top_level.txt,sha256=KqA8GviZsDH4PtmnwSQsz0HB_w-TWkeEHLIRNo5dTaI,27
21
+ carconnectivity_connector_seatcupra-0.1a15.dist-info/RECORD,,
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '0.1a13'
20
+ __version__ = version = '0.1a15'
21
21
  __version_tuple__ = version_tuple = (0, 1)
@@ -6,6 +6,7 @@ import threading
6
6
 
7
7
  import json
8
8
  import os
9
+ import traceback
9
10
  import logging
10
11
  import netrc
11
12
  from datetime import datetime, timezone, timedelta
@@ -83,6 +84,7 @@ class Connector(BaseConnector):
83
84
  if value is not None and value < timedelta(seconds=180):
84
85
  raise ValueError('Intervall must be at least 180 seconds')
85
86
  return value
87
+ self._healthy = False
86
88
 
87
89
  self.interval._is_changeable = True # pylint: disable=protected-access
88
90
  self.interval._add_on_set_hook(__check_interval) # pylint: disable=protected-access
@@ -171,6 +173,7 @@ class Connector(BaseConnector):
171
173
  self._background_thread = threading.Thread(target=self._background_loop, daemon=False)
172
174
  self._background_thread.name = 'carconnectivity.connectors.seatcupra-background'
173
175
  self._background_thread.start()
176
+ self._healthy = True
174
177
 
175
178
  def _background_loop(self) -> None:
176
179
  self._stop_event.clear()
@@ -206,6 +209,10 @@ class Connector(BaseConnector):
206
209
  except TemporaryAuthenticationError as err:
207
210
  LOG.error('Temporary authentification error during update (%s). Will try again after configured interval of %ss', str(err), interval)
208
211
  self._stop_event.wait(interval)
212
+ except Exception as err:
213
+ LOG.critical('Critical error during update: %s', traceback.format_exc())
214
+ self._healthy = False
215
+ raise err
209
216
  else:
210
217
  self._stop_event.wait(interval)
211
218
 
@@ -461,10 +468,10 @@ class Connector(BaseConnector):
461
468
  else:
462
469
  vehicle.connection_state._set_value(GenericVehicle.ConnectionState.UNKNOWN) # pylint: disable=protected-access
463
470
  LOG_API.info('Unknown connection state %s', vehicle_connection_data['connection']['mode'])
464
- log_extra_keys(LOG_API, f'/api/v2/vehicles/{vin}/connection', vehicle_connection_data, {'connection'})
465
471
  log_extra_keys(LOG_API, f'/api/v2/vehicles/{vin}/connection', vehicle_connection_data['connection'], {'mode'})
466
472
  else:
467
473
  vehicle.connection_state._set_value(None) # pylint: disable=protected-access
474
+ log_extra_keys(LOG_API, f'/api/v2/vehicles/{vin}/connection', vehicle_connection_data, {'connection'})
468
475
  else:
469
476
  vehicle.connection_state._set_value(None) # pylint: disable=protected-access
470
477
 
@@ -861,6 +868,9 @@ class Connector(BaseConnector):
861
868
  vehicle.climatization.settings.target_temperature._set_value(value=target_temperature, # pylint: disable=protected-access
862
869
  measured=captured_at,
863
870
  unit=Temperature.C)
871
+ vehicle.climatization.settings.target_temperature.precision = 0.5
872
+ vehicle.climatization.settings.target_temperature.minimum = 16.0
873
+ vehicle.climatization.settings.target_temperature.maximum = 29.5
864
874
  elif 'targetTemperatureInFahrenheit' in data and data['targetTemperatureInFahrenheit'] is not None:
865
875
  # pylint: disable-next=protected-access
866
876
  vehicle.climatization.settings.target_temperature._add_on_set_hook(self.__on_air_conditioning_settings_change)
@@ -870,6 +880,9 @@ class Connector(BaseConnector):
870
880
  vehicle.climatization.settings.target_temperature._set_value(value=target_temperature, # pylint: disable=protected-access
871
881
  measured=captured_at,
872
882
  unit=Temperature.F)
883
+ vehicle.climatization.settings.target_temperature.precision = 0.5
884
+ vehicle.climatization.settings.target_temperature.minimum = 61.0
885
+ vehicle.climatization.settings.target_temperature.maximum = 85.5
873
886
  else:
874
887
  vehicle.climatization.settings.target_temperature._set_value(None) # pylint: disable=protected-access
875
888
  if 'climatisationWithoutExternalPower' in data and data['climatisationWithoutExternalPower'] is not None:
@@ -910,12 +923,12 @@ class Connector(BaseConnector):
910
923
  if data is not None:
911
924
  if 'charging' in data and data['charging'] is not None:
912
925
  if 'state' in data['charging'] and data['charging']['state'] is not None:
913
- if data['charging']['state'] in SeatCupraCharging.SeatCupraChargingState:
926
+ if data['charging']['state'] in [item.value for item in SeatCupraCharging.SeatCupraChargingState]:
914
927
  volkswagen_charging_state = SeatCupraCharging.SeatCupraChargingState(data['charging']['state'])
915
928
  charging_state: Charging.ChargingState = mapping_seatcupra_charging_state[volkswagen_charging_state]
916
929
  else:
917
930
  LOG_API.info('Unkown charging state %s not in %s', data['charging']['state'],
918
- str(SeatCupraCharging.SeatCupraChargingState))
931
+ str(SeatCupraCharging.SeatCupraChargingState))
919
932
  charging_state = Charging.ChargingState.UNKNOWN
920
933
  vehicle.charging.state._set_value(value=charging_state) # pylint: disable=protected-access
921
934
  else:
@@ -1162,12 +1175,15 @@ class Connector(BaseConnector):
1162
1175
  url = f'https://ola.prod.code.seat.cloud.vwgroup.com/v2/vehicles/{vin}/climatisation/start'
1163
1176
  if vehicle.climatization.settings is None:
1164
1177
  raise CommandError('Could not control climatisation, there are no climatisation settings for the vehicle available.')
1178
+ precision: float = 0.5
1165
1179
  if 'target_temperature' in command_arguments:
1166
1180
  # Round target temperature to nearest 0.5
1167
- command_dict['targetTemperature'] = round(command_arguments['target_temperature'] * 2) / 2
1181
+ command_dict['targetTemperature'] = round(command_arguments['target_temperature'] / precision) * precision
1168
1182
  elif vehicle.climatization.settings.target_temperature is not None and vehicle.climatization.settings.target_temperature.enabled \
1169
1183
  and vehicle.climatization.settings.target_temperature.value is not None:
1170
1184
  temperature_value = vehicle.climatization.settings.target_temperature.value
1185
+ if vehicle.climatization.settings.target_temperature.precision is not None:
1186
+ precision = vehicle.climatization.settings.target_temperature.precision
1171
1187
  if vehicle.climatization.settings.target_temperature.unit == Temperature.C:
1172
1188
  command_dict['targetTemperatureUnit'] = 'celsius'
1173
1189
  elif vehicle.climatization.settings.target_temperature.unit == Temperature.F:
@@ -1175,7 +1191,7 @@ class Connector(BaseConnector):
1175
1191
  else:
1176
1192
  command_dict['targetTemperatureUnit'] = 'celsius'
1177
1193
  if temperature_value is not None:
1178
- command_dict['targetTemperature'] = round(temperature_value * 2) / 2
1194
+ command_dict['targetTemperature'] = round(temperature_value / precision) * precision
1179
1195
  if 'target_temperature_unit' in command_arguments:
1180
1196
  if command_arguments['target_temperature_unit'] == Temperature.C:
1181
1197
  command_dict['targetTemperatureUnit'] = 'celsius'
@@ -1442,3 +1458,6 @@ class Connector(BaseConnector):
1442
1458
 
1443
1459
  def get_type(self) -> str:
1444
1460
  return "carconnectivity-connector-seatcupra"
1461
+
1462
+ def is_healthy(self) -> bool:
1463
+ return self._healthy and super().is_healthy()