Merge branch 'master' into mqtt_backend

# Conflicts:
#	doc/pyPlc.ini.template
#	fsmEvse.py
#	hardwareInterface.py
This commit is contained in:
johannes 2024-11-04 15:23:18 +01:00
commit c3c73f9f74
43 changed files with 36676 additions and 71 deletions

234
MacLog.txt Normal file
View file

@ -0,0 +1,234 @@
2024-05-21T17:29:08.611520 SECC MAC B8:27:EB:27:33:53 RaspiAtHome
2024-05-21T17:29:18.323217 SECC MAC B8:27:EB:27:33:53 RaspiAtHome
2024-05-21T17:29:27.135444 SECC MAC B8:27:EB:27:33:53 RaspiAtHome
2024-05-21T18:49:37.757557 SECC MAC F6:E7:B0:0F:77:EA Alpi SWI 130 001
2024-05-21T18:50:25.760260 SECC MAC F6:E7:B0:0F:77:EA Alpi SWI 130 001
2024-05-21T18:51:55.456487 SECC MAC E6:B1:46:CF:43:B2 Alpi SWI 132 001
2024-05-21T18:52:12.778818 SECC MAC E6:B1:46:CF:43:B2 Alpi SWI 132 001
2024-05-21T18:53:01.312392 SECC MAC 96:C1:03:C4:0D:92 Alpi SWI 131 001
2024-05-21T18:54:05.902683 SECC MAC 7A:8E:92:F2:83:56 Alpi SWI 129 001
2024-05-21T18:56:02.876738 SECC MAC 22:BE:FE:DB:A6:61 Alpi SWI 133 001
2024-05-21T18:57:27.677160 SECC MAC 9E:ED:27:37:7C:1C Alpi SWI 128 001
2024-05-21T18:58:40.036657 SECC MAC 7E:0B:F8:B2:F5:06 Alpi SWI 127 001
2024-05-21T18:59:59.629666 SECC MAC 56:01:60:30:5F:B4 Alpi SWI 126 001
2024-05-21T19:27:36.811935 SECC MAC DC:44:27:1F:E3:BD SucV3 PafStraas 2B
2024-05-21T19:30:45.194020 SECC MAC DC:44:27:1F:4C:64 SucV3 PafStraas 2A
2024-05-21T19:32:13.577084 SECC MAC DC:44:27:1F:26:9A SucV3 PafStraas 1D
2024-05-21T19:33:42.682369 SECC MAC DC:44:27:1F:BA:CC SucV3 PafStraas 1C
2024-05-21T19:35:01.448255 SECC MAC DC:44:27:1F:F1:EC SucV3 PafStraas 1B
2024-05-21T19:36:12.499604 SECC MAC DC:44:27:1F:91:15 SucV3 PafStraas 1A
2024-05-21T19:38:00.999068 SECC MAC DC:44:27:1F:49:18 SucV3 PafStraas 5C
2024-05-21T19:38:41.779243 SECC MAC DC:44:27:1F:24:60 SucV3 PafStraas 5D
2024-05-21T19:39:53.001016 SECC MAC DC:44:27:1F:54:AF SucV3 PafStraas 6A
2024-05-21T19:40:36.505826 SECC MAC DC:44:27:1F:84:D1 SucV3 PafStraas 6B
2024-05-21T19:41:24.828225 SECC MAC DC:44:27:1F:2C:7C SucV3 PafStraas 6C
2024-05-21T19:42:07.672527 SECC MAC DC:44:27:1F:80:25 SucV3 PafStraas 6D
2024-05-21T19:45:52.619427 SECC MAC DC:44:27:1F:0D:E7 SucV3 PafStraas 5B
2024-05-21T19:46:44.658812 SECC MAC DC:44:27:1F:A2:68 SucV3 PafStraas 5A
2024-05-21T19:48:27.111030 SECC MAC DC:44:27:1F:F8:6A SucV3 PafStraas 4B
2024-05-21T19:54:40.934214 SECC MAC DC:44:27:1F:86:C7 SucV3 PafStraas 3B
2024-05-21T19:56:34.924301 SECC MAC DC:44:27:1F:11:24 SucV3 PafStraas 3A
2024-05-21T20:19:42.843730 SECC MAC DC:44:27:1F:6D:0F SucV3 PafStraas 3C
2024-05-21T20:23:02.386877 SECC MAC DC:44:27:1F:2C:07 SucV3 PafStraas 2C
2024-05-21T20:24:48.143401 SECC MAC DC:44:27:1F:60:7A SucV3 PafStraas 4D
2024-05-21T20:25:44.826400 SECC MAC DC:44:27:1F:4A:BF SucV3 PafStraas 4C
2024-05-21T20:35:05.955387 SECC MAC DC:44:27:1F:34:0D SucV2 PAF 3A
2024-05-21T20:36:44.534922 SECC MAC DC:44:27:1F:02:A6 SucV2 PAF 2B
2024-05-21T20:38:59.715684 SECC MAC DC:44:27:1F:07:14 SucV2 PAF 2A
2024-05-21T20:46:56.759175 SECC MAC DC:44:27:1F:07:0C SucV2 PAF 1B
2024-05-21T20:47:44.061312 SECC MAC DC:44:27:1F:05:56 SucV2 PAF 1A
2024-05-21T21:09:42.692251 SECC MAC DC:44:27:1F:A0:00 SucV3 Langenbruck 5D
2024-05-21T21:13:26.238880 SECC MAC DC:44:27:1F:73:7E SucV3 Langenbruck 5B
2024-05-21T21:14:45.797955 SECC MAC DC:44:27:1F:46:86 SucV3 Langenbruck 5C
2024-05-21T21:16:01.388233 SECC MAC DC:44:27:1F:8E:46 SucV3 Langenbruck 5A
2024-05-21T21:17:15.274683 SECC MAC DC:44:27:1F:78:C6 SucV3 Langenbruck 4D
2024-05-21T21:17:56.490544 SECC MAC DC:44:27:1F:86:2E SucV3 Langenbruck 4C
2024-05-21T21:18:43.260660 SECC MAC DC:44:27:1F:4A:F5 SucV3 Langenbruck 4B
2024-05-21T21:19:44.476534 SECC MAC DC:44:27:1F:95:40 SucV3 Langenbruck 4A
2024-05-21T21:21:16.073879 SECC MAC DC:44:27:1F:CD:C5 SucV3 Langenbruck 1A
2024-05-21T21:21:58.197231 SECC MAC DC:44:27:1F:1D:74 SucV3 Langenbruck 1B
2024-05-21T21:22:31.537197 SECC MAC DC:44:27:1F:D8:36 SucV3 Langenbruck 1C
2024-05-21T21:23:05.512881 SECC MAC DC:44:27:1F:0F:D2 SucV3 Langenbruck 1D
2024-05-21T21:24:32.939673 SECC MAC DC:44:27:1F:C2:E0 SucV3 Langenbruck 2A
2024-05-21T21:25:06.257572 SECC MAC DC:44:27:1F:19:E2 SucV3 Langenbruck 2B
2024-05-21T21:25:41.183515 SECC MAC DC:44:27:1F:AB:A2 SucV3 Langenbruck 2C
2024-05-21T21:26:18.795473 SECC MAC DC:44:27:1F:7E:46 SucV3 Langenbruck 2D
2024-05-21T21:27:05.616048 SECC MAC DC:44:27:1F:3C:48 SucV3 Langenbruck 3A
2024-05-21T21:27:42.196006 SECC MAC DC:44:27:1F:22:DB SucV3 Langenbruck 3B
2024-05-21T21:28:28.692548 SECC MAC DC:44:27:1F:67:73 SucV3 Langenbruck 3D
2024-05-21T21:29:03.930426 SECC MAC DC:44:27:1F:9A:BB SucV3 Langenbruck 3C
2024-05-21T21:36:34.994428 SECC MAC 8A:01:92:D6:35:87 Alpi EnBW 906470*1
2024-05-21T21:38:43.729181 SECC MAC 9E:54:DB:34:84:E7 Alpi EnBW 906470*2
2024-06-06T08:36:43.604386 SECC MAC DC:0E:A1:11:67:08
2024-06-06T08:36:43.641907 SECC MAC DC:0E:A1:11:67:08
2024-06-06T08:37:58.603693 SECC MAC DC:0E:A1:11:67:08
2024-06-06T08:38:03.720823 SECC MAC DC:0E:A1:11:67:08
2024-06-06T08:38:27.603540 SECC MAC DC:0E:A1:11:67:08
2024-06-06T08:38:27.604233 SECC MAC DC:0E:A1:11:67:08
2024-06-06T08:39:48.604985 SECC MAC DC:0E:A1:11:67:08
2024-06-06T08:39:48.605626 SECC MAC DC:0E:A1:11:67:08
2024-06-06T08:58:51.609927 SECC MAC DC:0E:A1:11:67:08
2024-06-06T08:58:51.615653 SECC MAC DC:0E:A1:11:67:08
2024-06-06T08:59:42.610360 SECC MAC DC:0E:A1:11:67:08
2024-06-06T08:59:42.612265 SECC MAC DC:0E:A1:11:67:08
2024-06-07T17:55:43.186237 SECC MAC 32:FE:79:B3:61:01
2024-06-07T18:20:29.163076 SECC MAC E8:EB:1B:1A:E4:7E
2024-06-07T18:20:29.166374 SECC MAC E8:EB:1B:1A:E4:7E
2024-06-07T18:21:24.534619 SECC MAC E8:EB:1B:1B:50:54
2024-06-07T18:22:30.532220 SECC MAC E8:EB:1B:1A:F8:20
2024-06-07T18:23:31.171289 SECC MAC E8:EB:1B:1B:57:85
2024-06-08T11:19:28.588317 SECC MAC EA:C4:79:95:0B:D3
2024-06-08T11:19:28.593545 SECC MAC EA:C4:79:95:0B:D3
2024-06-08T12:44:11.623276 SECC MAC 00:13:95:31:C1:01
2024-06-08T12:44:11.626572 SECC MAC 00:13:95:31:C1:01
2024-06-08T12:47:24.625720 SECC MAC 00:13:95:2D:C2:76
2024-06-08T12:47:24.628601 SECC MAC 00:13:95:2D:C2:76
2024-06-08T12:54:15.638666 SECC MAC 00:13:95:2D:C2:76
2024-06-08T14:25:43.617552 SECC MAC 12:E2:D2:34:33:5B
2024-06-08T14:25:43.620688 SECC MAC 12:E2:D2:34:33:5B
2024-06-08T18:14:11.560344 SECC MAC A0:B0:C0:D2:04:BC
2024-06-08T21:09:16.620238 SECC MAC FE:72:15:6F:41:5E
2024-06-08T21:09:16.625180 SECC MAC FE:72:15:6F:41:5E
2024-06-09T15:00:08.542914 SECC MAC DC:0E:A1:11:67:08
2024-06-09T15:00:08.544561 SECC MAC DC:0E:A1:11:67:08
2024-06-09T15:00:19.543071 SECC MAC DC:0E:A1:11:67:08
2024-06-09T15:00:19.542938 SECC MAC DC:0E:A1:11:67:08
2024-06-09T15:55:44.166842 SECC MAC 54:10:EC:A1:F3:E2
2024-06-09T15:55:44.171041 SECC MAC 54:10:EC:A1:F3:E2
2024-06-09T16:00:47.177083 SECC MAC 8A:60:56:40:34:56
2024-06-09T16:00:47.180574 SECC MAC 8A:60:56:40:34:56
2024-06-09T16:00:47.183825 SECC MAC 8A:60:56:40:34:56
2024-06-09T16:00:47.187118 SECC MAC 8A:60:56:40:34:56
2024-06-09T16:00:47.190439 SECC MAC 8A:60:56:40:34:56
2024-06-09T16:00:47.193700 SECC MAC 8A:60:56:40:34:56
2024-06-09T16:00:47.196967 SECC MAC 8A:60:56:40:34:56
2024-06-09T16:14:58.352666 SECC MAC 82:92:6E:C7:67:7D
2024-06-09T16:14:58.356125 SECC MAC 82:92:6E:C7:67:7D
2024-06-09T16:14:58.359664 SECC MAC 82:92:6E:C7:67:7D
2024-06-09T16:14:58.362933 SECC MAC 82:92:6E:C7:67:7D
2024-06-09T16:14:58.366195 SECC MAC 82:92:6E:C7:67:7D
2024-06-09T16:14:58.369560 SECC MAC 82:92:6E:C7:67:7D
2024-06-09T16:14:58.373012 SECC MAC 82:92:6E:C7:67:7D
2024-06-09T16:14:58.376418 SECC MAC 82:92:6E:C7:67:7D
2024-06-09T16:14:58.379720 SECC MAC 82:92:6E:C7:67:7D
2024-06-09T16:14:58.382940 SECC MAC 82:92:6E:C7:67:7D
2024-06-09T16:15:01.292283 SECC MAC 82:92:6E:C7:67:7D
2024-06-09T16:15:01.295799 SECC MAC 82:92:6E:C7:67:7D
2024-06-09T16:21:07.559381 SECC MAC 7A:2B:E9:0B:69:25
2024-06-22T14:05:30.206426 SECC MAC EA:C4:79:95:0B:D3
2024-06-22T14:05:30.212026 SECC MAC EA:C4:79:95:0B:D3
2024-06-22T15:35:54.306023 SECC MAC DC:44:27:1F:33:FF
2024-06-22T15:35:55.817336 SECC MAC DC:44:27:1F:33:FF
2024-06-22T15:44:17.617459 SECC MAC DC:44:27:1F:33:FB
2024-06-23T14:35:14.443031 SECC MAC CA:43:ED:EC:E5:1B
2024-06-23T19:11:27.184648 SECC MAC 0A:39:46:FF:76:D3
2024-06-23T19:11:27.189713 SECC MAC 0A:39:46:FF:76:D3
2024-06-23T19:37:40.578736 SECC MAC DC:44:27:1F:02:03
2024-06-23T19:37:40.582165 SECC MAC DC:44:27:1F:02:03
2024-07-19T12:49:28.186474 SECC MAC 0E:A6:E1:05:C5:84
2024-07-19T12:49:28.191176 SECC MAC 0E:A6:E1:05:C5:84
2024-07-19T12:52:20.303500 SECC MAC CE:3A:F0:9A:64:E9
2024-07-19T18:19:37.167094 SECC MAC DC:44:27:1F:33:FB
2024-07-19T18:19:37.238901 SECC MAC DC:44:27:1F:33:FB
2024-07-19T18:21:04.587969 SECC MAC DC:44:27:1F:33:FB
2024-07-19T18:21:04.591318 SECC MAC DC:44:27:1F:33:FB
2024-07-19T18:27:25.289527 SECC MAC 98:ED:5C:FE:A8:E4
2024-07-19T18:27:25.292817 SECC MAC 98:ED:5C:FE:A8:E4
2024-07-21T21:22:28.630366 SECC MAC 54:F8:F0:70:25:86
2024-07-21T21:22:30.766302 SECC MAC 54:F8:F0:70:25:86
2024-07-26T23:18:29.171274 SECC MAC A6:2F:7F:EF:D8:74
2024-07-26T23:18:29.175468 SECC MAC A6:2F:7F:EF:D8:74
2024-07-27T12:18:26.541599 SECC MAC 54:F8:F0:70:25:BE
2024-07-27T12:18:26.546673 SECC MAC 54:F8:F0:70:25:BE
2024-07-27T14:37:44.568246 SECC MAC DC:44:27:1F:36:8D
2024-07-27T14:37:44.572753 SECC MAC DC:44:27:1F:36:8D
2024-07-27T17:35:08.587575 SECC MAC 54:F8:F0:70:29:A4
2024-07-27T17:35:08.591013 SECC MAC 54:F8:F0:70:29:A4
2024-07-27T17:37:43.584566 SECC MAC 54:F8:F0:70:29:9E
2024-07-27T19:46:56.610307 SECC MAC DC:44:27:1F:23:63
2024-07-27T19:46:56.613948 SECC MAC DC:44:27:1F:23:63
2024-07-27T19:49:07.606741 SECC MAC DC:44:27:1F:23:5F
2024-07-27T19:49:07.609367 SECC MAC DC:44:27:1F:23:5F
2024-07-28T11:06:06.538773 SECC MAC 00:14:2D:77:AD:3A
2024-07-28T16:58:31.665432 SECC MAC 80:34:28:2D:E4:DA
2024-07-30T10:23:38.166140 SECC MAC 0A:44:59:EE:7F:09
2024-07-30T10:23:38.171354 SECC MAC 0A:44:59:EE:7F:09
2024-07-31T11:19:35.324804 SECC MAC E2:98:AC:80:F3:CF
2024-07-31T11:19:35.328931 SECC MAC E2:98:AC:80:F3:CF
2024-07-31T13:50:19.205422 SECC MAC 54:F8:F0:70:33:BA
2024-07-31T13:50:19.209187 SECC MAC 54:F8:F0:70:33:BA
2024-07-31T13:52:50.697656 SECC MAC 54:F8:F0:70:33:7C
2024-07-31T16:21:23.596017 SECC MAC DC:44:27:1F:2F:8D
2024-07-31T19:32:59.601194 SECC MAC 54:F8:F0:70:35:84
2024-07-31T19:32:59.604332 SECC MAC 54:F8:F0:70:35:84
2024-07-31T19:48:18.624222 SECC MAC 54:F8:F0:70:35:84
2024-07-31T22:23:52.696936 SECC MAC DC:44:27:1F:D4:53
2024-07-31T22:23:52.700841 SECC MAC DC:44:27:1F:D4:53
2024-08-01T01:14:37.603690 SECC MAC DC:44:27:1F:17:F0
2024-08-01T01:14:37.607273 SECC MAC DC:44:27:1F:17:F0
2024-08-01T01:18:13.584473 SECC MAC DC:44:27:1F:17:F0
2024-08-01T02:53:11.565478 SECC MAC DC:44:27:1F:21:F5
2024-08-01T02:53:11.569617 SECC MAC DC:44:27:1F:21:F5
2024-08-01T02:56:07.564853 SECC MAC DC:44:27:1F:21:F5
2024-08-01T02:56:07.568331 SECC MAC DC:44:27:1F:21:F5
2024-08-01T05:04:20.613758 SECC MAC DC:44:27:1F:26:0D
2024-08-01T05:04:20.622375 SECC MAC DC:44:27:1F:26:0D
2024-08-01T06:06:52.591226 SECC MAC DC:44:27:1F:C3:85
2024-08-01T06:06:52.594888 SECC MAC DC:44:27:1F:C3:85
2024-08-01T06:10:09.600840 SECC MAC DC:44:27:1F:C3:85
2024-08-01T06:10:19.602558 SECC MAC DC:44:27:1F:C3:85
2024-08-01T06:10:22.602021 SECC MAC DC:44:27:1F:C3:85
2024-08-01T06:12:43.589424 SECC MAC DC:44:27:1F:2E:9D
2024-08-01T06:12:43.592785 SECC MAC DC:44:27:1F:2E:9D
2024-08-01T06:20:39.605350 SECC MAC DC:44:27:1F:2E:9D
2024-08-01T15:58:52.174196 SECC MAC 98:ED:5C:FF:CD:71
2024-08-01T15:58:52.179097 SECC MAC 98:ED:5C:FF:CD:71
2024-08-01T18:46:19.185707 SECC MAC DC:44:27:1F:B7:2C
2024-08-01T18:46:19.189284 SECC MAC DC:44:27:1F:B7:2C
2024-08-01T18:50:40.188330 SECC MAC DC:44:27:1F:B7:2C
2024-08-01T18:50:40.191480 SECC MAC DC:44:27:1F:B7:2C
2024-08-01T21:15:53.090234 SECC MAC DC:44:27:1F:12:5C
2024-08-01T21:15:53.095090 SECC MAC DC:44:27:1F:12:5C
2024-08-01T22:54:03.577868 SECC MAC DC:44:27:1F:11:9E
2024-08-01T22:54:03.581042 SECC MAC DC:44:27:1F:11:9E
2024-08-01T22:55:53.576779 SECC MAC DC:44:27:1F:12:6E
2024-08-01T23:00:17.612357 SECC MAC DC:44:27:1F:01:88
2024-08-01T23:05:56.614355 SECC MAC 98:ED:5C:EF:CD:71
2024-08-02T15:58:53.635701 SECC MAC 3E:6A:54:19:94:15
2024-08-02T15:58:53.640101 SECC MAC 3E:6A:54:19:94:15
2024-08-02T16:07:59.038214 SECC MAC 3E:6A:54:19:94:15
2024-08-02T19:10:57.564547 SECC MAC DC:44:27:1F:08:72
2024-08-02T19:10:57.569819 SECC MAC DC:44:27:1F:08:72
2024-08-02T20:37:21.619641 SECC MAC DC:44:27:1F:11:74
2024-08-02T20:37:21.622558 SECC MAC DC:44:27:1F:11:74
2024-08-02T20:41:47.620796 SECC MAC DC:44:27:1F:11:74
2024-08-02T22:15:40.621796 SECC MAC DC:44:27:1F:24:17
2024-08-02T22:15:40.625113 SECC MAC DC:44:27:1F:24:17
2024-08-03T00:00:34.624697 SECC MAC DC:44:27:1F:9C:5E
2024-08-03T00:00:34.627945 SECC MAC DC:44:27:1F:9C:5E
2024-08-03T09:40:49.545588 SECC MAC DC:44:27:1F:17:E2
2024-08-03T09:40:49.550171 SECC MAC DC:44:27:1F:17:E2
2024-08-03T12:09:59.574201 SECC MAC 98:ED:5C:8C:A9:61
2024-08-03T12:09:59.577547 SECC MAC 98:ED:5C:8C:A9:61
2024-08-03T14:53:27.200706 SECC MAC DC:44:27:1F:19:18
2024-08-03T14:53:27.205120 SECC MAC DC:44:27:1F:19:18
2024-08-03T14:55:42.315826 SECC MAC DC:44:27:1F:19:18
2024-08-03T16:58:38.177141 SECC MAC B2:8D:AB:55:4D:BC
2024-08-03T16:58:38.180231 SECC MAC B2:8D:AB:55:4D:BC
2024-08-03T18:48:01.686057 SECC MAC 70:B3:D5:1A:ED:E7
2024-08-03T18:48:03.368764 SECC MAC 70:B3:D5:1A:ED:E7
2024-08-03T21:13:46.299408 SECC MAC 54:F8:F0:13:7F:DE
2024-08-03T21:13:46.302899 SECC MAC 54:F8:F0:13:7F:DE
2024-08-03T21:21:37.357054 SECC MAC 54:F8:F0:13:7F:DE
2024-08-03T23:12:03.191374 SECC MAC 00:01:87:05:27:25
2024-08-03T23:12:03.194739 SECC MAC 00:01:87:05:27:25
2024-08-03T23:36:25.183816 SECC MAC 86:AF:94:C2:68:B4
2024-08-03T23:36:25.187195 SECC MAC 86:AF:94:C2:68:B4
2024-08-03T23:50:39.607805 SECC MAC 86:AF:94:C2:68:B4
2024-08-04T01:39:11.186496 SECC MAC 54:F8:F0:70:25:92
2024-08-04T01:39:11.191096 SECC MAC 54:F8:F0:70:25:92
2024-08-04T01:42:47.546590 SECC MAC 54:F8:F0:70:25:92
2024-08-04T01:45:16.540948 SECC MAC 54:F8:F0:70:25:62
2024-08-04T01:45:16.544722 SECC MAC 54:F8:F0:70:25:62
2024-08-04T19:43:53.556227 SECC MAC B2:F0:CD:25:67:3C
2024-08-04T19:46:27.610413 SECC MAC 42:B6:54:5E:05:97

18
RawExiLog.txt Normal file
View file

@ -0,0 +1,18 @@
01fe800100000023809a0203af96e35a4fb8de50d1401240c0c0b46001810580480c08360100c143340800
01fe800100000029809a0203af96e35a4fb8de50e0004080a001828570101818000000060a1e806030303e028386c04800
01fe800100000023809a0203af96e35a4fb8de50d1401240c0c0b86001810580480c08360100c143340800
01fe800100000029809a0203af96e35a4fb8de50e0004080a001828570101818000000060a1e806030303e028386c04800
01fe800100000023809a0203af96e35a4fb8de50d1401240c0c0b86001810580480c08360100c143340800
01fe800100000029809a0203af96e35a4fb8de50e0004080a001828570101818000000060a1e806030303e028386c04800
01fe800100000023809a0203af96e35a4fb8de50d1401240c0c0b86001810580480c08360100c143340800
01fe800100000029809a0203af96e35a4fb8de50e0004080a001828570101818000000060a1e806030303e028386c04800
01fe800100000023809a0203af96e35a4fb8de50d1401240c0c0b86001810580480c08360100c143340800
01fe800100000029809a0203af96e35a4fb8de50e0004080a001828568101818000000060a1e806030303e028386c04800
01fe800100000023809a0203af96e35a4fb8de50d1401240c0c0b86001810580480c08360100c143340800
01fe800100000029809a0203af96e35a4fb8de50e0004080a001828568101818000000060a1e806030303e028386c04800
01fe800100000023809a0203af96e35a4fb8de50d1401240c0c0bc6001810580480c08360100c143340800
01fe800100000029809a0203af96e35a4fb8de50e0004080a001828568101818000000060a1e806030303e028386c04800
01fe800100000023809a0203af96e35a4fb8de50d1401240c0c0bc6001810580480c08360100c143340800
01fe800100000029809a0203af96e35a4fb8de50e000c300a081828568101818000000060a1e806030303e028386c04800
01fe800100000023809a0203af96e35a4fb8de50d1401240c0c0bc6001810580480c08360100c143340800
01fe800100000029809a0203af96e35a4fb8de50e0a00100a081828568101818000000060a1e806030303e028386c04800

585
RawExiLog.txt.decoded.txt Normal file
View file

