Skip to content

Commit 8d0192b

Browse files
authored
Adding EV MCS serivces (#38)
Signed-off-by: Sebastian Lukas <sebastian.lukas@pionix.de>
1 parent 8ad63eb commit 8d0192b

4 files changed

Lines changed: 37 additions & 8 deletions

File tree

iso15118/evcc/controller/simulator.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -362,9 +362,9 @@ async def get_charge_params_v20(
362362
ev_max_discharge_power=RationalNumber(exponent=3, value=11),
363363
ev_min_discharge_power=RationalNumber(exponent=0, value=100),
364364
)
365-
elif selected_service.service == ServiceV20.DC:
365+
elif selected_service.service in [ServiceV20.DC, ServiceV20.MCS]:
366366
return dc_cpd_params
367-
elif selected_service.service == ServiceV20.DC_BPT:
367+
elif selected_service.service in [ServiceV20.DC_BPT, ServiceV20.MCS_BPT]:
368368
return BPTDCChargeParameterDiscoveryReqParams(
369369
**(dc_cpd_params.dict()),
370370
# Todo(sl): Update later if bpt is also available

iso15118/evcc/states/iso15118_20_states.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -747,10 +747,15 @@ async def process_message(
747747
elif self.comm_session.selected_energy_service.service in (
748748
ServiceV20.DC,
749749
ServiceV20.DC_BPT,
750+
ServiceV20.MCS,
751+
ServiceV20.MCS_BPT,
750752
):
751753
dc_params, bpt_dc_params = None, None
752754
self.comm_session.selected_charging_type_is_ac = False
753-
if self.comm_session.selected_energy_service.service == ServiceV20.DC:
755+
if self.comm_session.selected_energy_service.service in (
756+
ServiceV20.DC,
757+
ServiceV20.MCS,
758+
):
754759
dc_params = await self.comm_session.ev_controller.get_charge_params_v20(
755760
self.comm_session.selected_energy_service
756761
)
@@ -850,6 +855,7 @@ async def process_message(
850855
if self.comm_session.selected_energy_service.service in (
851856
ServiceV20.AC_BPT,
852857
ServiceV20.DC_BPT,
858+
ServiceV20.MCS_BPT,
853859
):
854860
power_value = ev_power_profile.entry_list.entries[-1].power.value
855861
if power_value < 0:
@@ -934,6 +940,8 @@ async def process_message(
934940
if self.comm_session.selected_energy_service.service in [
935941
ServiceV20.DC,
936942
ServiceV20.DC_BPT,
943+
ServiceV20.MCS,
944+
ServiceV20.MCS_BPT,
937945
]:
938946
welding_detection_req = DCWeldingDetectionReq(
939947
header=MessageHeader(
@@ -1022,8 +1030,13 @@ async def process_message(
10221030
ISOV20PayloadTypes.AC_MAINSTREAM,
10231031
)
10241032

1025-
elif selected_energy_service.service in [ServiceV20.DC, ServiceV20.DC_BPT]:
1026-
if selected_energy_service.service == ServiceV20.DC:
1033+
elif selected_energy_service.service in [
1034+
ServiceV20.DC,
1035+
ServiceV20.DC_BPT,
1036+
ServiceV20.MCS,
1037+
ServiceV20.MCS_BPT
1038+
]:
1039+
if selected_energy_service.service in [ServiceV20.DC, ServiceV20.MCS]:
10271040
if control_mode == ControlMode.SCHEDULED:
10281041
scheduled_params = (
10291042
await ev_controller.get_scheduled_dc_charge_loop_params()
@@ -1032,7 +1045,7 @@ async def process_message(
10321045
dynamic_params = (
10331046
await ev_controller.get_dynamic_dc_charge_loop_params()
10341047
)
1035-
elif selected_energy_service.service == ServiceV20.DC_BPT:
1048+
elif selected_energy_service.service in [ServiceV20.DC_BPT, ServiceV20.MCS_BPT]:
10361049
if control_mode == ControlMode.SCHEDULED:
10371050
bpt_scheduled_params = (
10381051
await ev_controller.get_bpt_scheduled_dc_charge_loop_params()
@@ -1587,6 +1600,7 @@ async def build_power_delivery_req(self):
15871600
if self.comm_session.selected_energy_service.service in (
15881601
ServiceV20.AC_BPT,
15891602
ServiceV20.DC_BPT,
1603+
ServiceV20.MCS_BPT,
15901604
):
15911605
bpt_channel_selection = ChannelSelection.CHARGE
15921606
if ev_power_profile is not None:
@@ -1691,7 +1705,7 @@ async def process_message(
16911705
async def build_current_demand_data(self):
16921706
scheduled_params, dynamic_params = None, None
16931707
bpt_scheduled_params, bpt_dynamic_params = None, None
1694-
if self.comm_session.selected_energy_service.service == ServiceV20.DC:
1708+
if self.comm_session.selected_energy_service.service in [ServiceV20.DC, ServiceV20.MCS]:
16951709
if self.comm_session.control_mode == ControlMode.SCHEDULED:
16961710
scheduled_params = (
16971711
await self.comm_session.ev_controller.get_scheduled_dc_charge_loop_params() # noqa
@@ -1700,7 +1714,7 @@ async def build_current_demand_data(self):
17001714
dynamic_params = (
17011715
await self.comm_session.ev_controller.get_dynamic_dc_charge_loop_params() # noqa
17021716
)
1703-
elif self.comm_session.selected_energy_service.service == ServiceV20.DC_BPT:
1717+
elif self.comm_session.selected_energy_service.service in [ServiceV20.DC_BPT, ServiceV20.MCS_BPT]:
17041718
if self.comm_session.control_mode == ControlMode.SCHEDULED:
17051719
bpt_scheduled_params = (
17061720
await self.comm_session.ev_controller.get_bpt_scheduled_dc_charge_loop_params() # noqa

iso15118/shared/messages/enums.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,9 @@ class ServiceV20(Enum):
330330
AC_BPT = 5
331331
DC_BPT = 6
332332
DC_ACDP_BPT = 7
333+
MCS = 8
334+
MCS_BPT = 9
335+
AC_DER = 10
333336
INTERNET = 65
334337
PARKING_STATUS = 66
335338

@@ -368,6 +371,15 @@ class DCConnector(IntEnum):
368371
DUAL2 = 3
369372
DUAL4 = 4
370373

374+
class McsConnector(IntEnum):
375+
376+
MCS = 1,
377+
CHAOJI = 2,
378+
ULTRACHAOJI = 3,
379+
RMCS = 4,
380+
XMCS = 5,
381+
AVIATION = 6,
382+
MARINE = 7,
371383

372384
class ControlMode(IntEnum):
373385
"""See e.g. Table 205 in section 8.4.3.2.2 of ISO 15118-20"""

iso15118/shared/utils.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ def load_requested_energy_services(
4848
"AC_BPT",
4949
"DC_BPT",
5050
"DC_ACDP_BPT",
51+
"MCS",
52+
"MCS_BPT",
53+
"AC_DER",
5154
"INTERNET",
5255
"PARKING_STATUS",
5356
]

0 commit comments

Comments
 (0)