secc package

Subpackages

Submodules

secc.evse_controller module

class secc.evse_controller.DcEVSEDataModel(_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, evseid: Union[str, NoneType] = None, authorization_services: List[shared.xml_classes.common_messages.v2_g_ci_common_messages.AuthorizationType] = None, certificate_installation_service: Union[bool, NoneType] = None, evseprocessing: Union[shared.xml_classes.common_messages.v2_g_ci_common_types.ProcessingType, NoneType] = None, service_renegotiation_supported: Union[bool, NoneType] = None, energy_transfer_service_list: Union[shared.xml_classes.common_messages.v2_g_ci_common_messages.ServiceListType, NoneType] = None, vaslist: Union[shared.xml_classes.common_messages.v2_g_ci_common_messages.ServiceListType, NoneType] = None, service_id: Union[int, NoneType] = None, services: List[shared.xml_classes.common_messages.v2_g_ci_common_messages.ServiceParameterListType] = None, evsestatus: Union[shared.xml_classes.common_messages.v2_g_ci_common_types.EvsestatusType, NoneType] = None, bpt_dc_cpdres_energy_transfer_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.BptDcCpdresEnergyTransferMode, NoneType] = None, dc_cpdres_energy_transfer_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.DcCpdresEnergyTransferMode, NoneType] = None, dc_evseprocessing: Union[shared.xml_classes.dc.v2_g_ci_common_types.ProcessingType, NoneType] = None, evsepresent_voltage: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = None, evsepresent_current: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = None, evsepower_limit_achieved: Union[bool, NoneType] = None, evsecurrent_limit_achieved: Union[bool, NoneType] = None, evsevoltage_limit_achieved: Union[bool, NoneType] = None, bpt_dynamic_dc_clres_control_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.BptDynamicDcClresControlMode, NoneType] = None, dynamic_dc_clres_control_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.DynamicDcClresControlMode, NoneType] = None, bpt_scheduled_dc_clres_control_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.BptScheduledDcClresControlMode, NoneType] = None, scheduled_dc_clres_control_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.ScheduledDcClresControlMode, NoneType] = None, clres_control_mode: Union[shared.xml_classes.dc.v2_g_ci_common_types.ClresControlMode, NoneType] = None)

Bases: secc.evse_controller.EVSEDataModel

bpt_dc_cpdres_energy_transfer_mode: Optional[shared.xml_classes.dc.v2_g_ci_dc.BptDcCpdresEnergyTransferMode] = None
bpt_dynamic_dc_clres_control_mode: Optional[shared.xml_classes.dc.v2_g_ci_dc.BptDynamicDcClresControlMode] = None
bpt_scheduled_dc_clres_control_mode: Optional[shared.xml_classes.dc.v2_g_ci_dc.BptScheduledDcClresControlMode] = None
clres_control_mode: Optional[shared.xml_classes.dc.v2_g_ci_common_types.ClresControlMode] = None
dc_cpdres_energy_transfer_mode: Optional[shared.xml_classes.dc.v2_g_ci_dc.DcCpdresEnergyTransferMode] = None
dc_evseprocessing: Optional[shared.xml_classes.dc.v2_g_ci_common_types.ProcessingType] = None
dynamic_dc_clres_control_mode: Optional[shared.xml_classes.dc.v2_g_ci_dc.DynamicDcClresControlMode] = None
evsecurrent_limit_achieved: Optional[bool] = None
evsepower_limit_achieved: Optional[bool] = None
evsepresent_current: Optional[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType] = None
evsepresent_voltage: Optional[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType] = None
evsevoltage_limit_achieved: Optional[bool] = None
scheduled_dc_clres_control_mode: Optional[shared.xml_classes.dc.v2_g_ci_dc.ScheduledDcClresControlMode] = None
class secc.evse_controller.EVSEDataModel(_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, evseid: Optional[str] = None, authorization_services: Optional[List[shared.xml_classes.common_messages.v2_g_ci_common_messages.AuthorizationType]] = None, certificate_installation_service: Optional[bool] = None, evseprocessing: Optional[shared.xml_classes.common_messages.v2_g_ci_common_types.ProcessingType] = None, service_renegotiation_supported: Optional[bool] = None, energy_transfer_service_list: Optional[shared.xml_classes.common_messages.v2_g_ci_common_messages.ServiceListType] = None, vaslist: Optional[shared.xml_classes.common_messages.v2_g_ci_common_messages.ServiceListType] = None, service_id: Optional[int] = None, services: Optional[List[shared.xml_classes.common_messages.v2_g_ci_common_messages.ServiceParameterListType]] = None, evsestatus: Optional[shared.xml_classes.common_messages.v2_g_ci_common_types.EvsestatusType] = None)

