evcc package

Subpackages

Submodules

evcc.ev_controller module

class evcc.ev_controller.DcEVDataModel(_observers: List[shared.gui.GUI] = <factory>, notification_type: str = None, supported_app_protocols: List[shared.xml_classes.app_protocol.v2_g_ci_app_protocol.AppProtocolType] = None, evccid: Union[bytes, NoneType] = None, authorization_services: List[shared.xml_classes.common_messages.v2_g_ci_common_messages.AuthorizationType] = None, selected_authorization_service: Union[shared.xml_classes.common_messages.v2_g_ci_common_messages.AuthorizationType, NoneType] = None, eim_areq_authorization_mode: Union[object, NoneType] = None, pn_c_areq_authorization_mode: Union[shared.xml_classes.common_messages.v2_g_ci_common_messages.PnCAreqAuthorizationModeType, NoneType] = None, supported_service_ids: Union[shared.xml_classes.common_messages.v2_g_ci_common_messages.ServiceIdlistType, NoneType] = None, service_id: Union[int, NoneType] = None, selected_energy_transfer_service: Union[shared.xml_classes.common_messages.v2_g_ci_common_messages.SelectedServiceType, NoneType] = None, selected_vaslist: Union[shared.xml_classes.common_messages.v2_g_ci_common_messages.SelectedServiceListType, NoneType] = None, evprocessing: Union[shared.xml_classes.dc.v2_g_ci_common_types.ProcessingType, NoneType] = None, charge_progress: Union[shared.xml_classes.common_messages.v2_g_ci_common_messages.ChargeProgressType, NoneType] = None, evpower_profile: Union[shared.xml_classes.common_messages.v2_g_ci_common_messages.EvpowerProfileType, NoneType] = None, bpt_channel_selection: Union[shared.xml_classes.common_messages.v2_g_ci_common_messages.ChannelSelectionType, NoneType] = None, bpt_dc_cpdreq_energy_transfer_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.BptDcCpdreqEnergyTransferMode, NoneType] = None, dc_cpdreq_energy_transfer_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.DcCpdreqEnergyTransferMode, NoneType] = None, evtarget_voltage: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = None, evpresent_voltage: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = None, bpt_dynamic_dc_clreq_control_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.BptDynamicDcClreqControlMode, NoneType] = None, dynamic_dc_clreq_control_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.DynamicDcClreqControlMode, NoneType] = None, bpt_scheduled_dc_clreq_control_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.BptScheduledDcClreqControlMode, NoneType] = None, scheduled_dc_clreq_control_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.ScheduledDcClreqControlMode, NoneType] = None, clreq_control_mode: Union[shared.xml_classes.dc.v2_g_ci_common_types.ClreqControlMode, NoneType] = None)

Bases: evcc.ev_controller.EVDataModel

bpt_dc_cpdreq_energy_transfer_mode: Optional[shared.xml_classes.dc.v2_g_ci_dc.BptDcCpdreqEnergyTransferMode] = None
bpt_dynamic_dc_clreq_control_mode: Optional[shared.xml_classes.dc.v2_g_ci_dc.BptDynamicDcClreqControlMode] = None
bpt_scheduled_dc_clreq_control_mode: Optional[shared.xml_classes.dc.v2_g_ci_dc.BptScheduledDcClreqControlMode] = None
clreq_control_mode: Optional[shared.xml_classes.dc.v2_g_ci_common_types.ClreqControlMode] = None
dc_cpdreq_energy_transfer_mode: Optional[shared.xml_classes.dc.v2_g_ci_dc.DcCpdreqEnergyTransferMode] = None
dynamic_dc_clreq_control_mode: Optional[shared.xml_classes.dc.v2_g_ci_dc.DynamicDcClreqControlMode] = None
evpresent_voltage: Optional[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType] = None
evprocessing: Optional[shared.xml_classes.dc.v2_g_ci_common_types.ProcessingType] = None
evtarget_voltage: Optional[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType] = None
scheduled_dc_clreq_control_mode: Optional[shared.xml_classes.dc.v2_g_ci_dc.ScheduledDcClreqControlMode] = None
class evcc.ev_controller.EVDataModel(_observers: List[shared.gui.GUI] = <factory>, notification_type: Optional[str] = None, supported_app_protocols: Optional[List[shared.xml_classes.app_protocol.v2_g_ci_app_protocol.AppProtocolType]] = None, evccid: Optional[bytes] = None, authorization_services: Optional[List[shared.xml_classes.common_messages.v2_g_ci_common_messages.AuthorizationType]] = None, selected_authorization_service: Optional[shared.xml_classes.common_messages.v2_g_ci_common_messages.AuthorizationType] = None, eim_areq_authorization_mode: Optional[object] = None, pn_c_areq_authorization_mode: Optional[shared.xml_classes.common_messages.v2_g_ci_common_messages.PnCAreqAuthorizationModeType] = None, supported_service_ids: Optional[shared.xml_classes.common_messages.v2_g_ci_common_messages.ServiceIdlistType] = None, service_id: Optional[int] = None, selected_energy_transfer_service: Optional[shared.xml_classes.common_messages.v2_g_ci_common_messages.SelectedServiceType] = None, selected_vaslist: Optional[shared.xml_classes.common_messages.v2_g_ci_common_messages.SelectedServiceListType] = None, evprocessing: Optional[shared.xml_classes.common_messages.v2_g_ci_common_types.ProcessingType] = None, charge_progress: Optional[shared.xml_classes.common_messages.v2_g_ci_common_messages.ChargeProgressType] = None, evpower_profile: Optional[shared.xml_classes.common_messages.v2_g_ci_common_messages.EvpowerProfileType] = None, bpt_channel_selection: Optional[shared.xml_classes.common_messages.v2_g_ci_common_messages.ChannelSelectionType] = None)

