hyundai-kia-connect-api 3.10.0__tar.gz → 3.10.7__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.
Files changed (45) hide show
  1. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/PKG-INFO +1 -1
  2. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/README.rst +1 -1
  3. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/hyundai_kia_connect_api/HyundaiBlueLinkAPIUSA.py +46 -22
  4. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/hyundai_kia_connect_api/KiaUvoAPIUSA.py +3 -0
  5. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/hyundai_kia_connect_api/KiaUvoApiAU.py +3 -0
  6. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/hyundai_kia_connect_api/KiaUvoApiCA.py +3 -0
  7. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/hyundai_kia_connect_api/KiaUvoApiCN.py +3 -0
  8. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/hyundai_kia_connect_api/KiaUvoApiEU.py +24 -14
  9. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/hyundai_kia_connect_api/Vehicle.py +8 -2
  10. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/hyundai_kia_connect_api/utils.py +15 -0
  11. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/hyundai_kia_connect_api.egg-info/PKG-INFO +1 -1
  12. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/setup.py +1 -1
  13. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/AUTHORS.rst +0 -0
  14. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/CONTRIBUTING.rst +0 -0
  15. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/HISTORY.rst +0 -0
  16. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/LICENSE +0 -0
  17. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/MANIFEST.in +0 -0
  18. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/docs/Makefile +0 -0
  19. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/docs/authors.rst +0 -0
  20. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/docs/conf.py +0 -0
  21. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/docs/contributing.rst +0 -0
  22. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/docs/history.rst +0 -0
  23. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/docs/index.rst +0 -0
  24. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/docs/installation.rst +0 -0
  25. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/docs/make.bat +0 -0
  26. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/docs/readme.rst +0 -0
  27. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/docs/usage.rst +0 -0
  28. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/hyundai_kia_connect_api/ApiImpl.py +0 -0
  29. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/hyundai_kia_connect_api/Token.py +0 -0
  30. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/hyundai_kia_connect_api/VehicleManager.py +0 -0
  31. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/hyundai_kia_connect_api/__init__.py +0 -0
  32. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/hyundai_kia_connect_api/const.py +0 -0
  33. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/hyundai_kia_connect_api/exceptions.py +0 -0
  34. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/hyundai_kia_connect_api.egg-info/SOURCES.txt +0 -0
  35. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/hyundai_kia_connect_api.egg-info/dependency_links.txt +0 -0
  36. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/hyundai_kia_connect_api.egg-info/not-zip-safe +0 -0
  37. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/hyundai_kia_connect_api.egg-info/requires.txt +0 -0
  38. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/hyundai_kia_connect_api.egg-info/top_level.txt +0 -0
  39. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/requirements.txt +0 -0
  40. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/setup.cfg +0 -0
  41. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/tests/__init__.py +0 -0
  42. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/tests/au_login_test.py +0 -0
  43. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/tests/ca_login_test.py +0 -0
  44. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/tests/eu_check_response_for_errors_test.py +0 -0
  45. {hyundai_kia_connect_api-3.10.0 → hyundai_kia_connect_api-3.10.7}/tests/eu_login_test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hyundai_kia_connect_api
3
- Version: 3.10.0
3
+ Version: 3.10.7
4
4
  Summary: Python Boilerplate contains all the boilerplate you need to create a Python package.
5
5
  Home-page: https://github.com/fuatakgun/hyundai_kia_connect_api
6
6
  Author: Fuat Akgun
