Here's a verbose example of my successful run, including the firmware version I'm using:
Code: Select all
charlie@charlie-ThinkPad-T14:~/open-plc-utils/slac$ pev -i enp0s31f6 -d
pev: slac_session: session.RunID 54:05:DB:40:48:C6:00:00
pev: slac_session: session.APPLICATION_TYPE 0
pev: slac_session: session.SECURITY_TYPE 0
pev: slac_session: session.RESP_TYPE 0
pev: slac_session: session.NUM_SOUNDS 0
pev: slac_session: session.TIME_OUT 0
pev: slac_session: session.NumGroups 0
pev: slac_session: session.AAG 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
pev: slac_session: session.MSOUND_TARGET 00:00:00:00:00:00
pev: slac_session: session.FORWARDING_STA 00:00:00:00:00:00
pev: slac_session: session.PEV_ID AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA
pev: slac_session: session.PEV_MAC 54:05:DB:40:48:C6
pev: slac_session: session.EVSE_ID 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
pev: slac_session: session.EVSE_MAC 00:00:00:00:00:00
pev: slac_session: session.RND 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
pev: slac_session: session.NMK 3F:94:65:6F:A8:20:42:42:A0:90:26:C7:93:9F:1F:C5
pev: slac_session: session.NID 44:EB:DC:73:F9:76:0B
pev: slac_session: session.original_nmk 3F:94:65:6F:A8:20:42:42:A0:90:26:C7:93:9F:1F:C5
pev: slac_session: session.original_nid 44:EB:DC:73:F9:76:0B
pev: slac_session: session.state 1
pev: slac_session: session.sounds 0
pev: slac_session: session.limit 40
pev: slac_session: session.pause 20
pev: slac_session: session.chargetime 3600
pev: slac_session: session.settletime 10
pev: slac_session: session.counter 0
pev: slac_session: session.flags 0x0006
pev: pev_cm_set_key: --> CM_SET_KEY.REQ
pev: pev_cm_set_key: CM_SET_KEY.KEYTYPE 1
pev: pev_cm_set_key: CM_SET_KEY.MYNOUNCE AA:AA:AA:AA
pev: pev_cm_set_key: CM_SET_KEY.YOURNOUNCE 00:00:00:00
pev: pev_cm_set_key: CM_SET_KEY.PID 4
pev: pev_cm_set_key: CM_SET_KEY.PRN 0
pev: pev_cm_set_key: CM_SET_KEY.PMN 0
pev: pev_cm_set_key: CM_SET_KEY.CCoCAP 0
pev: pev_cm_set_key: CM_SET_KEY.NID 44:EB:DC:73:F9:76:0B
pev: pev_cm_set_key: CM_SET_KEY.NEWEKS 1
pev: pev_cm_set_key: CM_SET_KEY.NEWKEY 3F:94:65:6F:A8:20:42:42:A0:90:26:C7:93:9F:1F:C5
pev: pev_cm_set_key: <-- CM_SET_KEY.CNF
pev: pev_cm_set_key: CM_SET_KEY.RESULT 1
pev: pev_cm_set_key: CM_SET_KEY.MYNOUNCE 15:ED:B4:D2
pev: pev_cm_set_key: CM_SET_KEY.YOURNOUNCE AA:AA:AA:AA
pev: pev_cm_set_key: CM_SET_KEY.PID 4
pev: pev_cm_set_key: CM_SET_KEY.PRN 0
pev: pev_cm_set_key: CM_SET_KEY.PMN 255
pev: pev_cm_set_key: CM_SET_KEY.CCoCAP 0
pev: slac_session: session.RunID 54:05:DB:40:48:C6:00:00
pev: slac_session: session.APPLICATION_TYPE 0
pev: slac_session: session.SECURITY_TYPE 0
pev: slac_session: session.RESP_TYPE 0
pev: slac_session: session.NUM_SOUNDS 0
pev: slac_session: session.TIME_OUT 0
pev: slac_session: session.NumGroups 0
pev: slac_session: session.AAG 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
pev: slac_session: session.MSOUND_TARGET 00:00:00:00:00:00
pev: slac_session: session.FORWARDING_STA 00:00:00:00:00:00
pev: slac_session: session.PEV_ID AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA
pev: slac_session: session.PEV_MAC 54:05:DB:40:48:C6
pev: slac_session: session.EVSE_ID 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
pev: slac_session: session.EVSE_MAC 00:00:00:00:00:00
pev: slac_session: session.RND 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
pev: slac_session: session.NMK 3F:94:65:6F:A8:20:42:42:A0:90:26:C7:93:9F:1F:C5
pev: slac_session: session.NID 44:EB:DC:73:F9:76:0B
pev: slac_session: session.original_nmk 3F:94:65:6F:A8:20:42:42:A0:90:26:C7:93:9F:1F:C5
pev: slac_session: session.original_nid 44:EB:DC:73:F9:76:0B
pev: slac_session: session.state 1
pev: slac_session: session.sounds 0
pev: slac_session: session.limit 40
pev: slac_session: session.pause 20
pev: slac_session: session.chargetime 3600
pev: slac_session: session.settletime 10
pev: slac_session: session.counter 0
pev: slac_session: session.flags 0x0006
pev: DisconnectedState: Probing ...
pev: pev_cm_slac_param: --> CM_SLAC_PARAM.REQ
pev: pev_cm_slac_param: <-- CM_SLAC_PARAM.CNF ?
pev: pev_cm_slac_param: --> CM_SLAC_PARAM.REQ
pev: pev_cm_slac_param: <-- CM_SLAC_PARAM.CNF ?
pev: pev_cm_slac_param: --> CM_SLAC_PARAM.REQ
^C
charlie@charlie-ThinkPad-T14:~/open-plc-utils/slac$ plctool -aI -ienp0s31f6
enp0s31f6 00:B0:52:00:00:01 Fetch Device Attributes
enp0s31f6 14:CC:20:4D:B7:C3 QCA7420-MAC-QCA7420-1.5.0.26-02-20200114-CS (1mb)
PIB 0-0 8836 bytes
MAC 14:CC:20:4D:B7:C3
DAK 91:F1:F8:7C:DD:DC:47:06:59:C1:64:BF:53:19:94:36
NMK 3F:94:65:6F:A8:20:42:42:A0:90:26:C7:93:9F:1F:C5
NID 44:EB:DC:73:F9:76:0B
Security level 0
NET Qualcomm Atheros Enabled Network
MFG tpver_401013_171025_901
USR PEV
CCo Never
MDU N/A
If you can't make this work, there's also the Qualcomm proprietary SET_KEY message which will probably work instead. You can capture it using this command.
Code: Select all
plctool -ienp0s31f6 -K50:D3:E4:93:3F:85:5B:70:40:78:4D:F8:15:AA:8D:B9 -M
I'm going to get this plugged into a real CCS charger tomorrow to see what happens. Will attempt to establish a layer2 link as above, and if successful, then send this small UDP message which should cause the charger to reply with its own address.
Code: Select all
require 'socket'
datagram = [1, 0xFE, 0x9000, 2, 0x10, 0x00].pack('ccnNcc')
socket = UDPSocket.new(Socket::AF_INET6)
socket.send(datagram, 0, 'ff02::1%enp0s31f6', 15118)
message, server = socket.recvfrom(1500)
puts message.bytes.inspect