Skip to content

Commit d6167c5

Browse files
author
Thomas Salm
committed
circular import fixed; start_charging_with_retry added
1 parent 4710b0e commit d6167c5

4 files changed

Lines changed: 60 additions & 54 deletions

File tree

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "saic_ismart_client"
7-
version = "1.4.2"
7+
version = "1.4.3"
88
authors = [
99
{ name = "Thomas Salm", email="saic-python-client@devtom.de"},
1010
]

src/saic_ismart_client/common_model.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -522,3 +522,52 @@ def init_from_dict(self, data: dict):
522522
self.mcc_sim = data.get(FIELD_MCC_SIM)
523523
self.mnc_sim = data.get(FIELD_MNC_SIM)
524524
self.signal_strength = data.get(FIELD_SIGNAL_STRENGTH)
525+
526+
527+
class TargetBatteryCode(Enum):
528+
P_40 = 1
529+
P_50 = 2
530+
P_60 = 3
531+
P_70 = 4
532+
P_80 = 5
533+
P_90 = 6
534+
P_100 = 7
535+
536+
def get_percentage(self) -> int:
537+
match self:
538+
case TargetBatteryCode.P_40:
539+
return 40
540+
case TargetBatteryCode.P_50:
541+
return 50
542+
case TargetBatteryCode.P_60:
543+
return 60
544+
case TargetBatteryCode.P_70:
545+
return 70
546+
case TargetBatteryCode.P_80:
547+
return 80
548+
case TargetBatteryCode.P_90:
549+
return 90
550+
case TargetBatteryCode.P_100:
551+
return 100
552+
case _:
553+
raise ValueError(f'Unknown target battery code: {self}')
554+
555+
@staticmethod
556+
def from_percentage(percentage: int):
557+
match percentage:
558+
case 40:
559+
return TargetBatteryCode.P_40
560+
case 50:
561+
return TargetBatteryCode.P_50
562+
case 60:
563+
return TargetBatteryCode.P_60
564+
case 70:
565+
return TargetBatteryCode.P_70
566+
case 80:
567+
return TargetBatteryCode.P_80
568+
case 90:
569+
return TargetBatteryCode.P_90
570+
case 100:
571+
return TargetBatteryCode.P_100
572+
case _: # default
573+
raise ValueError(f'Unknown target battery percentage: {percentage}')

src/saic_ismart_client/ota_v3_0/data_model.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
from saic_ismart_client.common_model import ApplicationData, Asn1Type
2-
from saic_ismart_client.saic_api import TargetBatteryCode
1+
from saic_ismart_client.common_model import ApplicationData, Asn1Type, TargetBatteryCode
32

43

54
class OtaChrgMangDataResp(ApplicationData):

src/saic_ismart_client/saic_api.py

Lines changed: 9 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88

99
import requests as requests
1010

11-
from saic_ismart_client.common_model import AbstractMessage, AbstractMessageBody, Header, MessageBodyV2, MessageV2
11+
from saic_ismart_client.common_model import AbstractMessage, AbstractMessageBody, Header, MessageBodyV2, MessageV2, \
12+
TargetBatteryCode
1213
from saic_ismart_client.ota_v1_1.Message import MessageCoderV11
1314
from saic_ismart_client.ota_v1_1.data_model import AbortSendMessageReq, AlarmSwitch, AlarmSwitchReq, Message, \
1415
MessageBodyV11, MessageListReq, MessageListResp, MessageV11, MpAlarmSettingType, MpUserLoggingInReq, \
@@ -31,55 +32,6 @@ class ScheduledChargingMode(Enum):
3132
UNTIL_CONFIGURED_TIME = 1
3233

3334

34-
class TargetBatteryCode(Enum):
35-
P_40 = 1
36-
P_50 = 2
37-
P_60 = 3
38-
P_70 = 4
39-
P_80 = 5
40-
P_90 = 6
41-
P_100 = 7
42-
43-
def get_percentage(self) -> int:
44-
match self:
45-
case TargetBatteryCode.P_40:
46-
return 40
47-
case TargetBatteryCode.P_50:
48-
return 50
49-
case TargetBatteryCode.P_60:
50-
return 60
51-
case TargetBatteryCode.P_70:
52-
return 70
53-
case TargetBatteryCode.P_80:
54-
return 80
55-
case TargetBatteryCode.P_90:
56-
return 90
57-
case TargetBatteryCode.P_100:
58-
return 100
59-
case _:
60-
raise ValueError(f'Unknown target battery code: {self}')
61-
62-
@staticmethod
63-
def from_percentage(percentage: int):
64-
match percentage:
65-
case 40:
66-
return TargetBatteryCode.P_40
67-
case 50:
68-
return TargetBatteryCode.P_50
69-
case 60:
70-
return TargetBatteryCode.P_60
71-
case 70:
72-
return TargetBatteryCode.P_70
73-
case 80:
74-
return TargetBatteryCode.P_80
75-
case 90:
76-
return TargetBatteryCode.P_90
77-
case 100:
78-
return TargetBatteryCode.P_100
79-
case _: # default
80-
raise ValueError(f'Unknown target battery percentage: {percentage}')
81-
82-
8335
class SaicMessage:
8436
def __init__(self, message_id: int, message_type: str, title: str, message_time: datetime, sender: str,
8537
content: str, read_status: int, vin: str):
@@ -679,7 +631,7 @@ def control_charging_port_lock(self, unlock: bool, vin_info: VinInfo, event_id:
679631
self.publish_json_response(application_id, application_data_protocol_version, chrg_ctrl_rsp_msg.get_data())
680632
return chrg_ctrl_rsp_msg
681633

682-
def control_charging(self, stop_charging: bool, vin_info: VinInfo, event_id: str = None):
634+
def control_charging(self, stop_charging: bool, vin_info: VinInfo, event_id: str = None) -> MessageV30:
683635
chrg_ctrl_req = OtaChrgCtrlReq()
684636
chrg_ctrl_req.chrgCtrlReq = 2 if stop_charging else 1
685637
chrg_ctrl_req.tboxV2XReq = 0
@@ -702,6 +654,12 @@ def control_charging(self, stop_charging: bool, vin_info: VinInfo, event_id: str
702654
self.publish_json_response(application_id, application_data_protocol_version, chrg_ctrl_rsp_msg.get_data())
703655
return chrg_ctrl_rsp_msg
704656

657+
def start_charging(self, vin_info: VinInfo, event_id: str = None) -> MessageV30:
658+
return self.control_charging(False, vin_info, event_id)
659+
660+
def start_charging_with_retry(self, vin_info: VinInfo) -> MessageV30:
661+
return self.handle_retry(self.start_charging, vin_info)
662+
705663
def set_target_battery_soc(self, target_soc: TargetBatteryCode, vin_info: VinInfo, event_id: str = None):
706664
chrg_setng_req = OtaChrgSetngReq()
707665
chrg_setng_req.onBdChrgTrgtSOCReq = target_soc.value

0 commit comments

Comments
 (0)