Bases: object

Data model containing anything related to the EVSE.

attach(observer)
authorization_services: List[shared.xml_classes.common_messages.v2_g_ci_common_messages.AuthorizationType] = None
certificate_installation_service: Optional[bool] = None
energy_transfer_service_list: Optional[shared.xml_classes.common_messages.v2_g_ci_common_messages.ServiceListType] = None
evseid: Optional[str] = None
evseprocessing: Optional[shared.xml_classes.common_messages.v2_g_ci_common_types.ProcessingType] = None
evsestatus: Optional[shared.xml_classes.common_messages.v2_g_ci_common_types.EvsestatusType] = None
notification_type: str = None
notify()
service_id: Optional[int] = None
service_renegotiation_supported: Optional[bool] = None
services: List[shared.xml_classes.common_messages.v2_g_ci_common_messages.ServiceParameterListType] = None
supported_app_protocols: List[shared.xml_classes.app_protocol.v2_g_ci_app_protocol.AppProtocolType] = None
vaslist: Optional[shared.xml_classes.common_messages.v2_g_ci_common_messages.ServiceListType] = None
class secc.evse_controller.IDcEVSEController

Bases: secc.evse_controller.IEVSEController

charge_ev: bool = False
class secc.evse_controller.IEVSEController(data_model: dataclasses.dataclass, virtual_mode: Optional[bool] = None, state_machine: shared.physical_interface.PhysicalInterface = <shared.physical_interface.PhysicalInterface object>)

Bases: shared.controller.ControllerInterface

data_model: dataclasses.dataclass
get_config()

secc.evse_dummy_controller module

class secc.evse_dummy_controller.EVSEDummyController

Bases: secc.evse_controller.IEVSEController

Class that implements the DcBptDynamic EVSE controller.

data_model: dataclasses.dataclass
set_machine()

Configures the 61851 state machine.

Returns