@ -0,0 +1,585 @@
01fe800100000023809a0203af96e35a4fb8de50d1401240c0c0b46001810580480c08360100c143340800 means:
{
"msgName": "CurrentDemandReq",
"info": "35 bytes to convert",
"error": "",
"result": "",
"schema": "DIN",
"g_errn": "0",
"header.SessionID": "0ebe5b8d693ee379",
"header.Notification_isUsed": "0",
"header.Signature_isUsed": "0",
"DC_EVStatus.EVReady": "1",
"DC_EVStatus.EVErrorCode": "0",
"DC_EVErrorCodeText": "NO_ERROR",
"DC_EVStatus.EVRESSSOC": "73",
"EVTargetCurrent.Multiplier": "0",
"EVTargetCurrent.Value": "45",
"EVTargetCurrent.Unit": "A",
"EVMaximumVoltageLimit_isUsed": "0",
"EVMaximumCurrentLimit_isUsed": "0",
"EVMaximumPowerLimit_isUsed": "0",
"ChargingComplete": "0",
"EVTargetVoltage.Multiplier": "0",
"EVTargetVoltage.Value": "333",
"EVTargetVoltage.Unit": "V",
"debug": "Line9057Line9260Line436"
}
01fe800100000029809a0203af96e35a4fb8de50e0004080a001828570101818000000060a1e806030303e028386c04800 means:
{
"msgName": "CurrentDemandRes",
"info": "41 bytes to convert",
"error": "",
"result": "",
"schema": "DIN",
"g_errn": "0",
"header.SessionID": "0ebe5b8d693ee379",
"header.Notification_isUsed": "0",
"header.Signature_isUsed": "0",
"ResponseCode": "OK",
"DC_EVSEStatus.EVSEIsolationStatus": "1",
"DC_EVSEStatus.EVSEIsolationStatus_isUsed": "1",
"DC_EVSEStatus.EVSEStatusCode": "1",
"EVSEStatusCode_text": "EVSE_Ready",
"DC_EVSEStatus.NotificationMaxDelay": "10",
"DC_EVSEStatus.EVSENotification": "0",
"EVSEPresentVoltage.Multiplier": "0",
"EVSEPresentVoltage.Value": "302",
"EVSEPresentVoltage.Unit": "V",
"EVSEPresentCurrent.Multiplier": "0",
"EVSEPresentCurrent.Value": "0",
"EVSEPresentCurrent.Unit": "A",
"EVSECurrentLimitAchieved": "0",
"EVSEVoltageLimitAchieved": "0",
"EVSEPowerLimitAchieved": "0",
"EVSEMaximumVoltageLimit.Multiplier": "0",
"EVSEMaximumVoltageLimit.Value": "500",
"EVSEMaximumVoltageLimit.Unit": "V",
"EVSEMaximumCurrentLimit.Multiplier": "0",
"EVSEMaximumCurrentLimit.Value": "62",
"EVSEMaximumCurrentLimit.Unit": "A",
"EVSEMaximumPowerLimit.Multiplier": "2",
"EVSEMaximumPowerLimit.Value": "1240",
"EVSEMaximumPowerLimit.Unit": "W",
"debug": "Line442"
}
01fe800100000023809a0203af96e35a4fb8de50d1401240c0c0b86001810580480c08360100c143340800 means:
{
"msgName": "CurrentDemandReq",
"info": "35 bytes to convert",
"error": "",
"result": "",
"schema": "DIN",
"g_errn": "0",
"header.SessionID": "0ebe5b8d693ee379",
"header.Notification_isUsed": "0",
"header.Signature_isUsed": "0",
"DC_EVStatus.EVReady": "1",
"DC_EVStatus.EVErrorCode": "0",
"DC_EVErrorCodeText": "NO_ERROR",
"DC_EVStatus.EVRESSSOC": "73",
"EVTargetCurrent.Multiplier": "0",
"EVTargetCurrent.Value": "46",
"EVTargetCurrent.Unit": "A",
"EVMaximumVoltageLimit_isUsed": "0",
"EVMaximumCurrentLimit_isUsed": "0",
"EVMaximumPowerLimit_isUsed": "0",
"ChargingComplete": "0",
"EVTargetVoltage.Multiplier": "0",
"EVTargetVoltage.Value": "333",
"EVTargetVoltage.Unit": "V",
"debug": "Line9057Line9260Line436"
}
01fe800100000029809a0203af96e35a4fb8de50e0004080a001828570101818000000060a1e806030303e028386c04800 means:
{
"msgName": "CurrentDemandRes",
"info": "41 bytes to convert",
"error": "",
"result": "",
"schema": "DIN",
"g_errn": "0",
"header.SessionID": "0ebe5b8d693ee379",
"header.Notification_isUsed": "0",
"header.Signature_isUsed": "0",
"ResponseCode": "OK",
"DC_EVSEStatus.EVSEIsolationStatus": "1",
"DC_EVSEStatus.EVSEIsolationStatus_isUsed": "1",
"DC_EVSEStatus.EVSEStatusCode": "1",
"EVSEStatusCode_text": "EVSE_Ready",
"DC_EVSEStatus.NotificationMaxDelay": "10",
"DC_EVSEStatus.EVSENotification": "0",
"EVSEPresentVoltage.Multiplier": "0",
"EVSEPresentVoltage.Value": "302",
"EVSEPresentVoltage.Unit": "V",
"EVSEPresentCurrent.Multiplier": "0",
"EVSEPresentCurrent.Value": "0",
"EVSEPresentCurrent.Unit": "A",
"EVSECurrentLimitAchieved": "0",
"EVSEVoltageLimitAchieved": "0",
"EVSEPowerLimitAchieved": "0",
"EVSEMaximumVoltageLimit.Multiplier": "0",
"EVSEMaximumVoltageLimit.Value": "500",
"EVSEMaximumVoltageLimit.Unit": "V",
"EVSEMaximumCurrentLimit.Multiplier": "0",
"EVSEMaximumCurrentLimit.Value": "62",
"EVSEMaximumCurrentLimit.Unit": "A",
"EVSEMaximumPowerLimit.Multiplier": "2",
"EVSEMaximumPowerLimit.Value": "1240",
"EVSEMaximumPowerLimit.Unit": "W",
"debug": "Line442"
}
01fe800100000023809a0203af96e35a4fb8de50d1401240c0c0b86001810580480c08360100c143340800 means:
{
"msgName": "CurrentDemandReq",
"info": "35 bytes to convert",
"error": "",
"result": "",
"schema": "DIN",
"g_errn": "0",
"header.SessionID": "0ebe5b8d693ee379",
"header.Notification_isUsed": "0",
"header.Signature_isUsed": "0",
"DC_EVStatus.EVReady": "1",
"DC_EVStatus.EVErrorCode": "0",
"DC_EVErrorCodeText": "NO_ERROR",
"DC_EVStatus.EVRESSSOC": "73",
"EVTargetCurrent.Multiplier": "0",
"EVTargetCurrent.Value": "46",
"EVTargetCurrent.Unit": "A",
"EVMaximumVoltageLimit_isUsed": "0",
"EVMaximumCurrentLimit_isUsed": "0",
"EVMaximumPowerLimit_isUsed": "0",
"ChargingComplete": "0",
"EVTargetVoltage.Multiplier": "0",
"EVTargetVoltage.Value": "333",
"EVTargetVoltage.Unit": "V",
"debug": "Line9057Line9260Line436"
}
01fe800100000029809a0203af96e35a4fb8de50e0004080a001828570101818000000060a1e806030303e028386c04800 means:
{
"msgName": "CurrentDemandRes",
"info": "41 bytes to convert",
"error": "",
"result": "",
"schema": "DIN",
"g_errn": "0",
"header.SessionID": "0ebe5b8d693ee379",
"header.Notification_isUsed": "0",
"header.Signature_isUsed": "0",
"ResponseCode": "OK",
"DC_EVSEStatus.EVSEIsolationStatus": "1",
"DC_EVSEStatus.EVSEIsolationStatus_isUsed": "1",
"DC_EVSEStatus.EVSEStatusCode": "1",
"EVSEStatusCode_text": "EVSE_Ready",
"DC_EVSEStatus.NotificationMaxDelay": "10",
"DC_EVSEStatus.EVSENotification": "0",
"EVSEPresentVoltage.Multiplier": "0",
"EVSEPresentVoltage.Value": "302",
"EVSEPresentVoltage.Unit": "V",
"EVSEPresentCurrent.Multiplier": "0",
"EVSEPresentCurrent.Value": "0",
"EVSEPresentCurrent.Unit": "A",
"EVSECurrentLimitAchieved": "0",
"EVSEVoltageLimitAchieved": "0",
"EVSEPowerLimitAchieved": "0",
"EVSEMaximumVoltageLimit.Multiplier": "0",
"EVSEMaximumVoltageLimit.Value": "500",
"EVSEMaximumVoltageLimit.Unit": "V",
"EVSEMaximumCurrentLimit.Multiplier": "0",
"EVSEMaximumCurrentLimit.Value": "62",
"EVSEMaximumCurrentLimit.Unit": "A",
"EVSEMaximumPowerLimit.Multiplier": "2",
"EVSEMaximumPowerLimit.Value": "1240",
"EVSEMaximumPowerLimit.Unit": "W",
"debug": "Line442"
}
01fe800100000023809a0203af96e35a4fb8de50d1401240c0c0b86001810580480c08360100c143340800 means:
{
"msgName": "CurrentDemandReq",
"info": "35 bytes to convert",
"error": "",
"result": "",
"schema": "DIN",
"g_errn": "0",
"header.SessionID": "0ebe5b8d693ee379",
"header.Notification_isUsed": "0",
"header.Signature_isUsed": "0",
"DC_EVStatus.EVReady": "1",
"DC_EVStatus.EVErrorCode": "0",
"DC_EVErrorCodeText": "NO_ERROR",
"DC_EVStatus.EVRESSSOC": "73",
"EVTargetCurrent.Multiplier": "0",
"EVTargetCurrent.Value": "46",
"EVTargetCurrent.Unit": "A",
"EVMaximumVoltageLimit_isUsed": "0",
"EVMaximumCurrentLimit_isUsed": "0",
"EVMaximumPowerLimit_isUsed": "0",
"ChargingComplete": "0",
"EVTargetVoltage.Multiplier": "0",
"EVTargetVoltage.Value": "333",
"EVTargetVoltage.Unit": "V",
"debug": "Line9057Line9260Line436"
}
01fe800100000029809a0203af96e35a4fb8de50e0004080a001828570101818000000060a1e806030303e028386c04800 means:
{
"msgName": "CurrentDemandRes",
"info": "41 bytes to convert",
"error": "",
"result": "",
"schema": "DIN",
"g_errn": "0",
"header.SessionID": "0ebe5b8d693ee379",
"header.Notification_isUsed": "0",
"header.Signature_isUsed": "0",
"ResponseCode": "OK",
"DC_EVSEStatus.EVSEIsolationStatus": "1",
"DC_EVSEStatus.EVSEIsolationStatus_isUsed": "1",
"DC_EVSEStatus.EVSEStatusCode": "1",
"EVSEStatusCode_text": "EVSE_Ready",
"DC_EVSEStatus.NotificationMaxDelay": "10",
"DC_EVSEStatus.EVSENotification": "0",
"EVSEPresentVoltage.Multiplier": "0",
"EVSEPresentVoltage.Value": "302",
"EVSEPresentVoltage.Unit": "V",
"EVSEPresentCurrent.Multiplier": "0",
"EVSEPresentCurrent.Value": "0",
"EVSEPresentCurrent.Unit": "A",
"EVSECurrentLimitAchieved": "0",
"EVSEVoltageLimitAchieved": "0",
"EVSEPowerLimitAchieved": "0",
"EVSEMaximumVoltageLimit.Multiplier": "0",
"EVSEMaximumVoltageLimit.Value": "500",
"EVSEMaximumVoltageLimit.Unit": "V",
"EVSEMaximumCurrentLimit.Multiplier": "0",
"EVSEMaximumCurrentLimit.Value": "62",
"EVSEMaximumCurrentLimit.Unit": "A",
"EVSEMaximumPowerLimit.Multiplier": "2",
"EVSEMaximumPowerLimit.Value": "1240",
"EVSEMaximumPowerLimit.Unit": "W",
"debug": "Line442"
}
01fe800100000023809a0203af96e35a4fb8de50d1401240c0c0b86001810580480c08360100c143340800 means:
{
"msgName": "CurrentDemandReq",
"info": "35 bytes to convert",
"error": "",
"result": "",
"schema": "DIN",
"g_errn": "0",
"header.SessionID": "0ebe5b8d693ee379",
"header.Notification_isUsed": "0",
"header.Signature_isUsed": "0",
"DC_EVStatus.EVReady": "1",
"DC_EVStatus.EVErrorCode": "0",
"DC_EVErrorCodeText": "NO_ERROR",
"DC_EVStatus.EVRESSSOC": "73",
"EVTargetCurrent.Multiplier": "0",
"EVTargetCurrent.Value": "46",
"EVTargetCurrent.Unit": "A",
"EVMaximumVoltageLimit_isUsed": "0",
"EVMaximumCurrentLimit_isUsed": "0",
"EVMaximumPowerLimit_isUsed": "0",
"ChargingComplete": "0",
"EVTargetVoltage.Multiplier": "0",
"EVTargetVoltage.Value": "333",
"EVTargetVoltage.Unit": "V",
"debug": "Line9057Line9260Line436"
}
01fe800100000029809a0203af96e35a4fb8de50e0004080a001828568101818000000060a1e806030303e028386c04800 means:
{
"msgName": "CurrentDemandRes",
"info": "41 bytes to convert",
"error": "",
"result": "",
"schema": "DIN",
"g_errn": "0",
"header.SessionID": "0ebe5b8d693ee379",
"header.Notification_isUsed": "0",
"header.Signature_isUsed": "0",
"ResponseCode": "OK",
"DC_EVSEStatus.EVSEIsolationStatus": "1",
"DC_EVSEStatus.EVSEIsolationStatus_isUsed": "1",
"DC_EVSEStatus.EVSEStatusCode": "1",
"EVSEStatusCode_text": "EVSE_Ready",
"DC_EVSEStatus.NotificationMaxDelay": "10",
"DC_EVSEStatus.EVSENotification": "0",
"EVSEPresentVoltage.Multiplier": "0",
"EVSEPresentVoltage.Value": "301",
"EVSEPresentVoltage.Unit": "V",
"EVSEPresentCurrent.Multiplier": "0",
"EVSEPresentCurrent.Value": "0",
"EVSEPresentCurrent.Unit": "A",
"EVSECurrentLimitAchieved": "0",
"EVSEVoltageLimitAchieved": "0",
"EVSEPowerLimitAchieved": "0",
"EVSEMaximumVoltageLimit.Multiplier": "0",
"EVSEMaximumVoltageLimit.Value": "500",
"EVSEMaximumVoltageLimit.Unit": "V",
"EVSEMaximumCurrentLimit.Multiplier": "0",
"EVSEMaximumCurrentLimit.Value": "62",
"EVSEMaximumCurrentLimit.Unit": "A",
"EVSEMaximumPowerLimit.Multiplier": "2",
"EVSEMaximumPowerLimit.Value": "1240",
"EVSEMaximumPowerLimit.Unit": "W",
"debug": "Line442"
}
01fe800100000023809a0203af96e35a4fb8de50d1401240c0c0b86001810580480c08360100c143340800 means:
{
"msgName": "CurrentDemandReq",
"info": "35 bytes to convert",
"error": "",
"result": "",
"schema": "DIN",
"g_errn": "0",
"header.SessionID": "0ebe5b8d693ee379",
"header.Notification_isUsed": "0",
"header.Signature_isUsed": "0",
"DC_EVStatus.EVReady": "1",
"DC_EVStatus.EVErrorCode": "0",
"DC_EVErrorCodeText": "NO_ERROR",
"DC_EVStatus.EVRESSSOC": "73",
"EVTargetCurrent.Multiplier": "0",
"EVTargetCurrent.Value": "46",
"EVTargetCurrent.Unit": "A",
"EVMaximumVoltageLimit_isUsed": "0",
"EVMaximumCurrentLimit_isUsed": "0",
"EVMaximumPowerLimit_isUsed": "0",
"ChargingComplete": "0",
"EVTargetVoltage.Multiplier": "0",
"EVTargetVoltage.Value": "333",
"EVTargetVoltage.Unit": "V",
"debug": "Line9057Line9260Line436"
}
01fe800100000029809a0203af96e35a4fb8de50e0004080a001828568101818000000060a1e806030303e028386c04800 means:
{
"msgName": "CurrentDemandRes",
"info": "41 bytes to convert",
"error": "",
"result": "",
"schema": "DIN",
"g_errn": "0",
"header.SessionID": "0ebe5b8d693ee379",
"header.Notification_isUsed": "0",
"header.Signature_isUsed": "0",
"ResponseCode": "OK",
"DC_EVSEStatus.EVSEIsolationStatus": "1",
"DC_EVSEStatus.EVSEIsolationStatus_isUsed": "1",
"DC_EVSEStatus.EVSEStatusCode": "1",
"EVSEStatusCode_text": "EVSE_Ready",
"DC_EVSEStatus.NotificationMaxDelay": "10",
"DC_EVSEStatus.EVSENotification": "0",
"EVSEPresentVoltage.Multiplier": "0",
"EVSEPresentVoltage.Value": "301",
"EVSEPresentVoltage.Unit": "V",
"EVSEPresentCurrent.Multiplier": "0",
"EVSEPresentCurrent.Value": "0",
"EVSEPresentCurrent.Unit": "A",
"EVSECurrentLimitAchieved": "0",
"EVSEVoltageLimitAchieved": "0",
"EVSEPowerLimitAchieved": "0",
"EVSEMaximumVoltageLimit.Multiplier": "0",
"EVSEMaximumVoltageLimit.Value": "500",
"EVSEMaximumVoltageLimit.Unit": "V",
"EVSEMaximumCurrentLimit.Multiplier": "0",
"EVSEMaximumCurrentLimit.Value": "62",
"EVSEMaximumCurrentLimit.Unit": "A",
"EVSEMaximumPowerLimit.Multiplier": "2",
"EVSEMaximumPowerLimit.Value": "1240",
"EVSEMaximumPowerLimit.Unit": "W",
"debug": "Line442"
}
01fe800100000023809a0203af96e35a4fb8de50d1401240c0c0bc6001810580480c08360100c143340800 means:
{
"msgName": "CurrentDemandReq",
"info": "35 bytes to convert",
"error": "",
"result": "",
"schema": "DIN",
"g_errn": "0",
"header.SessionID": "0ebe5b8d693ee379",
"header.Notification_isUsed": "0",
"header.Signature_isUsed": "0",
"DC_EVStatus.EVReady": "1",
"DC_EVStatus.EVErrorCode": "0",
"DC_EVErrorCodeText": "NO_ERROR",
"DC_EVStatus.EVRESSSOC": "73",
"EVTargetCurrent.Multiplier": "0",
"EVTargetCurrent.Value": "47",
"EVTargetCurrent.Unit": "A",
"EVMaximumVoltageLimit_isUsed": "0",
"EVMaximumCurrentLimit_isUsed": "0",
"EVMaximumPowerLimit_isUsed": "0",
"ChargingComplete": "0",
"EVTargetVoltage.Multiplier": "0",
"EVTargetVoltage.Value": "333",
"EVTargetVoltage.Unit": "V",
"debug": "Line9057Line9260Line436"
}
01fe800100000029809a0203af96e35a4fb8de50e0004080a001828568101818000000060a1e806030303e028386c04800 means:
{
"msgName": "CurrentDemandRes",
"info": "41 bytes to convert",
"error": "",
"result": "",
"schema": "DIN",
"g_errn": "0",
"header.SessionID": "0ebe5b8d693ee379",
"header.Notification_isUsed": "0",
"header.Signature_isUsed": "0",
"ResponseCode": "OK",
"DC_EVSEStatus.EVSEIsolationStatus": "1",
"DC_EVSEStatus.EVSEIsolationStatus_isUsed": "1",
"DC_EVSEStatus.EVSEStatusCode": "1",
"EVSEStatusCode_text": "EVSE_Ready",
"DC_EVSEStatus.NotificationMaxDelay": "10",
"DC_EVSEStatus.EVSENotification": "0",
"EVSEPresentVoltage.Multiplier": "0",
"EVSEPresentVoltage.Value": "301",
"EVSEPresentVoltage.Unit": "V",
"EVSEPresentCurrent.Multiplier": "0",
"EVSEPresentCurrent.Value": "0",
"EVSEPresentCurrent.Unit": "A",
"EVSECurrentLimitAchieved": "0",
"EVSEVoltageLimitAchieved": "0",
"EVSEPowerLimitAchieved": "0",
"EVSEMaximumVoltageLimit.Multiplier": "0",
"EVSEMaximumVoltageLimit.Value": "500",
"EVSEMaximumVoltageLimit.Unit": "V",
"EVSEMaximumCurrentLimit.Multiplier": "0",
"EVSEMaximumCurrentLimit.Value": "62",
"EVSEMaximumCurrentLimit.Unit": "A",
"EVSEMaximumPowerLimit.Multiplier": "2",
"EVSEMaximumPowerLimit.Value": "1240",
"EVSEMaximumPowerLimit.Unit": "W",
"debug": "Line442"
}
01fe800100000023809a0203af96e35a4fb8de50d1401240c0c0bc6001810580480c08360100c143340800 means:
{
"msgName": "CurrentDemandReq",
"info": "35 bytes to convert",
"error": "",
"result": "",
"schema": "DIN",
"g_errn": "0",
"header.SessionID": "0ebe5b8d693ee379",
"header.Notification_isUsed": "0",
"header.Signature_isUsed": "0",
"DC_EVStatus.EVReady": "1",
"DC_EVStatus.EVErrorCode": "0",
"DC_EVErrorCodeText": "NO_ERROR",
"DC_EVStatus.EVRESSSOC": "73",
"EVTargetCurrent.Multiplier": "0",
"EVTargetCurrent.Value": "47",
"EVTargetCurrent.Unit": "A",
"EVMaximumVoltageLimit_isUsed": "0",
"EVMaximumCurrentLimit_isUsed": "0",
"EVMaximumPowerLimit_isUsed": "0",
"ChargingComplete": "0",
"EVTargetVoltage.Multiplier": "0",
"EVTargetVoltage.Value": "333",
"EVTargetVoltage.Unit": "V",
"debug": "Line9057Line9260Line436"
}
01fe800100000029809a0203af96e35a4fb8de50e000c300a081828568101818000000060a1e806030303e028386c04800 means:
{
"msgName": "CurrentDemandRes",
"info": "41 bytes to convert",
"error": "",
"result": "",
"schema": "DIN",
"g_errn": "0",
"header.SessionID": "0ebe5b8d693ee379",
"header.Notification_isUsed": "0",
"header.Signature_isUsed": "0",
"ResponseCode": "OK",
"DC_EVSEStatus.EVSEIsolationStatus": "3",
"DC_EVSEStatus.EVSEIsolationStatus_isUsed": "1",
"DC_EVSEStatus.EVSEStatusCode": "6",
"EVSEStatusCode_text": "EVSE_Malfunction",
"DC_EVSEStatus.NotificationMaxDelay": "10",
"DC_EVSEStatus.EVSENotification": "1",
"EVSEPresentVoltage.Multiplier": "0",
"EVSEPresentVoltage.Value": "301",
"EVSEPresentVoltage.Unit": "V",
"EVSEPresentCurrent.Multiplier": "0",
"EVSEPresentCurrent.Value": "0",
"EVSEPresentCurrent.Unit": "A",
"EVSECurrentLimitAchieved": "0",
"EVSEVoltageLimitAchieved": "0",
"EVSEPowerLimitAchieved": "0",
"EVSEMaximumVoltageLimit.Multiplier": "0",
"EVSEMaximumVoltageLimit.Value": "500",
"EVSEMaximumVoltageLimit.Unit": "V",
"EVSEMaximumCurrentLimit.Multiplier": "0",
"EVSEMaximumCurrentLimit.Value": "62",
"EVSEMaximumCurrentLimit.Unit": "A",
"EVSEMaximumPowerLimit.Multiplier": "2",
"EVSEMaximumPowerLimit.Value": "1240",
"EVSEMaximumPowerLimit.Unit": "W",
"debug": "Line442"
}
01fe800100000023809a0203af96e35a4fb8de50d1401240c0c0bc6001810580480c08360100c143340800 means:
{
"msgName": "CurrentDemandReq",
"info": "35 bytes to convert",
"error": "",
"result": "",
"schema": "DIN",
"g_errn": "0",
"header.SessionID": "0ebe5b8d693ee379",
"header.Notification_isUsed": "0",
"header.Signature_isUsed": "0",
"DC_EVStatus.EVReady": "1",
"DC_EVStatus.EVErrorCode": "0",
"DC_EVErrorCodeText": "NO_ERROR",
"DC_EVStatus.EVRESSSOC": "73",
"EVTargetCurrent.Multiplier": "0",
"EVTargetCurrent.Value": "47",
"EVTargetCurrent.Unit": "A",
"EVMaximumVoltageLimit_isUsed": "0",
"EVMaximumCurrentLimit_isUsed": "0",
"EVMaximumPowerLimit_isUsed": "0",
"ChargingComplete": "0",
"EVTargetVoltage.Multiplier": "0",
"EVTargetVoltage.Value": "333",
"EVTargetVoltage.Unit": "V",
"debug": "Line9057Line9260Line436"
}
01fe800100000029809a0203af96e35a4fb8de50e0a00100a081828568101818000000060a1e806030303e028386c04800 means:
{
"msgName": "CurrentDemandRes",
"info": "41 bytes to convert",
"error": "",
"result": "",
"schema": "DIN",
"g_errn": "0",
"header.SessionID": "0ebe5b8d693ee379",
"header.Notification_isUsed": "0",
"header.Signature_isUsed": "0",
"ResponseCode": "FAILED_SequenceError",
"DC_EVSEStatus.EVSEIsolationStatus": "0",
"DC_EVSEStatus.EVSEIsolationStatus_isUsed": "1",
"DC_EVSEStatus.EVSEStatusCode": "2",
"EVSEStatusCode_text": "EVSE_Shutdown",
"DC_EVSEStatus.NotificationMaxDelay": "10",
"DC_EVSEStatus.EVSENotification": "1",
"EVSEPresentVoltage.Multiplier": "0",
"EVSEPresentVoltage.Value": "301",
"EVSEPresentVoltage.Unit": "V",
"EVSEPresentCurrent.Multiplier": "0",
"EVSEPresentCurrent.Value": "0",
"EVSEPresentCurrent.Unit": "A",
"EVSECurrentLimitAchieved": "0",
"EVSEVoltageLimitAchieved": "0",
"EVSEPowerLimitAchieved": "0",
"EVSEMaximumVoltageLimit.Multiplier": "0",
"EVSEMaximumVoltageLimit.Value": "500",
"EVSEMaximumVoltageLimit.Unit": "V",
"EVSEMaximumCurrentLimit.Multiplier": "0",
"EVSEMaximumCurrentLimit.Value": "62",
"EVSEMaximumCurrentLimit.Unit": "A",
"EVSEMaximumPowerLimit.Multiplier": "2",
"EVSEMaximumPowerLimit.Value": "1240",
"EVSEMaximumPowerLimit.Unit": "W",
"debug": "Line442"
}

View file

@ -27,6 +27,8 @@ class addressManager():
self.pevIp="" self.pevIp=""
self.SeccIp="" self.SeccIp=""
self.SeccTcpPort = 15118 # just a default. Will be overwritten during SDP if we are pev. self.SeccTcpPort = 15118 # just a default. Will be overwritten during SDP if we are pev.
self.evseMacIsUpdated = False
self.evseMac = [0, 0, 0, 0, 0, 0]
pass pass
def findLinkLocalIpv6Address(self): def findLinkLocalIpv6Address(self):
@ -122,10 +124,12 @@ class addressManager():
if (len(self.localIpv6Addresses)==0): if (len(self.localIpv6Addresses)==0):
print("[addressManager] Error: No local Ipv6 address was found.") print("[addressManager] Error: No local Ipv6 address was found.")
self.localIpv6Address = "localhost" self.localIpv6Address = "localhost"
cfg_exitIfNoLocalLinkAddressIsFound = 1 cfg_exitIfNoLocalLinkAddressIsFound = getConfigValueBool("exit_if_no_local_link_address_is_found")
if (cfg_exitIfNoLocalLinkAddressIsFound!=0): if (cfg_exitIfNoLocalLinkAddressIsFound!=0):
print("Exiting, because it does not make sense to continue without IPv6 address"); print("Exiting, because it does not make sense to continue without IPv6 address")
sys.exit(1); sys.exit(1)
else:
print("Error: It does not make sense to continue without IPv6 address, but exit_if_no_local_link_address_is_found says you want to continue");
else: else:
# at least one address was found. Take the first one (this may be the wrong adaptor). # at least one address was found. Take the first one (this may be the wrong adaptor).
self.localIpv6Address = self.localIpv6Addresses[0] self.localIpv6Address = self.localIpv6Addresses[0]
@ -155,8 +159,16 @@ class addressManager():
def setEvseMac(self, evseMac): def setEvseMac(self, evseMac):
# During the SLAC, the MAC of the EVSE was found out. Store it, maybe we need it later. # During the SLAC, the MAC of the EVSE was found out. Store it, maybe we need it later.
self.evseMac = evseMac self.evseMac = evseMac
self.evseMacIsUpdated = True
print("[addressManager] evse has MAC " + prettyMac(self.evseMac)) print("[addressManager] evse has MAC " + prettyMac(self.evseMac))
def getEvseMacAsStringAndClearUpdateFlag(self):
self.evseMacIsUpdated = False
return prettyMac(self.evseMac)
def isEvseMacNew(self):
return self.evseMacIsUpdated
def setPevIp(self, pevIp): def setPevIp(self, pevIp):
# During SDP, the IPv6 of the PEV was found out. Store it, maybe we need it later. # During SDP, the IPv6 of the PEV was found out. Store it, maybe we need it later.
if (type(pevIp)==type(bytearray([0]))): if (type(pevIp)==type(bytearray([0]))):