Bases: object

Data model containing anything related to the EV.

attach(observer)
authorization_services: List[shared.xml_classes.common_messages.v2_g_ci_common_messages.AuthorizationType] = None
bpt_channel_selection: Optional[shared.xml_classes.common_messages.v2_g_ci_common_messages.ChannelSelectionType] = None
charge_progress: Optional[shared.xml_classes.common_messages.v2_g_ci_common_messages.ChargeProgressType] = None
eim_areq_authorization_mode: Optional[object] = None
evccid: Optional[bytes] = None
evpower_profile: Optional[shared.xml_classes.common_messages.v2_g_ci_common_messages.EvpowerProfileType] = None
evprocessing: Optional[shared.xml_classes.common_messages.v2_g_ci_common_types.ProcessingType] = None
notification_type: str = None
notify()
pn_c_areq_authorization_mode: Optional[shared.xml_classes.common_messages.v2_g_ci_common_messages.PnCAreqAuthorizationModeType] = None
selected_authorization_service: Optional[shared.xml_classes.common_messages.v2_g_ci_common_messages.AuthorizationType] = None
selected_energy_transfer_service: Optional[shared.xml_classes.common_messages.v2_g_ci_common_messages.SelectedServiceType] = None
selected_vaslist: Optional[shared.xml_classes.common_messages.v2_g_ci_common_messages.SelectedServiceListType] = None
service_id: Optional[int] = None
supported_app_protocols: List[shared.xml_classes.app_protocol.v2_g_ci_app_protocol.AppProtocolType] = None
supported_service_ids: Optional[shared.xml_classes.common_messages.v2_g_ci_common_messages.ServiceIdlistType] = None
class evcc.ev_controller.IDcEVController

Bases: evcc.ev_controller.IEVController

class evcc.ev_controller.IEVController(data_model: <function dataclass at 0x7f0318ddaf70>, virtual_mode: bool = None, state_machine: shared.physical_interface.PhysicalInterface = <shared.physical_interface.PhysicalInterface object at 0x7f0318e6e820>, udp_port: int = None)

Bases: shared.controller.ControllerInterface

get_config()
set_network_parameters()
udp_port: int = None

evcc.ev_dummy_controller module

class evcc.ev_dummy_controller.EVDummyController

Bases: evcc.ev_controller.IEVController

Class that implements the DcBptDynamic EV controller.

data_model: dataclass
set_machine()

Configures the 61851 state machine.

Returns