class secc.evse_dummy_controller.EVSEEmulator(_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, evseid: Union[str, NoneType] = None, authorization_services: List[shared.xml_classes.common_messages.v2_g_ci_common_messages.AuthorizationType] = None, certificate_installation_service: Union[bool, NoneType] = None, evseprocessing: Union[shared.xml_classes.common_messages.v2_g_ci_common_types.ProcessingType, NoneType] = None, service_renegotiation_supported: Union[bool, NoneType] = None, energy_transfer_service_list: Union[shared.xml_classes.common_messages.v2_g_ci_common_messages.ServiceListType, NoneType] = None, vaslist: Union[shared.xml_classes.common_messages.v2_g_ci_common_messages.ServiceListType, NoneType] = None, service_id: Union[int, NoneType] = None, services: List[shared.xml_classes.common_messages.v2_g_ci_common_messages.ServiceParameterListType] = None, evsestatus: Union[shared.xml_classes.common_messages.v2_g_ci_common_types.EvsestatusType, NoneType] = None, bpt_dc_cpdres_energy_transfer_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.BptDcCpdresEnergyTransferMode, NoneType] = None, dc_cpdres_energy_transfer_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.DcCpdresEnergyTransferMode, NoneType] = None, dc_evseprocessing: Union[shared.xml_classes.dc.v2_g_ci_common_types.ProcessingType, NoneType] = None, evsepresent_voltage: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = None, evsepresent_current: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = RationalNumberType(exponent=0, value=0), evsepower_limit_achieved: Union[bool, NoneType] = None, evsecurrent_limit_achieved: Union[bool, NoneType] = None, evsevoltage_limit_achieved: Union[bool, NoneType] = None, bpt_dynamic_dc_clres_control_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.BptDynamicDcClresControlMode, NoneType] = None, dynamic_dc_clres_control_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.DynamicDcClresControlMode, NoneType] = None, bpt_scheduled_dc_clres_control_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.BptScheduledDcClresControlMode, NoneType] = None, scheduled_dc_clres_control_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.ScheduledDcClresControlMode, NoneType] = None, clres_control_mode: Union[shared.xml_classes.dc.v2_g_ci_common_types.ClresControlMode, NoneType] = None, departure_time: Union[int, NoneType] = 86400, ev_departure_time: Union[int, NoneType] = <property object at 0x7f02f9005680>, _ev_departure_time: Union[int, NoneType] = 0, minimum_soc: int = 0, target_soc: int = <property object at 0x7f02f90056d0>, _target_soc: Union[int, NoneType] = 0, evsemaximum_charge_power: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = None, evseminimum_charge_power: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = None, evsemaximum_discharge_power: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = None, evseminimum_discharge_power: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = None, evsemaximum_charge_current: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = None, evseminimum_charge_current: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = None, evsemaximum_discharge_current: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = None, evseminimum_discharge_current: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = None, evsemaximum_voltage: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = None, evseminimum_voltage: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = None, evsepresent_power: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = None, internal_resistance: Union[float, NoneType] = 0.1, present_soc: int = <property object at 0x7f02f9005590>, state: str = <property object at 0x7f02f90055e0>, battery_capacity: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = <property object at 0x7f02f9005630>, _battery_capacity: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = RationalNumberType(exponent=0, value=0), consumed_energy: int = 0, provided_energy: int = 0, total_energy: int = 0, evmaximum_discharge_power: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = <property object at 0x7f02f9005770>, _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 0x7f02f9005720>, _evmaximum_charge_power: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = RationalNumberType(exponent=0, value=0))

Bases: secc.evse_controller.DcEVSEDataModel

property battery_capacity
consumed_energy: int = 0
departure_time: Optional[int] = 86400
energy_evolution = [0]
property ev_departure_time
property evmaximum_charge_power
property evmaximum_discharge_power
evsemaximum_charge_current: Optional[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType] = None
evsemaximum_charge_power: Optional[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType] = None
evsemaximum_discharge_current: Optional[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType] = None
evsemaximum_discharge_power: Optional[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType] = None
evsemaximum_voltage: Optional[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType] = None
evseminimum_charge_current: Optional[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType] = None
evseminimum_charge_power: Optional[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType] = None
evseminimum_discharge_current: Optional[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType] = None
evseminimum_discharge_power: Optional[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType] = None
evseminimum_voltage: Optional[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType] = None
evsepresent_current: Optional[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType] = RationalNumberType(exponent=0, value=0)
evsepresent_power: Optional[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType] = None
get_bpt_dc_cpdres_energy_transfer_mode()

Builds message containing BptDcCpdresEnergyTransferMode.

Returns

XML object.

get_bpt_dynamic_dc_clres_control_mode()

Builds message containing BptDynamicDcClresControlMode.

Returns

XML object.

get_dynamic_seres_control_mode()

Builds message containing DynamicSeresControlModeType.

Returns

XML object.

internal_resistance: Optional[float] = 0.1
minimum_soc: int = 0
power_evolution = [0]
property present_soc
provided_energy: int = 0
property state
property target_soc
total_energy: int = 0
update_charging_status(present_soc, battery_energy_capacity, power)

Updates data model by calculating values.

Parameters
  • present_soc – The present state of charge.

  • battery_energy_capacity – The total battery capacity.

  • power – The current power.

Returns

secc.evse_gui module

class secc.evse_gui.EVSEMainWindow

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