@@ -102,4 +102,4 @@ Example of getting trip info of the current month and day (vm is VehicleManager
102
102
  vm.update_day_trip_info(vehicle.id, day.yyyymmdd)
103
103
  if vehicle.day_trip_info is not None:
104
104
  for trip in reversed(vehicle.day_trip_info.trip_list): # show oldest first
105
- print(f"{day.yyyymmdd},{trip.hhmmss},{trip.drive_time},{trip.idle_time},{trip.distance},{trip.avg_speed},{trip.max_speed}")
105
+ print(f"{day.yyyymmdd},{trip.hhmmss},{trip.drive_time},{trip.idle_time},{trip.distance},{trip.avg_speed},{trip.max_speed}")
@@ -16,12 +16,14 @@ from .const import (
16
16
  SEAT_STATUS,
17
17
  DISTANCE_UNITS,
18
18
  TEMPERATURE_UNITS,
19
+ ENGINE_TYPES,
19
20
  )
20
- from .utils import get_child_value
21
+ from .utils import get_child_value, get_float
21
22
  from .ApiImpl import ApiImpl, ClimateRequestOptions
22
23
  from .Token import Token
23
24
  from .Vehicle import Vehicle
24
25
 
26
+
25
27
  CIPHERS = "DEFAULT@SECLEVEL=1"
26
28
 
27
29
  _LOGGER = logging.getLogger(__name__)
@@ -256,6 +258,9 @@ class HyundaiBlueLinkAPIUSA(ApiImpl):
256
258
  vehicle.washer_fluid_warning_is_on = get_child_value(
257
259
  state, "vehicleStatus.washerFluidStatus"
258
260
  )
261
+ vehicle.brake_fluid_warning_is_on = get_child_value(
262
+ state, "vehicleStatus.breakOilStatus"
263
+ )
259
264
  vehicle.smart_key_battery_warning_is_on = get_child_value(
260
265
  state, "vehicleStatus.smartKeyBatteryWarning"
261
266
  )
@@ -420,8 +425,8 @@ class HyundaiBlueLinkAPIUSA(ApiImpl):
420
425
  if state["vehicleStatus"] is not None:
421
426
  vehicle_location_result = None
422
427
  if vehicle.odometer:
423
- if vehicle.odometer < get_child_value(
424
- state["vehicleDetails"], "odometer"
428
+ if vehicle.odometer < get_float(
429
+ get_child_value(state["vehicleDetails"], "odometer")
425
430
  ):
426
431
  vehicle_location_result = self._get_vehicle_location(token, vehicle)
427
432
  else:
@@ -467,10 +472,16 @@ class HyundaiBlueLinkAPIUSA(ApiImpl):
467
472
  result = []
468
473
  for entry in response["enrolledVehicleDetails"]:
469
474
  entry = entry["vehicleDetails"]
475
+ entry_engine_type = None
476
+ if entry["evStatus"] == "N":
477
+ entry_engine_type = ENGINE_TYPES.ICE
478
+ elif entry["evStatus"] == "E":
479
+ entry_engine_type = ENGINE_TYPES.EV
470
480
  vehicle: Vehicle = Vehicle(
471
481
  id=entry["regid"],
472
482
  name=entry["nickName"],
473
483
  VIN=entry["vin"],
484
+ engine_type=entry_engine_type,
474
485
  model=entry["modelCode"],
475
486
  registration_date=["enrollmentDate"],
476
487
  timezone=self.data_timezone,
@@ -508,8 +519,10 @@ class HyundaiBlueLinkAPIUSA(ApiImpl):
508
519
  self, token: Token, vehicle: Vehicle, options: ClimateRequestOptions
509
520
  ) -> str:
510
521
  _LOGGER.debug(f"{DOMAIN} - Start engine..")
511
-
512
- url = self.API_URL + "rcs/rsc/start"
522
+ if vehicle.engine_type == ENGINE_TYPES.EV:
523
+ url = self.API_URL + "evc/fatc/start"
524
+ else:
525
+ url = self.API_URL + "rcs/rsc/start"
513
526
 
514
527
  headers = self._get_vehicle_headers(token, vehicle)
515
528
  _LOGGER.debug(f"{DOMAIN} - Start engine headers: {headers}")
@@ -533,22 +546,30 @@ class HyundaiBlueLinkAPIUSA(ApiImpl):
533
546
  if options.rear_right_seat is None:
534
547
  options.rear_right_seat = 0
535
548
 
536
- data = {
537
- "Ims": 0,
538
- "airCtrl": int(options.climate),
539
- "airTemp": {"unit": 1, "value": options.set_temp},
540
- "defrost": options.defrost,
541
- "heating1": int(options.heating),
542
- "igniOnDuration": options.duration,
543
- "seatHeaterVentInfo": {
544
- "drvSeatHeatState": options.front_left_seat,
545
- "astSeatHeatState": options.front_right_seat,
546
- "rlSeatHeatState": options.rear_left_seat,
547
- "rrSeatHeatState": options.rear_right_seat,
548
- },
549
- "username": token.username,
550
- "vin": vehicle.id,
551
- }
549
+ if vehicle.engine_type == ENGINE_TYPES.EV:
550
+ data = {
551
+ "airCtrl": int(options.climate),
552
+ "airTemp": {"value": str(options.set_temp), "unit": 1},
553
+ "defrost": options.defrost,
554
+ "heating1": int(options.heating),
555
+ }
556
+ else:
557
+ data = {
558
+ "Ims": 0,
559
+ "airCtrl": int(options.climate),
560
+ "airTemp": {"unit": 1, "value": options.set_temp},
561
+ "defrost": options.defrost,
562
+ "heating1": int(options.heating),
563
+ "igniOnDuration": options.duration,
564
+ "seatHeaterVentInfo": {
565
+ "drvSeatHeatState": options.front_left_seat,
566
+ "astSeatHeatState": options.front_right_seat,
567
+ "rlSeatHeatState": options.rear_left_seat,
568
+ "rrSeatHeatState": options.rear_right_seat,
569
+ },
570
+ "username": token.username,
571
+ "vin": vehicle.id,
572
+ }
552
573
  _LOGGER.debug(f"{DOMAIN} - Start engine data: {data}")
553
574
 
554
575
  response = self.sessions.post(url, json=data, headers=headers)
@@ -560,7 +581,10 @@ class HyundaiBlueLinkAPIUSA(ApiImpl):
560
581
  def stop_climate(self, token: Token, vehicle: Vehicle) -> None:
561
582
  _LOGGER.debug(f"{DOMAIN} - Stop engine..")
562
583
 
563
- url = self.API_URL + "rcs/rsc/stop"
584
+ if vehicle.engine_type == ENGINE_TYPES.EV:
585
+ url = self.API_URL + "evc/fatc/stop"
586
+ else:
587
+ url = self.API_URL + "rcs/rsc/stop"
564
588
 
565
589
  headers = self._get_vehicle_headers(token, vehicle)
566
590
 
@@ -302,6 +302,9 @@ class KiaUvoAPIUSA(ApiImpl):
302
302
  vehicle.washer_fluid_warning_is_on = get_child_value(
303
303
  state, "lastVehicleInfo.vehicleStatusRpt.vehicleStatus.washerFluidStatus"
304
304
  )
305
+ vehicle.brake_fluid_warning_is_on = get_child_value(
306
+ state, "lastVehicleInfo.vehicleStatusRpt.vehicleStatus.breakOilStatus"
307
+ )
305
308
  vehicle.smart_key_battery_warning_is_on = get_child_value(
306
309
  state,
307
310
  "lastVehicleInfo.vehicleStatusRpt.vehicleStatus.smartKeyBatteryWarning",
@@ -623,6 +623,9 @@ class KiaUvoApiAU(ApiImpl):
623
623
  vehicle.washer_fluid_warning_is_on = get_child_value(
624
624
  state, "status.washerFluidStatus"
625
625
  )
626
+ vehicle.brake_fluid_warning_is_on = get_child_value(
627
+ state, "status.breakOilStatus"
628
+ )
626
629
  vehicle.fuel_level = get_child_value(state, "status.fuelLevel")
627
630
  vehicle.fuel_level_is_low = get_child_value(state, "status.lowFuelLight")
628
631
  vehicle.air_control_is_on = get_child_value(state, "status.airCtrlOn")
@@ -276,6 +276,9 @@ class KiaUvoApiCA(ApiImpl):
276
276
  vehicle.washer_fluid_warning_is_on = get_child_value(
277
277
  state, "status.washerFluidStatus"
278
278
  )
279
+ vehicle.brake_fluid_warning_is_on = get_child_value(
280
+ state, "status.breakOilStatus"
281
+ )
279
282
  vehicle.tire_pressure_rear_left_warning_is_on = bool(
280
283
  get_child_value(state, "status.tirePressureLamp.tirePressureLampRL")
281
284
  )
@@ -617,6 +617,9 @@ class KiaUvoApiCN(ApiImpl):
617
617
  vehicle.washer_fluid_warning_is_on = get_child_value(
618
618
  state, "status.washerFluidStatus"
619
619
  )
620
+ vehicle.brake_fluid_warning_is_on = get_child_value(
621
+ state, "status.breakOilStatus"
622
+ )
620
623
  vehicle.fuel_level = get_child_value(state, "status.fuelLevel")
621
624
  vehicle.fuel_level_is_low = get_child_value(state, "status.lowFuelLight")
622
625
  vehicle.air_control_is_on = get_child_value(state, "status.airCtrlOn")
@@ -707,6 +707,9 @@ class KiaUvoApiEU(ApiImpl):
707
707
  vehicle.washer_fluid_warning_is_on = get_child_value(
708
708
  state, "vehicleStatus.washerFluidStatus"
709
709
  )
710
+ vehicle.brake_fluid_warning_is_on = get_child_value(
711
+ state, "vehicleStatus.breakOilStatus"
712
+ )
710
713
  vehicle.fuel_level = get_child_value(state, "vehicleStatus.fuelLevel")
711
714
  vehicle.fuel_level_is_low = get_child_value(state, "vehicleStatus.lowFuelLight")
712
715
  vehicle.air_control_is_on = get_child_value(state, "vehicleStatus.airCtrlOn")
@@ -779,6 +782,7 @@ class KiaUvoApiEU(ApiImpl):
779
782
  ).json()
780
783
  _LOGGER.debug(f"{DOMAIN} - Lock Action Response: {response}")
781
784
  _check_response_for_errors(response)
785
+ token.device_id = self._get_device_id(self._get_stamp())
782
786
  return response["msgId"]
783
787
 
784
788
  def charge_port_action(
@@ -793,6 +797,7 @@ class KiaUvoApiEU(ApiImpl):
793
797
  ).json()
794
798
  _LOGGER.debug(f"{DOMAIN} - Charge Port Action Response: {response}")
795
799
  _check_response_for_errors(response)
800
+ token.device_id = self._get_device_id(self._get_stamp())
796
801
  return response["msgId"]
797
802
 
798
803
  def start_climate(
@@ -833,6 +838,7 @@ class KiaUvoApiEU(ApiImpl):
833
838
  ).json()
834
839
  _LOGGER.debug(f"{DOMAIN} - Start Climate Action Response: {response}")
835
840
  _check_response_for_errors(response)
841
+ token.device_id = self._get_device_id(self._get_stamp())
836
842
  return response["msgId"]
837
843
 
838
844
  def stop_climate(self, token: Token, vehicle: Vehicle) -> str:
@@ -854,6 +860,7 @@ class KiaUvoApiEU(ApiImpl):
854
860
  ).json()
855
861
  _LOGGER.debug(f"{DOMAIN} - Stop Climate Action Response: {response}")
856
862
  _check_response_for_errors(response)
863
+ token.device_id = self._get_device_id(self._get_stamp())
857
864
  return response["msgId"]
858
865
 
859
866
  def start_charge(self, token: Token, vehicle: Vehicle) -> str:
@@ -866,6 +873,7 @@ class KiaUvoApiEU(ApiImpl):
866
873
  ).json()
