From cc2131dc2320750b07ff9bf304caa1e09178c910 Mon Sep 17 00:00:00 2001 From: uhi22 Date: Tue, 27 Jun 2023 19:56:45 +0200 Subject: [PATCH] feature: add handshake examples to DemoExiLog and handshake decoding to exiconnector demo mode --- .gitignore | 1 + DemoExiLog.txt | 11 ++++++++++- exiConnector.py | 30 +++++++++++++++++++++++------- 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 3ec7c0c..18b5ad4 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ /doc/*.jar *.bat PevExiLog*.txt +DemoExiLog.txt.decoded.txt testresults.txt *.ini /log diff --git a/DemoExiLog.txt b/DemoExiLog.txt index c35c83a..d068188 100644 --- a/DemoExiLog.txt +++ b/DemoExiLog.txt @@ -1,5 +1,4 @@ init -Dh 80400040 ED 809a02000000000000000011d00000 DD 809A022189CBF75B9625A951E020040080 ED 809a022189cbf75b9625a95198 @@ -21,4 +20,14 @@ DD 809A022189CBF75B9625A95020004080000000 ED 809a022189cbf75b9625a95151400500c9cc0206401000 DD 809A022189CBF75B9625A9516000408000010284904800 ED 809a022189cbf75b9625a9513022800a0800 +# The Tesla handshake request (two schemas supported, from https://github.com/SmartEVSE/SmartEVSE-3/issues/25#issuecomment-1606259381) +DH 8000DBAB9371D3234B71D1B981899189D191818991D26B9B3A232B30020000040401B75726E3A7465736C613A64696E3A323031383A4D736744656600001C0100080 +# The Ioniq handshake request (one schema, schemaID 1) +DH 8000dbab9371d3234b71d1b981899189d191818991d26b9b3a232b30020000040040 +# The BMW iX3 handshake request (one schema, schemaID 0, from https://github.com/SmartEVSE/SmartEVSE-3/issues/25#issuecomment-1606271999) +DH 8000DBAB9371D3234B71D1B981899189D191818991D26B9B3A232B30020000000040 +# The handshake response with schemaID 1 +Dh 80400040 +# The handshake response with schemaID 0 +Dh 80400000 closing diff --git a/exiConnector.py b/exiConnector.py index 6f5cd52..073fcf6 100644 --- a/exiConnector.py +++ b/exiConnector.py @@ -101,6 +101,7 @@ exiHexDemoSupportedApplicationProtocolRequest2="8000ebab9371d34b9b79d189a98989c1 # 809a0125e6cecc50e0004080000082867dc8081818000000040a1b64802030882702038486580800 CurrentDemandRes # 809a0125e6cecc50e0804080000082867dc8081818000000040a1b64802030882702038486580800 CurrentDemandRes with "FAILED" +# Further examples are collected in the DemoExiLog.txt. # Configuration of the exi converter tool if os.name == "nt": @@ -262,9 +263,17 @@ def testReadExiFromSnifferFile(): testDecoder(s, "DD", "") def testReadExiFromExiLogFile(strLogFileName): + print("Trying to read from ExiLogFile " + strLogFileName) try: file1 = open(strLogFileName, 'r') - fileOut = open('PevExiLog.decoded.txt', 'w') + isFileOk = True + except: + print("Could not open " + strLogFileName) + isFileOk = False + if (strLogFileName == "PevExiLog.txt"): + print("This is no problem. The PevExiLog.txt will be created when the pyPLC runs in PevMode, and can be decoded afterwards.") + if (isFileOk): + fileOut = open(strLogFileName + '.decoded.txt', 'w') # example: "ED 809a02004080c1014181c210b8" # example with timestamp: "2022-12-20T08:17:15.055755=ED 809a02004080c1014181c21198" Lines = file1.readlines() @@ -276,21 +285,28 @@ def testReadExiFromExiLogFile(strLogFileName): else: # no equal-sign. Take the complete line. strToDecode=myLine - if (strToDecode[1:3]=="D "): # it is DIN + if (myLine[0]=="#"): + # take-over comment lines into the output + print(myLine.replace("\n", "")) + print(myLine.replace("\n", ""), file=fileOut) + strDecoderSelection = "" # default: unknown line + if (strToDecode[1:3]=="D "): + strDecoderSelection = "D" # it is a DIN message + if (strToDecode[1:3]=="H ") or (strToDecode[1:3]=="h "): + strDecoderSelection = "H" # it is a ProtocolHandshake message + + if (len(strDecoderSelection)>0): # if we have selected a valid decoder posOfSpace=2 s = strToDecode[posOfSpace+1:] # The part after the " " contains the EXI hex data. s = s.replace(" ", "") # Remove blanks s = s.replace("\n", "") # Remove line feeds #print(s) - decoded=exiDecode(s, "DD") + decoded=exiDecode(s, "D"+strDecoderSelection) + print(myLine.replace("\n", "") + " means:") print(decoded) print(myLine.replace("\n", "") + " means:", file=fileOut) print(decoded, file=fileOut) fileOut.close() - except: - print("Could not open " + strLogFileName) - if (strLogFileName == "PevExiLog.txt"): - print("This is no problem. The PevExiLog.txt will be created when the pyPLC runs in PevMode, and can be decoded afterwards.") def testTimeConsumption(): strHex = "809a001150400000c80006400000"