retranslate_ui(main_window)

Retranslates some texts.

Parameters

main_window – The window containing all the widgets.

Returns

run_evse()
set_ev_settings()

Sets EV settings.

Returns

set_present_current()
setup_ui(main_window)

Sets the UI.

Parameters

main_window – The window containing all the widgets.

Returns

update(subject)

Updates the UI.

Returns

update_timer()

Updates the departure time timer.

Returns

secc.evse_session module

class secc.evse_session.EVSESession(controller)

Bases: shared.session.CommunicationSession

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

static generate_random_session_id() str

Generates a random 8-length int number. See [V2G20-2621] for more detail. Might have security issues.

Returns

str – the resulting id.

class secc.evse_session.EVSESessionParameters(session_id: bytes = None, ip_address: str = None, port: int = None, evseid: Union[str, NoneType] = None, authorization_services: List[shared.xml_classes.common_messages.v2_g_ci_common_messages.AuthorizationType] = None, certificate_installation_service: Union[bool, NoneType] = None, eim_asres_authorization_mode: Union[object, NoneType] = None, pn_c_asres_authorization_mode: Union[shared.xml_classes.common_messages.v2_g_ci_common_messages.PnCAsresAuthorizationModeType, NoneType] = None, evseprocessing: Union[shared.xml_classes.common_messages.v2_g_ci_common_types.ProcessingType, NoneType] = None, service_renegotiation_supported: Union[bool, NoneType] = None, energy_transfer_service_list: Union[shared.xml_classes.common_messages.v2_g_ci_common_messages.ServiceListType, NoneType] = None, vaslist: Union[shared.xml_classes.common_messages.v2_g_ci_common_messages.ServiceListType, NoneType] = None, service_id: Union[int, NoneType] = None, service_parameter_list: Union[shared.xml_classes.common_messages.v2_g_ci_common_messages.ServiceParameterListType, NoneType] = None, bpt_dc_cpdres_energy_transfer_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.BptDcCpdresEnergyTransferMode, NoneType] = None, dc_cpdres_energy_transfer_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.DcCpdresEnergyTransferMode, NoneType] = None, dc_evseprocessing: Union[shared.xml_classes.dc.v2_g_ci_common_types.ProcessingType, NoneType] = None, evsepresent_voltage: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = None, evsestatus: Union[shared.xml_classes.common_messages.v2_g_ci_common_types.EvsestatusType, NoneType] = None, evsepresent_current: Union[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType, NoneType] = None, evsepower_limit_achieved: Union[bool, NoneType] = None, evsecurrent_limit_achieved: Union[bool, NoneType] = None, evsevoltage_limit_achieved: Union[bool, NoneType] = None, bpt_dynamic_dc_clres_control_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.BptDynamicDcClresControlMode, NoneType] = None, dynamic_dc_clres_control_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.DynamicDcClresControlMode, NoneType] = None, bpt_scheduled_dc_clres_control_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.BptScheduledDcClresControlMode, NoneType] = None, scheduled_dc_clres_control_mode: Union[shared.xml_classes.dc.v2_g_ci_dc.ScheduledDcClresControlMode, NoneType] = None, clres_control_mode: Union[shared.xml_classes.dc.v2_g_ci_common_types.ClresControlMode, NoneType] = None)

Bases: shared.session.SessionParameters

