introduced sessionId

This commit is contained in:
uhi22 2022-11-16 19:33:37 +01:00
parent 19219e49a5
commit d153af9002
5 changed files with 32 additions and 12 deletions

View file

@ -121,7 +121,8 @@ class fsmEvse():
self.enterState(stateWaitForFlexibleRequest) # todo: not clear, what is specified in DIN self.enterState(stateWaitForFlexibleRequest) # todo: not clear, what is specified in DIN
if (strConverterResult.find("PreChargeReq")>0): if (strConverterResult.find("PreChargeReq")>0):
# todo: check the request content, and fill response parameters # todo: check the request content, and fill response parameters
msg = addV2GTPHeader(exiEncode("EDg")) # EDg for Encode, Din, PreChargeResponse strPresentVoltage = "345"
msg = addV2GTPHeader(exiEncode("EDg_"+strPresentVoltage)) # EDg for Encode, Din, PreChargeResponse
print("responding " + prettyHexMessage(msg)) print("responding " + prettyHexMessage(msg))
self.Tcp.transmit(msg) self.Tcp.transmit(msg)
self.enterState(stateWaitForFlexibleRequest) # todo: not clear, what is specified in DIN self.enterState(stateWaitForFlexibleRequest) # todo: not clear, what is specified in DIN

View file

@ -8,6 +8,7 @@ import pyPlcTcpSocket
import time # for time.sleep() import time # for time.sleep()
from helpers import prettyHexMessage from helpers import prettyHexMessage
from exiConnector import * # for EXI data handling/converting from exiConnector import * # for EXI data handling/converting
import json
stateInitialized = 0 stateInitialized = 0
stateWaitForSupportedApplicationProtocolResponse = 1 stateWaitForSupportedApplicationProtocolResponse = 1
@ -62,7 +63,14 @@ class fsmPev():
print(strConverterResult) print(strConverterResult)
if (strConverterResult.find("SessionSetupRes")>0): if (strConverterResult.find("SessionSetupRes")>0):
# todo: check the request content, and fill response parameters # todo: check the request content, and fill response parameters
msg = addV2GTPHeader(exiEncode("EDB")) # EDB for Encode, Din, ServiceDiscoveryRequest try:
y = json.loads(strConverterResult)
strSessionId = y["header.SessionID"]
print("[PEV] The Evse decided for SessionId " + strSessionId)
self.sessionId = strSessionId
except:
print("ERROR: Could not decode the sessionID")
msg = addV2GTPHeader(exiEncode("EDB_"+self.sessionId)) # EDB for Encode, Din, ServiceDiscoveryRequest
print("responding " + prettyHexMessage(msg)) print("responding " + prettyHexMessage(msg))
self.Tcp.transmit(msg) self.Tcp.transmit(msg)
self.enterState(stateWaitForServiceDiscoveryResponse) self.enterState(stateWaitForServiceDiscoveryResponse)
@ -78,7 +86,7 @@ class fsmPev():
print(strConverterResult) print(strConverterResult)
if (strConverterResult.find("ServiceDiscoveryRes")>0): if (strConverterResult.find("ServiceDiscoveryRes")>0):
# todo: check the request content, and fill response parameters # todo: check the request content, and fill response parameters
msg = addV2GTPHeader(exiEncode("EDC")) # EDC for Encode, Din, ServicePaymentSelection msg = addV2GTPHeader(exiEncode("EDC_"+self.sessionId)) # EDC for Encode, Din, ServicePaymentSelection
print("responding " + prettyHexMessage(msg)) print("responding " + prettyHexMessage(msg))
self.Tcp.transmit(msg) self.Tcp.transmit(msg)
self.enterState(stateWaitForServicePaymentSelectionResponse) self.enterState(stateWaitForServicePaymentSelectionResponse)
@ -94,7 +102,7 @@ class fsmPev():
print(strConverterResult) print(strConverterResult)
if (strConverterResult.find("ServicePaymentSelectionRes")>0): if (strConverterResult.find("ServicePaymentSelectionRes")>0):
# todo: check the request content, and fill response parameters # todo: check the request content, and fill response parameters
msg = addV2GTPHeader(exiEncode("EDE")) # EDE for Encode, Din, ChargeParameterDiscovery. We ignore Authorization, not specified in DIN. msg = addV2GTPHeader(exiEncode("EDE_"+self.sessionId)) # EDE for Encode, Din, ChargeParameterDiscovery. We ignore Authorization, not specified in DIN.
print("responding " + prettyHexMessage(msg)) print("responding " + prettyHexMessage(msg))
self.Tcp.transmit(msg) self.Tcp.transmit(msg)
self.enterState(stateWaitForChargeParameterDiscoveryResponse) self.enterState(stateWaitForChargeParameterDiscoveryResponse)
@ -110,7 +118,7 @@ class fsmPev():
print(strConverterResult) print(strConverterResult)
if (strConverterResult.find("ChargeParameterDiscoveryRes")>0): if (strConverterResult.find("ChargeParameterDiscoveryRes")>0):
# todo: check the request content, and fill response parameters # todo: check the request content, and fill response parameters
msg = addV2GTPHeader(exiEncode("EDF")) # EDF for Encode, Din, CableCheck msg = addV2GTPHeader(exiEncode("EDF_"+self.sessionId)) # EDF for Encode, Din, CableCheck
print("responding " + prettyHexMessage(msg)) print("responding " + prettyHexMessage(msg))
self.Tcp.transmit(msg) self.Tcp.transmit(msg)
self.enterState(stateWaitForCableCheckResponse) self.enterState(stateWaitForCableCheckResponse)
@ -126,7 +134,7 @@ class fsmPev():
print(strConverterResult) print(strConverterResult)
if (strConverterResult.find("CableCheckRes")>0): if (strConverterResult.find("CableCheckRes")>0):
# todo: check the request content, and fill response parameters # todo: check the request content, and fill response parameters
msg = addV2GTPHeader(exiEncode("EDG")) # EDG for Encode, Din, PreCharge msg = addV2GTPHeader(exiEncode("EDG_"+self.sessionId)) # EDG for Encode, Din, PreCharge
print("responding " + prettyHexMessage(msg)) print("responding " + prettyHexMessage(msg))
self.Tcp.transmit(msg) self.Tcp.transmit(msg)
self.enterState(stateWaitForPreChargeResponse) self.enterState(stateWaitForPreChargeResponse)
@ -181,6 +189,7 @@ class fsmPev():
self.Tcp = pyPlcTcpSocket.pyPlcTcpClientSocket() self.Tcp = pyPlcTcpSocket.pyPlcTcpClientSocket()
self.addressManager = addressManager self.addressManager = addressManager
self.state = stateNotYetInitialized self.state = stateNotYetInitialized
self.sessionId = "DEAD55AADEAD55AA"
self.cyclesInState = 0 self.cyclesInState = 0
self.rxData = [] self.rxData = []
# we do NOT call the reInit, because we want to wait with the connection until external trigger comes # we do NOT call the reInit, because we want to wait with the connection until external trigger comes