class evcc.ev_dummy_controller.EVEmulator(_observers: List[shared.gui.GUI] = <factory>, notification_type: str = None, supported_app_protocols: List[shared.xml_classes.app_protocol.v2_g_ci_app_protocol.AppProtocolType] = None, evccid: Union[bytes, NoneType] = None, authorization_services: List[shared.xml_classes.common_messages.v2_g_ci_common_messages.AuthorizationType] = None, selected_authorization_service: Union[shared.xml_classes.common_messages.v2_g_ci_common_messages.AuthorizationType, NoneType] = None, eim_areq_authorization_mode: Union[object, NoneType] = None, pn_c_areq_authorization_mode: Union[shared.xml_classes.common_messages.v2_g_ci_common_messages.PnCAreqAuthorizationModeType, NoneType] = None, supported_service_ids: Union[shared.xml_classes.common_messages.v2_g_ci_common_messages.ServiceIdlistType, NoneType] = None, service_id: Union[int, NoneType] = None, selected_energy_transfer_service: Union[shared.xml_classes.common_messages.v2_g_ci_common_messages.SelectedServiceType, NoneType] = None, selected_vaslist: Union[shared.xml_classes.common_messages.v2_g_ci_common_messages.SelectedServiceListType, NoneType] = None, evprocessing: Union[shared.xml_classes.dc.v2_g_ci_common_types.ProcessingType, NoneType] = None, charge_progress: Union[shared.xml_classes.common_messages.v2_g_ci_common_messages.ChargeProgressType, NoneType] = None, evpower_profile: Union[shared.xml_classes.common_messages.v2_g_ci_common_messages.EvpowerProfileType, NoneType] = None, bpt_channel_selection: Union[shared.xml_classes.common_messages.v2_g_ci_common_messages.ChannelSelectionType, NoneType] = None, bpt_dc_cpdreq_energy_transfer_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.BptDcCpdreqEnergyTransferMode, NoneType] = None, dc_cpdreq_energy_transfer_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.DcCpdreqEnergyTransferMode, NoneType] = None, evtarget_voltage: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = None, evpresent_voltage: shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType = None, bpt_dynamic_dc_clreq_control_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.BptDynamicDcClreqControlMode, NoneType] = None, dynamic_dc_clreq_control_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.DynamicDcClreqControlMode, NoneType] = None, bpt_scheduled_dc_clreq_control_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.BptScheduledDcClreqControlMode, NoneType] = None, scheduled_dc_clreq_control_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.ScheduledDcClreqControlMode, NoneType] = None, clreq_control_mode: Union[shared.xml_classes.dc.v2_g_ci_common_types.ClreqControlMode, NoneType] = None, timestamp: float = 0, timestep: float = 0, minimum_soc: int = 0, maximum_soc: int = 100, departure_time: int = <property object at 0x7f0313db5860>, _departure_time: int = 0, battery_capacity: shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType = <property object at 0x7f0313db57c0>, target_soc: int = <property object at 0x7f0313db58b0>, _target_soc: int = 0, present_soc: int = <property object at 0x7f0313db52c0>, evmaximum_voltage: shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType = None, evminimum_voltage: shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType = None, current_energy: Union[float, NoneType] = None, soc: <built-in function array> = None, max_charge_power: <built-in function array> = None, max_discharge_power: <built-in function array> = None, elapsed_time: float = 0, state: str = <property object at 0x7f0313db5770>, consumed_energy: int = 0, provided_energy: int = 0, total_energy: int = 0, evsemaximum_discharge_power: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = <property object at 0x7f0313db5950>, _evsemaximum_discharge_power: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = RationalNumberType(exponent=0, value=0), evsemaximum_charge_power: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = <property object at 0x7f0313db5900>, evmaximum_discharge_power: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = <property object at 0x7f0313db59f0>, _evmaximum_discharge_power: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = RationalNumberType(exponent=0, value=0), evmaximum_charge_power: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = <property object at 0x7f0313db59a0>, _evmaximum_charge_power: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = RationalNumberType(exponent=0, value=0))

Bases: evcc.ev_controller.DcEVDataModel

property battery_capacity
consumed_energy: int = 0
current_energy: Optional[float] = None
property departure_time
elapsed_time: float = 0
energy_evolution = [0]
property evmaximum_charge_power
property evmaximum_discharge_power
evmaximum_voltage: shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType = None
evminimum_voltage: shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType = None
evpresent_voltage: shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType = None
property evsemaximum_charge_power
property evsemaximum_discharge_power
get_bpt_dc_cpdreq_energy_transfer_mode() shared.xml_classes.dc.v2_g_ci_dc.BptDcCpdreqEnergyTransferMode

Returns BptDcCpdreqEnergyTransferMode request.