authorization_services: List[shared.xml_classes.common_messages.v2_g_ci_common_messages.AuthorizationType] = None
bpt_dc_cpdres_energy_transfer_mode: Optional[shared.xml_classes.dc.v2_g_ci_dc.BptDcCpdresEnergyTransferMode] = None
bpt_dynamic_dc_clres_control_mode: Optional[shared.xml_classes.dc.v2_g_ci_dc.BptDynamicDcClresControlMode] = None
bpt_scheduled_dc_clres_control_mode: Optional[shared.xml_classes.dc.v2_g_ci_dc.BptScheduledDcClresControlMode] = None
certificate_installation_service: Optional[bool] = None
clres_control_mode: Optional[shared.xml_classes.dc.v2_g_ci_common_types.ClresControlMode] = None
dc_cpdres_energy_transfer_mode: Optional[shared.xml_classes.dc.v2_g_ci_dc.DcCpdresEnergyTransferMode] = None
dc_evseprocessing: Optional[shared.xml_classes.dc.v2_g_ci_common_types.ProcessingType] = None
dynamic_dc_clres_control_mode: Optional[shared.xml_classes.dc.v2_g_ci_dc.DynamicDcClresControlMode] = None
eim_asres_authorization_mode: Optional[object] = None
energy_transfer_service_list: Optional[shared.xml_classes.common_messages.v2_g_ci_common_messages.ServiceListType] = None
evsecurrent_limit_achieved: Optional[bool] = None
evseid: Optional[str] = None
evsepower_limit_achieved: Optional[bool] = None
evsepresent_current: Optional[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType] = None
evsepresent_voltage: Optional[shared.xml_classes.dc.v2_g_ci_common_types.RationalNumberType] = None
evseprocessing: Optional[shared.xml_classes.common_messages.v2_g_ci_common_types.ProcessingType] = None
evsestatus: Optional[shared.xml_classes.common_messages.v2_g_ci_common_types.EvsestatusType] = None
evsevoltage_limit_achieved: Optional[bool] = None
pn_c_asres_authorization_mode: Optional[shared.xml_classes.common_messages.v2_g_ci_common_messages.PnCAsresAuthorizationModeType] = None
scheduled_dc_clres_control_mode: Optional[shared.xml_classes.dc.v2_g_ci_dc.ScheduledDcClresControlMode] = None
service_id: Optional[int] = None
service_parameter_list: Optional[shared.xml_classes.common_messages.v2_g_ci_common_messages.ServiceParameterListType] = None
service_renegotiation_supported: Optional[bool] = None
vaslist: Optional[shared.xml_classes.common_messages.v2_g_ci_common_messages.ServiceListType] = None

secc.evse_session_handler module

class secc.evse_session_handler.EVSESessionHandler

Bases: shared.session_handler.SessionHandler

This is the class representing the EVSE session handler.

get_config()

Gets the needed configuration to run a SessionHandler.

Returns

get_tcp_server_address()

Gets a TCP server address from a specified interface set in the configuration file.

Returns

start_new_session(controller)

Starts a new communication session.

Parameters

controller – The controller that will handle the data.

Returns

secc.start_evse module

secc.start_evse.start_evse(controller) None

Starts the EVSE.

Parameters

controller – The controller that will handle the data.

Returns

secc.tcp_server module

class secc.tcp_server.TCPServerProtocol(controller)

Bases: asyncio.protocols.Protocol

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

attach(observer)
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.

notify()
process_incoming_message(v2gtp_message: shared.messages.V2GTPMessage)

Processes incoming messages.

Parameters

v2gtp_message – The incoming message.

Returns

process_reaction(reaction)

Depending on the incoming message, processes the resulting reaction.

Parameters

reaction – The reaction generated by the message.

Returns

property session
secc.tcp_server.get_ssl_context() ssl.SSLContext

Returns an SSL context based on 15118-20 recommendations.

Returns

ssl.SSLContext – the SSL settings for the TLS connection.

secc.tcp_server.get_tcp_server(controller, tcp_server_address: str, tcp_server_port: int)

Returns the TCP server used in the 15118 communication.

Parameters
  • controller – The controller that will handle the data.

  • tcp_server_address – The server address.

  • tcp_server_port – The server port.

Returns

server – the created server

secc.udp_server module

class secc.udp_server.UDPServerProtocol(tcp_server_address, tcp_server_port)

Bases: asyncio.protocols.DatagramProtocol

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

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.)

secc.udp_server.get_udp_server(tcp_server_address, tcp_server_port)

Returns UDP server used in 15118 communication.

Parameters
  • tcp_server_address – The TCP server address.

  • tcp_server_port – The TCP server port.

Returns

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

Module contents