View file

@ -48,6 +48,11 @@ if (len(sys.argv) > 1):
if (sys.argv[1] == "E"): if (sys.argv[1] == "E"):
myMode = C_EVSE_MODE myMode = C_EVSE_MODE
isSimulationMode=0
if (len(sys.argv) > 2):
if (sys.argv[2] == "S"):
isSimulationMode=1
if (myMode == C_LISTEN_MODE): if (myMode == C_LISTEN_MODE):
print("starting in LISTEN_MODE") print("starting in LISTEN_MODE")
if (myMode == C_PEV_MODE): if (myMode == C_PEV_MODE):
@ -71,7 +76,7 @@ lblMode.pack()
root.bind('<Key>', storekeyname) root.bind('<Key>', storekeyname)
cbShowStatus("initialized") cbShowStatus("initialized")
root.update() root.update()
worker=pyPlcWorker.pyPlcWorker(cbAddToTrace, cbShowStatus, myMode) worker=pyPlcWorker.pyPlcWorker(cbAddToTrace, cbShowStatus, myMode, isSimulationMode)
nMainloops=0 nMainloops=0
nKeystrokes=0 nKeystrokes=0

View file

@ -733,7 +733,10 @@ class pyPlcHomeplug():
if (self.pevSequenceState==10): # SLAC is finished, SET_KEY.REQ is transmitted. Wait some time, until if (self.pevSequenceState==10): # SLAC is finished, SET_KEY.REQ is transmitted. Wait some time, until
# the homeplug modem made the reset and is ready with the new key. # the homeplug modem made the reset and is ready with the new key.
self.addToTrace("[PEVSLAC] waiting until homeplug modem starts up with new key...") self.addToTrace("[PEVSLAC] waiting until homeplug modem starts up with new key...")
self.pevSequenceDelayCycles = 200 if (self.isSimulationMode==0):
self.pevSequenceDelayCycles = 200 # long waiting time if we have real homeplug modems
else:
self.pevSequenceDelayCycles = 10 # short waiting in simulation
self.enterState(11) self.enterState(11)
return return
if (self.pevSequenceState==11): if (self.pevSequenceState==11):
@ -755,7 +758,7 @@ class pyPlcHomeplug():
return return
# we should have received a software version response from at least two modems. # we should have received a software version response from at least two modems.
print("[PEVSLAC] Number of modems in the AVLN: " + str(self.numberOfSoftwareVersionResponses)) print("[PEVSLAC] Number of modems in the AVLN: " + str(self.numberOfSoftwareVersionResponses))
if (self.numberOfSoftwareVersionResponses<2): if ((self.numberOfSoftwareVersionResponses<2) and (self.isSimulationMode==0)):
print("[PEVSLAC] ERROR: There should be at least two modems, one from car and one from charger.") print("[PEVSLAC] ERROR: There should be at least two modems, one from car and one from charger.")
self.callbackAvlnEstablished(0) # report that we lost the connection self.callbackAvlnEstablished(0) # report that we lost the connection
self.addressManager.setSeccIp("") # forget the IPv6 of the charger self.addressManager.setSeccIp("") # forget the IPv6 of the charger
@ -809,7 +812,7 @@ class pyPlcHomeplug():
self.ipv6.enterListenMode() self.ipv6.enterListenMode()
self.showStatus("LISTEN mode", "mode") self.showStatus("LISTEN mode", "mode")
def __init__(self, callbackAddToTrace=None, callbackShowStatus=None, mode=C_LISTEN_MODE, addrMan=None, callbackAvlnEstablished=None): def __init__(self, callbackAddToTrace=None, callbackShowStatus=None, mode=C_LISTEN_MODE, addrMan=None, callbackAvlnEstablished=None, isSimulationMode=0):
self.mytransmitbuffer = bytearray("Hallo das ist ein Test", 'UTF-8') self.mytransmitbuffer = bytearray("Hallo das ist ein Test", 'UTF-8')
self.nPacketsReceived = 0 self.nPacketsReceived = 0
self.callbackAddToTrace = callbackAddToTrace self.callbackAddToTrace = callbackAddToTrace
@ -819,6 +822,7 @@ class pyPlcHomeplug():
self.pevSequenceState = 0 self.pevSequenceState = 0
self.pevSequenceCyclesInState = 0 self.pevSequenceCyclesInState = 0
self.numberOfSoftwareVersionResponses = 0 self.numberOfSoftwareVersionResponses = 0
self.isSimulationMode = isSimulationMode # simulation without homeplug modem
#self.sniffer = pcap.pcap(name=None, promisc=True, immediate=True, timeout_ms=50) #self.sniffer = pcap.pcap(name=None, promisc=True, immediate=True, timeout_ms=50)
# eth3 means: Third entry from back, in the list of interfaces, which is provided by pcap.findalldevs. # eth3 means: Third entry from back, in the list of interfaces, which is provided by pcap.findalldevs.
# Improvement necessary: select the interface based on the name. # Improvement necessary: select the interface based on the name.