View file

@ -27,7 +27,7 @@ from helpers import combineValueAndMultiplier
import json import json
# The path where the script will search for pcap files: # The path where the script will search for pcap files:
directory = 'local/pcaps_to_convert' directory = '../clara-logs'
# stop the evaluation after this number of packets. Set to zero to have no limit. # stop the evaluation after this number of packets. Set to zero to have no limit.
nLimitNumberOfPackets = -1 nLimitNumberOfPackets = -1
@ -42,11 +42,16 @@ nLimitNumberOfPackets = -1
def convertClaralogToTxt(inputFileName): def convertClaralogToTxt(inputFileName):
global nLimitNumberOfPackets global nLimitNumberOfPackets
global directory global directory
fileIn = open(inputFileName, 'r') outputFileName = inputFileName + '.decoded.txt'
fileOut = open(inputFileName + '.decoded.txt', 'w') # todo: if output file exists
if (os.path.isfile(os.path.join(directory, outputFileName))):
print("output file " + outputFileName + " already exists. Nothing to do.")
return
fileIn = open(inputFileName, 'r', encoding="Latin-1")
fileOut = open(outputFileName, 'w', encoding="Latin-1")
print("# generated by claralogConverter.py", file=fileOut) print("# generated by claralogConverter.py", file=fileOut)
print("# https://github.com/uhi22/pyPLC", file=fileOut) print("# https://github.com/uhi22/pyPLC", file=fileOut)
fileOutValues = open(inputFileName + '.values.txt', 'w') fileOutValues = open(inputFileName + '.values.txt', 'w', encoding="Latin-1")
print("# generated by claralogConverter.py", file=fileOutValues) print("# generated by claralogConverter.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') fileOutStatistics = open(directory + '/pcap_statistics.txt', 'a')
@ -60,12 +65,13 @@ def convertClaralogToTxt(inputFileName):
numberOfPackets+=1 numberOfPackets+=1
#print(packet) #print(packet)
print(line.strip(), file=fileOut) print(line.strip(), file=fileOut)
posTcpPayload = line.find(": 01 fe 80 01 00") lineWithoutBlanks = line.replace(" ", "")
posTcpPayload = lineWithoutBlanks.find(":01fe800100")
if posTcpPayload>0: if posTcpPayload>0:
# we found the V2GTP header. # we found the V2GTP header.
tcppayload = line[posTcpPayload + 2:] # everything until the end of the line is the data tcppayload = lineWithoutBlanks[posTcpPayload + 1:] # everything until the end of the line is the data
# this gives a string of hex values, separated by " ", e.g. "01fe8001" # this gives a string of hex values, separated by " ", e.g. "01fe8001"
s = tcppayload.replace(" ", "") # remove spaces s = tcppayload
if (s[0:8]=="01fe8001"): if (s[0:8]=="01fe8001"):
# it is a V2GTP header with EXI content # it is a V2GTP header with EXI content
strExi = s[16:] # remove V2GTP header (8 bytes, means 16 hex characters) strExi = s[16:] # remove V2GTP header (8 bytes, means 16 hex characters)

View file

@ -15,6 +15,16 @@ To convince the car, that a CCS charger is connected, several preconditions need
![image](EvseMode_BlockDiagram.jpg) ![image](EvseMode_BlockDiagram.jpg)
![image](foto_MiniEvse1.jpg)
![image](foto_MiniEvse2.jpg)
![image](foto_MiniEvse3.jpg)
![image](foto_MiniEvse4.jpg)
![image](foto_MiniEvse5.jpg)
![image](foto_MiniEvse6.jpg)
An example schematic, the bill-of-material and a 3D model for the housing is available [here](../hardware/plc_evse/)
## Software ## Software
### Configuring the HomePlug modem as Charging Station ### Configuring the HomePlug modem as Charging Station

BIN
doc/foto_MiniEvse1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

BIN
doc/foto_MiniEvse2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

BIN
doc/foto_MiniEvse3.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

BIN
doc/foto_MiniEvse4.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 831 KiB

BIN
doc/foto_MiniEvse5.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 978 KiB

BIN
doc/foto_MiniEvse6.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 MiB

View file

@ -36,7 +36,7 @@ The open-plc-utils report the version MAC-QCA7500-2.8.0.30-01-20190707-CS.
Contra: Contra:
- Even with the modified configuration for pev (according to https://openinverter.org/forum/viewtopic.php?p=55120#p55120), the QCA7500 does not send SLAC parameter requests. This means: Cannot be used as pev. - Even with the modified configuration for pev (according to https://openinverter.org/forum/viewtopic.php?p=55120#p55120), the QCA7500 does not send SLAC parameter requests. This means: Cannot be used as pev.
### TPlink TL-PA4010P ### TPlink TL-PA4010P v5.0
This adaptor was suggested by https://openinverter.org/forum/viewtopic.php?p=37085#p37085 and there, This adaptor was suggested by https://openinverter.org/forum/viewtopic.php?p=37085#p37085 and there,
successfully used to establish a communication to the CCS charger. successfully used to establish a communication to the CCS charger.
@ -67,6 +67,12 @@ How to modify:
- connect cables to supply the device. Works with 12V, also works with 5V from an USB power bank. - connect cables to supply the device. Works with 12V, also works with 5V from an USB power bank.
- connect cables and circuit (1nF and 150ohms in series) for connecting to the pilot line. - connect cables and circuit (1nF and 150ohms in series) for connecting to the pilot line.
#### TPlink TL-PA4010P v2.3
![image](https://github.com/user-attachments/assets/c98d100c-f7fc-4e41-a183-1b5eeebd43fa)
![image](https://github.com/user-attachments/assets/6fef8096-4373-42d9-9688-7d284f587940)
Confirmed to be working as EVSE (needs patching via open-plc-utils) and supplied with 5V.
## Controller for the PEV ## Controller for the PEV
Besides the homeplug modem, there are additional parts necessary for a vehicle to perform CCS charging. Two of these are: 1. The inlet voltage measurement. 2. The control of CP state and relays. Besides the homeplug modem, there are additional parts necessary for a vehicle to perform CCS charging. Two of these are: 1. The inlet voltage measurement. 2. The control of CP state and relays.

View file

@ -241,3 +241,23 @@ https://strobelstefan.org/2019/10/16/zugriff-via-ssh-ohne-passworteingabe-anmeld
- in connection->SSH->Auth, browse to the private key generated above. - in connection->SSH->Auth, browse to the private key generated above.
- in session, give a name for the session, and click "safe" to store the connection settings - in session, give a name for the session, and click "safe" to store the connection settings
- next time, the connection to the pi works just by clicking the saved session. - next time, the connection to the pi works just by clicking the saved session.
## Optional: MAC logging with GPS coordinates
0. connect GPS module to the raspberry. This needs only 3 wires: 3V3, GND, RXD. The TXD of the module needs to be connected to the RXD of the raspberry. https://tutorials-raspberrypi.de/raspberry-pi-gps-ortung-navigation/
1. `sudo apt-get install minicom gpsd gpsd-clients`
2. in the raspberry pi config, enable the serial port and disable the serial console
3. reboot
4. `ls -ltr /dev/ser* # should show all serial devices`
5. `cat /dev/serial0` Get the the raw NMEA data from the serial line and shows it. Processing of them works also without the daemon.
6. configure the gsd: `nano /etc/default/gpsd`
```
USBAUTO=“false“
DEVICES=“/dev/serial0″
GPSD_OPTIONS=“-n“
```
start the GPS daemon: `sudo service gpsd start`
Now this works: `cgps -s`

77
doc/plcSignalAmplitude.md Normal file
View file

@ -0,0 +1,77 @@
# PLC signal amplitudes
To have comparable results, we measure the peak-to-peak voltage of the preamble of the homeplug packet.
1. Homeplug modem with AR7420, supplied by 5V
10Vpp at the transformer
2. Homeplug modem with AR7420, supplied by 5V, with 150ohm series resistor between transformer and CP.
Foccci v3 (including transformer with RIK10, 2x5 turns) connected via 1m twisted pair.
3Vpp at the CP line
3. Like 2, but in the homeplug modem two additional series resistors 680ohms in the transmit path, between
the power amplifier and the transformer.
- EVSE packet: 250mVpp at the CP line
- Foccci packet: 500mVpp at the CP line
4. Like 3, but in the homeplug modem the two 680ohm in serial and a 10ohm in parallel to the transformer.
- Foccci packet: 500mVpp at the CP line (no change, normal)
- EVSE packet: hardly measurable, in the 20mVpp range.
- Communication still works perfect.
5. Compleo 20kW triple charger
Sends very loud packets, even if no vehicle is connected.
17Vpp
6. ISO 15118-3
On both, EVSE side and EV side of the charging cable, the typical voltage is
1.3Vpp.
This is specified as "power spectral density" of typical -75dBm/Hz at 1.8MHz to 30MHz, receiver band width 9kHz with 50 ohms.
Example states the following levels:
- Transceiver output: -72dBm/Hz
- CP on EVSE: -76dBm/Hz
- CP on PEV: -78dBm/Hz
- Transceiver modem input: -81dBm/Hz
This would be 9dB between transmitter output and receiver input.
7. Output of the QCA7005
4Vpp. Each output (TX+ and TX-) sit at ~1.6V statically, and move 1V up and 1V down. So the differential voltage
reaches from -2V to +2V, which is 4Vpp.
8. Foccci 5.1 transmit level
with 120ohm termination
270mVpp
9. Foccci 5.1 receive limit test
- Foccci sees the EVSE, starting to become instable, if 400mVpp -36dB. This is 400mVpp / 64 = 6mVpp.
- Foccci sees single messages, if 400mVpp -42dB. This is 3mV.
- Foccci does not see the EVSE (modem goes to sleep) if 400mVpp -44dB. This is 400mVpp/158 = 2.5mVpp.
10. Foccci 5.1 transformerless patch, R25=100ohms, receive limit
- 400mV -32dB stable connection.
- 400mV -38dB still works, starting to become instable.
- 400mV -44dB sometimes modem sleep, sometimes not.
- 400mV -50dB modem sleep.
11. Foccci 5.1 transformerless patch, R25=100ohms, transmit level
210mVpp
# Attenuation calculator
https://www.digikey.de/de/resources/conversion-calculators/conversion-calculator-attenuator
* -6dB is half voltage
* -12dB is quater voltage
* -20dB is tenth voltage

View file

@ -112,6 +112,16 @@ charge_target_voltage = 270
# Deeper explanations here: https://github.com/uhi22/pyPLC/blob/master/doc/installation_on_raspberry.md#further-optimizations # Deeper explanations here: https://github.com/uhi22/pyPLC/blob/master/doc/installation_on_raspberry.md#further-optimizations
exit_on_session_end = False exit_on_session_end = False
# If pyPLC does not find a local link address, this means there is no
# ethernet connection to the homeplug modem. This is a severe hardware
# error, so pyPLC will terminate. However, for special testing purposes this can
# be set to False. In this case, pyPLC will continue to run, even if there is no modem connected.
exit_if_no_local_link_address_is_found = True
# pyPLC in PevMode or ListenMode can detect the MAC address of the charger (SECC MAC) and
# write it, together with the time stamp, into the file MacLog.txt
log_the_evse_mac_to_file = True
# Run test cases. # Run test cases.
# Explanation in doc/testing_and_simulation.md # Explanation in doc/testing_and_simulation.md
# Possible values: # Possible values:
@ -135,8 +145,9 @@ udp_syslog_enable = Yes
# Limitations/explanations here: https://openinverter.org/forum/viewtopic.php?p=57894#p57894 and # Limitations/explanations here: https://openinverter.org/forum/viewtopic.php?p=57894#p57894 and
# https://openinverter.org/forum/viewtopic.php?t=1063 (Is it possible to make a CCS to CHAdeMO adapter?) # https://openinverter.org/forum/viewtopic.php?t=1063 (Is it possible to make a CCS to CHAdeMO adapter?)
# none: all other use cases # none: all other use cases
charge_parameter_backend = chademo #charge_parameter_backend = chademo
#charge_parameter_backend = mqtt #charge_parameter_backend = mqtt
charge_parameter_backend = none
# REST callback for SoC states. Comment out to disable. Do not leave a trailing slash # REST callback for SoC states. Comment out to disable. Do not leave a trailing slash
# This parameter is used in EvseMode, to configure where the data which is retrieved # This parameter is used in EvseMode, to configure where the data which is retrieved
@ -146,3 +157,6 @@ soc_callback_enabled = False
soc_callback_endpoint = http://1.1.1.1 soc_callback_endpoint = http://1.1.1.1
# Fallback value to use if the vehicle does not support the EVEnergyCapacity.Value # Fallback value to use if the vehicle does not support the EVEnergyCapacity.Value
soc_fallback_energy_capacity = 2700 soc_fallback_energy_capacity = 2700
# The URL where to send some logging data.
logging_url = http://enteryourhosthere.org/pyPlcLogging/addLog.php

View file

@ -298,13 +298,24 @@ def testReadExiFromExiLogFile(strLogFileName):
strDecoderSelection = "D" # it is a DIN message strDecoderSelection = "D" # it is a DIN message
if (strToDecode[1:3]=="H ") or (strToDecode[1:3]=="h "): if (strToDecode[1:3]=="H ") or (strToDecode[1:3]=="h "):
strDecoderSelection = "H" # it is a ProtocolHandshake message strDecoderSelection = "H" # it is a ProtocolHandshake message
if (strDecoderSelection==""): # no decoder prefix contained in the file. Assume DIN.
strDecoderSelection = "D"
if (len(strDecoderSelection)>0): # if we have selected a valid decoder if (len(strDecoderSelection)>0): # if we have selected a valid decoder
posOfSpace=2 posOfSpace=strToDecode.find(" ")
s = strToDecode[posOfSpace+1:] # The part after the " " contains the EXI hex data. if (posOfSpace>0):
posStartOfData = posOfSpace+1 # we have a space in the line, the exi data starts after the space
else:
print(strToDecode[0:4])
if (strToDecode[0:4]=="01fe"):
print("seems we have a v2gtp header")
posStartOfData = 16 # we have a v2gtp header, so the exi data starts after 16 characters
else:
print("seems we have raw exi data")
posStartOfData = 1 # assume raw exi at the start of the line
s = strToDecode[posStartOfData:] # The part after the " " contains the EXI hex data.
s = s.replace(" ", "") # Remove blanks s = s.replace(" ", "") # Remove blanks
s = s.replace("\n", "") # Remove line feeds s = s.replace("\n", "") # Remove line feeds
#print(s) print(s)
decoded=exiDecode(s, "D"+strDecoderSelection) decoded=exiDecode(s, "D"+strDecoderSelection)
print(myLine.replace("\n", "") + " means:") print(myLine.replace("\n", "") + " means:")
print(decoded) print(decoded)
@ -338,10 +349,20 @@ if __name__ == "__main__":
if (False): if (False):
testTimeConsumption() testTimeConsumption()
exit() exit()
if (True): if (False):
testReadExiFromExiLogFile('DemoExiLog.txt') testReadExiFromExiLogFile('DemoExiLog.txt')
testReadExiFromExiLogFile('PevExiLog.txt') testReadExiFromExiLogFile('PevExiLog.txt')
exit() exit()
if (True):
testReadExiFromExiLogFile('RawExiLog.txt')
exit()
if (True):
print("ChargeParameterDiscovery of the BMW iX, https://github.com/uhi22/pyPLC/issues/14#issuecomment-1895437190")
print("From Everest logs (successful)")
testDecoder("809a0211c1ff77aed4fdff907190000009204061104e04070a8c30102050961f12805000", pre="DD", comment="")
testDecoder("809a0211c1ff77aed4fdff90800000040020000405182824138550008000018180c80c1c", pre="DD", comment="")
print("From pyPLC (failed)")
testDecoder("809A02004080C1014181C21080004800400000C0C320040C0E014060A184060606002060A190020303005030300510", pre="DD", comment="")
if (False): if (False):
testDecoder("8000ebab9371d34b9b79d189a98989c1d191d191818981d26b9b3a232b30010000040001b75726e3a64696e3a37303132313a323031323a4d73674465660020000100880", pre="DH", comment="supportedAppProtocolReq") testDecoder("8000ebab9371d34b9b79d189a98989c1d191d191818981d26b9b3a232b30010000040001b75726e3a64696e3a37303132313a323031323a4d73674465660020000100880", pre="DH", comment="supportedAppProtocolReq")

View file

@ -44,6 +44,16 @@ class fsmEvse():
# The timeout handling function. # The timeout handling function.
return (self.cyclesInState > 100) # 100*33ms=3.3s return (self.cyclesInState > 100) # 100*33ms=3.3s
def showDecodedTransmitMessage(self, msg):
# decodes the transmit message to show it in the trace.
# This is inefficient, because it calls the exi decoder via the slow
# command line interface, while DEcoding for the transmit data is
# technically not necessary. Only for logging. In case this
# introduces timing problems, just remove the three lines below.
exidataTx = removeV2GTPHeader(msg)
strConverterResultTx = exiDecode(exidataTx, "D"+self.schemaSelection)
self.addToTrace(strConverterResultTx)
def stateFunctionWaitForSupportedApplicationProtocolRequest(self): def stateFunctionWaitForSupportedApplicationProtocolRequest(self):
if (len(self.rxData)>0): if (len(self.rxData)>0):
@ -54,6 +64,7 @@ class fsmEvse():
self.addToTrace(strConverterResult) self.addToTrace(strConverterResult)
if (strConverterResult.find("supportedAppProtocolReq")>0): if (strConverterResult.find("supportedAppProtocolReq")>0):
nDinSchemaID = 255 # invalid default value nDinSchemaID = 255 # invalid default value
nIso1SchemaID = 255
try: try:
jsondict = json.loads(strConverterResult) jsondict = json.loads(strConverterResult)
nAppProtocol_ArrayLen = int(jsondict["AppProtocol_arrayLen"]) nAppProtocol_ArrayLen = int(jsondict["AppProtocol_arrayLen"])
@ -64,8 +75,16 @@ class fsmEvse():
self.addToTrace("The NameSpace " + strNameSpace + " has SchemaID " + str(nSchemaId)) self.addToTrace("The NameSpace " + strNameSpace + " has SchemaID " + str(nSchemaId))
if (strNameSpace.find(":din:70121:")>0): if (strNameSpace.find(":din:70121:")>0):
nDinSchemaID = nSchemaId nDinSchemaID = nSchemaId
if (strNameSpace.find(":iso:15118:2:2013")>0):
nIso1SchemaID = nSchemaId
except: except:
self.addToTrace("ERROR: Could not decode the supportedAppProtocolReq") self.addToTrace("ERROR: Could not decode the supportedAppProtocolReq")
# Strategy for schema selection: pyPLC preferes DIN. If the car does not announce DIN,
# then pyPLC looks for ISO1. If this is also not announced by the car, pyPLC will not
# send a handshake response.
# This means: pyPLC does NOT care for the priority sent by the car. It uses the own
# priority "DIN over ISO1". Reason: DIN is proven-in-use, the ISO implementation still
# work-in-progress.
if (nDinSchemaID<255): if (nDinSchemaID<255):
self.addToTrace("Detected DIN") self.addToTrace("Detected DIN")
# TESTSUITE: When the EVSE received the Handshake, it selects a new test case. # TESTSUITE: When the EVSE received the Handshake, it selects a new test case.
@ -75,9 +94,22 @@ class fsmEvse():
self.addToTrace("responding " + prettyHexMessage(msg)) self.addToTrace("responding " + prettyHexMessage(msg))
self.Tcp.transmit(msg) self.Tcp.transmit(msg)
self.publishStatus("Schema negotiated") self.publishStatus("Schema negotiated")
self.schemaSelection = "D" # D for DIN
self.enterState(stateWaitForSessionSetupRequest) self.enterState(stateWaitForSessionSetupRequest)
else: else:
self.addToTrace("Error: The connected car does not support DIN. At the moment, the pyPLC only supports DIN.") if (nIso1SchemaID<255):
self.addToTrace("Detected ISO1 (aka ISO 2013)")
# TESTSUITE: When the EVSE received the Handshake, it selects a new test case.
testsuite_choose_testcase()
# Eh for encode handshake, SupportedApplicationProtocolResponse, with SchemaID as parameter
msg = addV2GTPHeader(exiEncode("Eh__"+str(nIso1SchemaID)))
self.addToTrace("responding " + prettyHexMessage(msg))
self.Tcp.transmit(msg)
self.publishStatus("Schema negotiated")
self.schemaSelection = "1" # 1 for ISO1
self.enterState(stateWaitForSessionSetupRequest)
else:
self.addToTrace("Error: The connected car does not support DIN or ISO1. At the moment, the pyPLC only supports DIN and ISO1.")
def stateFunctionWaitForSessionSetupRequest(self): def stateFunctionWaitForSessionSetupRequest(self):
if (len(self.rxData)>0): if (len(self.rxData)>0):
@ -85,16 +117,15 @@ class fsmEvse():
self.addToTrace("In state WaitForSessionSetupRequest, received " + prettyHexMessage(self.rxData)) self.addToTrace("In state WaitForSessionSetupRequest, received " + prettyHexMessage(self.rxData))
exidata = removeV2GTPHeader(self.rxData) exidata = removeV2GTPHeader(self.rxData)
self.rxData = [] self.rxData = []
strConverterResult = exiDecode(exidata, "DD") strConverterResult = exiDecode(exidata, "D"+self.schemaSelection) # decodes DIN or ISO1
self.addToTrace(strConverterResult) self.addToTrace(strConverterResult)
if (strConverterResult.find("SessionSetupReq")>0): if (strConverterResult.find("SessionSetupReq")>0):
# todo: check the request content, and fill response parameters msg = addV2GTPHeader(exiEncode("E"+self.schemaSelection+"a")) # EDa for Encode, Din, SessionSetupResponse
msg = addV2GTPHeader(exiEncode("EDa")) # EDa for Encode, Din, SessionSetupResponse
self.addToTrace("responding " + prettyHexMessage(msg))
if (testsuite_faultinjection_is_triggered(TC_EVSE_ResponseCode_SequenceError_for_SessionSetup)): if (testsuite_faultinjection_is_triggered(TC_EVSE_ResponseCode_SequenceError_for_SessionSetup)):
# send a SessionSetupResponse with Responsecode SequenceError # send a SessionSetupResponse with Responsecode SequenceError
msg = addV2GTPHeader("809a0232417b661514a4cb91e0A02d0691559529548c0841e0fc1af4507460c0") msg = addV2GTPHeader("809a0232417b661514a4cb91e0A02d0691559529548c0841e0fc1af4507460c0")
self.addToTrace("responding " + prettyHexMessage(msg)) self.addToTrace("responding " + prettyHexMessage(msg))
self.showDecodedTransmitMessage(msg)
self.Tcp.transmit(msg) self.Tcp.transmit(msg)
self.publishStatus("Session established") self.publishStatus("Session established")
self.enterState(stateWaitForServiceDiscoveryRequest) self.enterState(stateWaitForServiceDiscoveryRequest)
@ -109,15 +140,16 @@ class fsmEvse():
self.addToTrace("In state WaitForServiceDiscoveryRequest, received " + prettyHexMessage(self.rxData)) self.addToTrace("In state WaitForServiceDiscoveryRequest, received " + prettyHexMessage(self.rxData))
exidata = removeV2GTPHeader(self.rxData) exidata = removeV2GTPHeader(self.rxData)
self.rxData = [] self.rxData = []
strConverterResult = exiDecode(exidata, "DD") strConverterResult = exiDecode(exidata, "D"+self.schemaSelection) # decodes DIN or ISO1
self.addToTrace(strConverterResult) self.addToTrace(strConverterResult)
if (strConverterResult.find("ServiceDiscoveryReq")>0): if (strConverterResult.find("ServiceDiscoveryReq")>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, ServiceDiscoveryResponse msg = addV2GTPHeader(exiEncode("E"+self.schemaSelection+"b")) # EDb for Encode, Din, ServiceDiscoveryResponse
if (testsuite_faultinjection_is_triggered(TC_EVSE_ResponseCode_SequenceError_for_ServiceDiscoveryRes)): if (testsuite_faultinjection_is_triggered(TC_EVSE_ResponseCode_SequenceError_for_ServiceDiscoveryRes)):
# send a ServiceDiscoveryRes with Responsecode SequenceError # send a ServiceDiscoveryRes with Responsecode SequenceError
msg = addV2GTPHeader("809a021a3b7c417774813311a0A120024100c4") msg = addV2GTPHeader("809a021a3b7c417774813311a0A120024100c4")
self.addToTrace("responding " + prettyHexMessage(msg)) self.addToTrace("responding " + prettyHexMessage(msg))
self.showDecodedTransmitMessage(msg)
self.Tcp.transmit(msg) self.Tcp.transmit(msg)
self.publishStatus("Services discovered") self.publishStatus("Services discovered")
self.enterState(stateWaitForServicePaymentSelectionRequest) self.enterState(stateWaitForServicePaymentSelectionRequest)
@ -129,15 +161,19 @@ class fsmEvse():
self.addToTrace("In state WaitForServicePaymentSelectionRequest, received " + prettyHexMessage(self.rxData)) self.addToTrace("In state WaitForServicePaymentSelectionRequest, received " + prettyHexMessage(self.rxData))
exidata = removeV2GTPHeader(self.rxData) exidata = removeV2GTPHeader(self.rxData)
self.rxData = [] self.rxData = []
strConverterResult = exiDecode(exidata, "DD") strConverterResult = exiDecode(exidata, "D"+self.schemaSelection) # decodes DIN or ISO1
self.addToTrace(strConverterResult) self.addToTrace(strConverterResult)
if (strConverterResult.find("ServicePaymentSelectionReq")>0): if (self.schemaSelection=="D"):
# todo: check the request content, and fill response parameters strMessageName = "ServicePaymentSelectionReq" # This is the original name in DIN
msg = addV2GTPHeader(exiEncode("EDc")) # EDc for Encode, Din, ServicePaymentSelectionResponse else:
strMessageName = "PaymentServiceSelectionReq" # In ISO1, they use a slightly different name for the same thing.
if (strConverterResult.find(strMessageName)>0):
msg = addV2GTPHeader(exiEncode("E"+self.schemaSelection+"c")) # EDc for Encode, Din, ServicePaymentSelectionResponse
if (testsuite_faultinjection_is_triggered(TC_EVSE_ResponseCode_SequenceError_for_ServicePaymentSelectionRes)): if (testsuite_faultinjection_is_triggered(TC_EVSE_ResponseCode_SequenceError_for_ServicePaymentSelectionRes)):
# send a ServicePaymentSelectionRes with Responsecode SequenceError # send a ServicePaymentSelectionRes with Responsecode SequenceError
msg = addV2GTPHeader("809a021a3b7c417774813311c0A0") msg = addV2GTPHeader("809a021a3b7c417774813311c0A0")
self.addToTrace("responding " + prettyHexMessage(msg)) self.addToTrace("responding " + prettyHexMessage(msg))
self.showDecodedTransmitMessage(msg)
self.Tcp.transmit(msg) self.Tcp.transmit(msg)
self.publishStatus("ServicePayment selected") self.publishStatus("ServicePayment selected")
self.enterState(stateWaitForFlexibleRequest) # todo: not clear, what is specified. The Ioniq sends PowerDeliveryReq as next. self.enterState(stateWaitForFlexibleRequest) # todo: not clear, what is specified. The Ioniq sends PowerDeliveryReq as next.
@ -149,7 +185,7 @@ class fsmEvse():
self.addToTrace("In state WaitForFlexibleRequest, received " + prettyHexMessage(self.rxData)) self.addToTrace("In state WaitForFlexibleRequest, received " + prettyHexMessage(self.rxData))
exidata = removeV2GTPHeader(self.rxData) exidata = removeV2GTPHeader(self.rxData)
self.rxData = [] self.rxData = []
strConverterResult = exiDecode(exidata, "DD") strConverterResult = exiDecode(exidata, "D"+self.schemaSelection) # decodes DIN or ISO1
self.addToTrace(strConverterResult) self.addToTrace(strConverterResult)
if (strConverterResult.find("PowerDeliveryReq")>0): if (strConverterResult.find("PowerDeliveryReq")>0):
# todo: check the request content, and fill response parameters # todo: check the request content, and fill response parameters
@ -157,11 +193,12 @@ class fsmEvse():
jsondict = json.loads(strConverterResult) jsondict = json.loads(strConverterResult)
current_soc = int(jsondict.get("EVRESSSOC", -1)) current_soc = int(jsondict.get("EVRESSSOC", -1))
self.publishSoCs(current_soc, origin="PowerDeliveryReq") self.publishSoCs(current_soc, origin="PowerDeliveryReq")
msg = addV2GTPHeader(exiEncode("EDh")) # EDh for Encode, Din, PowerDeliveryResponse msg = addV2GTPHeader(exiEncode("E"+self.schemaSelection+"h")) # EDh for Encode, Din, PowerDeliveryResponse
if (testsuite_faultinjection_is_triggered(TC_EVSE_ResponseCode_Failed_for_PowerDeliveryRes)): if (testsuite_faultinjection_is_triggered(TC_EVSE_ResponseCode_Failed_for_PowerDeliveryRes)):
# send a PowerDeliveryResponse with Responsecode Failed # send a PowerDeliveryResponse with Responsecode Failed
msg = addV2GTPHeader("809a0125e6cecc51408420400000") msg = addV2GTPHeader("809a0125e6cecc51408420400000")
self.addToTrace("responding " + prettyHexMessage(msg)) self.addToTrace("responding " + prettyHexMessage(msg))
self.showDecodedTransmitMessage(msg)
self.publishStatus("PowerDelivery") self.publishStatus("PowerDelivery")
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
@ -175,11 +212,12 @@ class fsmEvse():
self.publishSoCs(current_soc, full_soc, energy_capacity, energy_request, origin="ChargeParameterDiscoveryReq") self.publishSoCs(current_soc, full_soc, energy_capacity, energy_request, origin="ChargeParameterDiscoveryReq")
# 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, ChargeParameterDiscoveryResponse msg = addV2GTPHeader(exiEncode("E"+self.schemaSelection+"e")) # EDe for Encode, Din, ChargeParameterDiscoveryResponse
if (testsuite_faultinjection_is_triggered(TC_EVSE_ResponseCode_ServiceSelectionInvalid_for_ChargeParameterDiscovery)): if (testsuite_faultinjection_is_triggered(TC_EVSE_ResponseCode_ServiceSelectionInvalid_for_ChargeParameterDiscovery)):
# send a ChargeParameterDiscoveryResponse with Responsecode ServiceSelectionInvalid # send a ChargeParameterDiscoveryResponse with Responsecode ServiceSelectionInvalid
msg = addV2GTPHeader("809a0125e6cecd50810001ec00201004051828758405500080000101844138101c2432c04081436c900c0c000041435ecc044606000200") msg = addV2GTPHeader("809a0125e6cecd50810001ec00201004051828758405500080000101844138101c2432c04081436c900c0c000041435ecc044606000200")
self.addToTrace("responding " + prettyHexMessage(msg)) self.addToTrace("responding " + prettyHexMessage(msg))
self.showDecodedTransmitMessage(msg)
self.publishStatus("ChargeParamDiscovery") self.publishStatus("ChargeParamDiscovery")
self.Tcp.transmit(msg) self.Tcp.transmit(msg)
self.nCableCheckLoops = 0 # start with a fresh full cable check self.nCableCheckLoops = 0 # start with a fresh full cable check
@ -191,16 +229,17 @@ class fsmEvse():
jsondict = json.loads(strConverterResult) jsondict = json.loads(strConverterResult)
current_soc = int(jsondict.get("DC_EVStatus.EVRESSSOC", -1)) current_soc = int(jsondict.get("DC_EVStatus.EVRESSSOC", -1))
self.publishSoCs(current_soc, -1, -1, origin="CableCheckReq") self.publishSoCs(current_soc, -1, -1, origin="CableCheckReq")
if (self.nCableCheckLoops<10): if (self.nCableCheckLoops<5):
self.nCableCheckLoops+=1 self.nCableCheckLoops+=1
strCableCheckOngoing = "1" strCableCheckOngoing = "1"
else: else:
strCableCheckOngoing = "0" # Now the cable check is finished. strCableCheckOngoing = "0" # Now the cable check is finished.
msg = addV2GTPHeader(exiEncode("EDf_"+strCableCheckOngoing)) # EDf for Encode, Din, CableCheckResponse msg = addV2GTPHeader(exiEncode("E"+self.schemaSelection+"f_"+strCableCheckOngoing)) # EDf for Encode, Din, CableCheckResponse
if (testsuite_faultinjection_is_triggered(TC_EVSE_ResponseCode_Failed_for_CableCheckRes)): if (testsuite_faultinjection_is_triggered(TC_EVSE_ResponseCode_Failed_for_CableCheckRes)):
# send a CableCheckResponse with Responsecode Failed # send a CableCheckResponse with Responsecode Failed
msg = addV2GTPHeader("809a0125e6cecc5020804080000400") msg = addV2GTPHeader("809a0125e6cecc5020804080000400")
self.addToTrace("responding " + prettyHexMessage(msg)) self.addToTrace("responding " + prettyHexMessage(msg))
self.showDecodedTransmitMessage(msg)
self.publishStatus("CableCheck") self.publishStatus("CableCheck")
if (not testsuite_faultinjection_is_triggered(TC_EVSE_Timeout_during_CableCheck)): if (not testsuite_faultinjection_is_triggered(TC_EVSE_Timeout_during_CableCheck)):
self.Tcp.transmit(msg) self.Tcp.transmit(msg)
@ -226,11 +265,14 @@ class fsmEvse():
self.simulatedPresentVoltage += 5 self.simulatedPresentVoltage += 5
if getConfigValueBool('evse_simulate_precharge'): if getConfigValueBool('evse_simulate_precharge'):
strPresentVoltage = str(self.simulatedPresentVoltage) # "345" strPresentVoltage = str(int(self.simulatedPresentVoltage*10)/10) # "345"
else: else:
strPresentVoltage = str(self.hardwareInterface.getInletVoltage()) strPresentVoltage = str(self.hardwareInterface.getInletVoltage())
# in case we control a real power supply: give the precharge target to it
self.hardwareInterface.setPowerSupplyVoltageAndCurrent(uTarget, 1)
self.callbackShowStatus(strPresentVoltage, "EVSEPresentVoltage") self.callbackShowStatus(strPresentVoltage, "EVSEPresentVoltage")
msg = addV2GTPHeader(exiEncode("EDg_"+strPresentVoltage)) # EDg for Encode, Din, PreChargeResponse msg = addV2GTPHeader(exiEncode("E"+self.schemaSelection+"g_"+strPresentVoltage)) # EDg for Encode, Din, PreChargeResponse
if (testsuite_faultinjection_is_triggered(TC_EVSE_Shutdown_during_PreCharge)): if (testsuite_faultinjection_is_triggered(TC_EVSE_Shutdown_during_PreCharge)):
# send a PreChargeResponse with StatusCode EVSE_Shutdown, to simulate a user-triggered session stop # send a PreChargeResponse with StatusCode EVSE_Shutdown, to simulate a user-triggered session stop
msg = addV2GTPHeader("809a02180189551e24fc9e9160004100008182800000") msg = addV2GTPHeader("809a02180189551e24fc9e9160004100008182800000")
@ -238,23 +280,46 @@ class fsmEvse():
# send a PreChargeResponse with ResponseCode Failed # send a PreChargeResponse with ResponseCode Failed
msg = addV2GTPHeader("809a0125e6cecc516080408000008284de880800") msg = addV2GTPHeader("809a0125e6cecc516080408000008284de880800")
self.addToTrace("responding " + prettyHexMessage(msg)) self.addToTrace("responding " + prettyHexMessage(msg))
self.showDecodedTransmitMessage(msg)
self.publishStatus("PreCharging " + strPresentVoltage) self.publishStatus("PreCharging " + strPresentVoltage)
if (not testsuite_faultinjection_is_triggered(TC_EVSE_Timeout_during_PreCharge)): if (not testsuite_faultinjection_is_triggered(TC_EVSE_Timeout_during_PreCharge)):
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
if (strConverterResult.find("ContractAuthenticationReq")>0): if (strConverterResult.find("ContractAuthenticationReq")>0):
# todo: check the request content, and fill response parameters # Ask the hardwareInterface, whether the user already presented a valid RFID or similar
msg = addV2GTPHeader(exiEncode("EDl")) # EDl for Encode, Din, ContractAuthenticationResponse if (self.hardwareInterface.isUserAuthenticated()):
strAuthFinished = "1"
self.addToTrace("Contract is fine")
else:
strAuthFinished = "0"
self.addToTrace("Contract is not (yet) fine")
msg = addV2GTPHeader(exiEncode("EDl_" + strAuthFinished)) # EDl for Encode, Din, ContractAuthenticationResponse
if (testsuite_faultinjection_is_triggered(TC_EVSE_ResponseCode_SequenceError_for_ContractAuthenticationRes)): if (testsuite_faultinjection_is_triggered(TC_EVSE_ResponseCode_SequenceError_for_ContractAuthenticationRes)):
# send a ContractAuthenticationResponse with Responsecode SequenceError # send a ContractAuthenticationResponse with Responsecode SequenceError
msg = addV2GTPHeader("809a021a3b7c417774813310c0A200") msg = addV2GTPHeader("809a021a3b7c417774813310c0A200")
self.addToTrace("responding " + prettyHexMessage(msg)) self.addToTrace("responding " + prettyHexMessage(msg))
self.showDecodedTransmitMessage(msg)
self.publishStatus("ContractAuthentication") self.publishStatus("ContractAuthentication")
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
if (strConverterResult.find("AuthorizationReq")>0):
# Ask the hardwareInterface, whether the user already presented a valid RFID or similar
if (self.hardwareInterface.isUserAuthenticated()):
strAuthFinished = "1"
self.addToTrace("User is Authorized")
else:
strAuthFinished = "0"
self.addToTrace("User is not (yet) authorized")
msg = addV2GTPHeader(exiEncode("E"+self.schemaSelection+"l_" + strAuthFinished)) # E1l for Encode, Iso1, AuthorizationResponse
self.addToTrace("responding " + prettyHexMessage(msg))
self.showDecodedTransmitMessage(msg)
self.publishStatus("Authorization")
self.Tcp.transmit(msg)
self.enterState(stateWaitForFlexibleRequest)
if (strConverterResult.find("CurrentDemandReq")>0): if (strConverterResult.find("CurrentDemandReq")>0):
# check the request content, and fill response parameters # check the request content, and fill response parameters
uTarget = 220 # default in case we cannot decode the requested voltage uTarget = 220 # default in case we cannot decode the requested voltage
iTarget = 1 # default...
try: try:
jsondict = json.loads(strConverterResult) jsondict = json.loads(strConverterResult)
strEVTargetVoltageValue = jsondict["EVTargetVoltage.Value"] strEVTargetVoltageValue = jsondict["EVTargetVoltage.Value"]
@ -264,7 +329,7 @@ class fsmEvse():
strEVTargetCurrentMultiplier = jsondict["EVTargetCurrent.Multiplier"] strEVTargetCurrentMultiplier = jsondict["EVTargetCurrent.Multiplier"]
iTarget = combineValueAndMultiplier(strEVTargetCurrentValue, strEVTargetCurrentMultiplier) iTarget = combineValueAndMultiplier(strEVTargetCurrentValue, strEVTargetCurrentMultiplier)
self.addToTrace("EV wants EVTargetVoltage " + str(uTarget) + " and EVTargetCurrent " + str(iTarget)) self.addToTrace("EV wants EVTargetVoltage " + str(uTarget) + " and EVTargetCurrent " + str(iTarget))
self.hardwareInterface.setPevRequest(uTarget, iTarget) self.hardwareInterface.setPowerSupplyVoltageAndCurrent(uTarget, iTarget)
current_soc = int(jsondict.get("DC_EVStatus.EVRESSSOC", -1)) current_soc = int(jsondict.get("DC_EVStatus.EVRESSSOC", -1))
full_soc = int(jsondict.get("FullSOC", -1)) full_soc = int(jsondict.get("FullSOC", -1))
energy_capacity = int(jsondict.get("EVEnergyCapacity.Value", -1)) energy_capacity = int(jsondict.get("EVEnergyCapacity.Value", -1))
@ -273,6 +338,7 @@ class fsmEvse():
self.publishSoCs(current_soc, full_soc, energy_capacity, energy_request, origin="CurrentDemandReq") self.publishSoCs(current_soc, full_soc, energy_capacity, energy_request, origin="CurrentDemandReq")
self.callbackShowStatus(str(current_soc), "soc") self.callbackShowStatus(str(current_soc), "soc")
self.callbackShowStatus(str(uTarget) + "V, " + str(iTarget) + "A", "UandI")
except: except:
self.addToTrace("ERROR: Could not decode the CurrentDemandReq") self.addToTrace("ERROR: Could not decode the CurrentDemandReq")
@ -287,7 +353,7 @@ class fsmEvse():
else: else:
# The normal case. No stop requested from user. Just send EVSE_Ready. # The normal case. No stop requested from user. Just send EVSE_Ready.
strEVSEStatus = "1" # 1=EVSE_Ready strEVSEStatus = "1" # 1=EVSE_Ready
msg = addV2GTPHeader(exiEncode("EDi_"+strPresentVoltage + "_" + strEVSEPresentCurrent + "_" + strEVSEStatus)) # EDi for Encode, Din, CurrentDemandRes msg = addV2GTPHeader(exiEncode("E"+self.schemaSelection+"i_"+strPresentVoltage + "_" + strEVSEPresentCurrent + "_" + strEVSEStatus)) # EDi for Encode, Din, CurrentDemandRes
if (testsuite_faultinjection_is_triggered(TC_EVSE_Malfunction_during_CurrentDemand)): if (testsuite_faultinjection_is_triggered(TC_EVSE_Malfunction_during_CurrentDemand)):
# send a CurrentDemandResponse with StatusCode EVSE_Malfunction, to simulate e.g. a voltage overshoot # send a CurrentDemandResponse with StatusCode EVSE_Malfunction, to simulate e.g. a voltage overshoot
msg = addV2GTPHeader("809a02203fa9e71c31bc920100821b430b933b4b7339032b93937b908e08043000081828440201818000040060a11c06030306402038441380") msg = addV2GTPHeader("809a02203fa9e71c31bc920100821b430b933b4b7339032b93937b908e08043000081828440201818000040060a11c06030306402038441380")
@ -298,6 +364,7 @@ class fsmEvse():
# send a CurrentDemandResponse with ResponseCode Failed # send a CurrentDemandResponse with ResponseCode Failed
msg = addV2GTPHeader("809a0125e6cecc50e0804080000082867dc8081818000000040a1b64802030882702038486580800") msg = addV2GTPHeader("809a0125e6cecc50e0804080000082867dc8081818000000040a1b64802030882702038486580800")
self.addToTrace("responding " + prettyHexMessage(msg)) self.addToTrace("responding " + prettyHexMessage(msg))
self.showDecodedTransmitMessage(msg)
self.publishStatus("CurrentDemand") self.publishStatus("CurrentDemand")
if (not testsuite_faultinjection_is_triggered(TC_EVSE_Timeout_during_CurrentDemand)): if (not testsuite_faultinjection_is_triggered(TC_EVSE_Timeout_during_CurrentDemand)):
self.Tcp.transmit(msg) self.Tcp.transmit(msg)
@ -306,16 +373,18 @@ class fsmEvse():
# todo: check the request content, and fill response parameters # todo: check the request content, and fill response parameters
# simulate the decreasing voltage during the weldingDetection: # simulate the decreasing voltage during the weldingDetection:
self.simulatedPresentVoltage = self.simulatedPresentVoltage*0.8 + 3*random() self.simulatedPresentVoltage = self.simulatedPresentVoltage*0.8 + 3*random()
strPresentVoltage = str(self.simulatedPresentVoltage) strPresentVoltage = str(int(self.simulatedPresentVoltage*10)/10) # "345"
self.callbackShowStatus(strPresentVoltage, "EVSEPresentVoltage") self.callbackShowStatus(strPresentVoltage, "EVSEPresentVoltage")
msg = addV2GTPHeader(exiEncode("EDj_"+strPresentVoltage)) # EDj for Encode, Din, WeldingDetectionRes msg = addV2GTPHeader(exiEncode("E"+self.schemaSelection+"j_"+strPresentVoltage)) # EDj for Encode, Din, WeldingDetectionRes
self.showDecodedTransmitMessage(msg)
self.addToTrace("responding " + prettyHexMessage(msg)) self.addToTrace("responding " + prettyHexMessage(msg))
self.publishStatus("WeldingDetection") self.publishStatus("WeldingDetection")
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
if (strConverterResult.find("SessionStopReq")>0): if (strConverterResult.find("SessionStopReq")>0):
# todo: check the request content, and fill response parameters # todo: check the request content, and fill response parameters
msg = addV2GTPHeader(exiEncode("EDk")) # EDk for Encode, Din, SessionStopRes msg = addV2GTPHeader(exiEncode("E"+self.schemaSelection+"k")) # EDk for Encode, Din, SessionStopRes
self.showDecodedTransmitMessage(msg)
self.addToTrace("responding " + prettyHexMessage(msg)) self.addToTrace("responding " + prettyHexMessage(msg))
self.publishStatus("SessionStop") self.publishStatus("SessionStop")
self.Tcp.transmit(msg) self.Tcp.transmit(msg)

Binary file not shown.

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,2 @@
(kicad_pcb (version 20240108) (generator "pcbnew") (generator_version "8.0")
)

View file

@ -0,0 +1,83 @@
{
"board": {
"active_layer": 0,
"active_layer_preset": "",
"auto_track_width": true,
"hidden_netclasses": [],
"hidden_nets": [],
"high_contrast_mode": 0,
"net_color_mode": 1,
"opacity": {
"images": 0.6,
"pads": 1.0,
"tracks": 1.0,
"vias": 1.0,
"zones": 0.6
},
"selection_filter": {
"dimensions": true,
"footprints": true,
"graphics": true,
"keepouts": true,
"lockedItems": false,
"otherItems": true,
"pads": true,
"text": true,
"tracks": true,
"vias": true,
"zones": true
},
"visible_items": [
0,
1,
2,
3,
4,
5,
8,
9,
10,
11,
12,
13,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
32,
33,
34,
35,
36,
39,
40
],
"visible_layers": "fffffff_ffffffff",
"zone_display_mode": 0
},
"git": {
"repo_password": "",
"repo_type": "",
"repo_username": "",
"ssh_key": ""
},
"meta": {
"filename": "plc_evse.kicad_prl",
"version": 3
},
"project": {
"files": []
}
}

View file

@ -0,0 +1,392 @@
{
"board": {
"3dviewports": [],
"design_settings": {
"defaults": {},
"diff_pair_dimensions": [],
"drc_exclusions": [],
"rules": {},
"track_widths": [],
"via_dimensions": []
},
"ipc2581": {
"dist": "",
"distpn": "",
"internal_id": "",
"mfg": "",
"mpn": ""
},
"layer_presets": [],
"viewports": []
},
"boards": [],
"cvpcb": {
"equivalence_files": []
},
"erc": {
"erc_exclusions": [],
"meta": {
"version": 0
},
"pin_map": [
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
1,
0,
1,
2
],
[
0,
1,
0,
0,
0,
0,
1,
1,
2,
1,
1,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2
],
[
1,
1,
1,
1,
1,
0,
1,
1,
1,
1,
1,
2
],
[
0,
0,
0,
1,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
1,
2,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
0,
2,
1,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2
]
],
"rule_severities": {
"bus_definition_conflict": "error",
"bus_entry_needed": "error",
"bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error",
"conflicting_netclasses": "error",
"different_unit_footprint": "error",
"different_unit_net": "error",
"duplicate_reference": "error",
"duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error",
"global_label_dangling": "warning",
"hier_label_mismatch": "error",
"label_dangling": "error",
"lib_symbol_issues": "warning",
"missing_bidi_pin": "warning",
"missing_input_pin": "warning",
"missing_power_pin": "error",
"missing_unit": "warning",
"multiple_net_names": "warning",
"net_not_bus_member": "warning",
"no_connect_connected": "warning",
"no_connect_dangling": "warning",
"pin_not_connected": "error",
"pin_not_driven": "error",
"pin_to_pin": "warning",
"power_pin_not_driven": "error",
"similar_labels": "warning",
"simulation_model_issue": "ignore",
"unannotated": "error",
"unit_value_mismatch": "error",
"unresolved_variable": "error",
"wire_dangling": "error"
}
},
"libraries": {
"pinned_footprint_libs": [],
"pinned_symbol_libs": []
},
"meta": {
"filename": "plc_evse.kicad_pro",
"version": 1
},
"net_settings": {
"classes": [
{
"bus_width": 12,
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.2,
"via_diameter": 0.6,
"via_drill": 0.3,
"wire_width": 6
}
],
"meta": {
"version": 3
},
"net_colors": null,
"netclass_assignments": null,
"netclass_patterns": []
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "",
"plot": "",
"pos_files": "",
"specctra_dsn": "",
"step": "",
"svg": "",
"vrml": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"annotate_start_num": 0,
"bom_export_filename": "",
"bom_fmt_presets": [],
"bom_fmt_settings": {
"field_delimiter": ",",
"keep_line_breaks": false,
"keep_tabs": false,
"name": "CSV",
"ref_delimiter": ",",
"ref_range_delimiter": "",
"string_delimiter": "\""
},
"bom_presets": [],
"bom_settings": {
"exclude_dnp": false,
"fields_ordered": [
{
"group_by": false,
"label": "Reference",
"name": "Reference",
"show": true
},
{
"group_by": true,
"label": "Value",
"name": "Value",
"show": true
},
{
"group_by": false,
"label": "Datasheet",
"name": "Datasheet",
"show": true
},
{
"group_by": false,
"label": "Footprint",
"name": "Footprint",
"show": true
},
{
"group_by": false,
"label": "Qty",
"name": "${QUANTITY}",
"show": true
},
{
"group_by": true,
"label": "DNP",
"name": "${DNP}",
"show": true
}
],
"filter_string": "",
"group_symbols": true,
"name": "Grouped By Value",
"sort_asc": true,
"sort_field": "Reference"
},
"connection_grid_size": 50.0,
"drawing": {
"dashed_lines_dash_length_ratio": 12.0,
"dashed_lines_gap_length_ratio": 3.0,
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
"intersheets_ref_own_page": false,
"intersheets_ref_prefix": "",
"intersheets_ref_short": false,
"intersheets_ref_show": false,
"intersheets_ref_suffix": "",
"junction_size_choice": 3,
"label_size_ratio": 0.375,
"operating_point_overlay_i_precision": 3,
"operating_point_overlay_i_range": "~A",
"operating_point_overlay_v_precision": 3,
"operating_point_overlay_v_range": "~V",
"overbar_offset_ratio": 1.23,
"pin_symbol_size": 25.0,
"text_offset_ratio": 0.15
},
"legacy_lib_dir": "",
"legacy_lib_list": [],
"meta": {
"version": 1
},
"net_format_name": "",
"page_layout_descr_file": "",
"plot_directory": "",
"spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"",
"spice_model_current_sheet_as_root": true,
"spice_save_all_currents": false,
"spice_save_all_dissipations": false,
"spice_save_all_voltages": false,
"subpart_first_id": 65,
"subpart_id_separator": 0
},
"sheets": [
[
"082b1eab-b65d-4897-81d0-9208bf27ab55",
"Root"
]
],
"text_variables": {}
}

File diff suppressed because it is too large Load diff

Binary file not shown.

View file

@ -0,0 +1,25 @@
# PLC EVSE
For use together with pyPLC.
This is a KiCad 8 project. Only the schematic, no board.
### BOM
* C1, C2, C3: elcap, 100µF, 25V
* C20: ceramic, 1nF (something between 1nF and 2.2nF is fine)
* U1: op-amp LF355
* U2, U3: isolated DCDC converter, 5V to 12V, 1W, e.g. B0512S-1WR3
* R1: 1k
* R2: 270ohm
* R5: 56k
* R6: 100k
* R7: 220k
* R8, R9: 120k (does not really matter, also 100k would be fine)
* R20: 180ohm (does not really matter. Something between 100ohm and 330ohm.)
* D1, D2: LEDs WS2812B. Also one would be sufficient.
* RV1: potentiometer e.g. 10k linear (also 1k or 22k would be fine)
* A1: Arduino Nano
* Prototyping board 100mm x 106mm
* Housing 3D printed, FreeCad mini-evse-housing.FCStd, or step: mini-evse-housing.step
* For power supply: USB A cable, cutted and soldered to the board.

View file

@ -168,12 +168,6 @@ class hardwareInterface():
# return self.lock_confirmed # return self.lock_confirmed
return 1 # todo: use the real connector lock feedback return 1 # todo: use the real connector lock feedback
def setPevRequest(self, voltage, current):
#here we can publish the voltage and current requests received from the PEV side
if getConfigValue("charge_parameter_backend") == "mqtt":
self.mqttclient.publish(getConfigValue("mqtt_topic") + "/pev_voltage", str(voltage))
self.mqttclient.publish(getConfigValue("mqtt_topic") + "/pev_current", str(current))
def setChargerParameters(self, maxVoltage, maxCurrent): def setChargerParameters(self, maxVoltage, maxCurrent):
self.addToTrace("Setting charger parameters maxVoltage=%d V, maxCurrent=%d A" % (maxVoltage, maxCurrent)) self.addToTrace("Setting charger parameters maxVoltage=%d V, maxCurrent=%d A" % (maxVoltage, maxCurrent))
self.maxChargerVoltage = int(maxVoltage) self.maxChargerVoltage = int(maxVoltage)
@ -186,10 +180,19 @@ class hardwareInterface():
self.addToTrace("Setting charger present values Voltage=%d V, Current=%d A" % (voltageNow, currentNow)) self.addToTrace("Setting charger present values Voltage=%d V, Current=%d A" % (voltageNow, currentNow))
self.chargerVoltage = int(voltageNow) self.chargerVoltage = int(voltageNow)
self.chargerCurrent = int(currentNow) self.chargerCurrent = int(currentNow)
if getConfigValue("charge_parameter_backend") == "mqtt": if getConfigValue("charge_parameter_backend") == "mqtt":
self.mqttclient.publish(getConfigValue("mqtt_topic") + "/charger_voltage", voltageNow) self.mqttclient.publish(getConfigValue("mqtt_topic") + "/charger_voltage", voltageNow)
self.mqttclient.publish(getConfigValue("mqtt_topic") + "/charger_current", currentNow) self.mqttclient.publish(getConfigValue("mqtt_topic") + "/charger_current", currentNow)
def setPowerSupplyVoltageAndCurrent(self, targetVoltage, targetCurrent):
# if we are the charger, and have a real power supply which we want to control, we do it here
self.homeplughandler.sendSpecialMessageToControlThePowerSupply(targetVoltage, targetCurrent)
#here we can publish the voltage and current requests received from the PEV side
if getConfigValue("charge_parameter_backend") == "mqtt":
self.mqttclient.publish(getConfigValue("mqtt_topic") + "/pev_voltage", str(voltage))
self.mqttclient.publish(getConfigValue("mqtt_topic") + "/pev_current", str(current))
def getInletVoltage(self): def getInletVoltage(self):
# uncomment this line, to take the simulated inlet voltage instead of the really measured # uncomment this line, to take the simulated inlet voltage instead of the really measured
# self.inletVoltage = self.simulatedInletVoltage # self.inletVoltage = self.simulatedInletVoltage
@ -243,6 +246,18 @@ class hardwareInterface():
self.callbackShowStatus(format(self.simulatedSoc,".1f"), "soc") self.callbackShowStatus(format(self.simulatedSoc,".1f"), "soc")
return self.simulatedSoc return self.simulatedSoc
def isUserAuthenticated(self):
# If the user needs to authorize, fill this function in a way that it returns False as long as
# we shall wait for the users authorization, and returns True if the authentication was successfull.
# Discussing here: https://github.com/uhi22/pyPLC/issues/28#issuecomment-2230656379
# For testing purposes, we just use a counter to decide that we return
# once "ongoing" and then "finished".
if (self.demoAuthenticationCounter<1):
self.demoAuthenticationCounter += 1
return False
else:
return True
def initPorts(self): def initPorts(self):
if (getConfigValue("charge_parameter_backend") == "chademo"): if (getConfigValue("charge_parameter_backend") == "chademo"):
filters = [ filters = [
@ -262,13 +277,15 @@ class hardwareInterface():
self.mqttclient.on_message = self.mqtt_on_message self.mqttclient.on_message = self.mqtt_on_message
self.mqttclient.connect(getConfigValue("mqtt_broker"), 1883, 60) self.mqttclient.connect(getConfigValue("mqtt_broker"), 1883, 60)
def __init__(self, callbackAddToTrace=None, callbackShowStatus=None): def __init__(self, callbackAddToTrace=None, callbackShowStatus=None, homeplughandler=None):
self.callbackAddToTrace = callbackAddToTrace self.callbackAddToTrace = callbackAddToTrace
self.callbackShowStatus = callbackShowStatus self.callbackShowStatus = callbackShowStatus
self.homeplughandler = homeplughandler
self.loopcounter = 0 self.loopcounter = 0
self.outvalue = 0 self.outvalue = 0
self.simulatedSoc = 20.0 # percent self.simulatedSoc = 20.0 # percent
self.demoAuthenticationCounter = 0
self.inletVoltage = 0.0 # volts self.inletVoltage = 0.0 # volts
self.accuVoltage = 0.0 self.accuVoltage = 0.0
@ -303,6 +320,7 @@ class hardwareInterface():
def resetSimulation(self): def resetSimulation(self):
self.simulatedInletVoltage = 0.0 # volts self.simulatedInletVoltage = 0.0 # volts
self.simulatedSoc = 20.0 # percent self.simulatedSoc = 20.0 # percent
self.demoAuthenticationCounter = 0
def simulatePreCharge(self): def simulatePreCharge(self):
if (self.simulatedInletVoltage<230): if (self.simulatedInletVoltage<230):

183
listenerNoGui.py Executable file
View file

@ -0,0 +1,183 @@
#!/usr/bin/python3
# The non-GUI variant of the listener
# Functionality:
# - gets the GPS location from a GPS daemon (gpsd on linux)
# - gets the chargers MAC address from the address manager
# - sends the location and the chargers MAC to a server via http request
import time
import pyPlcWorker
from pyPlcModes import *
import sys # for argv
from configmodule import getConfigValue, getConfigValueBool
import urllib.request
import gps # the gpsd interface module
import RPi.GPIO as GPIO # for controlling hardware pins of the raspberry
startTime_ms = round(time.time()*1000)
GPSsession = gps.gps(mode=gps.WATCH_ENABLE)
strGpsPos = "no_pos"
strLoggingUrl = getConfigValue("logging_url")
def cbAddToTrace(s):
currentTime_ms = round(time.time()*1000)
dT_ms = currentTime_ms - startTime_ms
print("[" + str(dT_ms) + "ms] " + s)
def cbShowStatus(s, selection=""):
pass
def testBlockingBeep(patternselection):
if (patternselection==1):
# The "MAC Found" beep
p.ChangeDutyCycle(30)
p.ChangeFrequency(1100)
time.sleep(0.3)
p.ChangeFrequency(1300)
time.sleep(0.3)
p.ChangeFrequency(1500)
time.sleep(0.3)
p.ChangeDutyCycle(0)
if (patternselection==2):
# The short "ok" beep
p.ChangeDutyCycle(10)
p.ChangeFrequency(1600)
time.sleep(0.07)
p.ChangeDutyCycle(0)
if (patternselection==3):
# The "no GPS position" beep
print("no pos beep 4")
p.ChangeDutyCycle(10)
p.ChangeFrequency(1700)
time.sleep(0.04)
p.ChangeDutyCycle(0)
time.sleep(0.04)
p.ChangeDutyCycle(10)
p.ChangeFrequency(1700)
time.sleep(0.04)
p.ChangeDutyCycle(0)
time.sleep(0.04)
p.ChangeDutyCycle(10)
p.ChangeFrequency(1700)
time.sleep(0.04)
p.ChangeDutyCycle(0)
time.sleep(0.04)
p.ChangeDutyCycle(10)
p.ChangeFrequency(1700)
time.sleep(0.04)
p.ChangeDutyCycle(0)
def trySomeHttp():
print("***************trying some http********************")
strChargerMac = "chargerMac=na"
if (worker.addressManager.isEvseMacNew()):
testBlockingBeep(1)
strChargerMac = "chargerMac=" + worker.addressManager.getEvseMacAsStringAndClearUpdateFlag().replace(":", "")
strParams = strChargerMac
strParams = strParams + "&loops="+str(nMainloops)+"&pos="+strGpsPos
print(strParams)
try:
contents = urllib.request.urlopen(strLoggingUrl + "?" + strParams).read()
print(len(strGpsPos))
if (len(strGpsPos)>7):
print("Valid GPS coordinates, and http logging worked")
#testBlockingBeep(2)
else:
print("http was ok, but no GPS position")
#testBlockingBeep(3)
except Exception as err:
contents = "(no contents received) " + str(err)
print(contents)
def GpsMainfunction():
global strGpsPos
GPSsession.read()
if (gps.MODE_SET & GPSsession.valid):
print('Mode: %s(%d) Time: ' %
(("Invalid", "NO_FIX", "2D", "3D")[GPSsession.fix.mode],
GPSsession.fix.mode), end="")
# print time, if we have it
if gps.TIME_SET & GPSsession.valid:
print(GPSsession.fix.time, end="")
else:
print('n/a', end="")
if ((gps.isfinite(GPSsession.fix.latitude) and
gps.isfinite(GPSsession.fix.longitude))):
print(" Lat %.6f Lon %.6f" %
(GPSsession.fix.latitude, GPSsession.fix.longitude))
strGpsPos = str(GPSsession.fix.latitude)+"_"+str(GPSsession.fix.longitude)
else:
print(" Lat n/a Lon n/a")
strGpsPos = str(0.0)+"_"+str(0.0)
print(strGpsPos)
def mytestfunction():
global soundstate
#testBlockingBeep(2)
#if (soundstate==0):
# p.ChangeDutyCycle(10)
# p.ChangeFrequency(1000)
#if (soundstate==1):
# p.ChangeDutyCycle(10)
# p.ChangeFrequency(1200)
#if (soundstate==2):
# p.ChangeDutyCycle(0)
#soundstate+=1
#if (soundstate>=3):
# soundstate=0
myMode = C_LISTEN_MODE
isSimulationMode=0
if (len(sys.argv) > 1):
if (sys.argv[1] == "S"):
isSimulationMode=1
print("starting in LISTEN_MODE")
print("press Ctrl-C to exit")
worker=pyPlcWorker.pyPlcWorker(cbAddToTrace, cbShowStatus, myMode, isSimulationMode)
nMainloops=0
httpTime_ms = round(time.time()*1000)
testTime_ms = httpTime_ms
#intervalForHttpLogging_ms = 120*1000 # each 2 minutes send the logging data to the server
intervalForHttpLogging_ms = 30*1000 # each half minute send the logging data to the server
soundstate = 0
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.OUT)
p=GPIO.PWM(23, 500) # 500 Hz
p.start(0)
p.ChangeDutyCycle(50)
time.sleep(0.1)
p.ChangeDutyCycle(0)
time.sleep(0.1)
p.ChangeDutyCycle(50)
time.sleep(0.1)
p.ChangeDutyCycle(0)
while (1):
time.sleep(.03) # 'do some calculation'
nMainloops+=1
currentTime_ms = round(time.time()*1000)
if ((currentTime_ms-httpTime_ms)>intervalForHttpLogging_ms) or (worker.addressManager.isEvseMacNew()):
trySomeHttp()
httpTime_ms = currentTime_ms
if ((currentTime_ms-testTime_ms)>2000):
mytestfunction()
testTime_ms = currentTime_ms
worker.mainfunction()
GpsMainfunction()
#---------------------------------------------------------------

View file

@ -87,6 +87,7 @@ def convertPcapToTxt(inputFileName):
t2PreChargeBegin = 0 t2PreChargeBegin = 0
t3CurrentDemandBegin = 0 t3CurrentDemandBegin = 0
numberOfPackets=0 numberOfPackets=0
decodeAlsoAsApplHandshake=0
for packet in cap: for packet in cap:
numberOfPackets+=1 numberOfPackets+=1
#print(packet) #print(packet)
@ -105,6 +106,16 @@ def convertPcapToTxt(inputFileName):
#print(decoded) #print(decoded)
print(sHeader, file=fileOut) print(sHeader, file=fileOut)
print(decoded, file=fileOut) print(decoded, file=fileOut)
if (decodeAlsoAsApplHandshake>0): # if it may be applHandShake, caused by the previous message, we decode also this.
print("Alternative decoding as applHandshake", file=fileOut)
decodeAlsoAsApplHandshake-=1
decoded=exiConnector.exiDecode(strExi, "DH")
print(decoded, file=fileOut)
if (decoded.find("error-")>0): # a decoding error usually points to wrong protocol, so most likely it is appHandShake.
print("maybe this is no DIN. Trying to decode as applHandshake", file=fileOut)
decodeAlsoAsApplHandshake=1
decoded=exiConnector.exiDecode(strExi, "DH")
print(decoded, file=fileOut)
if (decoded.find("SessionSetupReq")>0): if (decoded.find("SessionSetupReq")>0):
if ((t1CableCheckBegin>0) and (t2PreChargeBegin>t1CableCheckBegin) and (t3CurrentDemandBegin>t2PreChargeBegin)): if ((t1CableCheckBegin>0) and (t2PreChargeBegin>t1CableCheckBegin) and (t3CurrentDemandBegin>t2PreChargeBegin)):
print("charger MAC " + chargerMAC + " " + getManufacturerFromMAC(chargerMAC)) print("charger MAC " + chargerMAC + " " + getManufacturerFromMAC(chargerMAC))

View file

@ -57,6 +57,15 @@ def cbShowStatus(s, selection=""):
if (selection == "soc"): if (selection == "soc"):
lblSoc['text']= "SOC " + s + "%" lblSoc['text']= "SOC " + s + "%"
s="" s=""
if (selection == "UandI"):
lblRequestedUandI['text']= "Target " + s + ""
s=""
if (selection == "PowerSupplyUPresent"):
lblPowerSupplyUPresent['text']= "UPresent " + s + "V"
s=""
if (selection == "PowerSupplyUTarget"):
lblPowerSupplyUTarget['text']= "UTarget " + s + "V"
s=""
if (len(s)>0): if (len(s)>0):
lblStatus['text']=s lblStatus['text']=s
root.update() root.update()
@ -73,6 +82,10 @@ if (len(sys.argv) > 1):
else: else:
if (sys.argv[1] == "E"): if (sys.argv[1] == "E"):
myMode = C_EVSE_MODE myMode = C_EVSE_MODE
else:
if (sys.argv[1] == "L"):
myMode = C_LISTEN_MODE
# The simulation mode can be set by command line in addition in both, PevMode and EvseMode. # The simulation mode can be set by command line in addition in both, PevMode and EvseMode.
isSimulationMode=0 isSimulationMode=0
@ -94,8 +107,19 @@ if (myMode == C_EVSE_MODE):
print("starting in EvseMode") print("starting in EvseMode")
root = tk.Tk() root = tk.Tk()
root.geometry("400x350") #root.geometry("400x350")
root.geometry("600x350")
lastKey = '' lastKey = ''
if (myMode == C_EVSE_MODE):
frmPowerSupply = tk.Frame(root, bg='lightblue', bd=3)
frmPowerSupply.pack(side='right', fill='both', expand='True')
lblPowerSupplyUTarget = tk.Label(frmPowerSupply, text="(UTarget)", bg='lightblue')
lblPowerSupplyUTarget.config(font=('Helvetica bold', 18))
lblPowerSupplyUTarget.pack()
lblPowerSupplyUPresent = tk.Label(frmPowerSupply, text="(PowerSupplyUPresent)", bg='lightblue')
lblPowerSupplyUPresent.config(font=('Helvetica bold', 18))
lblPowerSupplyUPresent.pack()
lblHelp = tk.Label(root, justify= "left") lblHelp = tk.Label(root, justify= "left")
lblHelp['text']="x=exit \nS=GET_SW \nP=PEV mode \nE=EVSE mode \nL=Listen mode \ns=SET_KEY \nG=GET_KEY (try twice) \nt=SET_KEY modified \n space=stop charging" lblHelp['text']="x=exit \nS=GET_SW \nP=PEV mode \nE=EVSE mode \nL=Listen mode \ns=SET_KEY \nG=GET_KEY (try twice) \nt=SET_KEY modified \n space=stop charging"
lblHelp.pack() lblHelp.pack()
@ -108,6 +132,8 @@ lblState.config(font=('Helvetica bold', 20))
lblState.pack() lblState.pack()
lblSoc = tk.Label(root, text="(soc)") lblSoc = tk.Label(root, text="(soc)")
lblSoc.pack() lblSoc.pack()
lblRequestedUandI = tk.Label(root, text="(U and I)")
lblRequestedUandI.pack()
lblUInlet = tk.Label(root, text="(U Inlet)") lblUInlet = tk.Label(root, text="(U Inlet)")
lblUInlet.config(font=('Helvetica bold', 26)) lblUInlet.config(font=('Helvetica bold', 26))
lblUInlet.pack() lblUInlet.pack()
@ -115,6 +141,7 @@ lblEVSEPresentVoltage = tk.Label(root, text="(EVSEPresentVoltage)")
lblEVSEPresentVoltage.config(font=('Helvetica bold', 16)) lblEVSEPresentVoltage.config(font=('Helvetica bold', 16))
lblEVSEPresentVoltage.pack() lblEVSEPresentVoltage.pack()
if (myMode == C_EVSE_MODE): if (myMode == C_EVSE_MODE):
lblTestcase = tk.Label(root, text="(test case)") lblTestcase = tk.Label(root, text="(test case)")
lblTestcase.pack() lblTestcase.pack()

View file

@ -43,6 +43,7 @@ from pyPlcModes import *
from mytestsuite import * from mytestsuite import *
from random import random from random import random
from configmodule import getConfigValue, getConfigValueBool from configmodule import getConfigValue, getConfigValueBool
from datetime import datetime
import sys import sys
MAC_BROADCAST = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ] MAC_BROADCAST = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ]
@ -120,6 +121,14 @@ class pyPlcHomeplug():
self.addToTrace("From " + strSourceMac + strSourceFriendlyName + " to " + strDestMac) self.addToTrace("From " + strSourceMac + strSourceFriendlyName + " to " + strDestMac)
def getSourceMacAddressAsString(self):
strSourceMac = ""
for i in range(6, 12):
strSourceMac = strSourceMac + twoCharHex(self.myreceivebuffer[i])
if (i<11):
strSourceMac = strSourceMac + ":"
return strSourceMac
def getEtherType(self, messagebufferbytearray): def getEtherType(self, messagebufferbytearray):
etherType=0 etherType=0
if len(messagebufferbytearray)>(6+6+2): if len(messagebufferbytearray)>(6+6+2):
@ -257,6 +266,7 @@ class pyPlcHomeplug():
# Network ID to be associated with the key distributed herein. # Network ID to be associated with the key distributed herein.
# The 54 LSBs of this field contain the NID (refer to Section 3.4.3.1). The # The 54 LSBs of this field contain the NID (refer to Section 3.4.3.1). The
# two MSBs shall be set to 0b00. # two MSBs shall be set to 0b00.
self.addToTrace("NID is " + prettyHexMessage(self.NID))
self.mytransmitbuffer[40]=0x01 # 21 peks (payload encryption key select) Table 11-83. 01 is NMK. We had 02 here, why??? self.mytransmitbuffer[40]=0x01 # 21 peks (payload encryption key select) Table 11-83. 01 is NMK. We had 02 here, why???
# with 0x0F we could choose "no key, payload is sent in the clear" # with 0x0F we could choose "no key, payload is sent in the clear"
self.setNmkAt(41) self.setNmkAt(41)
@ -349,6 +359,37 @@ class pyPlcHomeplug():
self.fillRunId(36) # 36 to 43 runid 8 bytes self.fillRunId(36) # 36 to 43 runid 8 bytes
# rest is 00 # rest is 00
def composeSpecialMessage(self):
# special "homeplug" message, to control a hardware device.
# We re-purpose the ATTEN_CHAR.IND, because a AR4720 PEV modem is transparent for it also in unpaired state,
# and it contains a lot of space which can be used to transfer data. Also it is not expected to disturb the
# normal traffic, because it may be also caused by cross-coupling from an other charger, and the normal
# communication should be immune to such things.
self.mytransmitbuffer = bytearray(129)
self.cleanTransmitBuffer()
# Destination MAC
self.fillDestinationMac(MAC_BROADCAST)
# Source MAC
self.fillSourceMac(self.myMAC)
# Protocol
self.mytransmitbuffer[12]=0x88 # Protocol HomeplugAV
self.mytransmitbuffer[13]=0xE1
self.mytransmitbuffer[14]=0x01 # version
self.mytransmitbuffer[15]=0x6E # ATTEN_CHAR.IND
self.mytransmitbuffer[16]=0x60 #
self.mytransmitbuffer[17]=0x00 # 2 bytes fragmentation information. 0000 means: unfragmented.
self.mytransmitbuffer[18]=0x00 #
self.mytransmitbuffer[19]=0x00 # apptype
self.mytransmitbuffer[20]=0x00 # security
self.fillDestinationMac(MAC_BROADCAST, 21) # The wireshark calls it source_mac, but alpitronic fills it with PEV mac.
self.fillRunId(27) # runid 8 bytes
self.mytransmitbuffer[35]=0x00 # 35 - 51 source_id, 17 bytes. The alpitronic fills it with 00
self.mytransmitbuffer[52]=0x00 # 52 - 68 response_id, 17 bytes. The alpitronic fills it with 00.
self.mytransmitbuffer[69]=0x0A # Number of sounds. 10 in normal case.
self.mytransmitbuffer[70]=0x3A # Number of groups = 58.
for i in range(71, 129): # 71 to 128: 58 special-purpose-bytes
self.mytransmitbuffer[i]=self.specialMessageTransmitBuffer[i-71]
def composeStartAttenCharInd(self): def composeStartAttenCharInd(self):
# reference: see wireshark interpreted frame from ioniq # reference: see wireshark interpreted frame from ioniq
self.mytransmitbuffer = bytearray(60) self.mytransmitbuffer = bytearray(60)
@ -546,6 +587,19 @@ class pyPlcHomeplug():
self.composeGetSwWithRamdomMac() self.composeGetSwWithRamdomMac()
self.addToTrace("transmitting GetSwWithRamdomMac") self.addToTrace("transmitting GetSwWithRamdomMac")
self.transmit(self.mytransmitbuffer) self.transmit(self.mytransmitbuffer)
if (selection=="5"):
self.sendSpecialMessageToControlThePowerSupply(20, 1)
if (selection=="6"):
self.sendSpecialMessageToControlThePowerSupply(100, 1)
if (selection=="7"):
self.sendSpecialMessageToControlThePowerSupply(200, 1)
if (selection=="8"):
self.sendSpecialMessageToControlThePowerSupply(300, 1)
if (selection=="9"):
self.sendSpecialMessageToControlThePowerSupply(400, 1)
if (selection=="0"):
self.sendSpecialMessageToControlThePowerSupply(0, 0)
def transmit(self, pkt): def transmit(self, pkt):
self.sniffer.sendpacket(bytes(pkt)) self.sniffer.sendpacket(bytes(pkt))
@ -657,6 +711,18 @@ class pyPlcHomeplug():
if (self.pevSequenceState==STATE_WAITING_FOR_SLAC_PARAM_CNF): # we were waiting for the SlacParamCnf if (self.pevSequenceState==STATE_WAITING_FOR_SLAC_PARAM_CNF): # we were waiting for the SlacParamCnf
self.pevSequenceDelayCycles = 4 # original Ioniq is waiting 200ms self.pevSequenceDelayCycles = 4 # original Ioniq is waiting 200ms
self.enterState(STATE_SLAC_PARAM_CNF_RECEIVED) # enter next state. Will be handled in the cyclic runPevSequencer self.enterState(STATE_SLAC_PARAM_CNF_RECEIVED) # enter next state. Will be handled in the cyclic runPevSequencer
if ((self.iAmListener==1) or (self.iAmPev==1)):
# Take the MAC of the charger from the frame, and store it for later use.
for i in range(0, 6):
self.evseMac[i] = self.myreceivebuffer[6+i] # source MAC starts at offset 6
self.addressManager.setEvseMac(self.evseMac)
if getConfigValueBool("log_the_evse_mac_to_file"):
# Write the MAC address of the charger to a log file
self.addToTrace("SECC MAC is " + self.getSourceMacAddressAsString())
strDateTime=datetime.today().strftime('%Y-%m-%dT%H:%M:%S.%f')
MacLogFile = open('MacLog.txt', 'a')
MacLogFile.write(strDateTime + " SECC MAC " + self.getSourceMacAddressAsString() + "\n") # write the MAC to the MacLogFile
MacLogFile.close()
def evaluateMnbcSoundInd(self): def evaluateMnbcSoundInd(self):
# We received MNBC_SOUND.IND from the PEV. Normally this happens 10times, with a countdown (remaining number of sounds) # We received MNBC_SOUND.IND from the PEV. Normally this happens 10times, with a countdown (remaining number of sounds)
@ -671,6 +737,19 @@ class pyPlcHomeplug():
self.addToTrace("[EVSE] transmitting ATTEN_CHAR.IND") self.addToTrace("[EVSE] transmitting ATTEN_CHAR.IND")
self.sniffer.sendpacket(bytes(self.mytransmitbuffer)) self.sniffer.sendpacket(bytes(self.mytransmitbuffer))
def evaluateStartAttenCharInd(self):
# self.addToTrace("received START_ATTEN_CHAR.IND")
# nothing to do as PEV or EVSE.
# interpretation just in case we use it as special message in EVSE mode to get information from the power supply
if (self.iAmEvse==1):
if ((self.myreceivebuffer[38] == 0xDC) and (self.myreceivebuffer[39] == 0x55) and (self.myreceivebuffer[40] == 0xAA)):
uPresent = self.myreceivebuffer[43]
uPresent*=256
uPresent+=self.myreceivebuffer[44]
uPresent/=10 # scaling in the message is 0.1V
self.callbackShowStatus(str(uPresent), "PowerSupplyUPresent")
# Todo: evaluate other information of the power supply, like cable check result, current, temperature, ...
def evaluateAttenCharInd(self): def evaluateAttenCharInd(self):
self.addToTrace("received ATTEN_CHAR.IND") self.addToTrace("received ATTEN_CHAR.IND")
if (self.iAmPev==1): if (self.iAmPev==1):
@ -678,10 +757,6 @@ class pyPlcHomeplug():
if (self.pevSequenceState==STATE_WAIT_FOR_ATTEN_CHAR_IND): # we were waiting for the AttenCharInd if (self.pevSequenceState==STATE_WAIT_FOR_ATTEN_CHAR_IND): # we were waiting for the AttenCharInd
# todo: Handle the case when we receive multiple responses from different chargers. # todo: Handle the case when we receive multiple responses from different chargers.
# Wait a certain time, and compare the attenuation profiles. Decide for the nearest charger. # Wait a certain time, and compare the attenuation profiles. Decide for the nearest charger.
# Take the MAC of the charger from the frame, and store it for later use.
for i in range(0, 6):
self.evseMac[i] = self.myreceivebuffer[6+i] # source MAC starts at offset 6
self.addressManager.setEvseMac(self.evseMac)
self.AttenCharIndNumberOfSounds = self.myreceivebuffer[69] self.AttenCharIndNumberOfSounds = self.myreceivebuffer[69]
self.addToTrace("[PEVSLAC] number of sounds reported by the EVSE (should be 10): " + str(self.AttenCharIndNumberOfSounds)) self.addToTrace("[PEVSLAC] number of sounds reported by the EVSE (should be 10): " + str(self.AttenCharIndNumberOfSounds))
self.composeAttenCharRsp() self.composeAttenCharRsp()
@ -722,6 +797,7 @@ class pyPlcHomeplug():
self.NMK[i] = self.myreceivebuffer[93+i] self.NMK[i] = self.myreceivebuffer[93+i]
s=s+hex(self.NMK[i])+ " " s=s+hex(self.NMK[i])+ " "
self.addToTrace("From SlacMatchCnf, got network membership key (NMK) " + s) self.addToTrace("From SlacMatchCnf, got network membership key (NMK) " + s)
if (self.iAmPev==1):
# use the extracted NMK and NID to set the key in the adaptor: # use the extracted NMK and NID to set the key in the adaptor:
self.composeSetKey(0) self.composeSetKey(0)
self.addToTrace("Checkpoint170: transmitting CM_SET_KEY.REQ") self.addToTrace("Checkpoint170: transmitting CM_SET_KEY.REQ")
@ -731,6 +807,9 @@ class pyPlcHomeplug():
# In simulation mode, we pretend a successful SetKey response: # In simulation mode, we pretend a successful SetKey response:
self.connMgr.SlacOk() self.connMgr.SlacOk()
self.enterState(STATE_WAITING_FOR_RESTART2) self.enterState(STATE_WAITING_FOR_RESTART2)
else:
# We are neither Evse nor PEV, so we are just listener. Do not set the key, to avoid disturbing the two participants.
self.enterState(STATE_WAITING_FOR_RESTART2) # does not really matter
def evaluateReceivedHomeplugPacket(self): def evaluateReceivedHomeplugPacket(self):
mmt = self.getManagementMessageType() mmt = self.getManagementMessageType()
@ -745,6 +824,8 @@ class pyPlcHomeplug():
self.evaluateSlacParamReq() self.evaluateSlacParamReq()
if (mmt == CM_SLAC_PARAM + MMTYPE_CNF): if (mmt == CM_SLAC_PARAM + MMTYPE_CNF):
self.evaluateSlacParamCnf() self.evaluateSlacParamCnf()
if (mmt == CM_START_ATTEN_CHAR + MMTYPE_IND):
self.evaluateStartAttenCharInd()
if (mmt == CM_MNBC_SOUND + MMTYPE_IND): if (mmt == CM_MNBC_SOUND + MMTYPE_IND):
self.evaluateMnbcSoundInd() self.evaluateMnbcSoundInd()
if (mmt == CM_ATTEN_CHAR + MMTYPE_IND): if (mmt == CM_ATTEN_CHAR + MMTYPE_IND):
@ -773,8 +854,11 @@ class pyPlcHomeplug():
# Fill some of the bytes of the NMK with random numbers. The others stay at 0x77 for easy visibility. # Fill some of the bytes of the NMK with random numbers. The others stay at 0x77 for easy visibility.
self.NMK_EVSE_random[2] = int(random()*255) self.NMK_EVSE_random[2] = int(random()*255)
self.NMK_EVSE_random[3] = int(random()*255) self.NMK_EVSE_random[3] = int(random()*255)
self.NMK_EVSE_random[4] = int(random()*255)
self.NMK_EVSE_random[5] = int(random()*255)
self.NMK_EVSE_random[6] = int(random()*255)
self.composeSetKey(0) self.composeSetKey(0)
self.addToTrace("transmitting SET_KEY.REQ, to configure the EVSE modem with random NMK") self.addToTrace("transmitting SET_KEY.REQ, to configure the EVSE modem with random NMK " +prettyHexMessage(self.NMK_EVSE_random))
self.transmit(self.mytransmitbuffer) self.transmit(self.mytransmitbuffer)
self.evseSlacHandlerState = 1 # setkey was done self.evseSlacHandlerState = 1 # setkey was done
return return
@ -1054,19 +1138,41 @@ class pyPlcHomeplug():
self.strInterfaceName=getConfigValue("eth_interface") self.strInterfaceName=getConfigValue("eth_interface")
print("Linux interface is " + self.strInterfaceName) print("Linux interface is " + self.strInterfaceName)
def sendSpecialMessageToControlThePowerSupply(self, targetVoltage, targetCurrent):
u = int(targetVoltage*10) # resolution: 0.1 volt
i = int(targetCurrent*10) # resolution: 0.1 ampere
self.specialMessageTransmitBuffer[0] = 0xAF # Header 3 byte
self.specialMessageTransmitBuffer[1] = 0xFE #
self.specialMessageTransmitBuffer[2] = 0xDC #
self.specialMessageTransmitBuffer[3] = u >> 8 # target voltage, MSB first
self.specialMessageTransmitBuffer[4] = u & 0xFF # target voltage, LSB
self.specialMessageTransmitBuffer[5] = u >> 8 # same again, for plausibilization
self.specialMessageTransmitBuffer[6] = u & 0xFF
self.specialMessageTransmitBuffer[7] = i >> 8 # target current, MSB first
self.specialMessageTransmitBuffer[8] = i & 0xFF # target current, LSB
self.specialMessageTransmitBuffer[9] = i >> 8 # same again
self.specialMessageTransmitBuffer[10] = i & 0xFF
self.composeSpecialMessage()
self.addToTrace("transmitting SpecialMessage to control the power supply")
self.transmit(self.mytransmitbuffer)
self.callbackShowStatus(str(targetVoltage), "PowerSupplyUTarget")
def enterPevMode(self): def enterPevMode(self):
self.iAmEvse = 0 # not emulating a charging station self.iAmEvse = 0 # not emulating a charging station
self.iAmPev = 1 # emulating a vehicle self.iAmPev = 1 # emulating a vehicle
self.iAmListener = 0 # not a passive listener
self.ipv6.enterPevMode() self.ipv6.enterPevMode()
self.showStatus("PEV mode", "mode") self.showStatus("PEV mode", "mode")
def enterEvseMode(self): def enterEvseMode(self):
self.iAmEvse = 1 # emulating a charging station self.iAmEvse = 1 # emulating a charging station
self.iAmPev = 0 # not emulating a vehicle self.iAmPev = 0 # not emulating a vehicle
self.iAmListener = 0 # not a passive listener
self.ipv6.enterEvseMode() self.ipv6.enterEvseMode()
self.showStatus("EVSE mode", "mode") self.showStatus("EVSE mode", "mode")
def enterListenMode(self): def enterListenMode(self):
self.iAmEvse = 0 # not emulating a charging station self.iAmEvse = 0 # not emulating a charging station
self.iAmPev = 0 # not emulating a vehicle self.iAmPev = 0 # not emulating a vehicle
self.iAmListener = 1 # just listening
self.ipv6.enterListenMode() self.ipv6.enterListenMode()
self.showStatus("LISTEN mode", "mode") self.showStatus("LISTEN mode", "mode")
@ -1111,11 +1217,16 @@ class pyPlcHomeplug():
self.NMK = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] # a default network key. Will be overwritten later. self.NMK = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] # a default network key. Will be overwritten later.
self.NMK_EVSE_random = [ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77 ] # In EvseMode, we use this key. self.NMK_EVSE_random = [ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77 ] # In EvseMode, we use this key.
self.NID = [ 1, 2, 3, 4, 5, 6, 7 ] # a default network ID self.NID = [ 1, 2, 3, 4, 5, 6, 7 ] # a default network ID
self.NID[2] = int(random()*255) # in case we are EVSE, prepare a random network ID, to
self.NID[3] = int(random()*255) # allow multiple EVSEs live together without causing modem resets
self.NID[4] = int(random()*255)
self.NID[5] = int(random()*255)
self.pevMac = [0xDC, 0x0E, 0xA1, 0x11, 0x67, 0x08 ] # a default pev MAC. Will be overwritten later. self.pevMac = [0xDC, 0x0E, 0xA1, 0x11, 0x67, 0x08 ] # a default pev MAC. Will be overwritten later.
self.evseMac = [0x55, 0x56, 0x57, 0xAA, 0xAA, 0xAA ] # a default evse MAC. Will be overwritten later. self.evseMac = [0x55, 0x56, 0x57, 0xAA, 0xAA, 0xAA ] # a default evse MAC. Will be overwritten later.
# a default pev RunId. Will be overwritten later, if we are evse. If we are the pev, we are free to choose a # a default pev RunId. Will be overwritten later, if we are evse. If we are the pev, we are free to choose a
# RunID, e.g. the Ioniq uses the MAC plus 0x00 0x00 padding, the Tesla uses "TESLA EV". # RunID, e.g. the Ioniq uses the MAC plus 0x00 0x00 padding, the Tesla uses "TESLA EV".
self.pevRunId = [0xDC, 0x0E, 0xA1, 0xDE, 0xAD, 0xBE, 0xEF, 0x55 ] self.pevRunId = [0xDC, 0x0E, 0xA1, 0xDE, 0xAD, 0xBE, 0xEF, 0x55 ]
self.specialMessageTransmitBuffer = bytearray(58)
self.myMAC = self.addressManager.getLocalMacAddress() self.myMAC = self.addressManager.getLocalMacAddress()
self.runningCounter=0 self.runningCounter=0
self.ipv6 = pyPlcIpv6.ipv6handler(self.transmit, self.addressManager, self.connMgr, self.callbackShowStatus) self.ipv6 = pyPlcIpv6.ipv6handler(self.transmit, self.addressManager, self.connMgr, self.callbackShowStatus)

View file

@ -31,7 +31,7 @@ class pyPlcWorker():
self.isSimulationMode = isSimulationMode self.isSimulationMode = isSimulationMode
self.connMgr = connMgr.connMgr(self.workerAddToTrace, self.showStatus) self.connMgr = connMgr.connMgr(self.workerAddToTrace, self.showStatus)
self.hp = pyPlcHomeplug.pyPlcHomeplug(self.workerAddToTrace, self.showStatus, self.mode, self.addressManager, self.connMgr, self.isSimulationMode) self.hp = pyPlcHomeplug.pyPlcHomeplug(self.workerAddToTrace, self.showStatus, self.mode, self.addressManager, self.connMgr, self.isSimulationMode)
self.hardwareInterface = hardwareInterface.hardwareInterface(self.workerAddToTrace, self.showStatus) self.hardwareInterface = hardwareInterface.hardwareInterface(self.workerAddToTrace, self.showStatus, self.hp)
self.hp.printToUdp("pyPlcWorker init") self.hp.printToUdp("pyPlcWorker init")
# Find out the version number, using git. # Find out the version number, using git.
# see https://stackoverflow.com/questions/14989858/get-the-current-git-hash-in-a-python-script # see https://stackoverflow.com/questions/14989858/get-the-current-git-hash-in-a-python-script
@ -75,6 +75,7 @@ class pyPlcWorker():
def mainfunction(self): def mainfunction(self):
self.nMainFunctionCalls+=1 self.nMainFunctionCalls+=1
#self.showStatus("pyPlcWorker loop " + str(self.nMainFunctionCalls)) #self.showStatus("pyPlcWorker loop " + str(self.nMainFunctionCalls))
if (self.mode == C_PEV_MODE):
self.connMgr.mainfunction() self.connMgr.mainfunction()
self.handleTcpConnectionTrigger() self.handleTcpConnectionTrigger()
self.hp.mainfunction() # call the lower-level workers self.hp.mainfunction() # call the lower-level workers

View file

@ -492,6 +492,7 @@ In the cable check phase, the charger checks the following things:
- wrong coupling network between the CP/PE and the PLC modem transformator. This may disturb the PWM levels, due to low-pass-filtering or it may inject too much power from the PLC modem. - wrong coupling network between the CP/PE and the PLC modem transformator. This may disturb the PWM levels, due to low-pass-filtering or it may inject too much power from the PLC modem.
- Software not configured to use the correct output path for the StateC switching - Software not configured to use the correct output path for the StateC switching
2. Isolation of the DC path. It is recommended to use two contactors, one for each DC lines, to avoid asymmetrical results in the isolation measurements. 2. Isolation of the DC path. It is recommended to use two contactors, one for each DC lines, to avoid asymmetrical results in the isolation measurements.
3. PP line: Some chargers (e.g. some of the Tesla Superchargers) are checking the voltage between the PP line and PE. The "official" recommendation seems to be to use on car side a pull-up of 330 ohm to 5V, and perhaps 3k pulldown to ground. Discussed here: https://openinverter.org/forum/viewtopic.php?p=67464#p67464 However, many chargers (e.g. alpitronics) seem not to care for the PP at all.
### Q6: How to connect the PLC modem to the CP and PE? ### Q6: How to connect the PLC modem to the CP and PE?
@ -512,6 +513,23 @@ The json data, which is mentioned in the question, is the output of the EXI deco
- The original Siemens code is mirrored into https://github.com/Martin-P/OpenV2G - The original Siemens code is mirrored into https://github.com/Martin-P/OpenV2G
- Since pyPLC is in python and cannot directly use the C code from Siemens, I added a command line interface to it. So python calls the compiled executable exi decoder, gives the input as command line parameter, and gets back the decoded message as standard output of the executable. This standard output is json-like. The extended OpenV2G has the name OpenV2Gx, and is available here: https://github.com/uhi22/OpenV2Gx. The readme contains examples how this can be used stand-alone for decoding and encoding exi message on command line. - Since pyPLC is in python and cannot directly use the C code from Siemens, I added a command line interface to it. So python calls the compiled executable exi decoder, gives the input as command line parameter, and gets back the decoded message as standard output of the executable. This standard output is json-like. The extended OpenV2G has the name OpenV2Gx, and is available here: https://github.com/uhi22/OpenV2Gx. The readme contains examples how this can be used stand-alone for decoding and encoding exi message on command line.
### Q8: How can I bring out the target current and target voltage out of pyPLC, to control a power supply?
In EVSE mode, if we want to use pyPLC to physically charge a car, the pyPLC must control the power supply, by providing
the target current and the target voltage to it. Different types of power supplies may have different needs for their control
signals, e.g. CAN bus, ethernet, analog inputs, RS232 or RS485 or what ever.
The point in pyPLC, where we can add the communication to the power supply, is the function
`setPowerSupplyVoltageAndCurrent()` in hardwareInterface.py, which gets two parameters: targetVoltage and targetCurrent.
At the time of writing, the only implemented method to communicate with the power supply is ethernet/homeplug, via
the function homeplughandler.sendSpecialMessageToControlThePowerSupply(). This is just for demonstration purpose and
plays together with the adjustable power supply https://github.com/uhi22/stepup-test?tab=readme-ov-file#level-9-software-adjustable-output-voltage
Adding a CAN bus communication to the power supply would be possible e.g. if pyPLC runs on a raspberry pi, a CAN hat can be added,
and the hardwareInterface.py already contains some CAN bus stuff for the CHAdeMO, which may be used as guidance for further
implementations.
## Credits ## Credits
Thanks to catphish to start the investigations regarding the homeplug modems and publishing them on OpenInverter forum. Thanks to catphish to start the investigations regarding the homeplug modems and publishing them on OpenInverter forum.
Thanks to johu for the OpenInverter forum, and for the first video of the early experiments, the beaglebone integration and CHAdeMO integration. Thanks to johu for the OpenInverter forum, and for the first video of the early experiments, the beaglebone integration and CHAdeMO integration.
@ -551,3 +569,8 @@ integrate https://github.com/chargebyte/openv2g (which is basically the same ver
* [ix] https://www.oppcharge.org/dok/ISO_15118-2_OpportunityCharging_Rev1.3.0.pdf Pantograph specific differences with some insight into ISO15118. * [ix] https://www.oppcharge.org/dok/ISO_15118-2_OpportunityCharging_Rev1.3.0.pdf Pantograph specific differences with some insight into ISO15118.
* [x] https://assured-project.eu/storage/files/assured-10-interoperability-reference.pdf Fast and Smart Charging Solutions for * [x] https://assured-project.eu/storage/files/assured-10-interoperability-reference.pdf Fast and Smart Charging Solutions for
Full Size Urban Heavy Duty Applications Full Size Urban Heavy Duty Applications
* [xi] https://morth.nic.in/sites/default/files/ASI/320201825106PMAIS_138_Part_2_F.pdf The Indian Fast Charging specification, seems to contain Chademo (Annex A, System A), an other "System B" in annex B, and CCS as "System C" in Annex C.
* [xii] User group which discusses the issues of the ISO15118. Link found on wikipedia article regarding Megawatt charging, https://de.wikipedia.org/wiki/Megawatt_Charging_System ref 5 https://www.elektroniknet.de/automotive/elektromobilitaet/smart-charging-grundlagen-und-herausforderungen.210253.html points to user group for developers https://iso15118.elaad.io/pt2/15118-20/user-group/ which is public.
* [xiii] The exi xml schema definitions, e.g. https://standards.iso.org/iso/15118/-20/ed-1/en/
* [xiv] exi encoders for ISO (din, 2, 20): https://github.com/tux-evse/iso15118-encoders?tab=readme-ov-file
* [xv] codec generator https://github.com/EVerest/cbexigen and the generated codec library https://github.com/EVerest/libcbv2g

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,490 @@
# generated by pcapConverter.py
# https://github.com/uhi22/pyPLC
[2024-04-20 17:03:07.993203] EVRESSSOC=55
[2024-04-20 17:03:08.096098] EVRESSSOC=55
[2024-04-20 17:03:08.177059] EVRESSSOC=55
[2024-04-20 17:03:08.250923] EVRESSSOC=55
[2024-04-20 17:03:08.398017] EVRESSSOC=55
[2024-04-20 17:03:08.501974] EVRESSSOC=55
[2024-04-20 17:03:08.575802] EVRESSSOC=55
[2024-04-20 17:03:08.656250] EVRESSSOC=55
[2024-04-20 17:03:08.737128] EVRESSSOC=55
[2024-04-20 17:03:08.822910] EVRESSSOC=55
[2024-04-20 17:03:08.926978] EVRESSSOC=55
[2024-04-20 17:03:09.016186] EVRESSSOC=55
[2024-04-20 17:03:09.132302] EVTargetVoltage=344.0
[2024-04-20 17:03:09.132302] EVTargetCurrent=0.0
[2024-04-20 17:03:09.132302] EVRESSSOC=55
[2024-04-20 17:03:09.188853] EVSEPresentVoltage=197.0
[2024-04-20 17:03:09.204261] EVTargetVoltage=344.0
[2024-04-20 17:03:09.204261] EVTargetCurrent=0.0
[2024-04-20 17:03:09.204261] EVRESSSOC=55
[2024-04-20 17:03:09.275397] EVSEPresentVoltage=222.0
[2024-04-20 17:03:09.291426] EVTargetVoltage=344.0
[2024-04-20 17:03:09.291426] EVTargetCurrent=0.0
[2024-04-20 17:03:09.291426] EVRESSSOC=55
[2024-04-20 17:03:09.350341] EVSEPresentVoltage=247.0
[2024-04-20 17:03:09.364074] EVTargetVoltage=344.0
[2024-04-20 17:03:09.364074] EVTargetCurrent=0.0
[2024-04-20 17:03:09.364074] EVRESSSOC=55
[2024-04-20 17:03:09.437955] EVSEPresentVoltage=272.0
[2024-04-20 17:03:09.456137] EVTargetVoltage=344.0
[2024-04-20 17:03:09.456137] EVTargetCurrent=0.0
[2024-04-20 17:03:09.456137] EVRESSSOC=55
[2024-04-20 17:03:09.522506] EVSEPresentVoltage=297.0
[2024-04-20 17:03:09.537122] EVTargetVoltage=344.0
[2024-04-20 17:03:09.537122] EVTargetCurrent=0.0
[2024-04-20 17:03:09.537122] EVRESSSOC=55
[2024-04-20 17:03:09.600314] EVSEPresentVoltage=322.0
[2024-04-20 17:03:09.618892] EVTargetVoltage=344.0
[2024-04-20 17:03:09.618892] EVTargetCurrent=0.0
[2024-04-20 17:03:09.618892] EVRESSSOC=55
[2024-04-20 17:03:09.680124] EVSEPresentVoltage=327.0
[2024-04-20 17:03:09.698099] EVTargetVoltage=344.0
[2024-04-20 17:03:09.698099] EVTargetCurrent=0.0
[2024-04-20 17:03:09.698099] EVRESSSOC=55
[2024-04-20 17:03:09.758311] EVSEPresentVoltage=332.0
[2024-04-20 17:03:09.777159] EVTargetVoltage=344.0
[2024-04-20 17:03:09.777159] EVTargetCurrent=0.0
[2024-04-20 17:03:09.777159] EVRESSSOC=55
[2024-04-20 17:03:09.838186] EVSEPresentVoltage=337.0
[2024-04-20 17:03:09.856214] EVTargetVoltage=344.0
[2024-04-20 17:03:09.856214] EVTargetCurrent=0.0
[2024-04-20 17:03:09.856214] EVRESSSOC=55
[2024-04-20 17:03:09.930011] EVSEPresentVoltage=342.0
[2024-04-20 17:03:09.949446] EVTargetVoltage=344.0
[2024-04-20 17:03:09.949446] EVTargetCurrent=0.0
[2024-04-20 17:03:09.949446] EVRESSSOC=55
[2024-04-20 17:03:10.008106] EVSEPresentVoltage=347.0
[2024-04-20 17:03:10.024024] EVTargetVoltage=344.0
[2024-04-20 17:03:10.024024] EVTargetCurrent=0.0
[2024-04-20 17:03:10.024024] EVRESSSOC=55
[2024-04-20 17:03:10.077904] EVSEPresentVoltage=347.0
[2024-04-20 17:03:10.098104] EVTargetVoltage=344.0
[2024-04-20 17:03:10.098104] EVTargetCurrent=0.0
[2024-04-20 17:03:10.098104] EVRESSSOC=55
[2024-04-20 17:03:10.160507] EVSEPresentVoltage=347.0
[2024-04-20 17:03:10.178245] EVTargetVoltage=344.0
[2024-04-20 17:03:10.178245] EVTargetCurrent=0.0
[2024-04-20 17:03:10.178245] EVRESSSOC=55
[2024-04-20 17:03:10.240394] EVSEPresentVoltage=347.0
[2024-04-20 17:03:10.256333] EVTargetVoltage=344.0
[2024-04-20 17:03:10.256333] EVTargetCurrent=0.0
[2024-04-20 17:03:10.256333] EVRESSSOC=55
[2024-04-20 17:03:10.316662] EVSEPresentVoltage=347.0
[2024-04-20 17:03:10.331937] EVTargetVoltage=344.0
[2024-04-20 17:03:10.331937] EVTargetCurrent=0.0
[2024-04-20 17:03:10.331937] EVRESSSOC=55
[2024-04-20 17:03:10.394707] EVSEPresentVoltage=347.0
[2024-04-20 17:03:10.413460] EVTargetVoltage=344.0
[2024-04-20 17:03:10.413460] EVTargetCurrent=0.0
[2024-04-20 17:03:10.413460] EVRESSSOC=55
[2024-04-20 17:03:10.474733] EVSEPresentVoltage=347.0
[2024-04-20 17:03:10.491170] EVTargetVoltage=344.0
[2024-04-20 17:03:10.491170] EVTargetCurrent=0.0
[2024-04-20 17:03:10.491170] EVRESSSOC=55
[2024-04-20 17:03:10.553568] EVSEPresentVoltage=347.0
[2024-04-20 17:03:10.571242] EVTargetVoltage=344.0
[2024-04-20 17:03:10.571242] EVTargetCurrent=0.0
[2024-04-20 17:03:10.571242] EVRESSSOC=55
[2024-04-20 17:03:10.626930] EVSEPresentVoltage=347.0
[2024-04-20 17:03:10.644219] EVTargetVoltage=344.0
[2024-04-20 17:03:10.644219] EVTargetCurrent=0.0
[2024-04-20 17:03:10.644219] EVRESSSOC=55
[2024-04-20 17:03:10.704838] EVSEPresentVoltage=347.0
[2024-04-20 17:03:10.719164] EVTargetVoltage=344.0
[2024-04-20 17:03:10.719164] EVTargetCurrent=0.0
[2024-04-20 17:03:10.719164] EVRESSSOC=55
[2024-04-20 17:03:10.787349] EVSEPresentVoltage=347.0
[2024-04-20 17:03:10.807261] EVTargetVoltage=344.0
[2024-04-20 17:03:10.807261] EVTargetCurrent=0.0
[2024-04-20 17:03:10.807261] EVRESSSOC=55
[2024-04-20 17:03:10.859072] EVSEPresentVoltage=347.0
[2024-04-20 17:03:10.874152] EVTargetVoltage=344.0
[2024-04-20 17:03:10.874152] EVTargetCurrent=0.0
[2024-04-20 17:03:10.874152] EVRESSSOC=55
[2024-04-20 17:03:10.942083] EVSEPresentVoltage=347.0
[2024-04-20 17:03:10.959228] EVTargetVoltage=344.0
[2024-04-20 17:03:10.959228] EVTargetCurrent=0.0
[2024-04-20 17:03:10.959228] EVRESSSOC=55
[2024-04-20 17:03:11.025238] EVSEPresentVoltage=347.0
[2024-04-20 17:03:11.039176] EVTargetVoltage=344.0
[2024-04-20 17:03:11.039176] EVTargetCurrent=0.0
[2024-04-20 17:03:11.039176] EVRESSSOC=55
[2024-04-20 17:03:11.101296] EVSEPresentVoltage=347.0
[2024-04-20 17:03:11.119120] EVTargetVoltage=344.0
[2024-04-20 17:03:11.119120] EVTargetCurrent=0.0
[2024-04-20 17:03:11.119120] EVRESSSOC=55
[2024-04-20 17:03:11.176759] EVSEPresentVoltage=347.0
[2024-04-20 17:03:11.193102] EVTargetVoltage=344.0
[2024-04-20 17:03:11.193102] EVTargetCurrent=0.0
[2024-04-20 17:03:11.193102] EVRESSSOC=55
[2024-04-20 17:03:11.256379] EVSEPresentVoltage=347.0
[2024-04-20 17:03:11.273211] EVTargetVoltage=344.0
[2024-04-20 17:03:11.273211] EVTargetCurrent=0.0
[2024-04-20 17:03:11.273211] EVRESSSOC=55
[2024-04-20 17:03:11.336106] EVSEPresentVoltage=347.0
[2024-04-20 17:03:11.352278] EVTargetVoltage=344.0
[2024-04-20 17:03:11.352278] EVTargetCurrent=0.0
[2024-04-20 17:03:11.352278] EVRESSSOC=55
[2024-04-20 17:03:11.406356] EVSEPresentVoltage=347.0
[2024-04-20 17:03:11.422083] EVTargetVoltage=344.0
[2024-04-20 17:03:11.422083] EVTargetCurrent=0.0
[2024-04-20 17:03:11.422083] EVRESSSOC=55
[2024-04-20 17:03:11.490647] EVSEPresentVoltage=347.0
[2024-04-20 17:03:11.511285] EVTargetVoltage=344.0
[2024-04-20 17:03:11.511285] EVTargetCurrent=0.0
[2024-04-20 17:03:11.511285] EVRESSSOC=55
[2024-04-20 17:03:11.563640] EVSEPresentVoltage=347.0
[2024-04-20 17:03:11.582385] EVTargetVoltage=344.0
[2024-04-20 17:03:11.582385] EVTargetCurrent=0.0
[2024-04-20 17:03:11.582385] EVRESSSOC=55
[2024-04-20 17:03:11.640780] EVSEPresentVoltage=347.0
[2024-04-20 17:03:11.655441] EVTargetVoltage=344.0
[2024-04-20 17:03:11.655441] EVTargetCurrent=0.0
[2024-04-20 17:03:11.655441] EVRESSSOC=55
[2024-04-20 17:03:11.723605] EVSEPresentVoltage=347.0
[2024-04-20 17:03:11.742340] EVTargetVoltage=344.0
[2024-04-20 17:03:11.742340] EVTargetCurrent=0.0
[2024-04-20 17:03:11.742340] EVRESSSOC=55
[2024-04-20 17:03:11.803645] EVSEPresentVoltage=347.0
[2024-04-20 17:03:11.822224] EVTargetVoltage=344.0
[2024-04-20 17:03:11.822224] EVTargetCurrent=0.0
[2024-04-20 17:03:11.822224] EVRESSSOC=55
[2024-04-20 17:03:11.874775] EVSEPresentVoltage=347.0
[2024-04-20 17:03:11.891070] EVTargetVoltage=344.0
[2024-04-20 17:03:11.891070] EVTargetCurrent=0.0
[2024-04-20 17:03:11.891070] EVRESSSOC=55
[2024-04-20 17:03:11.957988] EVSEPresentVoltage=347.0
[2024-04-20 17:03:11.976056] EVTargetVoltage=344.0
[2024-04-20 17:03:11.976056] EVTargetCurrent=0.0
[2024-04-20 17:03:11.976056] EVRESSSOC=55
[2024-04-20 17:03:12.038908] EVSEPresentVoltage=347.0
[2024-04-20 17:03:12.056174] EVTargetVoltage=344.0
[2024-04-20 17:03:12.056174] EVTargetCurrent=0.0
[2024-04-20 17:03:12.056174] EVRESSSOC=55
[2024-04-20 17:03:12.112256] EVSEPresentVoltage=347.0
[2024-04-20 17:03:12.130218] EVTargetVoltage=344.0
[2024-04-20 17:03:12.130218] EVTargetCurrent=0.0
[2024-04-20 17:03:12.130218] EVRESSSOC=55
[2024-04-20 17:03:12.194963] EVSEPresentVoltage=347.0
[2024-04-20 17:03:12.213062] EVTargetVoltage=344.0
[2024-04-20 17:03:12.213062] EVTargetCurrent=0.0
[2024-04-20 17:03:12.213062] EVRESSSOC=55
[2024-04-20 17:03:12.272675] EVSEPresentVoltage=347.0
[2024-04-20 17:03:12.291480] EVTargetVoltage=344.0
[2024-04-20 17:03:12.291480] EVTargetCurrent=0.0
[2024-04-20 17:03:12.291480] EVRESSSOC=55
[2024-04-20 17:03:12.351326] EVSEPresentVoltage=347.0
[2024-04-20 17:03:12.372365] EVTargetVoltage=344.0
[2024-04-20 17:03:12.372365] EVTargetCurrent=0.0
[2024-04-20 17:03:12.372365] EVRESSSOC=55
[2024-04-20 17:03:12.421236] EVSEPresentVoltage=347.0
[2024-04-20 17:03:12.439286] EVTargetVoltage=344.0
[2024-04-20 17:03:12.439286] EVTargetCurrent=0.0
[2024-04-20 17:03:12.439286] EVRESSSOC=55
[2024-04-20 17:03:12.508366] EVSEPresentVoltage=347.0
[2024-04-20 17:03:12.524451] EVTargetVoltage=344.0
[2024-04-20 17:03:12.524451] EVTargetCurrent=0.0
[2024-04-20 17:03:12.524451] EVRESSSOC=55
[2024-04-20 17:03:12.584225] EVSEPresentVoltage=347.0
[2024-04-20 17:03:12.599404] EVTargetVoltage=344.0
[2024-04-20 17:03:12.599404] EVTargetCurrent=0.0
[2024-04-20 17:03:12.599404] EVRESSSOC=55
[2024-04-20 17:03:12.658441] EVSEPresentVoltage=347.0
[2024-04-20 17:03:12.674298] EVTargetVoltage=344.0
[2024-04-20 17:03:12.674298] EVTargetCurrent=0.0
[2024-04-20 17:03:12.674298] EVRESSSOC=55
[2024-04-20 17:03:12.747376] EVSEPresentVoltage=347.0
[2024-04-20 17:03:12.764356] EVTargetVoltage=344.0
[2024-04-20 17:03:12.764356] EVTargetCurrent=0.0
[2024-04-20 17:03:12.764356] EVRESSSOC=55
[2024-04-20 17:03:12.827953] EVSEPresentVoltage=347.0
[2024-04-20 17:03:12.845494] EVTargetVoltage=344.0
[2024-04-20 17:03:12.845494] EVTargetCurrent=0.0
[2024-04-20 17:03:12.845494] EVRESSSOC=55
[2024-04-20 17:03:12.915857] EVSEPresentVoltage=347.0
[2024-04-20 17:03:12.931383] EVTargetVoltage=344.0
[2024-04-20 17:03:12.931383] EVTargetCurrent=0.0
[2024-04-20 17:03:12.931383] EVRESSSOC=55
[2024-04-20 17:03:12.997063] EVSEPresentVoltage=347.0
[2024-04-20 17:03:13.013166] EVTargetVoltage=344.0
[2024-04-20 17:03:13.013166] EVTargetCurrent=0.0
[2024-04-20 17:03:13.013166] EVRESSSOC=55
[2024-04-20 17:03:13.088396] EVSEPresentVoltage=347.0
[2024-04-20 17:03:13.103127] EVTargetVoltage=344.0
[2024-04-20 17:03:13.103127] EVTargetCurrent=0.0
[2024-04-20 17:03:13.103127] EVRESSSOC=55
[2024-04-20 17:03:13.165498] EVSEPresentVoltage=347.0
[2024-04-20 17:03:13.183157] EVTargetVoltage=344.0
[2024-04-20 17:03:13.183157] EVTargetCurrent=0.0
[2024-04-20 17:03:13.183157] EVRESSSOC=55
[2024-04-20 17:03:13.238079] EVSEPresentVoltage=347.0
[2024-04-20 17:03:13.256460] EVTargetVoltage=344.0
[2024-04-20 17:03:13.256460] EVTargetCurrent=0.0
[2024-04-20 17:03:13.256460] EVRESSSOC=55
[2024-04-20 17:03:13.318849] EVSEPresentVoltage=347.0
[2024-04-20 17:03:13.337135] EVTargetVoltage=344.0
[2024-04-20 17:03:13.337135] EVTargetCurrent=0.0
[2024-04-20 17:03:13.337135] EVRESSSOC=55
[2024-04-20 17:03:13.396014] EVSEPresentVoltage=347.0
[2024-04-20 17:03:13.413290] EVTargetVoltage=344.0
[2024-04-20 17:03:13.413290] EVTargetCurrent=0.0
[2024-04-20 17:03:13.413290] EVRESSSOC=55
[2024-04-20 17:03:13.470622] EVSEPresentVoltage=347.0
[2024-04-20 17:03:13.486200] EVTargetVoltage=344.0
[2024-04-20 17:03:13.486200] EVTargetCurrent=0.0
[2024-04-20 17:03:13.486200] EVRESSSOC=55
[2024-04-20 17:03:13.553802] EVSEPresentVoltage=347.0
[2024-04-20 17:03:13.572410] EVTargetVoltage=344.0
[2024-04-20 17:03:13.572410] EVTargetCurrent=0.0
[2024-04-20 17:03:13.572410] EVRESSSOC=55
[2024-04-20 17:03:13.630988] EVSEPresentVoltage=347.0
[2024-04-20 17:03:13.644420] EVTargetVoltage=344.0
[2024-04-20 17:03:13.644420] EVTargetCurrent=0.0
[2024-04-20 17:03:13.644420] EVRESSSOC=55
[2024-04-20 17:03:13.715476] EVSEPresentVoltage=347.0
[2024-04-20 17:03:13.731275] EVTargetVoltage=344.0
[2024-04-20 17:03:13.731275] EVTargetCurrent=0.0
[2024-04-20 17:03:13.731275] EVRESSSOC=55
[2024-04-20 17:03:13.803107] EVSEPresentVoltage=347.0
[2024-04-20 17:03:13.817515] EVTargetVoltage=344.0
[2024-04-20 17:03:13.817515] EVTargetCurrent=0.0
[2024-04-20 17:03:13.817515] EVRESSSOC=55
[2024-04-20 17:03:13.881641] EVSEPresentVoltage=347.0
[2024-04-20 17:03:13.898241] EVTargetVoltage=344.0
[2024-04-20 17:03:13.898241] EVTargetCurrent=0.0
[2024-04-20 17:03:13.898241] EVRESSSOC=55
[2024-04-20 17:03:13.960182] EVSEPresentVoltage=347.0
[2024-04-20 17:03:13.978164] EVTargetVoltage=344.0
[2024-04-20 17:03:13.978164] EVTargetCurrent=0.0
[2024-04-20 17:03:13.978164] EVRESSSOC=55
[2024-04-20 17:03:14.038019] EVSEPresentVoltage=347.0
[2024-04-20 17:03:14.056553] EVTargetVoltage=344.0
[2024-04-20 17:03:14.056553] EVTargetCurrent=0.0
[2024-04-20 17:03:14.056553] EVRESSSOC=55
[2024-04-20 17:03:14.116532] EVSEPresentVoltage=347.0
[2024-04-20 17:03:14.131415] EVTargetVoltage=344.0
[2024-04-20 17:03:14.131415] EVTargetCurrent=0.0
[2024-04-20 17:03:14.131415] EVRESSSOC=55
[2024-04-20 17:03:14.194779] EVSEPresentVoltage=347.0
[2024-04-20 17:03:14.213378] EVTargetVoltage=344.0
[2024-04-20 17:03:14.213378] EVTargetCurrent=0.0
[2024-04-20 17:03:14.213378] EVRESSSOC=55
[2024-04-20 17:03:14.268301] EVSEPresentVoltage=347.0
[2024-04-20 17:03:14.284487] EVTargetVoltage=344.0
[2024-04-20 17:03:14.284487] EVTargetCurrent=0.0
[2024-04-20 17:03:14.284487] EVRESSSOC=55
[2024-04-20 17:03:14.348586] EVSEPresentVoltage=347.0
[2024-04-20 17:03:14.364380] EVTargetVoltage=344.0
[2024-04-20 17:03:14.364380] EVTargetCurrent=0.0
[2024-04-20 17:03:14.364380] EVRESSSOC=55
[2024-04-20 17:03:14.427025] EVSEPresentVoltage=347.0
[2024-04-20 17:03:14.444224] EVTargetVoltage=344.0
[2024-04-20 17:03:14.444224] EVTargetCurrent=0.0
[2024-04-20 17:03:14.444224] EVRESSSOC=55
[2024-04-20 17:03:14.500819] EVSEPresentVoltage=347.0
[2024-04-20 17:03:14.519434] EVTargetVoltage=344.0
[2024-04-20 17:03:14.519434] EVTargetCurrent=0.0
[2024-04-20 17:03:14.519434] EVRESSSOC=55
[2024-04-20 17:03:14.580342] EVSEPresentVoltage=347.0
[2024-04-20 17:03:14.600247] EVTargetVoltage=344.0
[2024-04-20 17:03:14.600247] EVTargetCurrent=0.0
[2024-04-20 17:03:14.600247] EVRESSSOC=55
[2024-04-20 17:03:14.656786] EVSEPresentVoltage=347.0
[2024-04-20 17:03:14.674089] EVTargetVoltage=344.0
[2024-04-20 17:03:14.674089] EVTargetCurrent=0.0
[2024-04-20 17:03:14.674089] EVRESSSOC=55
[2024-04-20 17:03:14.800962] EVSEPresentVoltage=347.0
[2024-04-20 17:03:14.819457] EVTargetVoltage=344.0
[2024-04-20 17:03:14.819457] EVTargetCurrent=0.0
[2024-04-20 17:03:14.819457] EVRESSSOC=55
[2024-04-20 17:03:14.935003] EVSEPresentVoltage=347.0
[2024-04-20 17:03:14.954214] EVTargetVoltage=344.0
[2024-04-20 17:03:14.954214] EVTargetCurrent=0.0
[2024-04-20 17:03:14.954214] EVRESSSOC=55
[2024-04-20 17:03:15.076444] EVSEPresentVoltage=347.0
[2024-04-20 17:03:15.094554] EVTargetVoltage=344.0
[2024-04-20 17:03:15.094554] EVTargetCurrent=0.0
[2024-04-20 17:03:15.094554] EVRESSSOC=55
[2024-04-20 17:03:15.221293] EVSEPresentVoltage=347.0
[2024-04-20 17:03:15.240257] EVTargetVoltage=344.0
[2024-04-20 17:03:15.240257] EVTargetCurrent=0.0
[2024-04-20 17:03:15.240257] EVRESSSOC=55
[2024-04-20 17:03:15.364876] EVSEPresentVoltage=347.0
[2024-04-20 17:03:15.382317] EVTargetVoltage=344.0
[2024-04-20 17:03:15.382317] EVTargetCurrent=0.0
[2024-04-20 17:03:15.382317] EVRESSSOC=55
[2024-04-20 17:03:15.498976] EVSEPresentVoltage=347.0
[2024-04-20 17:03:15.517377] EVTargetVoltage=344.0
[2024-04-20 17:03:15.517377] EVTargetCurrent=0.0
[2024-04-20 17:03:15.517377] EVRESSSOC=55
[2024-04-20 17:03:15.676122] EVSEPresentVoltage=347.0
[2024-04-20 17:03:15.691470] EVTargetVoltage=344.0
[2024-04-20 17:03:15.691470] EVTargetCurrent=0.0
[2024-04-20 17:03:15.691470] EVRESSSOC=55
[2024-04-20 17:03:15.770537] EVSEPresentVoltage=347.0
[2024-04-20 17:03:15.789690] EVTargetVoltage=344.0
[2024-04-20 17:03:15.789690] EVTargetCurrent=0.0
[2024-04-20 17:03:15.789690] EVRESSSOC=55
[2024-04-20 17:03:15.850884] EVSEPresentVoltage=347.0
[2024-04-20 17:03:15.869454] EVTargetVoltage=344.0
[2024-04-20 17:03:15.869454] EVTargetCurrent=0.0
[2024-04-20 17:03:15.869454] EVRESSSOC=55
[2024-04-20 17:03:15.928950] EVSEPresentVoltage=347.0
[2024-04-20 17:03:15.942610] EVTargetVoltage=344.0
[2024-04-20 17:03:15.942610] EVTargetCurrent=0.0
[2024-04-20 17:03:15.942610] EVRESSSOC=55
[2024-04-20 17:03:16.008220] EVSEPresentVoltage=347.0
[2024-04-20 17:03:16.025472] EVTargetVoltage=344.0
[2024-04-20 17:03:16.025472] EVTargetCurrent=0.0
[2024-04-20 17:03:16.025472] EVRESSSOC=55
[2024-04-20 17:03:16.084516] EVSEPresentVoltage=347.0
[2024-04-20 17:03:16.098518] EVTargetVoltage=344.0
[2024-04-20 17:03:16.098518] EVTargetCurrent=0.0
[2024-04-20 17:03:16.098518] EVRESSSOC=55
[2024-04-20 17:03:16.162556] EVSEPresentVoltage=347.0
[2024-04-20 17:03:16.179422] EVTargetVoltage=344.0
[2024-04-20 17:03:16.179422] EVTargetCurrent=0.0
[2024-04-20 17:03:16.179422] EVRESSSOC=55
[2024-04-20 17:03:16.322154] EVSEPresentVoltage=347.0
[2024-04-20 17:03:16.336410] EVTargetVoltage=344.0
[2024-04-20 17:03:16.336410] EVTargetCurrent=0.0
[2024-04-20 17:03:16.336410] EVRESSSOC=55
[2024-04-20 17:03:16.430309] EVSEPresentVoltage=347.0
[2024-04-20 17:03:16.446407] EVTargetVoltage=344.0
[2024-04-20 17:03:16.446407] EVTargetCurrent=0.0
[2024-04-20 17:03:16.446407] EVRESSSOC=55
[2024-04-20 17:03:16.542656] EVSEPresentVoltage=347.0
[2024-04-20 17:03:16.556631] EVTargetVoltage=344.0
[2024-04-20 17:03:16.556631] EVTargetCurrent=0.0
[2024-04-20 17:03:16.556631] EVRESSSOC=55
[2024-04-20 17:03:16.666563] EVSEPresentVoltage=347.0
[2024-04-20 17:03:16.685506] EVTargetVoltage=344.0
[2024-04-20 17:03:16.685506] EVTargetCurrent=0.0
[2024-04-20 17:03:16.685506] EVRESSSOC=55
[2024-04-20 17:03:16.817092] EVSEPresentVoltage=347.0
[2024-04-20 17:03:16.837477] EVTargetVoltage=344.0
[2024-04-20 17:03:16.837477] EVTargetCurrent=0.0
[2024-04-20 17:03:16.837477] EVRESSSOC=55
[2024-04-20 17:03:16.897705] EVSEPresentVoltage=347.0
[2024-04-20 17:03:16.917617] EVTargetVoltage=344.0
[2024-04-20 17:03:16.917617] EVTargetCurrent=0.0
[2024-04-20 17:03:16.917617] EVRESSSOC=55
[2024-04-20 17:03:17.031071] EVSEPresentVoltage=347.0
[2024-04-20 17:03:17.049855] EVTargetVoltage=344.0
[2024-04-20 17:03:17.049855] EVTargetCurrent=0.0
[2024-04-20 17:03:17.049855] EVRESSSOC=55
[2024-04-20 17:03:17.198632] EVSEPresentVoltage=347.0
[2024-04-20 17:03:17.217675] EVTargetVoltage=344.0
[2024-04-20 17:03:17.217675] EVTargetCurrent=0.0
[2024-04-20 17:03:17.217675] EVRESSSOC=55
[2024-04-20 17:03:17.363725] EVSEPresentVoltage=347.0
[2024-04-20 17:03:17.379544] EVTargetVoltage=344.0
[2024-04-20 17:03:17.379544] EVTargetCurrent=0.0
[2024-04-20 17:03:17.379544] EVRESSSOC=55
[2024-04-20 17:03:17.460546] EVSEPresentVoltage=347.0
[2024-04-20 17:03:17.477485] EVTargetVoltage=344.0
[2024-04-20 17:03:17.477485] EVTargetCurrent=0.0
[2024-04-20 17:03:17.477485] EVRESSSOC=55
[2024-04-20 17:03:17.550589] EVSEPresentVoltage=347.0
[2024-04-20 17:03:17.570574] EVTargetVoltage=344.0
[2024-04-20 17:03:17.570574] EVTargetCurrent=0.0
[2024-04-20 17:03:17.570574] EVRESSSOC=55
[2024-04-20 17:03:17.721397] EVSEPresentVoltage=347.0
[2024-04-20 17:03:17.740313] EVTargetVoltage=344.0
[2024-04-20 17:03:17.740313] EVTargetCurrent=0.0
[2024-04-20 17:03:17.740313] EVRESSSOC=55
[2024-04-20 17:03:17.872353] EVSEPresentVoltage=347.0
[2024-04-20 17:03:17.892508] EVTargetVoltage=344.0
[2024-04-20 17:03:17.892508] EVTargetCurrent=0.0
[2024-04-20 17:03:17.892508] EVRESSSOC=55
[2024-04-20 17:03:18.042794] EVSEPresentVoltage=347.0
[2024-04-20 17:03:18.061540] EVTargetVoltage=344.0
[2024-04-20 17:03:18.061540] EVTargetCurrent=0.0
[2024-04-20 17:03:18.061540] EVRESSSOC=55
[2024-04-20 17:03:18.236203] EVSEPresentVoltage=347.0
[2024-04-20 17:03:18.254478] EVTargetVoltage=344.0
[2024-04-20 17:03:18.254478] EVTargetCurrent=0.0
[2024-04-20 17:03:18.254478] EVRESSSOC=55
[2024-04-20 17:03:18.379829] EVSEPresentVoltage=347.0
[2024-04-20 17:03:18.396470] EVTargetVoltage=344.0
[2024-04-20 17:03:18.396470] EVTargetCurrent=0.0
[2024-04-20 17:03:18.396470] EVRESSSOC=55
[2024-04-20 17:03:18.473243] EVSEPresentVoltage=347.0
[2024-04-20 17:03:18.487457] EVTargetVoltage=344.0
[2024-04-20 17:03:18.487457] EVTargetCurrent=0.0
[2024-04-20 17:03:18.487457] EVRESSSOC=55
[2024-04-20 17:03:18.653116] EVSEPresentVoltage=347.0
[2024-04-20 17:03:18.670693] EVTargetVoltage=344.0
[2024-04-20 17:03:18.670693] EVTargetCurrent=0.0
[2024-04-20 17:03:18.670693] EVRESSSOC=55
[2024-04-20 17:03:18.826739] EVSEPresentVoltage=347.0
[2024-04-20 17:03:18.845669] EVTargetVoltage=344.0
[2024-04-20 17:03:18.845669] EVTargetCurrent=0.0
[2024-04-20 17:03:18.845669] EVRESSSOC=55
[2024-04-20 17:03:18.945704] EVSEPresentVoltage=347.0
[2024-04-20 17:03:18.960927] EVTargetVoltage=344.0
[2024-04-20 17:03:18.960927] EVTargetCurrent=0.0
[2024-04-20 17:03:18.960927] EVRESSSOC=55
[2024-04-20 17:03:19.059192] EVSEPresentVoltage=347.0
[2024-04-20 17:03:19.077619] EVTargetVoltage=344.0
[2024-04-20 17:03:19.077619] EVTargetCurrent=0.0
[2024-04-20 17:03:19.077619] EVRESSSOC=55
[2024-04-20 17:03:19.217079] EVSEPresentVoltage=347.0
[2024-04-20 17:03:19.234728] EVTargetVoltage=344.0
[2024-04-20 17:03:19.234728] EVTargetCurrent=0.0
[2024-04-20 17:03:19.234728] EVRESSSOC=55
[2024-04-20 17:03:19.414232] EVSEPresentVoltage=347.0
[2024-04-20 17:03:19.430657] EVTargetVoltage=344.0
[2024-04-20 17:03:19.430657] EVTargetCurrent=0.0
[2024-04-20 17:03:19.430657] EVRESSSOC=55
[2024-04-20 17:03:19.527357] EVSEPresentVoltage=347.0
[2024-04-20 17:03:19.546852] EVTargetVoltage=344.0
[2024-04-20 17:03:19.546852] EVTargetCurrent=0.0
[2024-04-20 17:03:19.546852] EVRESSSOC=55
[2024-04-20 17:03:19.650942] EVSEPresentVoltage=347.0
[2024-04-20 17:03:19.669660] EVTargetVoltage=344.0
[2024-04-20 17:03:19.669660] EVTargetCurrent=0.0
[2024-04-20 17:03:19.669660] EVRESSSOC=55
[2024-04-20 17:03:19.792486] EVSEPresentVoltage=347.0
[2024-04-20 17:03:19.810789] EVTargetVoltage=344.0
[2024-04-20 17:03:19.810789] EVTargetCurrent=0.0
[2024-04-20 17:03:19.810789] EVRESSSOC=55
[2024-04-20 17:03:19.994295] EVSEPresentVoltage=347.0
[2024-04-20 17:03:20.010652] EVTargetVoltage=344.0
[2024-04-20 17:03:20.010652] EVTargetCurrent=0.0
[2024-04-20 17:03:20.010652] EVRESSSOC=55
[2024-04-20 17:03:20.121304] EVSEPresentVoltage=347.0
[2024-04-20 17:03:20.136498] EVTargetVoltage=344.0
[2024-04-20 17:03:20.136498] EVTargetCurrent=0.0
[2024-04-20 17:03:20.136498] EVRESSSOC=55
[2024-04-20 17:03:20.314488] EVSEPresentVoltage=347.0
[2024-04-20 17:03:20.330811] EVTargetVoltage=344.0
[2024-04-20 17:03:20.330811] EVTargetCurrent=0.0
[2024-04-20 17:03:20.330811] EVRESSSOC=55
[2024-04-20 17:03:20.439702] EVSEPresentVoltage=347.0
[2024-04-20 17:03:20.457864] EVTargetVoltage=344.0
[2024-04-20 17:03:20.457864] EVTargetCurrent=0.0
[2024-04-20 17:03:20.457864] EVRESSSOC=55
[2024-04-20 17:03:20.523685] EVSEPresentVoltage=347.0
[2024-04-20 17:03:20.538705] EVTargetVoltage=344.0
[2024-04-20 17:03:20.538705] EVTargetCurrent=0.0
[2024-04-20 17:03:20.538705] EVRESSSOC=55
[2024-04-20 17:03:20.600643] EVSEPresentVoltage=347.0
[2024-04-20 17:03:20.619593] EVTargetVoltage=344.0
[2024-04-20 17:03:20.619593] EVTargetCurrent=0.0
[2024-04-20 17:03:20.619593] EVRESSSOC=55
[2024-04-20 17:03:20.779599] EVSEPresentVoltage=347.0
[2024-04-20 17:03:20.794651] EVTargetVoltage=344.0
[2024-04-20 17:03:20.794651] EVTargetCurrent=0.0
[2024-04-20 17:03:20.794651] EVRESSSOC=55
[2024-04-20 17:03:20.970233] EVSEPresentVoltage=347.0
[2024-04-20 17:03:20.988619] EVTargetVoltage=344.0
[2024-04-20 17:03:20.988619] EVTargetCurrent=0.0
[2024-04-20 17:03:20.988619] EVRESSSOC=55
[2024-04-20 17:03:21.081227] EVSEPresentVoltage=347.0
[2024-04-20 17:03:21.099605] EVTargetVoltage=344.0
[2024-04-20 17:03:21.099605] EVTargetCurrent=0.0
[2024-04-20 17:03:21.099605] EVRESSSOC=55
[2024-04-20 17:03:21.162361] EVSEPresentVoltage=347.0

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,61 @@
# generated by pcapConverter.py
# https://github.com/uhi22/pyPLC
[2024-06-11 10:52:37.220658] EVRESSSOC=77
[2024-06-11 10:52:37.605348] EVRESSSOC=77
[2024-06-11 10:52:37.877275] EVRESSSOC=77
[2024-06-11 10:52:38.165148] EVRESSSOC=77
[2024-06-11 10:52:38.421738] EVRESSSOC=77
[2024-06-11 10:52:38.710259] EVRESSSOC=77
[2024-06-11 10:52:38.996171] EVRESSSOC=77
[2024-06-11 10:52:39.065387] EVTargetVoltage=426.0
[2024-06-11 10:52:39.065387] EVTargetCurrent=0.0
[2024-06-11 10:52:39.065387] EVRESSSOC=77
[2024-06-11 10:52:39.215578] EVSEPresentVoltage=238.0
[2024-06-11 10:52:39.440303] EVTargetVoltage=426.0
[2024-06-11 10:52:39.440303] EVTargetCurrent=1.0
[2024-06-11 10:52:39.440303] EVRESSSOC=77
[2024-06-11 10:52:39.532892] EVSEPresentVoltage=263.0
[2024-06-11 10:52:39.754731] EVTargetVoltage=426.0
[2024-06-11 10:52:39.754731] EVTargetCurrent=1.0
[2024-06-11 10:52:39.754731] EVRESSSOC=77
[2024-06-11 10:52:39.853000] EVSEPresentVoltage=288.0
[2024-06-11 10:52:40.076142] EVTargetVoltage=426.0
[2024-06-11 10:52:40.076142] EVTargetCurrent=1.0
[2024-06-11 10:52:40.076142] EVRESSSOC=77
[2024-06-11 10:52:40.167108] EVSEPresentVoltage=313.0
[2024-06-11 10:52:40.391434] EVTargetVoltage=426.0
[2024-06-11 10:52:40.391434] EVTargetCurrent=1.0
[2024-06-11 10:52:40.391434] EVRESSSOC=77
[2024-06-11 10:52:40.491361] EVSEPresentVoltage=338.0
[2024-06-11 10:52:40.714717] EVTargetVoltage=426.0
[2024-06-11 10:52:40.714717] EVTargetCurrent=1.0
[2024-06-11 10:52:40.714717] EVRESSSOC=77
[2024-06-11 10:52:40.805582] EVSEPresentVoltage=363.0
[2024-06-11 10:52:41.031314] EVTargetVoltage=426.0
[2024-06-11 10:52:41.031314] EVTargetCurrent=1.0
[2024-06-11 10:52:41.031314] EVRESSSOC=77
[2024-06-11 10:52:41.085731] EVSEPresentVoltage=388.0
[2024-06-11 10:52:41.311000] EVTargetVoltage=426.0
[2024-06-11 10:52:41.311000] EVTargetCurrent=1.0
[2024-06-11 10:52:41.311000] EVRESSSOC=77
[2024-06-11 10:52:41.382133] EVSEPresentVoltage=413.0
[2024-06-11 10:52:41.606004] EVTargetVoltage=426.0
[2024-06-11 10:52:41.606004] EVTargetCurrent=1.0
[2024-06-11 10:52:41.606004] EVRESSSOC=77
[2024-06-11 10:52:41.671751] EVSEPresentVoltage=418.0
[2024-06-11 10:52:41.895278] EVTargetVoltage=426.0
[2024-06-11 10:52:41.895278] EVTargetCurrent=1.0
[2024-06-11 10:52:41.895278] EVRESSSOC=77
[2024-06-11 10:52:42.002262] EVSEPresentVoltage=423.0
[2024-06-11 10:52:42.224507] EVTargetVoltage=426.0
[2024-06-11 10:52:42.224507] EVTargetCurrent=1.0
[2024-06-11 10:52:42.224507] EVRESSSOC=77
[2024-06-11 10:52:42.285038] EVSEPresentVoltage=428.0
[2024-06-11 10:52:42.510555] EVTargetVoltage=426.0
[2024-06-11 10:52:42.510555] EVTargetCurrent=1.0
[2024-06-11 10:52:42.510555] EVRESSSOC=77
[2024-06-11 10:52:42.612985] EVSEPresentVoltage=428.0
[2024-06-11 10:52:42.834544] EVTargetVoltage=426.0
[2024-06-11 10:52:42.834544] EVTargetCurrent=1.0
[2024-06-11 10:52:42.834544] EVRESSSOC=77
[2024-06-11 10:52:42.906633] EVSEPresentVoltage=428.0

View file

@ -0,0 +1,383 @@
# generated by pcapConverter.py
# https://github.com/uhi22/pyPLC
[2024-06-18 17:14:19.033366] EVRESSSOC=75
[2024-06-18 17:14:19.417561] EVRESSSOC=75
[2024-06-18 17:14:19.717398] EVRESSSOC=75
[2024-06-18 17:14:19.987272] EVRESSSOC=75
[2024-06-18 17:14:20.302641] EVRESSSOC=75
[2024-06-18 17:14:20.617396] EVRESSSOC=75
[2024-06-18 17:14:20.862456] EVRESSSOC=75
[2024-06-18 17:14:20.932506] EVTargetVoltage=418.0
[2024-06-18 17:14:20.932506] EVTargetCurrent=0.0
[2024-06-18 17:14:20.932506] EVRESSSOC=75
[2024-06-18 17:14:21.089513] EVSEPresentVoltage=234.0
[2024-06-18 17:14:21.312669] EVTargetVoltage=418.0
[2024-06-18 17:14:21.312669] EVTargetCurrent=1.0
[2024-06-18 17:14:21.312669] EVRESSSOC=75
[2024-06-18 17:14:21.354397] EVSEPresentVoltage=259.0
[2024-06-18 17:14:21.577187] EVTargetVoltage=418.0
[2024-06-18 17:14:21.577187] EVTargetCurrent=1.0
[2024-06-18 17:14:21.577187] EVRESSSOC=75
[2024-06-18 17:14:21.631780] EVSEPresentVoltage=284.0
[2024-06-18 17:14:21.852320] EVTargetVoltage=418.0
[2024-06-18 17:14:21.852320] EVTargetCurrent=1.0
[2024-06-18 17:14:21.852320] EVRESSSOC=75
[2024-06-18 17:14:21.885178] EVSEPresentVoltage=309.0
[2024-06-18 17:14:22.107216] EVTargetVoltage=418.0
[2024-06-18 17:14:22.107216] EVTargetCurrent=1.0
[2024-06-18 17:14:22.107216] EVRESSSOC=75
[2024-06-18 17:14:22.158328] EVSEPresentVoltage=334.0
[2024-06-18 17:14:22.382321] EVTargetVoltage=418.0
[2024-06-18 17:14:22.382321] EVTargetCurrent=1.0
[2024-06-18 17:14:22.382321] EVRESSSOC=75
[2024-06-18 17:14:22.434413] EVSEPresentVoltage=359.0
[2024-06-18 17:14:22.662329] EVTargetVoltage=418.0
[2024-06-18 17:14:22.662329] EVTargetCurrent=1.0
[2024-06-18 17:14:22.662329] EVRESSSOC=75
[2024-06-18 17:14:22.683000] EVSEPresentVoltage=384.0
[2024-06-18 17:14:22.907116] EVTargetVoltage=418.0
[2024-06-18 17:14:22.907116] EVTargetCurrent=1.0
[2024-06-18 17:14:22.907116] EVRESSSOC=75
[2024-06-18 17:14:22.940599] EVSEPresentVoltage=409.0
[2024-06-18 17:14:23.167009] EVTargetVoltage=418.0
[2024-06-18 17:14:23.167009] EVTargetCurrent=1.0
[2024-06-18 17:14:23.167009] EVRESSSOC=75
[2024-06-18 17:14:23.190743] EVSEPresentVoltage=414.0
[2024-06-18 17:14:23.416960] EVTargetVoltage=418.0
[2024-06-18 17:14:23.416960] EVTargetCurrent=1.0
[2024-06-18 17:14:23.416960] EVRESSSOC=75
[2024-06-18 17:14:23.439831] EVSEPresentVoltage=419.0
[2024-06-18 17:14:23.597063] EVTargetVoltage=450.0
[2024-06-18 17:14:23.597063] EVTargetCurrent=1.0
[2024-06-18 17:14:23.597063] EVRESSSOC=75
[2024-06-18 17:14:23.635984] EVSEPresentVoltage=450.0
[2024-06-18 17:14:23.635984] EVSEPresentCurrent=1.0
[2024-06-18 17:14:23.762243] EVTargetVoltage=450.0
[2024-06-18 17:14:23.762243] EVTargetCurrent=1.7000000000000002
[2024-06-18 17:14:23.762243] EVRESSSOC=75
[2024-06-18 17:14:23.784468] EVSEPresentVoltage=450.0
[2024-06-18 17:14:23.784468] EVSEPresentCurrent=1.0
[2024-06-18 17:14:23.912231] EVTargetVoltage=450.0
[2024-06-18 17:14:23.912231] EVTargetCurrent=2.5
[2024-06-18 17:14:23.912231] EVRESSSOC=75
[2024-06-18 17:14:23.985924] EVSEPresentVoltage=452.0
[2024-06-18 17:14:23.985924] EVSEPresentCurrent=1.0
[2024-06-18 17:14:24.112068] EVTargetVoltage=450.0
[2024-06-18 17:14:24.112068] EVTargetCurrent=3.5
[2024-06-18 17:14:24.112068] EVRESSSOC=75
[2024-06-18 17:14:24.133350] EVSEPresentVoltage=452.0
[2024-06-18 17:14:24.133350] EVSEPresentCurrent=1.0
[2024-06-18 17:14:24.256819] EVTargetVoltage=450.0
[2024-06-18 17:14:24.256819] EVTargetCurrent=4.3
[2024-06-18 17:14:24.256819] EVRESSSOC=75
[2024-06-18 17:14:24.280159] EVSEPresentVoltage=452.0
[2024-06-18 17:14:24.280159] EVSEPresentCurrent=1.0
[2024-06-18 17:14:24.402064] EVTargetVoltage=450.0
[2024-06-18 17:14:24.402064] EVTargetCurrent=5.1000000000000005
[2024-06-18 17:14:24.402064] EVRESSSOC=75
[2024-06-18 17:14:24.422764] EVSEPresentVoltage=452.0
[2024-06-18 17:14:24.422764] EVSEPresentCurrent=1.0
[2024-06-18 17:14:24.546965] EVTargetVoltage=450.0
[2024-06-18 17:14:24.546965] EVTargetCurrent=5.800000000000001
[2024-06-18 17:14:24.546965] EVRESSSOC=75
[2024-06-18 17:14:24.572311] EVSEPresentVoltage=450.0
[2024-06-18 17:14:24.572311] EVSEPresentCurrent=1.0
[2024-06-18 17:14:24.692022] EVTargetVoltage=450.0
[2024-06-18 17:14:24.692022] EVTargetCurrent=6.6000000000000005
[2024-06-18 17:14:24.692022] EVRESSSOC=75
[2024-06-18 17:14:24.714858] EVSEPresentVoltage=450.0
[2024-06-18 17:14:24.714858] EVSEPresentCurrent=1.0
[2024-06-18 17:14:24.841956] EVTargetVoltage=450.0
[2024-06-18 17:14:24.841956] EVTargetCurrent=7.4
[2024-06-18 17:14:24.841956] EVRESSSOC=75
[2024-06-18 17:14:24.865534] EVSEPresentVoltage=451.0
[2024-06-18 17:14:24.865534] EVSEPresentCurrent=1.0
[2024-06-18 17:14:24.992145] EVTargetVoltage=450.0
[2024-06-18 17:14:24.992145] EVTargetCurrent=8.3
[2024-06-18 17:14:24.992145] EVRESSSOC=75
[2024-06-18 17:14:25.014359] EVSEPresentVoltage=450.0
[2024-06-18 17:14:25.014359] EVSEPresentCurrent=1.0
[2024-06-18 17:14:25.142060] EVTargetVoltage=450.0
[2024-06-18 17:14:25.142060] EVTargetCurrent=9.1
[2024-06-18 17:14:25.142060] EVRESSSOC=75
[2024-06-18 17:14:25.163554] EVSEPresentVoltage=452.0
[2024-06-18 17:14:25.163554] EVSEPresentCurrent=1.0
[2024-06-18 17:14:25.291984] EVTargetVoltage=450.0
[2024-06-18 17:14:25.291984] EVTargetCurrent=9.9
[2024-06-18 17:14:25.291984] EVRESSSOC=75
[2024-06-18 17:14:25.421701] EVSEPresentVoltage=452.0
[2024-06-18 17:14:25.421701] EVSEPresentCurrent=1.0
[2024-06-18 17:14:25.541895] EVTargetVoltage=450.0
[2024-06-18 17:14:25.541895] EVTargetCurrent=11.3
[2024-06-18 17:14:25.541895] EVRESSSOC=75
[2024-06-18 17:14:25.626345] EVSEPresentVoltage=452.0
[2024-06-18 17:14:25.626345] EVSEPresentCurrent=1.0
[2024-06-18 17:14:25.751920] EVTargetVoltage=450.0
[2024-06-18 17:14:25.751920] EVTargetCurrent=12.5
[2024-06-18 17:14:25.751920] EVRESSSOC=75
[2024-06-18 17:14:25.798441] EVSEPresentVoltage=450.0
[2024-06-18 17:14:25.798441] EVSEPresentCurrent=1.0
[2024-06-18 17:14:25.921872] EVTargetVoltage=450.0
[2024-06-18 17:14:25.921872] EVTargetCurrent=13.4
[2024-06-18 17:14:25.921872] EVRESSSOC=75
[2024-06-18 17:14:26.022145] EVSEPresentVoltage=452.0
[2024-06-18 17:14:26.022145] EVSEPresentCurrent=1.0
[2024-06-18 17:14:26.146724] EVTargetVoltage=450.0
[2024-06-18 17:14:26.146724] EVTargetCurrent=14.700000000000001
[2024-06-18 17:14:26.146724] EVRESSSOC=75
[2024-06-18 17:14:26.312572] EVSEPresentVoltage=450.0
[2024-06-18 17:14:26.312572] EVSEPresentCurrent=1.0
[2024-06-18 17:14:26.436764] EVTargetVoltage=450.0
[2024-06-18 17:14:26.436764] EVTargetCurrent=16.400000000000002
[2024-06-18 17:14:26.436764] EVRESSSOC=75
[2024-06-18 17:14:26.539454] EVSEPresentVoltage=452.0
[2024-06-18 17:14:26.539454] EVSEPresentCurrent=1.0
[2024-06-18 17:14:26.661818] EVTargetVoltage=450.0
[2024-06-18 17:14:26.661818] EVTargetCurrent=17.7
[2024-06-18 17:14:26.661818] EVRESSSOC=75
[2024-06-18 17:14:26.745250] EVSEPresentVoltage=451.0
[2024-06-18 17:14:26.745250] EVSEPresentCurrent=1.0
[2024-06-18 17:14:26.866687] EVTargetVoltage=450.0
[2024-06-18 17:14:26.866687] EVTargetCurrent=18.900000000000002
[2024-06-18 17:14:26.866687] EVRESSSOC=75
[2024-06-18 17:14:27.012673] EVSEPresentVoltage=450.0
[2024-06-18 17:14:27.012673] EVSEPresentCurrent=1.0
[2024-06-18 17:14:27.136709] EVTargetVoltage=450.0
[2024-06-18 17:14:27.136709] EVTargetCurrent=20.5
[2024-06-18 17:14:27.136709] EVRESSSOC=75
[2024-06-18 17:14:27.338782] EVSEPresentVoltage=450.0
[2024-06-18 17:14:27.338782] EVSEPresentCurrent=1.0
[2024-06-18 17:14:27.461761] EVTargetVoltage=450.0
[2024-06-18 17:14:27.461761] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:27.461761] EVRESSSOC=75
[2024-06-18 17:14:27.651776] EVSEPresentVoltage=450.0
[2024-06-18 17:14:27.651776] EVSEPresentCurrent=1.0
[2024-06-18 17:14:27.776444] EVTargetVoltage=450.0
[2024-06-18 17:14:27.776444] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:27.776444] EVRESSSOC=75
[2024-06-18 17:14:27.895185] EVSEPresentVoltage=451.0
[2024-06-18 17:14:27.895185] EVSEPresentCurrent=1.0
[2024-06-18 17:14:28.016554] EVTargetVoltage=450.0
[2024-06-18 17:14:28.016554] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:28.016554] EVRESSSOC=75
[2024-06-18 17:14:28.136858] EVSEPresentVoltage=450.0
[2024-06-18 17:14:28.136858] EVSEPresentCurrent=1.0
[2024-06-18 17:14:28.261662] EVTargetVoltage=450.0
[2024-06-18 17:14:28.261662] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:28.261662] EVRESSSOC=75
[2024-06-18 17:14:28.441197] EVSEPresentVoltage=450.0
[2024-06-18 17:14:28.441197] EVSEPresentCurrent=1.0
[2024-06-18 17:14:28.561572] EVTargetVoltage=450.0
[2024-06-18 17:14:28.561572] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:28.561572] EVRESSSOC=75
[2024-06-18 17:14:28.659290] EVSEPresentVoltage=451.0
[2024-06-18 17:14:28.659290] EVSEPresentCurrent=1.0
[2024-06-18 17:14:28.781546] EVTargetVoltage=450.0
[2024-06-18 17:14:28.781546] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:28.781546] EVRESSSOC=75
[2024-06-18 17:14:28.950067] EVSEPresentVoltage=451.0
[2024-06-18 17:14:28.950067] EVSEPresentCurrent=1.0
[2024-06-18 17:14:29.071725] EVTargetVoltage=450.0
[2024-06-18 17:14:29.071725] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:29.071725] EVRESSSOC=75
[2024-06-18 17:14:29.168810] EVSEPresentVoltage=450.0
[2024-06-18 17:14:29.168810] EVSEPresentCurrent=1.0
[2024-06-18 17:14:29.291800] EVTargetVoltage=450.0
[2024-06-18 17:14:29.291800] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:29.291800] EVRESSSOC=75
[2024-06-18 17:14:29.383359] EVSEPresentVoltage=451.0
[2024-06-18 17:14:29.383359] EVSEPresentCurrent=1.0
[2024-06-18 17:14:29.506437] EVTargetVoltage=450.0
[2024-06-18 17:14:29.506437] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:29.506437] EVRESSSOC=75
[2024-06-18 17:14:29.620468] EVSEPresentVoltage=452.0
[2024-06-18 17:14:29.620468] EVSEPresentCurrent=1.0
[2024-06-18 17:14:29.741490] EVTargetVoltage=450.0
[2024-06-18 17:14:29.741490] EVTargetCurrent=22.1
[2024-06-18 17:14:29.741490] EVRESSSOC=75
[2024-06-18 17:14:29.887494] EVSEPresentVoltage=450.0
[2024-06-18 17:14:29.887494] EVSEPresentCurrent=1.0
[2024-06-18 17:14:30.011617] EVTargetVoltage=450.0
[2024-06-18 17:14:30.011617] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:30.011617] EVRESSSOC=75
[2024-06-18 17:14:30.098360] EVSEPresentVoltage=451.0
[2024-06-18 17:14:30.098360] EVSEPresentCurrent=1.0
[2024-06-18 17:14:30.221524] EVTargetVoltage=450.0
[2024-06-18 17:14:30.221524] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:30.221524] EVRESSSOC=75
[2024-06-18 17:14:30.342793] EVSEPresentVoltage=452.0
[2024-06-18 17:14:30.342793] EVSEPresentCurrent=1.0
[2024-06-18 17:14:30.466283] EVTargetVoltage=450.0
[2024-06-18 17:14:30.466283] EVTargetCurrent=22.1
[2024-06-18 17:14:30.466283] EVRESSSOC=75
[2024-06-18 17:14:30.581962] EVSEPresentVoltage=452.0
[2024-06-18 17:14:30.581962] EVSEPresentCurrent=1.0
[2024-06-18 17:14:30.706214] EVTargetVoltage=450.0
[2024-06-18 17:14:30.706214] EVTargetCurrent=22.1
[2024-06-18 17:14:30.706214] EVRESSSOC=75
[2024-06-18 17:14:30.851591] EVSEPresentVoltage=450.0
[2024-06-18 17:14:30.851591] EVSEPresentCurrent=1.0
[2024-06-18 17:14:30.976129] EVTargetVoltage=450.0
[2024-06-18 17:14:30.976129] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:30.976129] EVRESSSOC=75
[2024-06-18 17:14:31.072314] EVSEPresentVoltage=451.0
[2024-06-18 17:14:31.072314] EVSEPresentCurrent=1.0
[2024-06-18 17:14:31.196237] EVTargetVoltage=450.0
[2024-06-18 17:14:31.196237] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:31.196237] EVRESSSOC=75
[2024-06-18 17:14:31.319436] EVSEPresentVoltage=450.0
[2024-06-18 17:14:31.319436] EVSEPresentCurrent=1.0
[2024-06-18 17:14:31.441438] EVTargetVoltage=450.0
[2024-06-18 17:14:31.441438] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:31.441438] EVRESSSOC=75
[2024-06-18 17:14:31.539860] EVSEPresentVoltage=451.0
[2024-06-18 17:14:31.539860] EVSEPresentCurrent=1.0
[2024-06-18 17:14:31.661200] EVTargetVoltage=450.0
[2024-06-18 17:14:31.661200] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:31.661200] EVRESSSOC=75
[2024-06-18 17:14:31.760513] EVSEPresentVoltage=450.0
[2024-06-18 17:14:31.760513] EVSEPresentCurrent=1.0
[2024-06-18 17:14:31.881515] EVTargetVoltage=450.0
[2024-06-18 17:14:31.881515] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:31.881515] EVRESSSOC=75
[2024-06-18 17:14:31.942770] EVSEPresentVoltage=451.0
[2024-06-18 17:14:31.942770] EVSEPresentCurrent=1.0
[2024-06-18 17:14:32.065982] EVTargetVoltage=450.0
[2024-06-18 17:14:32.065982] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:32.065982] EVRESSSOC=75
[2024-06-18 17:14:32.158306] EVSEPresentVoltage=451.0
[2024-06-18 17:14:32.158306] EVSEPresentCurrent=1.0
[2024-06-18 17:14:32.286136] EVTargetVoltage=450.0
[2024-06-18 17:14:32.286136] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:32.286136] EVRESSSOC=75
[2024-06-18 17:14:32.403503] EVSEPresentVoltage=450.0
[2024-06-18 17:14:32.403503] EVSEPresentCurrent=1.0
[2024-06-18 17:14:32.525923] EVTargetVoltage=450.0
[2024-06-18 17:14:32.525923] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:32.525923] EVRESSSOC=75
[2024-06-18 17:14:32.677904] EVSEPresentVoltage=450.0
[2024-06-18 17:14:32.677904] EVSEPresentCurrent=1.0
[2024-06-18 17:14:32.801107] EVTargetVoltage=450.0
[2024-06-18 17:14:32.801107] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:32.801107] EVRESSSOC=75
[2024-06-18 17:14:32.893899] EVSEPresentVoltage=452.0
[2024-06-18 17:14:32.893899] EVSEPresentCurrent=1.0
[2024-06-18 17:14:33.015876] EVTargetVoltage=450.0
[2024-06-18 17:14:33.015876] EVTargetCurrent=22.1
[2024-06-18 17:14:33.015876] EVRESSSOC=75
[2024-06-18 17:14:33.114085] EVSEPresentVoltage=450.0
[2024-06-18 17:14:33.114085] EVSEPresentCurrent=1.0
[2024-06-18 17:14:33.235904] EVTargetVoltage=450.0
[2024-06-18 17:14:33.235904] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:33.235904] EVRESSSOC=75
[2024-06-18 17:14:33.388206] EVSEPresentVoltage=450.0
[2024-06-18 17:14:33.388206] EVSEPresentCurrent=1.0
[2024-06-18 17:14:33.511227] EVTargetVoltage=450.0
[2024-06-18 17:14:33.511227] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:33.511227] EVRESSSOC=75
[2024-06-18 17:14:33.623068] EVSEPresentVoltage=451.0
[2024-06-18 17:14:33.623068] EVSEPresentCurrent=1.0
[2024-06-18 17:14:33.745821] EVTargetVoltage=450.0
[2024-06-18 17:14:33.745821] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:33.745821] EVRESSSOC=75
[2024-06-18 17:14:33.893476] EVSEPresentVoltage=450.0
[2024-06-18 17:14:33.893476] EVSEPresentCurrent=1.0
[2024-06-18 17:14:34.015855] EVTargetVoltage=450.0
[2024-06-18 17:14:34.015855] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:34.015855] EVRESSSOC=75
[2024-06-18 17:14:34.178544] EVSEPresentVoltage=450.0
[2024-06-18 17:14:34.178544] EVSEPresentCurrent=1.0
[2024-06-18 17:14:34.300951] EVTargetVoltage=450.0
[2024-06-18 17:14:34.300951] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:34.300951] EVRESSSOC=75
[2024-06-18 17:14:34.397334] EVSEPresentVoltage=452.0
[2024-06-18 17:14:34.397334] EVSEPresentCurrent=1.0
[2024-06-18 17:14:34.520926] EVTargetVoltage=450.0
[2024-06-18 17:14:34.520926] EVTargetCurrent=22.1
[2024-06-18 17:14:34.520926] EVRESSSOC=75
[2024-06-18 17:14:34.620152] EVSEPresentVoltage=452.0
[2024-06-18 17:14:34.620152] EVSEPresentCurrent=1.0
[2024-06-18 17:14:34.745926] EVTargetVoltage=450.0
[2024-06-18 17:14:34.745926] EVTargetCurrent=22.1
[2024-06-18 17:14:34.745926] EVRESSSOC=75
[2024-06-18 17:14:34.846624] EVSEPresentVoltage=452.0
[2024-06-18 17:14:34.846624] EVSEPresentCurrent=1.0
[2024-06-18 17:14:34.971590] EVTargetVoltage=450.0
[2024-06-18 17:14:34.971590] EVTargetCurrent=22.1
[2024-06-18 17:14:34.971590] EVRESSSOC=75
[2024-06-18 17:14:35.134990] EVSEPresentVoltage=450.0
[2024-06-18 17:14:35.134990] EVSEPresentCurrent=1.0
[2024-06-18 17:14:35.255758] EVTargetVoltage=450.0
[2024-06-18 17:14:35.255758] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:35.255758] EVRESSSOC=75
[2024-06-18 17:14:35.415540] EVSEPresentVoltage=452.0
[2024-06-18 17:14:35.415540] EVSEPresentCurrent=1.0
[2024-06-18 17:14:35.540859] EVTargetVoltage=450.0
[2024-06-18 17:14:35.540859] EVTargetCurrent=22.1
[2024-06-18 17:14:35.540859] EVRESSSOC=75
[2024-06-18 17:14:35.629452] EVSEPresentVoltage=451.0
[2024-06-18 17:14:35.629452] EVSEPresentCurrent=1.0
[2024-06-18 17:14:35.750865] EVTargetVoltage=450.0
[2024-06-18 17:14:35.750865] EVTargetCurrent=22.1
[2024-06-18 17:14:35.750865] EVRESSSOC=75
[2024-06-18 17:14:35.914169] EVSEPresentVoltage=452.0
[2024-06-18 17:14:35.914169] EVSEPresentCurrent=1.0
[2024-06-18 17:14:36.035667] EVTargetVoltage=450.0
[2024-06-18 17:14:36.035667] EVTargetCurrent=22.1
[2024-06-18 17:14:36.035667] EVRESSSOC=75
[2024-06-18 17:14:36.140720] EVSEPresentVoltage=450.0
[2024-06-18 17:14:36.140720] EVSEPresentCurrent=1.0
[2024-06-18 17:14:36.265523] EVTargetVoltage=450.0
[2024-06-18 17:14:36.265523] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:36.265523] EVRESSSOC=75
[2024-06-18 17:14:36.425696] EVSEPresentVoltage=450.0
[2024-06-18 17:14:36.425696] EVSEPresentCurrent=1.0
[2024-06-18 17:14:36.550712] EVTargetVoltage=450.0
[2024-06-18 17:14:36.550712] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:36.550712] EVRESSSOC=75
[2024-06-18 17:14:36.665178] EVSEPresentVoltage=452.0
[2024-06-18 17:14:36.665178] EVSEPresentCurrent=1.0
[2024-06-18 17:14:36.785625] EVTargetVoltage=450.0
[2024-06-18 17:14:36.785625] EVTargetCurrent=22.1
[2024-06-18 17:14:36.785625] EVRESSSOC=75
[2024-06-18 17:14:36.955121] EVSEPresentVoltage=452.0
[2024-06-18 17:14:36.955121] EVSEPresentCurrent=1.0
[2024-06-18 17:14:37.075509] EVTargetVoltage=450.0
[2024-06-18 17:14:37.075509] EVTargetCurrent=22.1
[2024-06-18 17:14:37.075509] EVRESSSOC=75
[2024-06-18 17:14:37.201588] EVSEPresentVoltage=450.0
[2024-06-18 17:14:37.201588] EVSEPresentCurrent=1.0
[2024-06-18 17:14:37.325606] EVTargetVoltage=450.0
[2024-06-18 17:14:37.325606] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:37.325606] EVRESSSOC=75
[2024-06-18 17:14:37.473631] EVSEPresentVoltage=450.0
[2024-06-18 17:14:37.473631] EVSEPresentCurrent=1.0
[2024-06-18 17:14:37.595555] EVTargetVoltage=450.0
[2024-06-18 17:14:37.595555] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:37.595555] EVRESSSOC=75
[2024-06-18 17:14:37.758062] EVSEPresentVoltage=450.0
[2024-06-18 17:14:37.758062] EVSEPresentCurrent=1.0
[2024-06-18 17:14:37.880915] EVTargetVoltage=450.0
[2024-06-18 17:14:37.880915] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:37.880915] EVRESSSOC=75
[2024-06-18 17:14:38.041445] EVSEPresentVoltage=450.0
[2024-06-18 17:14:38.041445] EVSEPresentCurrent=1.0
[2024-06-18 17:14:38.165349] EVTargetVoltage=450.0
[2024-06-18 17:14:38.165349] EVTargetCurrent=22.200000000000003
[2024-06-18 17:14:38.165349] EVRESSSOC=75
[2024-06-18 17:14:38.330859] EVSEPresentVoltage=452.0
[2024-06-18 17:14:38.330859] EVSEPresentCurrent=1.0
[2024-06-18 17:14:38.455360] EVTargetVoltage=450.0
[2024-06-18 17:14:38.455360] EVTargetCurrent=22.1
[2024-06-18 17:14:38.455360] EVRESSSOC=75
[2024-06-18 17:14:38.580951] EVSEPresentVoltage=451.0
[2024-06-18 17:14:38.580951] EVSEPresentCurrent=1.0
[2024-06-18 17:14:38.705420] EVTargetVoltage=450.0
[2024-06-18 17:14:38.705420] EVTargetCurrent=22.1
[2024-06-18 17:14:38.705420] EVRESSSOC=75
[2024-06-18 17:14:38.875903] EVSEPresentVoltage=450.0
[2024-06-18 17:14:38.875903] EVSEPresentCurrent=1.0
[2024-06-18 17:14:39.095294] EVRESSSOC=75
[2024-06-18 17:14:39.169811] EVSEPresentVoltage=362.0
[2024-06-18 17:14:39.390259] EVRESSSOC=75
[2024-06-18 17:14:39.460727] EVSEPresentVoltage=290.0

View file

@ -79,7 +79,8 @@ ip addr >> "$logfile"
pwd >> "$logfile" pwd >> "$logfile"
# call the pyPlc python script # call the pyPlc python script
PYTHONUNBUFFERED=1 /usr/bin/python3 pevNoGui.py | tee -a "$logfile" #PYTHONUNBUFFERED=1 /usr/bin/python3 pevNoGui.py | tee -a "$logfile"
PYTHONUNBUFFERED=1 /usr/bin/python3 listenerNoGui.py | tee -a "$logfile"
pwd >> "$logfile" pwd >> "$logfile"
date >> "$logfile" date >> "$logfile"