Returns

BptDcCpdreqEnergyTransferMode – the request.

get_bpt_dynamic_dc_clreq_control_mode() shared.xml_classes.dc.v2_g_ci_dc.BptDynamicDcClreqControlMode

Returns BptDynamicDcClreqControlMode request.

Returns

BptDynamicDcClreqControlMode – the request

get_current_energy() float

Gets the current energy value.

Returns

float - current energy.

get_dynamic_sereq_control_mode() shared.xml_classes.common_messages.v2_g_ci_common_messages.DynamicSereqControlModeType

Returns DynamicSereqControlModeType request.

Returns

DynamicSereqControlModeType – the message.

get_max_charge_parameters() -> (<class 'shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType'>, <class 'shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType'>)

Gets max charge power and max current from a vehicle’s charging data.

Returns

(DcRationalNumberType, DcRationalNumberType) – max charge power and max current.

get_max_discharge_parameters() -> (<class 'shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType'>, <class 'shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType'>)

Gets max discharge power and max discharge current from a vehicle’s charging data.

Returns

(DcRationalNumberType, DcRationalNumberType) – max discharge power and max discharge current.

get_max_energy() float

Gets max energy.

Returns

float - max energy.

get_min_charge_parameters() -> (<class 'shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType'>, <class 'shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType'>)

Gets min charge power and min current from a vehicle’s charging data.

Returns

(DcRationalNumberType, DcRationalNumberType) – min charge power and min current.

get_min_discharge_parameters() -> (<class 'shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType'>, <class 'shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType'>)

Gets min discharge power and min discharge current from a vehicle’s charging data.

Returns

(DcRationalNumberType, DcRationalNumberType) – min discharge power and min discharge current.

get_min_energy() float

Gets min energy.

Returns

float - min energy.

get_target_energy() float

Gets target energy.

Returns

float - target energy.

get_voltage_limits() -> (<class 'shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType'>, <class 'shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType'>)

Returns the EV voltage limits.

Returns

(DcRationalNumberType, DcRationalNumberType) – max and min limits.

max_charge_power: numpy.array = None
max_discharge_power: numpy.array = None
maximum_soc: int = 100
minimum_soc: int = 0
power_evolution = [0]
property present_soc
provided_energy: int = 0
soc: numpy.array = None
soc_evolution = [0]
property state
property target_soc
timestamp: float = 0
timestep: float = 0
total_energy: int = 0
update_charging_status(present_current, present_voltage, time_step)

Updates the battery values.

Parameters
  • present_current – The present current.

  • present_voltage – The present voltage.

  • time_step – The time spent between two ticks of charge.

Returns

evcc.ev_dummy_controller.battery_voltage_profile(soc) float

The battery profile.

Parameters

soc – State of charge

Returns

float – the present voltage.

evcc.ev_gui module

class evcc.ev_gui.EVMainWindow

Bases: shared.gui.GUI

check_state_box(state)

Checks the boxes depending on the current state.

Returns

connect_signals()

Connects data to their respective widgets.

Returns

reset_check_boxes() None

Resets state checkboxes.

Returns

retranslate_ui(main_window)

Retranslates some texts.

Parameters

main_window – The window containing all the widgets.

Returns

run_ev() None

Runs charging session from EV side.

Returns

set_ev_settings()

Sets EV settings.

Returns

setup_ui(main_window)

Sets the UI.

Parameters

main_window – The window containing all the widgets.

Returns

startup_ev()
stop_ev() None

Stops the EV.

Returns

update(subject)

Updates the UI.

Returns

update_soc() None

Updates the present soc.

Returns

update_timer()

Updates the departure time timer.

Returns

evcc.ev_session module

class evcc.ev_session.EVSession(controller)

Bases: shared.session.CommunicationSession

Represents a EV side communication session. Built with a state machine.

charging()
is_state_exitable(state)
processing()
stop_loop()
stop_session()
class evcc.ev_session.EVSessionParameters(session_id: bytes = None, ip_address: str = None, port: int = None, charging: bool = False, stop_session: bool = False, processing: bool = False)

Bases: shared.session.SessionParameters

charge_param_discovery_req = None
charging: bool = False
chosen_app_protocol = None
evse_id = None
processing: bool = False
reaction = None
selected_authorization_service = None
selected_payment_option = None
stop_session: bool = False