867
874
  _LOGGER.debug(f"{DOMAIN} - Start Charge Action Response: {response}")
868
875
  _check_response_for_errors(response)
876
+ token.device_id = self._get_device_id(self._get_stamp())
869
877
  return response["msgId"]
870
878
 
871
879
  def stop_charge(self, token: Token, vehicle: Vehicle) -> str:
@@ -878,6 +886,7 @@ class KiaUvoApiEU(ApiImpl):
878
886
  ).json()
879
887
  _LOGGER.debug(f"{DOMAIN} - Stop Charge Action Response: {response}")
880
888
  _check_response_for_errors(response)
889
+ token.device_id = self._get_device_id(self._get_stamp())
881
890
  return response["msgId"]
882
891
 
883
892
  def _get_charge_limits(self, token: Token, vehicle: Vehicle) -> dict:
@@ -1032,22 +1041,23 @@ class KiaUvoApiEU(ApiImpl):
1032
1041
  response30d = response30d.json()
1033
1042
  _LOGGER.debug(f"{DOMAIN} - get_driving_info response30d {response30d}")
1034
1043
  _check_response_for_errors(response30d)
1035
- if get_child_value(responseAlltime, "resMsg.drivingInfoDetail.0"):
1036
- drivingInfo = responseAlltime["resMsg"]["drivingInfoDetail"][0]
1044
+ if get_child_value(responseAlltime, "resMsg.drivingInfo.0"):
1045
+ drivingInfo = responseAlltime["resMsg"]["drivingInfo"][0]
1037
1046
 
