summaryrefslogblamecommitdiff
path: root/endurenergy.h
blob: dc443e5f1135bd00b3cc96ea9b5ae6123f01b6bf (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707


































































































































































































































































































































































































































































































































































































































































































































                                                                                                                                                                                   
/*
 * endurenergy.h
 *
 *    Reverse engineered internal CAN bus data formats for the EndurEnergy ESP-5100. Still a work in progress.
 */

#ifndef _ENDURENERGY_H
#define _ENDURENERGY_H

#define BATTERY_ID_MIN 1
#define BATTERY_ID_MAX 8

#define MSG(canid,mask,batid,batmask)

#define MSG_SENDER_MASK 0x0000000f

/*
  18A6A0F<id>
  18A8A2F<id>
  1010 0110
  1010 1000

  1110 0001
  1110 0010


  Notes:
    PDU formats for all messages are 0xe1 and 0xe2 (multi battery)
    This is less than 240, so the message is addressable (PDU1) and the PDU specific field contains the destination address
    (though it's unclear if this follows that spec)


*/



#define MSGID_UNK1       0x18a6a000
#define MSGID_UNK1_MASK  0x1fffff00

struct diag1 {
   uint8_t field;
   union {


      /*
       * Missing items (so far):
       *  Server addr
       *  port
       *  local IP
       *  SSID
       *  Password
       *  Encry
       *  HDCP

       */
      struct {
         uint8_t pad; /* always 0 */
         uint8_t field;
         union {
            struct { uint8_t hw_ver; uint8_t reserved[2]; } f00; /* guess */
            struct { uint32_t device_id; } f01; /* displayed in decimal */
            struct { char product_id[4]; } f02; /* not NUL terminated */
            struct { uint8_t unknown[4]; } f03; /* 0x01 0x01 0x00 0x00 */
            struct { uint8_t unknown[4]; } f04; /*1: 03 10 01 6E, 2: 03 10 7B 56, 3: 03 10 A6 4A, 4: 03 10 BD 90, 5: 03 10 C3 EE, 6: 03 10 7D 50, 7: 03 10 59 D0, 8: 03 10 2E C2 */
            struct { uint16_t sw_ver; uint8_t reserved[2]; } f05;
            struct { uint8_t reserved[4]; } f06;

         };
      } f03;

/*  (2025-01-21 08:45:45.935024)  can0  18A6A0F8   [8]  2A 00 19 D4 1A 00 00 31  -> port 0x1ad4 -> 6868 */

      struct {
         uint8_t pad; /* always 0 */
         uint8_t field;
         union {
            struct { char bmsid[4]; } f00;  /* 0..3 */
            struct { char bmsid[4]; } f01;  /* 4..7 */
            struct { char bmsid[4]; } f02;  /* 8..11 */
            struct { char bmsid[4]; } f03;  /* 12..15 */
            struct { char bmsid[4]; } f04;  /* 16..19 */
            struct { char bmsid[4]; } f05;  /* 20..21 (last byte is NUL) */
            struct { uint8_t reserved[4]; } f06;
            struct { uint8_t reserved[4]; } f07;
            struct { uint8_t reserved[4]; } f08;
         };
      } f2c;


      struct {
         uint8_t pad; /* always 0 */
         uint8_t field;
         struct { char ssid[4]; } f00; // XXX: or is it passphrase?
         struct { char ssid[4]; } f01;
         struct { char ssid[4]; } f02;
         struct { char ssid[4]; } f03;
         struct { char ssid[4]; } f04;
         struct { char ssid[4]; } f05;
         struct { char ssid[4]; } f06;
         struct { char ssid[4]; } f07;
         struct { char ssid[4]; } f08;
         struct { char ssid[4]; } f09;
         struct { char ssid[4]; } f0a;
         struct { char ssid[4]; } f0b;
         struct { char ssid[4]; } f0c;
         struct { char ssid[4]; } f0d;
         struct { char ssid[4]; } f0e;
         struct { char ssid[4]; } f0f;
         struct { char ssid[4]; } f10;
         struct { char ssid[4]; } f11;
         struct { char ssid[4]; } f12;
         struct { char ssid[4]; } f13;
         struct { char ssid[4]; } f14;
         struct { char ssid[4]; } f15;
         struct { char ssid[4]; } f16;
         struct { char ssid[4]; } f17;
         struct { char ssid[4]; } f18;
      } f78;

   };
   uint8_t csum;
} __attribute__((packed));


#define MSGID_UNK2       0x18a8a200
#define MSGID_UNK2_MASK  0x1fffff00

struct unk2 {
   uint8_t data[7];
   uint8_t csum;
} __attribute__((packed));




/* priority 6, EDP 0, DP 0, PDU format 0xe1, PDU specific 0xe2 */
#define MSGID_CELL_VOLTAGE       0x18e1e200
#define MSGID_CELL_VOLTAGE_MASK  0x1fffff00

struct cell_voltage {
   uint8_t start_index;
   uint16_t voltage[3]; /* Cell voltages in mV */
   uint8_t checksum;
} __attribute__((packed));

/* priority 6, EDP 0, DP 0, PDU format 0xe1, PDU specific 0xe3 */
#define MSGID_TEMPERATURE       0x18e1e300
#define MSGID_TEMPERATURE_MASK  0x1fffff00

struct temperature {
   uint8_t temperature1; /* integer degrees celcius */
   uint8_t temperature2; /* integer degrees celcius */
   uint8_t temperature3; /* integer degrees celcius */
} __attribute__((packed));

/* priority 6, EDP 0, DP 0, PDU format 0xe1, PDU specific 0xe4 */
#define MSG_SUMMARY       0x18e1e400
#define MSG_SUMMARY_MASK  0x1fffff00

struct summary {
   uint8_t field;
   union {
      struct voltage_max_min { // field == 0
         uint8_t pad0;   /* always seems to be 7 */
         uint16_t v_max; /* big endian, max cell voltage in mV */
         uint16_t v_min; /* big endian, min cell voltage in mV */
         uint8_t pad1;   /* always seems to be 0 */
      } i00;

      /*
       * BMS_TOOL interface:
       *
       *  SOC_UP              System Voltage   Current            3
       *  Max Cell            Min Cell         Voltage Different  # probably computed(?)
       *  Max Temp            Min Temp         Capacity           3
       *  Discharge CAP       Charge CAP       Max Soc            3
       *  Discharge Quantity  Charge Quantity  SOH
       *  Battery Voltage     Fuse Voltage     Output Voltage
       *  <cell voltages>
       *  Battery Temperature:
       *  Temperature1        Temperature2     Temperature3
       *
       *
       * Missing items (so far):
       *  BMS ID
       *  Product ID
       *  Server addr
       *  port
       *  local IP
       *  SSID
       *  Password
       *  Encry
       *  HDCP
       *
       *  System Voltage
       *  Voltage Difference
       *  Battery Voltage
       *  Fuse Voltage
       *  Output Voltage


       ID    B ID              Device ID                 Bms ID  Product ID
       1   *10208   22507318 (0x1576f36)  0916F260012202250731?        NT01
       2   *10136   22507087 (0x1576e4f)  0916F260012202250708?        NT01   01 57 6e 4f -> 4F 6E 57 01
       3   *10166   22507155 (0x1576e93)  0916F260012202250715?        NT01
       4   *10175   22507145 (0x1576e89)  0916F260012202250714?        NT01
       5   *10084   22507255 (0x1576ef7)  0916F260012202250725?        NT01
       6   *10153   22507081 (0x1576e49)  0916F260012202250708?        NT01
       7   *10165   22507158 (0x1576e96)  0916F260012202250715?        NT01
       8   *10142   22507084 (0x1576e4c)  0916F260012202250708?        NT01

       */

      struct misc { // field == 0x01
         uint8_t temperature_max;
         uint8_t temperature_min;
         uint16_t unknown;
         uint16_t voltage; // some cell voltage * 1000 -> almost certainly mean cell voltage
      } i01;

      struct pack_voltage { // field == 0x02
         uint16_t unknown; /* seems always to be 3 */
         uint16_t voltage;
         uint16_t pad; /* always 0 */
      } i02;

      struct current { // field == 0x03
         int32_t current;  /* negative means battery is charging */
         uint16_t soc;     /* same value as in both soc fields below */
      } i03;

      struct soc { // field == 0x04
         uint16_t soc_up;
         uint16_t soc_max;
         uint16_t soc_unknown; /* is always 0x310 */
      } i04;

      struct device_id { // field == 0x05
         uint32_t device_id;
         uint8_t pad0;
         uint8_t pad1;
      } i05;

      struct charge_cap { // field == 0x06
         uint32_t charge_cap; /* divide by 100 to get Ah */
         uint8_t pad0;
         uint8_t pad1;
      } i06;
      struct discharge_cap { // field == 0x07
         uint32_t discharge_cap; /* divide by 100 to get Ah */
         uint8_t pad0;
         uint8_t pad1;
      } i07;
      struct charge_quantity { // field == 0x08
         uint32_t charge_quantity; /* divide by 10000 to get kWh */
         uint8_t pad0;
         uint8_t pad1;
      } i08;
      struct discharge_quantity { // field == 0x09
         uint32_t discharge_quantity; /* divide by 10000 to get kWh, e.g. 14 25 51 00 -> 0x00512512 -> 5317908 -> 531.7908kWh */
         uint8_t pad0;
         uint8_t pad1;
      } i09;

      struct versions { // field == 0x0A
         uint16_t sw_ver;  /* currently 03CC */
         uint16_t hw_ver;  /* currently 0001*/
         uint16_t pad;
      } i0a;

      struct battery_id_1 { // field == 0xB
         /* BatteryID[0:3] */
         char sn[4];
         uint8_t pad[2];
      } i0b;
      struct battery_id_2 { // field == 0xC
         /* BatteryID[4:7] */
         char sn[4];
         uint8_t pad[2];
      } i0c;
      struct battery_id_3 { // field == 0xD
         /* BatteryID[8:11] */
         char sn[4];
         uint8_t pad[2];
      } i0d;
      struct battery_id_4 { // field == 0xE
         /* BatteryID[12:15] */
         char sn[4];
         uint8_t pad[2];
      } i0e;
      struct battery_id_5 { // field == 0xF
         /* BatteryID[16:18] */
         char sn[3];
         uint8_t pad[3];
      } i0f;

      struct filler_10 { uint8_t pad[6]; } i10; /* always seems to be 0 */
      struct filler_11 { uint8_t pad[6]; } i11; /* always seems to be 0 */
      struct filler_12 { uint8_t pad[6]; } i12; /* always seems to be 0 */
      struct filler_13 { uint8_t pad[6]; } i13; /* always seems to be 0 */
      struct filler_14 { uint8_t pad[6]; } i14; /* always seems to be 0 */

      struct soh {  // field == 0x15
         // can0  18E1E4F7   [8]  15 E8 03 5A 5A 00 00 B4
         uint16_t soh;  /* big endian, percent and 10ths, i.e. 98.5% shows as 985 (0x3d9 -> D9 03) */
         uint8_t cap0;  /* capacity in amp-hours */
         uint8_t cap1;  /* capacity in amp-hours? */
         uint8_t pad0;  /* always seems to be 0 */
         uint8_t pad1;  /* always seems to be 0 */
      } i15;

   };
   uint8_t csum; // ?? appears to be sum of bytes[0:6]
} __attribute__((packed));


/*************************************************************************
 * Known faults and alarms:
 *
 * Fault (10):
 *   Hardware
 *   Short
 *   Sample
 *   TempOpen
 *   TempShort
 *   Current
 *   Address Conflict
 *   Slave Offline
 *   PreCharge OutTime
 *   Slave Fault
 *
 * Alarm (11): "Fault Code Description"
 *   UV1   total voltage low
 *   UV2   single cell low
 *   OTD   discharge temperature high
 *   UTD   discharge temperature low
 *   OCD1  discharge overcurrent
 *   OV1   total voltage high
 *   OV2   single cell high
 *   OTC   charge temperature high
 *   UTC   charge temperature low
 *   OCC   charge overcurrent
 *   Low SOC
 *


 *  can0  18E1E5F7   [8]  00 00 00 00 02 48 00 4A  <- UV2 fault
 *  can0  18E1E5F8   [8]  01 04 00 00 00 04 00 09  <-- OV2

 * no fault/alarm
 *  can0  18E1E5F6   [8]  00 00 00 00 02 00 00 02
 *  can0  18E1E5F6   [8]  01 00 00 00 00 00 00 01
 *  can0  18E1E5F6   [8]  02 00 00 00 00 00 00 02
 *
 *  UV2 alarm (red)
 *  can0  18E1E5F7   [8]  00 00 00 00 02 48 00 4A
 *  can0  18E1E5F7   [8]  01 40 00 48 00 40 00 C9
 *  can0  18E1E5F7   [8]  02 00 00 00 00 00 00 02
 *
 * OV2 alarm (yellow)
 *  can0  18E1E5F6   [8]  00 00 00 00 02 00 00 02
 *  can0  18E1E5F6   [8]  01 04 00 00 00 00 00 05
 *  can0  18E1E5F6   [8]  02 00 00 00 00 00 00 02
 *
 * OV2 alarm (red)
 *  can0  18E1E5F8   [8]  00 00 00 00 04 00 00 04
 *  can0  18E1E5F8   [8]  01 04 00 00 00 04 00 09  <-- OV2
 *  can0  18E1E5F8   [8]  02 00 00 00 00 00 00 02


  Too cold to charge
  Faults < 00 00 00 02 20 00 00 20 00 00 00 20 00 00 00 20 00 00 >
  Current 0.349A [discharge]  SOC 71.8%  Temp: 5°C 5°C 9°C *

  -      00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  OV2(y) 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00
  OV2(r) 00 00 00 04 00 00 04 00 00 00 04 00 00 00 00 00 00 00
  UV2(r) 00 00 00 00 02 48 00 40 00 48 00 40 00 00 00 00 00 00
  UTC    00 00 00 02 20 00 00 20 00 00 00 20 00 00 00 20 00 00


  Fault6 00 00 00 02 00 00 00 20 00 00 00 20 00 00 00 20 00 00 >




  2026-02-19
  Battery 4  - bank not charging (cold)
  Faults < 00 00 00 02 00 00 00 20 00 00 00 20 00 00 00 20 00 00 >
  Current 0.736A [discharge]  SOC 40.3%  Temp: 3°C 3°C 5°C *





== Battery 1 SOH 96.9% HW 0x1 SW 0x3cc 1416719SLKOPG010208 Device ID 22507318
  Faults < 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 >
  Current 0.497A [discharge]  SOC 48.0%  Temp: 3°C 3°C 6°C *
== Battery 2 SOH 96.9% HW 0x1 SW 0x3cc 1416719SLKOPG010136 Device ID 22507087
  Faults < 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 >
  Current 0.000A [discharge]  SOC 41.2%  Temp: 3°C 4°C 6°C *
== Battery 3 SOH 96.5% HW 0x1 SW 0x3cc 1416719SLKOPG010166 Device ID 22507155
  Faults < 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 >
  Current -0.566A [charge]  SOC 31.1%  Temp: 6°C 6°C 9°C

== Battery 4 SOH 96.9% HW 0x1 SW 0x3cc 1416719SLKOPG010175 Device ID 22507145
  Faults < 00 00 00 02 00 00 00 20 00 00 00 20 00 00 00 20 00 00 >
  Current 0.258A [discharge]  SOC 40.3%  Temp: 3°C 3°C 4°C *

== Battery 5 SOH 97.1% HW 0x1 SW 0x3cc 1416719SLKOPG010084 Device ID 22507255
  Faults < 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 >
  Current 0.000A [discharge]  SOC 41.7%  Temp: 5°C 5°C 6°C *

== Battery 6 SOH 96.9% HW 0x1 SW 0x3cc 1416719SLKOPG010153 Device ID 22507081
  Faults < 00 00 00 02 00 00 00 20 00 00 00 20 00 00 00 20 00 00 >
  Current 0.000A [discharge]  SOC 30.9%  Temp: 5°C 5°C 6°C *

== Battery 7 SOH 98.9% HW 0x1 SW 0x3cc 1416330SLKOPG008100 Device ID 22501168
  Faults < 00 00 00 02 20 00 00 20 00 00 00 20 00 00 00 20 00 00 >
  Current 0.847A [discharge]  SOC 78.0%  Temp: 5°C 5°C 8°C *
== Battery 8 SOH 98.2% HW 0x1 SW 0x3cc 1416719SLKOPG010159 Device ID 22507035
  Faults < 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 >
  Current 0.386A [discharge]  SOC 56.5%  Temp: 5°C 5°C 8°C *




 */

/* priority 6, EDP 0, DP 0, PDU format 0xe1, PDU specific 0xe5 */
/* XXX: "faults" may be a misnomer, maybe "status"? */
#define MSGID_FAULTS       0x18e1e500
#define MSGID_FAULTS_MASK  0x1fffff00

struct faults {
   uint8_t field;
   union {
      // 00 00 00 02 00 00  04 00 00 00 00 00  00 00 00 00 00 00  # slave
      // 00 00 00 04 00 00  04 00 00 00 00 00  00 00 00 00 00 00  # master


/*
== Battery 1 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010208 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -12.299A [charge]  SOC 99.0%  Temp: 16°C 17°C 19°C
  Cell V: C1:3.416V C2:3.422V C3:3.421V C4:3.424V C5:3.423V C6:3.423V C7:3.421V C8:3.426V C9:3.430V C10:3.430V C11:3.441V C12:3.443V C13:3.440V C14:3.442V C15:3.450V C16:3.439V
== Battery 2 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010136 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -10.351A [charge]  SOC 99.0%  Temp: 17°C 17°C 20°C
  Cell V: C1:3.427V C2:3.425V C3:3.432V C4:3.432V C5:3.431V C6:3.422V C7:3.429V C8:3.444V C9:3.435V C10:3.426V C11:3.426V C12:3.437V C13:3.431V C14:3.434V C15:3.434V C16:3.435V
== Battery 3 SOH 98.2% HW 0x1 SW 0xcc 1416719SLKOPG010166 Faults < 00 00 00 02 00 00 04 00 00 00 04 00 00 00 00 00 00 00>
  Current -2.019A [charge]  SOC 99.0%  Temp: 23°C 23°C 26°C
  Cell V: C1:3.390V C2:3.385V C3:3.389V C4:3.382V C5:3.394V C6:3.427V C7:3.386V C8:3.434V C9:3.436V C10:3.459V C11:3.435V C12:3.508V C13:3.457V C14:3.542V C15:3.550V C16:3.410V
== Battery 4 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010175 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -7.554A [charge]  SOC 99.0%  Temp: 19°C 19°C 20°C
  Cell V: C1:3.438V C2:3.446V C3:3.424V C4:3.423V C5:3.428V C6:3.426V C7:3.434V C8:3.436V C9:3.425V C10:3.428V C11:3.462V C12:3.442V C13:3.430V C14:3.438V C15:3.447V C16:3.440V
== Battery 5 SOH 98.6% HW 0x1 SW 0xcc 1416719SLKOPG010084 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -8.381A [charge]  SOC 99.0%  Temp: 20°C 20°C 21°C
  Cell V: C1:3.447V C2:3.428V C3:3.433V C4:3.431V C5:3.430V C6:3.448V C7:3.431V C8:3.439V C9:3.435V C10:3.428V C11:3.424V C12:3.428V C13:3.430V C14:3.440V C15:3.441V C16:3.451V
== Battery 6 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010153 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -2.056A [charge]  SOC 99.0%  Temp: 22°C 22°C 23°C
  Cell V: C1:3.393V C2:3.415V C3:3.430V C4:3.407V C5:3.420V C6:3.394V C7:3.396V C8:3.460V C9:3.388V C10:3.441V C11:3.523V C12:3.495V C13:3.461V C14:3.487V C15:3.415V C16:3.431V
== Battery 7 SOH 99.8% HW 0x1 SW 0xcc 1416330SLKOPG008100 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -11.974A [charge]  SOC 99.0%  Temp: 15°C 15°C 17°C
  Cell V: C1:3.424V C2:3.425V C3:3.429V C4:3.440V C5:3.426V C6:3.426V C7:3.430V C8:3.434V C9:3.435V C10:3.436V C11:3.426V C12:3.437V C13:3.435V C14:3.435V C15:3.433V C16:3.432V
== Battery 8 SOH 99.7% HW 0x1 SW 0xcc 1416719SLKOPG010159 Faults < 00 00 00 04 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -12.446A [charge]  SOC 99.0%  Temp: 20°C 21°C 23°C
  Cell V: C1:3.420V C2:3.430V C3:3.430V C4:3.434V C5:3.434V C6:3.433V C7:3.433V C8:3.440V C9:3.436V C10:3.437V C11:3.432V C12:3.427V C13:3.428V C14:3.437V C15:3.436V C16:3.437V

== Battery 1 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010208 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -12.299A [charge]  SOC 99.0%  Temp: 16°C 17°C 19°C
  Cell V: C1:3.416V C2:3.423V C3:3.421V C4:3.423V C5:3.423V C6:3.423V C7:3.421V C8:3.426V C9:3.430V C10:3.430V C11:3.441V C12:3.443V C13:3.440V C14:3.442V C15:3.450V C16:3.439V
== Battery 2 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010136 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -10.351A [charge]  SOC 99.0%  Temp: 17°C 17°C 20°C
  Cell V: C1:3.427V C2:3.425V C3:3.433V C4:3.432V C5:3.431V C6:3.421V C7:3.429V C8:3.444V C9:3.435V C10:3.426V C11:3.426V C12:3.437V C13:3.431V C14:3.434V C15:3.434V C16:3.435V
== Battery 3 SOH 98.2% HW 0x1 SW 0xcc 1416719SLKOPG010166 Faults < 00 00 00 02 00 00 04 00 00 00 04 00 00 00 00 00 00 00>
  Current -1.964A [charge]  SOC 100.0%  Temp: 23°C 23°C 26°C
  Cell V: C1:3.390V C2:3.385V C3:3.389V C4:3.383V C5:3.394V C6:3.427V C7:3.385V C8:3.433V C9:3.436V C10:3.458V C11:3.436V C12:3.508V C13:3.457V C14:3.542V C15:3.550V C16:3.410V
== Battery 4 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010175 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -7.499A [charge]  SOC 100.0%  Temp: 19°C 19°C 20°C
  Cell V: C1:3.438V C2:3.446V C3:3.424V C4:3.422V C5:3.427V C6:3.426V C7:3.434V C8:3.436V C9:3.424V C10:3.428V C11:3.461V C12:3.443V C13:3.430V C14:3.438V C15:3.446V C16:3.440V
== Battery 5 SOH 98.6% HW 0x1 SW 0xcc 1416719SLKOPG010084 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -8.381A [charge]  SOC 99.0%  Temp: 20°C 20°C 21°C
  Cell V: C1:3.445V C2:3.429V C3:3.433V C4:3.431V C5:3.430V C6:3.448V C7:3.431V C8:3.439V C9:3.435V C10:3.428V C11:3.424V C12:3.428V C13:3.431V C14:3.440V C15:3.441V C16:3.451V
== Battery 6 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010153 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -2.056A [charge]  SOC 99.0%  Temp: 22°C 22°C 23°C
  Cell V: C1:3.393V C2:3.415V C3:3.430V C4:3.407V C5:3.420V C6:3.394V C7:3.396V C8:3.460V C9:3.388V C10:3.441V C11:3.523V C12:3.495V C13:3.461V C14:3.488V C15:3.414V C16:3.432V
== Battery 7 SOH 99.8% HW 0x1 SW 0xcc 1416330SLKOPG008100 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -11.974A [charge]  SOC 99.0%  Temp: 15°C 15°C 17°C
  Cell V: C1:3.424V C2:3.425V C3:3.428V C4:3.440V C5:3.427V C6:3.425V C7:3.430V C8:3.435V C9:3.436V C10:3.436V C11:3.426V C12:3.437V C13:3.435V C14:3.435V C15:3.433V C16:3.432V
== Battery 8 SOH 99.7% HW 0x1 SW 0xcc 1416719SLKOPG010159 Faults < 00 00 00 04 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -12.446A [charge]  SOC 99.0%  Temp: 20°C 21°C 23°C
  Cell V: C1:3.420V C2:3.430V C3:3.430V C4:3.434V C5:3.435V C6:3.432V C7:3.433V C8:3.440V C9:3.436V C10:3.437V C11:3.432V C12:3.427V C13:3.428V C14:3.437V C15:3.436V C16:3.436V

== Battery 1 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010208 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -12.299A [charge]  SOC 99.0%  Temp: 16°C 17°C 19°C
  Cell V: C1:3.416V C2:3.423V C3:3.421V C4:3.423V C5:3.423V C6:3.423V C7:3.421V C8:3.425V C9:3.429V C10:3.430V C11:3.441V C12:3.443V C13:3.439V C14:3.443V C15:3.449V C16:3.439V
== Battery 2 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010136 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -10.351A [charge]  SOC 99.0%  Temp: 17°C 17°C 20°C
  Cell V: C1:3.427V C2:3.425V C3:3.433V C4:3.432V C5:3.431V C6:3.421V C7:3.429V C8:3.444V C9:3.435V C10:3.425V C11:3.426V C12:3.436V C13:3.431V C14:3.433V C15:3.435V C16:3.435V
== Battery 3 SOH 98.2% HW 0x1 SW 0xcc 1416719SLKOPG010166 Faults < 00 00 00 02 00 00 04 00 00 00 04 00 00 00 00 00 00 00>
  Current -1.964A [charge]  SOC 100.0%  Temp: 23°C 23°C 26°C
  Cell V: C1:3.390V C2:3.384V C3:3.390V C4:3.383V C5:3.394V C6:3.427V C7:3.385V C8:3.433V C9:3.436V C10:3.458V C11:3.436V C12:3.508V C13:3.456V C14:3.542V C15:3.550V C16:3.411V
== Battery 4 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010175 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -7.499A [charge]  SOC 100.0%  Temp: 19°C 19°C 20°C
  Cell V: C1:3.438V C2:3.445V C3:3.424V C4:3.422V C5:3.427V C6:3.425V C7:3.434V C8:3.436V C9:3.424V C10:3.428V C11:3.461V C12:3.443V C13:3.430V C14:3.438V C15:3.446V C16:3.440V
== Battery 5 SOH 98.6% HW 0x1 SW 0xcc 1416719SLKOPG010084 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -8.381A [charge]  SOC 99.0%  Temp: 20°C 20°C 21°C
  Cell V: C1:3.445V C2:3.429V C3:3.433V C4:3.431V C5:3.430V C6:3.448V C7:3.431V C8:3.438V C9:3.435V C10:3.427V C11:3.423V C12:3.428V C13:3.431V C14:3.440V C15:3.441V C16:3.451V
== Battery 6 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010153 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -2.056A [charge]  SOC 99.0%  Temp: 22°C 22°C 23°C
  Cell V: C1:3.393V C2:3.415V C3:3.430V C4:3.407V C5:3.419V C6:3.394V C7:3.396V C8:3.460V C9:3.388V C10:3.441V C11:3.523V C12:3.496V C13:3.461V C14:3.487V C15:3.415V C16:3.432V
== Battery 7 SOH 99.8% HW 0x1 SW 0xcc 1416330SLKOPG008100 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -11.974A [charge]  SOC 99.0%  Temp: 15°C 15°C 17°C
  Cell V: C1:3.424V C2:3.425V C3:3.428V C4:3.440V C5:3.427V C6:3.425V C7:3.430V C8:3.435V C9:3.436V C10:3.435V C11:3.425V C12:3.436V C13:3.435V C14:3.433V C15:3.433V C16:3.432V
== Battery 8 SOH 99.7% HW 0x1 SW 0xcc 1416719SLKOPG010159 Faults < 00 00 00 04 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -12.373A [charge]  SOC 100.0%  Temp: 20°C 21°C 23°C
  Cell V: C1:3.420V C2:3.430V C3:3.430V C4:3.434V C5:3.435V C6:3.432V C7:3.433V C8:3.439V C9:3.435V C10:3.437V C11:3.432V C12:3.426V C13:3.427V C14:3.438V C15:3.435V C16:3.436V

== Battery 1 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010208 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -12.299A [charge]  SOC 99.0%  Temp: 16°C 17°C 19°C
  Cell V: C1:3.415V C2:3.423V C3:3.421V C4:3.424V C5:3.423V C6:3.423V C7:3.421V C8:3.426V C9:3.430V C10:3.430V C11:3.441V C12:3.443V C13:3.439V C14:3.443V C15:3.449V C16:3.439V
== Battery 2 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010136 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -10.351A [charge]  SOC 99.0%  Temp: 17°C 17°C 20°C
  Cell V: C1:3.428V C2:3.425V C3:3.433V C4:3.432V C5:3.432V C6:3.421V C7:3.429V C8:3.443V C9:3.435V C10:3.425V C11:3.426V C12:3.436V C13:3.431V C14:3.433V C15:3.435V C16:3.435V
== Battery 3 SOH 98.2% HW 0x1 SW 0xcc 1416719SLKOPG010166 Faults < 00 00 00 02 00 00 04 00 00 00 04 00 00 00 00 00 00 00>
  Current -1.964A [charge]  SOC 100.0%  Temp: 23°C 23°C 26°C
  Cell V: C1:3.390V C2:3.384V C3:3.390V C4:3.382V C5:3.394V C6:3.427V C7:3.386V C8:3.433V C9:3.436V C10:3.459V C11:3.435V C12:3.508V C13:3.456V C14:3.542V C15:3.550V C16:3.411V
== Battery 4 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010175 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -7.499A [charge]  SOC 100.0%  Temp: 19°C 19°C 20°C
  Cell V: C1:3.438V C2:3.445V C3:3.424V C4:3.422V C5:3.427V C6:3.425V C7:3.434V C8:3.436V C9:3.424V C10:3.428V C11:3.462V C12:3.442V C13:3.430V C14:3.438V C15:3.447V C16:3.440V
== Battery 5 SOH 98.6% HW 0x1 SW 0xcc 1416719SLKOPG010084 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -8.381A [charge]  SOC 99.0%  Temp: 20°C 20°C 21°C
  Cell V: C1:3.446V C2:3.428V C3:3.434V C4:3.431V C5:3.430V C6:3.447V C7:3.431V C8:3.438V C9:3.435V C10:3.427V C11:3.423V C12:3.428V C13:3.431V C14:3.440V C15:3.440V C16:3.451V
== Battery 6 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010153 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -2.056A [charge]  SOC 99.0%  Temp: 22°C 22°C 23°C
  Cell V: C1:3.393V C2:3.416V C3:3.430V C4:3.407V C5:3.419V C6:3.394V C7:3.396V C8:3.460V C9:3.388V C10:3.441V C11:3.523V C12:3.496V C13:3.461V C14:3.487V C15:3.415V C16:3.431V
== Battery 7 SOH 99.8% HW 0x1 SW 0xcc 1416330SLKOPG008100 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -11.974A [charge]  SOC 99.0%  Temp: 15°C 15°C 17°C
  Cell V: C1:3.424V C2:3.425V C3:3.428V C4:3.440V C5:3.426V C6:3.425V C7:3.430V C8:3.434V C9:3.435V C10:3.436V C11:3.425V C12:3.437V C13:3.435V C14:3.433V C15:3.433V C16:3.432V
== Battery 8 SOH 99.7% HW 0x1 SW 0xcc 1416719SLKOPG010159 Faults < 00 00 00 04 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -12.373A [charge]  SOC 100.0%  Temp: 20°C 21°C 23°C
  Cell V: C1:3.421V C2:3.429V C3:3.430V C4:3.433V C5:3.435V C6:3.433V C7:3.433V C8:3.439V C9:3.435V C10:3.437V C11:3.432V C12:3.426V C13:3.427V C14:3.438V C15:3.435V C16:3.436V

== Battery 1 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010208 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -12.299A [charge]  SOC 100.0%  Temp: 16°C 17°C 19°C
  Cell V: C1:3.415V C2:3.423V C3:3.421V C4:3.424V C5:3.423V C6:3.423V C7:3.421V C8:3.426V C9:3.430V C10:3.430V C11:3.440V C12:3.442V C13:3.440V C14:3.442V C15:3.450V C16:3.440V
== Battery 2 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010136 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -10.774A [charge]  SOC 100.0%  Temp: 17°C 17°C 20°C
  Cell V: C1:3.428V C2:3.425V C3:3.433V C4:3.432V C5:3.432V C6:3.421V C7:3.429V C8:3.443V C9:3.435V C10:3.425V C11:3.427V C12:3.436V C13:3.432V C14:3.434V C15:3.435V C16:3.435V
== Battery 3 SOH 98.2% HW 0x1 SW 0xcc 1416719SLKOPG010166 Faults < 00 00 00 02 00 00 04 00 00 00 04 00 00 00 00 00 00 00>
  Current -1.964A [charge]  SOC 100.0%  Temp: 23°C 23°C 26°C
  Cell V: C1:3.390V C2:3.384V C3:3.389V C4:3.383V C5:3.394V C6:3.427V C7:3.386V C8:3.433V C9:3.436V C10:3.459V C11:3.435V C12:3.508V C13:3.456V C14:3.542V C15:3.551V C16:3.411V
== Battery 4 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010175 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -7.499A [charge]  SOC 100.0%  Temp: 19°C 19°C 20°C
  Cell V: C1:3.438V C2:3.445V C3:3.424V C4:3.422V C5:3.428V C6:3.426V C7:3.434V C8:3.436V C9:3.424V C10:3.428V C11:3.462V C12:3.442V C13:3.430V C14:3.438V C15:3.447V C16:3.440V
== Battery 5 SOH 98.6% HW 0x1 SW 0xcc 1416719SLKOPG010084 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -8.861A [charge]  SOC 100.0%  Temp: 20°C 20°C 21°C
  Cell V: C1:3.446V C2:3.428V C3:3.434V C4:3.431V C5:3.430V C6:3.447V C7:3.431V C8:3.438V C9:3.434V C10:3.428V C11:3.424V C12:3.429V C13:3.431V C14:3.441V C15:3.441V C16:3.451V
== Battery 6 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010153 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -2.056A [charge]  SOC 99.0%  Temp: 22°C 22°C 23°C
  Cell V: C1:3.393V C2:3.416V C3:3.430V C4:3.407V C5:3.419V C6:3.394V C7:3.396V C8:3.461V C9:3.387V C10:3.440V C11:3.523V C12:3.496V C13:3.461V C14:3.488V C15:3.415V C16:3.431V
== Battery 7 SOH 99.8% HW 0x1 SW 0xcc 1416330SLKOPG008100 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -11.974A [charge]  SOC 99.0%  Temp: 15°C 15°C 17°C
  Cell V: C1:3.425V C2:3.425V C3:3.429V C4:3.440V C5:3.426V C6:3.425V C7:3.430V C8:3.434V C9:3.435V C10:3.436V C11:3.425V C12:3.437V C13:3.435V C14:3.435V C15:3.433V C16:3.433V
== Battery 8 SOH 99.7% HW 0x1 SW 0xcc 1416719SLKOPG010159 Faults < 00 00 00 04 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -12.373A [charge]  SOC 100.0%  Temp: 20°C 21°C 23°C
  Cell V: C1:3.421V C2:3.429V C3:3.430V C4:3.433V C5:3.435V C6:3.433V C7:3.433V C8:3.440V C9:3.435V C10:3.438V C11:3.432V C12:3.427V C13:3.428V C14:3.438V C15:3.436V C16:3.436V





  f7 switches from 04 to 00 on charge (100% SOC already reached, see above):
== Battery 2 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010136 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -0.825A [charge]  SOC 100.0%  Temp: 17°C 18°C 20°C
  Cell V: C1:3.390V C2:3.388V C3:3.393V C4:3.392V C5:3.392V C6:3.387V C7:3.391V C8:3.400V C9:3.393V C10:3.390V C11:3.391V C12:3.394V C13:3.391V C14:3.392V C15:3.392V C16:3.393V
== Battery 2 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010136 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -0.825A [charge]  SOC 100.0%  Temp: 17°C 17°C 20°C
  Cell V: C1:3.389V C2:3.387V C3:3.392V C4:3.391V C5:3.392V C6:3.386V C7:3.390V C8:3.399V C9:3.393V C10:3.390V C11:3.391V C12:3.394V C13:3.391V C14:3.392V C15:3.392V C16:3.393V

== Battery 2 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010136 Faults < 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00>
  Current -0.807A [charge]  SOC 100.0%  Temp: 17°C 17°C 20°C
  Cell V: C1:3.389V C2:3.387V C3:3.392V C4:3.391V C5:3.392V C6:3.386V C7:3.390V C8:3.399V C9:3.393V C10:3.390V C11:3.391V C12:3.394V C13:3.390V C14:3.391V C15:3.392V C16:3.392V
== Battery 2 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010136 Faults < 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00>
  Current -0.807A [charge]  SOC 100.0%  Temp: 17°C 18°C 20°C
  Cell V: C1:3.389V C2:3.387V C3:3.392V C4:3.391V C5:3.391V C6:3.386V C7:3.390V C8:3.399V C9:3.392V C10:3.389V C11:3.389V C12:3.393V C13:3.390V C14:3.391V C15:3.392V C16:3.392V


== Battery 7 SOH 99.8% HW 0x1 SW 0xcc 1416330SLKOPG008100 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -3.732A [charge]  SOC 100.0%  Temp: 15°C 15°C 17°C
  Cell V: C1:3.390V C2:3.391V C3:3.393V C4:3.400V C5:3.393V C6:3.392V C7:3.394V C8:3.396V C9:3.395V C10:3.396V C11:3.392V C12:3.397V C13:3.397V C14:3.396V C15:3.396V C16:3.394V
== Battery 7 SOH 99.8% HW 0x1 SW 0xcc 1416330SLKOPG008100 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current -3.732A [charge]  SOC 100.0%  Temp: 15°C 15°C 17°C
  Cell V: C1:3.390V C2:3.391V C3:3.393V C4:3.400V C5:3.393V C6:3.392V C7:3.394V C8:3.396V C9:3.395V C10:3.396V C11:3.392V C12:3.397V C13:3.396V C14:3.396V C15:3.395V C16:3.394V

== Battery 7 SOH 99.8% HW 0x1 SW 0xcc 1416330SLKOPG008100 Faults < 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00>
  Current -3.456A [charge]  SOC 100.0%  Temp: 15°C 15°C 17°C
  Cell V: C1:3.390V C2:3.391V C3:3.393V C4:3.399V C5:3.392V C6:3.392V C7:3.393V C8:3.395V C9:3.395V C10:3.395V C11:3.392V C12:3.396V C13:3.396V C14:3.396V C15:3.395V C16:3.394V
== Battery 7 SOH 99.8% HW 0x1 SW 0xcc 1416330SLKOPG008100 Faults < 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00>
  Current -3.456A [charge]  SOC 100.0%  Temp: 15°C 15°C 17°C
  Cell V: C1:3.390V C2:3.391V C3:3.392V C4:3.399V C5:3.391V C6:3.391V C7:3.393V C8:3.395V C9:3.395V C10:3.395V C11:3.392V C12:3.396V C13:3.395V C14:3.395V C15:3.394V C16:3.392V





== Battery 1 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010208 Faults < 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00>
  Current 0.000A [discharge]  SOC 100.0%  Temp: 17°C 17°C 19°C
  Cell V: C1:3.356V C2:3.357V C3:3.357V C4:3.361V C5:3.359V C6:3.361V C7:3.358V C8:3.359V C9:3.359V C10:3.359V C11:3.362V C12:3.363V C13:3.362V C14:3.363V C15:3.363V C16:3.361V

== Battery 2 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010136 Faults < 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00>
  Current -0.292A [charge]  SOC 100.0%  Temp: 17°C 18°C 20°C
  Cell V: C1:3.360V C2:3.359V C3:3.361V C4:3.361V C5:3.361V C6:3.359V C7:3.360V C8:3.364V C9:3.361V C10:3.359V C11:3.360V C12:3.362V C13:3.361V C14:3.361V C15:3.361V C16:3.361V
== Battery 3 SOH 98.2% HW 0x1 SW 0xcc 1416719SLKOPG010166 Faults < 00 00 00 02 00 00 04 00 00 00 00 00 00 00 00 00 00 00>
  Current 1.214A [discharge]  SOC 100.0%  Temp: 23°C 23°C 26°C
  Cell V: C1:3.347V C2:3.347V C3:3.347V C4:3.347V C5:3.349V C6:3.361V C7:3.347V C8:3.362V C9:3.363V C10:3.372V C11:3.363V C12:3.389V C13:3.371V C14:3.399V C15:3.400V C16:3.353V
== Battery 4 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010175 Faults < 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00>
  Current 0.442A [discharge]  SOC 100.0%  Temp: 19°C 19°C 20°C
  Cell V: C1:3.364V C2:3.365V C3:3.360V C4:3.359V C5:3.361V C6:3.360V C7:3.362V C8:3.363V C9:3.358V C10:3.360V C11:3.370V C12:3.364V C13:3.362V C14:3.364V C15:3.366V C16:3.365V
== Battery 5 SOH 98.6% HW 0x1 SW 0xcc 1416719SLKOPG010084 Faults < 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00>
  Current 0.386A [discharge]  SOC 100.0%  Temp: 20°C 20°C 21°C
  Cell V: C1:3.366V C2:3.361V C3:3.363V C4:3.362V C5:3.363V C6:3.366V C7:3.363V C8:3.365V C9:3.361V C10:3.362V C11:3.362V C12:3.362V C13:3.363V C14:3.364V C15:3.364V C16:3.364V
== Battery 6 SOH 98.5% HW 0x1 SW 0xcc 1416719SLKOPG010153 Faults < 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00>
  Current 1.214A [discharge]  SOC 100.0%  Temp: 22°C 22°C 23°C
  Cell V: C1:3.346V C2:3.353V C3:3.359V C4:3.350V C5:3.354V C6:3.347V C7:3.347V C8:3.369V C9:3.345V C10:3.364V C11:3.392V C12:3.383V C13:3.371V C14:3.379V C15:3.354V C16:3.360V
== Battery 7 SOH 99.8% HW 0x1 SW 0xcc 1416330SLKOPG008100 Faults < 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00>
  Current 0.000A [discharge]  SOC 100.0%  Temp: 15°C 15°C 18°C
  Cell V: C1:3.359V C2:3.359V C3:3.360V C4:3.361V C5:3.360V C6:3.359V C7:3.360V C8:3.360V C9:3.360V C10:3.360V C11:3.360V C12:3.360V C13:3.360V C14:3.360V C15:3.360V C16:3.359V
== Battery 8 SOH 99.7% HW 0x1 SW 0xcc 1416719SLKOPG010159 Faults < 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00>
  Current 0.588A [discharge]  SOC 100.0%  Temp: 20°C 21°C 24°C
  Cell V: C1:3.358V C2:3.362V C3:3.363V C4:3.363V C5:3.363V C6:3.363V C7:3.364V C8:3.364V C9:3.364V C10:3.364V C11:3.362V C12:3.360V C13:3.360V C14:3.364V C15:3.364V C16:3.362V

*/


      /*
        Commonly seen in other related protocols:
          single overvoltage
          single undervoltage
          group overvoltage
          group undervoltage

          charge overtemp
          charge undertemp
          discharge overtemp
          discharge undertemp

          charge overcurrent
          discharge overcurrent

          short circuit



          See:
            https://www.lithiumbatterypcb.com/wp-content/uploads/2023/05/CANBUS-communication-protocol.pdf
            
       */

      struct {
         uint8_t f1;
         uint8_t f2;
         uint8_t f3;
         uint8_t f4; /* always seems to be 0x02 on slaves, 0x04 on masters */
         uint8_t f5;
         uint8_t f6;
      } i0;
      struct {
         uint8_t f7; /* OV2: 0x04, UV2 0x40 */
         uint8_t f8;
         uint8_t f9;
         uint8_t fa;
         uint8_t fb;
         uint8_t fc;
      } i1;
      struct {
         uint8_t fd;
         uint8_t fe;
         uint8_t ff;
         uint8_t f10;
         uint8_t f11;
         uint8_t f12;
      } i2;
   };
   uint8_t csum; /* checksum */
} __attribute__((packed));


#define MSGID_E1E6       0x18e1e600
#define MSGID_E1E6_MASK  0x1fffff00
struct e1e6 {
   uint8_t data[8];
} __attribute__((packed));


/* priority 6, EDP 0, DP 0, PDU format 0xe2, PDU specific 0xe1 */
/* Only sent by master */
#define MSGID_BATTERIES       0x18e2e100
#define MSGID_BATTERIES_MASK  0x1fffff00

struct batteries {
   uint16_t battery_mask; /* bitmask of batteries in system */
   uint16_t unknown1; /* 0x8855 */
   uint16_t unknown2; /* 0x0000 */
   uint16_t unknown3; /* 0x8822 */
} __attribute__((packed));

#endif /* !_ENDURENERGY_H */