View file

@ -12,7 +12,7 @@ import addressManager
class pyPlcWorker(): class pyPlcWorker():
def __init__(self, callbackAddToTrace=None, callbackShowStatus=None, mode=C_EVSE_MODE): def __init__(self, callbackAddToTrace=None, callbackShowStatus=None, mode=C_EVSE_MODE, isSimulationMode=0):
print("initializing pyPlcWorker") print("initializing pyPlcWorker")
self.nMainFunctionCalls=0 self.nMainFunctionCalls=0
self.mode = mode self.mode = mode
@ -22,7 +22,8 @@ class pyPlcWorker():
self.callbackAddToTrace = callbackAddToTrace self.callbackAddToTrace = callbackAddToTrace
self.callbackShowStatus = callbackShowStatus self.callbackShowStatus = callbackShowStatus
self.oldAvlnStatus = 0 self.oldAvlnStatus = 0
self.hp = pyPlcHomeplug.pyPlcHomeplug(self.callbackAddToTrace, self.callbackShowStatus, self.mode, self.addressManager, self.callbackAvlnEstablished) self.isSimulationMode = isSimulationMode
self.hp = pyPlcHomeplug.pyPlcHomeplug(self.callbackAddToTrace, self.callbackShowStatus, self.mode, self.addressManager, self.callbackAvlnEstablished, self.isSimulationMode)
if (self.mode == C_EVSE_MODE): if (self.mode == C_EVSE_MODE):
self.evse = fsmEvse.fsmEvse() self.evse = fsmEvse.fsmEvse()
if (self.mode == C_PEV_MODE): if (self.mode == C_PEV_MODE):