1038
1047
  drivingInfo["dailyStats"] = []
1039
- for day in response30d["resMsg"]["drivingInfoDetail"]:
1040
- processedDay = DailyDrivingStats(
1041
- date=dt.datetime.strptime(day["drivingDate"], "%Y%m%d"),
1042
- total_consumed=day["totalPwrCsp"],
1043
- engine_consumption=day["motorPwrCsp"],
1044
- climate_consumption=day["climatePwrCsp"],
1045
- onboard_electronics_consumption=day["eDPwrCsp"],
1046
- battery_care_consumption=day["batteryMgPwrCsp"],
1047
- regenerated_energy=day["regenPwr"],
1048
- distance=day["calculativeOdo"],
1049
- )
1050
- drivingInfo["dailyStats"].append(processedDay)
1048
+ if get_child_value(response30d, "resMsg.drivingInfoDetail.0"):
1049
+ for day in response30d["resMsg"]["drivingInfoDetail"]:
1050
+ processedDay = DailyDrivingStats(
1051
+ date=dt.datetime.strptime(day["drivingDate"], "%Y%m%d"),
1052
+ total_consumed=day["totalPwrCsp"],
1053
+ engine_consumption=day["motorPwrCsp"],
1054
+ climate_consumption=day["climatePwrCsp"],
1055
+ onboard_electronics_consumption=day["eDPwrCsp"],
1056
+ battery_care_consumption=day["batteryMgPwrCsp"],
1057
+ regenerated_energy=day["regenPwr"],
1058
+ distance=day["calculativeOdo"],
1059
+ )
1060
+ drivingInfo["dailyStats"].append(processedDay)
1051
1061
 