evcc.ev_session_handler module

class evcc.ev_session_handler.EVSessionHandler

Bases: shared.session_handler.SessionHandler

This is a class that represents EV’s session handler.

get_config()

Gets the needed configuration to run a SessionHandler.

Returns

set_network_parameters()

Sets the settings according to the configuration file.

Returns

start_new_session(controller)

Starts a new communication session.

Parameters

controller – The controller that will handle the data.

Returns

property udp_port

evcc.event_handler module

class evcc.event_handler.KeyboardListener(callback)

Bases: object

Class that listens to the keyboard.

async job()

evcc.start_ev module

evcc.start_ev.start_ev(controller) None

Starts an EV session.

Parameters

controller – The controller that will handle the data.

Returns

evcc.tcp_client module

class evcc.tcp_client.TCPClientProtocol(session_handler)

Bases: asyncio.protocols.Protocol

This is the TCP protocol used by EV client to communicate with the SECC.

async ainput() None

Awaits the ‘return’ key press to stop a session.

Returns

build_session_stop_message() shared.messages.EXIMessage

Builds a SessionStopMessage.

Returns

SessionStopMessage – the message to stop a session.

build_supported_app_protocol_message() shared.messages.SupportedAppMessage

Builds the SupportedAppProtocolMessage.

Returns

SupportedAppMessage – the actual message.

connection_lost(exc: Optional[Exception]) None

Called when the connection is lost or closed.

The argument is an exception object or None (the latter meaning a regular EOF is received or the connection was aborted or closed).

connection_made(transport: asyncio.transports.BaseTransport) None

Called when a connection is made.

The argument is the transport representing the pipe connection. To receive data, wait for data_received() calls. When the connection is closed, connection_lost() is called.

data_received(data: bytes) None

Called when some data is received.

The argument is a bytes object.

eof_received() Optional[bool]

Called when the other end calls write_eof() or equivalent.

If this returns a false value (including None), the transport will close itself. If it returns a true value, closing the transport is up to the protocol.

get_current_state() str

Returns the current 15118 state.

Returns

str - the current state.

process_incoming_message(v2gtp_message: shared.messages.V2GTPMessage) None

Processes the incoming message.

Parameters

v2gtp_message – The incoming message

Returns

process_reaction(reaction) None

Depending on the reaction generated by the incoming message, will send an answer to the server.

Parameters

reaction – The reaction resulting from the incoming message.

Returns

send(xml_string, message, request)

Sends a message and decorates it logger messages about the contents.

Parameters
  • xml_string – The XML string.

  • message – The bytes type message.

  • request – The XML object.

Returns

evcc.tcp_client.get_ssl_context() ssl.SSLContext

Returns an SSL context suitable for 15118 communication.

Returns

ssl.SSLContext – the security context.

evcc.tcp_client.get_tcp_client(tcp_server_address: str, tcp_server_port: int, session_handler: shared.session_handler.SessionHandler)

Returns the TCP client used in the 15118 communication.

Parameters
  • tcp_server_address – The TCP server address.

  • tcp_server_port – The TCP server port.

  • session_handler – The session handler that manages the sessions.

Returns

transport, protocol – the objects associated with the TCP connection.

evcc.udp_client module

class evcc.udp_client.UDPClientProtocol

Bases: asyncio.protocols.DatagramProtocol

This is the protocol used by the SECC discovery protocol client.

connection_lost(exc: Optional[Exception]) None

Called when the connection is lost or closed.

The argument is an exception object or None (the latter meaning a regular EOF is received or the connection was aborted or closed).

connection_made(transport: asyncio.transports.BaseTransport) None

Called when a connection is made.

The argument is the transport representing the pipe connection. To receive data, wait for data_received() calls. When the connection is closed, connection_lost() is called.

datagram_received(data: bytes, addr: Tuple[str, int]) None

Called when some datagram is received.

error_received(exc: Exception) None

Called when a send or receive operation raises an OSError.

(Other than BlockingIOError or InterruptedError.)

async send_SDP_req()
evcc.udp_client.get_udp_client(udp_port, interface)

Returns the UDP client used in 15118 communication.

Parameters
  • udp_port – The UDP port for the client.

  • interface – The interface that will be used for the connection.

Returns

transport, protocol – the objects associated with the UDP connection.

Module contents