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.
- {carconnectivity_connector_seatcupra-0.1a13.dist-info → carconnectivity_connector_seatcupra-0.1a15.dist-info}/METADATA +2 -2
- {carconnectivity_connector_seatcupra-0.1a13.dist-info → carconnectivity_connector_seatcupra-0.1a15.dist-info}/RECORD +7 -7
- carconnectivity_connectors/seatcupra/_version.py +1 -1
- carconnectivity_connectors/seatcupra/connector.py +24 -5
- {carconnectivity_connector_seatcupra-0.1a13.dist-info → carconnectivity_connector_seatcupra-0.1a15.dist-info}/LICENSE +0 -0
- {carconnectivity_connector_seatcupra-0.1a13.dist-info → carconnectivity_connector_seatcupra-0.1a15.dist-info}/WHEEL +0 -0
- {carconnectivity_connector_seatcupra-0.1a13.dist-info → carconnectivity_connector_seatcupra-0.1a15.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: carconnectivity-connector-seatcupra
|
3
|
-
Version: 0.
|
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.
|
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=
|
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=
|
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.
|
18
|
-
carconnectivity_connector_seatcupra-0.
|
19
|
-
carconnectivity_connector_seatcupra-0.
|
20
|
-
carconnectivity_connector_seatcupra-0.
|
21
|
-
carconnectivity_connector_seatcupra-0.
|
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,,
|
@@ -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
|
-
|
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']
|
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
|
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()
|
File without changes
|
File without changes
|