1052
1062
  for drivingInfoItem in response30d["resMsg"]["drivingInfo"]:
1053
1063
  if drivingInfoItem["drivingPeriod"] == 0:
@@ -5,6 +5,7 @@ import datetime
5
5
  import typing
6
6
  from dataclasses import dataclass, field
7
7
 
8
+ from .utils import get_float
8
9
  from .const import *
9
10
 
10
11
  _LOGGER = logging.getLogger(__name__)
@@ -301,11 +302,16 @@ class Vehicle:
301
302
  def odometer(self):
302
303
  return self._odometer
303
304
 
305
+ @property
306
+ def odometer_unit(self):
307
+ return self._odometer_unit
308
+
304
309
  @odometer.setter
305
310
  def odometer(self, value):
306
- self._odometer_value = value[0]
311
+ float_value = get_float(value[0])
312
+ self._odometer_value = float_value
307
313
  self._odometer_unit = value[1]
308
- self._odometer = value[0]
314
+ self._odometer = float_value
309
315
 
310
316
  @property
311
317
  def air_temperature(self):
@@ -15,6 +15,21 @@ def get_child_value(data, key):
15
15
  return value
16
16
 
17
17
 
18
+ def get_float(value):
19
+ if value is None:
20
+ return None
21
+ if isinstance(value, float):
22
+ return value
23
+ if isinstance(value, int):
24
+ return float(value)
25
+ if isinstance(value, str):
26
+ try:
27
+ return float(value)
28
+ except ValueError:
29
+ return value # original fallback
30
+ return value # original fallback
31
+
32
+
18
33
  def get_hex_temp_into_index(value):
19
34
  if value is not None:
20
35
  value = value.replace("H", "")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hyundai-kia-connect-api
3
- Version: 3.10.0
3
+ Version: 3.10.7
4
4
  Summary: Python Boilerplate contains all the boilerplate you need to create a Python package.
5
5
  Home-page: https://github.com/fuatakgun/hyundai_kia_connect_api
6
6
  Author: Fuat Akgun
@@ -44,6 +44,6 @@ setup(
44
44
  test_suite="tests",
45
45
  tests_require=test_requirements,
46
46
  url="https://github.com/fuatakgun/hyundai_kia_connect_api",
47
- version="3.10.0",
47
+ version="3.10.7",
48
48
  zip_safe=False,
49
49
  )