mirror of
https://github.com/uhi22/pyPLC.git
synced 2024-11-20 01:13:58 +00:00
feature: pcapconverter measures the time for cablecheck and precharge
This commit is contained in:
parent
01c7c069fd
commit
d017ca65e5
1 changed files with 67 additions and 2 deletions
|
@ -32,13 +32,35 @@ import json
|
||||||
# The path where the script will search for pcap files:
|
# The path where the script will search for pcap files:
|
||||||
directory = '../temp'
|
directory = '../temp'
|
||||||
|
|
||||||
|
# stop the evaluation after this number of packets. Set to zero to have no limit.
|
||||||
|
nLimitNumberOfPackets = 1000
|
||||||
|
|
||||||
|
|
||||||
|
def getManufacturerFromMAC(strMAC):
|
||||||
|
# Examples based on https://macvendors.com/, and own experience
|
||||||
|
if (strMAC[0:5]=="ec:a2"):
|
||||||
|
return "Kempower"
|
||||||
|
if (strMAC[0:8]=="dc:44:27"):
|
||||||
|
return "Tesla"
|
||||||
|
if (strMAC[0:8]=="ce:25:1a"):
|
||||||
|
return "Alpitronic"
|
||||||
|
if (strMAC[0:8]=="1a:a9:8e"):
|
||||||
|
return "Alpitronic"
|
||||||
|
if (strMAC[0:8]=="e8:eb:1b"):
|
||||||
|
return "Microchip (maybe ABB)"
|
||||||
|
if (strMAC[0:5]=="18:d7"):
|
||||||
|
return "(maybe Siemens)"
|
||||||
|
return "(unknown vendor)"
|
||||||
|
|
||||||
|
# Examples of the decoder result:
|
||||||
#"EVSEPresentVoltage.Multiplier": "0",
|
#"EVSEPresentVoltage.Multiplier": "0",
|
||||||
#"EVSEPresentVoltage.Value": "318",
|
#"EVSEPresentVoltage.Value": "318",
|
||||||
#"EVSEPresentVoltage.Unit": "V",
|
#"EVSEPresentVoltage.Unit": "V",
|
||||||
#"DC_EVStatus.EVRESSSOC": "53",
|
#"DC_EVStatus.EVRESSSOC": "53",
|
||||||
|
|
||||||
def convertPcapToTxt(inputFileName):
|
def convertPcapToTxt(inputFileName):
|
||||||
|
global nLimitNumberOfPackets
|
||||||
|
global directory
|
||||||
cap = pyshark.FileCapture(inputFileName, display_filter="ipv6")
|
cap = pyshark.FileCapture(inputFileName, display_filter="ipv6")
|
||||||
fileOut = open(inputFileName + '.decoded.txt', 'w')
|
fileOut = open(inputFileName + '.decoded.txt', 'w')
|
||||||
print("# generated by pcapConverter.py", file=fileOut)
|
print("# generated by pcapConverter.py", file=fileOut)
|
||||||
|
@ -46,13 +68,20 @@ def convertPcapToTxt(inputFileName):
|
||||||
fileOutValues = open(inputFileName + '.values.txt', 'w')
|
fileOutValues = open(inputFileName + '.values.txt', 'w')
|
||||||
print("# generated by pcapConverter.py", file=fileOutValues)
|
print("# generated by pcapConverter.py", file=fileOutValues)
|
||||||
print("# https://github.com/uhi22/pyPLC", file=fileOutValues)
|
print("# https://github.com/uhi22/pyPLC", file=fileOutValues)
|
||||||
|
fileOutStatistics = open(directory + '/pcap_statistics.txt', 'a')
|
||||||
|
print("# statistics for " + inputFileName, file=fileOutStatistics)
|
||||||
# Example how to access the data:
|
# Example how to access the data:
|
||||||
#print(cap)
|
#print(cap)
|
||||||
#print(cap[0])
|
#print(cap[0])
|
||||||
#print(cap[1])
|
#print(cap[1])
|
||||||
#print(dir(cap[1]))
|
#print(dir(cap[1]))
|
||||||
|
#print(dir(cap[1].eth))
|
||||||
|
#print(cap[1].eth.src) # the source MAC address
|
||||||
#print(cap[1].sniff_time) # readable time
|
#print(cap[1].sniff_time) # readable time
|
||||||
#print(cap[1].sniff_timestamp) # epoch time
|
#print(cap[1].sniff_timestamp) # epoch time
|
||||||
|
t1CableCheckBegin = 0
|
||||||
|
t2PreChargeBegin = 0
|
||||||
|
t3CurrentDemandBegin = 0
|
||||||
numberOfPackets=0
|
numberOfPackets=0
|
||||||
for packet in cap:
|
for packet in cap:
|
||||||
numberOfPackets+=1
|
numberOfPackets+=1
|
||||||
|
@ -72,6 +101,26 @@ def convertPcapToTxt(inputFileName):
|
||||||
#print(decoded)
|
#print(decoded)
|
||||||
print(sHeader, file=fileOut)
|
print(sHeader, file=fileOut)
|
||||||
print(decoded, file=fileOut)
|
print(decoded, file=fileOut)
|
||||||
|
if (decoded.find("SessionSetupReq")>0):
|
||||||
|
if ((t1CableCheckBegin>0) and (t2PreChargeBegin>t1CableCheckBegin) and (t3CurrentDemandBegin>t2PreChargeBegin)):
|
||||||
|
print("charger MAC " + chargerMAC + " " + getManufacturerFromMAC(chargerMAC))
|
||||||
|
timeForCableCheck = t2PreChargeBegin - t1CableCheckBegin
|
||||||
|
timeForPreCharge = t3CurrentDemandBegin - t2PreChargeBegin
|
||||||
|
print("timeForCableCheck= " + ("%.3f" % timeForCableCheck))
|
||||||
|
print("timeForPreCharge= " + ("%.3f" % timeForPreCharge))
|
||||||
|
print(chargerMAC + ";" + getManufacturerFromMAC(chargerMAC) + ";" + \
|
||||||
|
"timeForCableCheck;" + ("%.3f" % timeForCableCheck) + ";" + \
|
||||||
|
"timeForPreCharge; " + ("%.3f" % timeForPreCharge), file=fileOutStatistics)
|
||||||
|
t1CableCheckBegin = 0
|
||||||
|
t2PreChargeBegin = 0
|
||||||
|
t3CurrentDemandBegin = 0
|
||||||
|
if (decoded.find("CableCheckReq")>0) and (t1CableCheckBegin==0):
|
||||||
|
t1CableCheckBegin = float(packet.sniff_timestamp)
|
||||||
|
chargerMAC = str(packet.eth.dst)
|
||||||
|
if (decoded.find("PreChargeReq")>0) and (t2PreChargeBegin==0):
|
||||||
|
t2PreChargeBegin = float(packet.sniff_timestamp)
|
||||||
|
if (decoded.find("CurrentDemandReq")>0) and (t3CurrentDemandBegin==0):
|
||||||
|
t3CurrentDemandBegin = float(packet.sniff_timestamp)
|
||||||
try:
|
try:
|
||||||
y = json.loads(decoded)
|
y = json.loads(decoded)
|
||||||
try:
|
try:
|
||||||
|
@ -90,8 +139,24 @@ def convertPcapToTxt(inputFileName):
|
||||||
pass
|
pass
|
||||||
if ((numberOfPackets % 100)==0):
|
if ((numberOfPackets % 100)==0):
|
||||||
print(str(numberOfPackets) + " packets")
|
print(str(numberOfPackets) + " packets")
|
||||||
#if (numberOfPackets>=1000):
|
if ((nLimitNumberOfPackets>0) and (numberOfPackets>=nLimitNumberOfPackets)):
|
||||||
# break
|
break
|
||||||
|
# Statistics of the timing:
|
||||||
|
#print("t1CableCheckBegin " + str(t1CableCheckBegin))
|
||||||
|
#print("t2PreChargeBegin " + str(t2PreChargeBegin))
|
||||||
|
#print("t3CurrentDemandBegin " + str(t3CurrentDemandBegin))
|
||||||
|
if ((t1CableCheckBegin>0) and (t2PreChargeBegin>t1CableCheckBegin) and (t3CurrentDemandBegin>t2PreChargeBegin)):
|
||||||
|
print("charger MAC " + chargerMAC + " " + getManufacturerFromMAC(chargerMAC))
|
||||||
|
timeForCableCheck = t2PreChargeBegin - t1CableCheckBegin
|
||||||
|
timeForPreCharge = t3CurrentDemandBegin - t2PreChargeBegin
|
||||||
|
print("timeForCableCheck= " + ("%.3f" % timeForCableCheck))
|
||||||
|
print("timeForPreCharge= " + ("%.3f" % timeForPreCharge))
|
||||||
|
|
||||||
|
print(chargerMAC + ";" + getManufacturerFromMAC(chargerMAC) + ";" + \
|
||||||
|
"timeForCableCheck;" + ("%.3f" % timeForCableCheck) + ";" + \
|
||||||
|
"timeForPreCharge; " + ("%.3f" % timeForPreCharge), file=fileOutStatistics)
|
||||||
|
|
||||||
|
fileOutStatistics.close()
|
||||||
fileOut.close()
|
fileOut.close()
|
||||||
fileOutValues.close()
|
fileOutValues.close()
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue