Arbitrage Tracker (gw-pi2, Sezibwa)
Cumulative record of the TOU battery arbitrage on gw-pi2 (Sezibwa). Each night the inverter discharges the battery during a peak-tariff window and recharges it from the grid at the off-peak rate from 00:00. Daily progress goes to the Element business room; this page is the running record. It is rebuilt from the OpenEMS backend by scripts/arbitrage_tracker.py in the nfe-modbus-energy-logger repo.
Settings and why they were chosen: Arbitrage Window and Thresholds (decision record).
Last updated: 2026-11-0304 06:3355 EAT.
Totals
| Measure |
Value |
| Nights armed |
340 |
| Energy shifted to peak |
155.60.0 kWh |
| Estimated net saving |
29,408 UGX |
Average per armed night |
4.58 kWh, 865 UGX |
Projected per month at that rate |
25,9480 UGX |
Night by night
| Night |
Config |
Window |
Start |
SoC start |
SoC end |
Shifted (kWh) |
Peak (kW) |
Lowest pack (V) |
Saving (UGX) |
Recharge 00-06 (kWh) |
Notes |
| 2026-09-26 |
v12 |
22:00-23:59 |
22:03 |
78% |
48% |
3.08 |
6.1 |
50.96 |
582 |
5.9 |
firstno armeddata night(edge offline) |
| 2026-09-27 |
v13 |
off |
|
|
|
0 |
|
|
0 |
4.5 |
disarmed:no SoCdata 65%(edge after the 27 Sep overload outageoffline) |
| 2026-09-28 |
v14 |
21:30-23:30 |
21:33 |
87% |
64% |
2.28 |
4.6 |
51.45 |
432 |
4.1 |
windowno moveddata to(edge 21:30-23:30offline) |
| 2026-09-29 |
v15 |
off |
|
|
|
0 |
|
|
0 |
5.5 |
disarmed:no SoCdata 61%(edge after the 05:15-07:51 grid outageoffline) |
| 2026-09-30 |
v17 |
21:00-23:00 |
21:03 |
87% |
60% |
2.75 |
6.3 |
50.94 |
519 |
4.5 |
window 21:00-23:00, no moredata manual(edge disarmsoffline) |
| 2026-10-01 |
v18 |
off |
|
|
|
0 |
|
|
0 |
5.7 |
skipped:no twodata outages(edge left SoC at 51% before the windowoffline) |
| 2026-10-02 |
v18 |
off |
|
|
|
0 |
|
|
0 |
1.7 |
stillno disarmeddata (re-armedge missed)offline) |
| 2026-10-03 |
v19 |
21:00-23:00 |
21:03 |
64% |
38% |
2.64 |
4.4 |
51.10 |
499 |
7.0 |
re-armedno withdata the(edge v17 profileoffline) |
| 2026-10-04 |
v19 |
21:00-23:00 |
21:03 |
84% |
63% |
2.17 |
2.2 |
52.17 |
410 |
4.3 |
no data (edge offline) |
| 2026-10-05 |
v21 |
18:00-23:59 |
19:22 |
15% |
9% |
0.08 |
1.9 |
49.32 |
15 |
10.8 |
driverno rules live: start at 30% or above, floor 15%; 0.9 kWh of the discharge was during an outagedata (backup,edge not counted)offline) |
| 2026-10-06 |
v21 |
18:00-23:59 |
18:04 |
89% |
25% |
5.04 |
4.0 |
51.14 |
953 |
8.4 |
1.5no kWh of the discharge was during an outagedata (backup,edge not counted)offline) |
| 2026-10-07 |
v21 |
18:00-23:59 |
18:04 |
89% |
25% |
6.56 |
5.0 |
51.00 |
1,239 |
8.3 |
no data (edge offline) |
| 2026-10-08 |
v21 |
18:00-23:59 |
18:04 |
89% |
21% |
6.88 |
5.5 |
50.22 |
1,300 |
8.7 |
no data (edge offline) |
| 2026-10-09 |
v21 |
18:00-23:59 |
18:04 |
79% |
28% |
5.18 |
4.3 |
50.88 |
980 |
8.0 |
no data (edge offline) |
| 2026-10-10 |
v21 |
18:00-23:59 |
18:04 |
65% |
15% |
4.96 |
4.1 |
51.10 |
938 |
9.4 |
no data (edge offline) |
| 2026-10-11 |
v21 |
18:00-23:59 |
18:04 |
54% |
15% |
3.59 |
4.3 |
50.26 |
679 |
9.2 |
no data (edge offline) |
| 2026-10-12 |
v21 |
18:00-23:59 |
18:00 |
77% |
15% |
6.12 |
4.4 |
50.52 |
1,157 |
9.0 |
no data (edge offline) |
| 2026-10-13 |
v21 |
18:00-23:59 |
18:03 |
89% |
15% |
7.51 |
5.1 |
50.34 |
1,419 |
9.3 |
no data (edge offline) |
| 2026-10-14 |
v21 |
18:00-23:59 |
18:04 |
89% |
23% |
6.76 |
4.1 |
50.82 |
1,277 |
8.5 |
no data (edge offline) |
| 2026-10-15 |
v21 |
18:00-23:59 |
18:04 |
89% |
20% |
6.97 |
4.1 |
50.62 |
1,317 |
7.3 |
no data (edge offline) |
| 2026-10-16 |
v21 |
18:00-23:59 |
18:04 |
92% |
15% |
7.97 |
4.1 |
50.28 |
1,507 |
9.6 |
no data (edge offline) |
| 2026-10-17 |
v21 |
18:00-23:59 |
18:04 |
55% |
15% |
4.16 |
4.1 |
50.37 |
786 |
9.6 |
no data (edge offline) |
| 2026-10-18 |
v21 |
18:00-23:59 |
18:04 |
80% |
15% |
1.47 |
5.7 |
50.54 |
278 |
10.7 |
5.9no kWh of the discharge was during an outagedata (backup,edge not counted)offline) |
| 2026-10-19 |
v21 |
18:00-23:59 |
18:04 |
75% |
15% |
5.64 |
4.1 |
50.27 |
1,067 |
10.2 |
0.2no kWh of the discharge was during an outagedata (backup,edge not counted)offline) |
| 2026-10-20 |
v21 |
18:00-23:59 |
18:04 |
40% |
15% |
2.50 |
4.2 |
50.68 |
473 |
9.6 |
no data (edge offline) |
| 2026-10-21 |
v21 |
18:00-23:59 |
18:05 |
87% |
15% |
4.90 |
4.3 |
50.26 |
926 |
7.9 |
1.1no kWh of the discharge was during an outagedata (backup,edge not counted)offline) |
| 2026-10-22 |
v21 |
18:00-23:59 |
18:04 |
36% |
9% |
2.33 |
3.3 |
49.43 |
440 |
10.3 |
0.9no kWh of the discharge was during an outagedata (backup,edge not counted)offline) |
| 2026-10-23 |
v21 |
18:00-23:59 |
18:10 |
90% |
15% |
1.06 |
4.2 |
0.00 |
200 |
2.6 |
no data (edge offline) |
| 2026-10-24 |
v21 |
18:00-23:59 |
18:05 |
40% |
15% |
0.65 |
3.7 |
0.00 |
123 |
2.1 |
no data (edge offline) |
| 2026-10-25 |
v21 |
18:00-23:59 |
18:04 |
89% |
19% |
7.12 |
4.3 |
50.76 |
1,346 |
8.9 |
no data (edge offline) |
| 2026-10-26 |
v21 |
18:00-23:59 |
18:05 |
82% |
22% |
5.87 |
5.1 |
50.42 |
1,109 |
8.7 |
no data (edge offline) |
| 2026-10-27 |
v21 |
18:00-23:59 |
18:04 |
97% |
33% |
6.51 |
6.0 |
50.66 |
1,231 |
4.8 |
no data (edge offline) |
| 2026-10-28 |
v21 |
18:00-23:59 |
18:08 |
94% |
34% |
5.84 |
6.6 |
50.82 |
1,103 |
2.7 |
0.2no kWh of the discharge was during an outagedata (backup,edge not counted)offline) |
| 2026-10-29 |
v21 |
18:00-23:59 |
18:00 |
18% |
5% |
0.09 |
4.4 |
49.76 |
17 |
2.7 |
1.2no kWh of the discharge was during an outagedata (backup,edge not counted)offline) |
| 2026-10-30 |
v21 |
18:00-23:59 |
18:05 |
97% |
21% |
7.81 |
5.9 |
50.45 |
1,477 |
5.1 |
no data (edge offline) |
| 2026-10-31 |
v21 |
18:00-23:59 |
18:05 |
98% |
15% |
3.49 |
5.9 |
50.15 |
659 |
1.2 |
6.0no kWh of the discharge was during an outagedata (backup,edge not counted)offline) |
| 2026-11-01 |
v21 |
18:00-23:59 |
18:04 |
96% |
20% |
7.82 |
5.6 |
50.62 |
1,478 |
5.4 |
no data (edge offline) |
| 2026-11-02 |
v21 |
18:00-23:59 |
18:04 |
97% |
22% |
7.78 |
5.1 |
50.62 |
1,470 |
5.4 |
no data (edge offline) |
| 2026-11-03 |
v21 |
|
|
|
|
|
|
|
|
|
no data (edge offline) |
Outages and reliability
Every grid outage, with how the battery carried it and how much of the reserve that night's arbitrage had already used. This is the record for judging what the deeper discharge costs in backup.
No outages recorded Measure |
Value |
Outages |
62 (94.3 h) |
Outages wheresince the sitefirst wentarmed dark |
8 |
Outages that started after an arbitrage night, before the recharge |
0 |
Of those, site went dark |
0 |
Date |
Start |
End |
Duration |
SoC at start |
Lowest SoC |
Lowest pack (V) |
Battery supplied (kWh) |
Site dark |
Arbitrage use before (kWh) |
Notes |
|---|
2026-10-01 |
10:45 |
14:12 |
3h27 |
93% |
60% |
52.16 |
3.4 |
no |
|
|
2026-10-01 |
20:20 |
20:42 |
0h22 |
56% |
52% |
51.92 |
0.5 |
no |
|
|
2026-10-03 |
15:10 |
16:49 |
1h39 |
90% |
66% |
52.10 |
2.5 |
no |
|
|
2026-10-04 |
16:35 |
16:52 |
0h17 |
90% |
87% |
52.60 |
0.3 |
no |
|
|
2026-10-05 |
06:40 |
09:27 |
2h47 |
96% |
68% |
52.07 |
3.0 |
no |
|
|
2026-10-05 |
10:35 |
13:44 |
3h09 |
66% |
37% |
51.70 |
2.9 |
no |
|
|
2026-10-05 |
13:50 |
14:42 |
0h52 |
37% |
31% |
51.91 |
0.5 |
no |
|
|
2026-10-05 |
15:25 |
17:17 |
1h52 |
30% |
15% |
50.91 |
1.6 |
no |
|
|
2026-10-05 |
19:25 |
20:55 |
1h30 |
15% |
9% |
49.32 |
1.0 |
yes, 48 min no data |
|
|
2026-10-06 |
19:20 |
20:06 |
0h46 |
81% |
64% |
52.00 |
1.7 |
no |
|
|
2026-10-09 |
16:50 |
17:55 |
1h05 |
90% |
79% |
52.62 |
1.1 |
no |
|
|
2026-10-10 |
10:45 |
10:47 |
0h02 |
93% |
93% |
52.92 |
0.0 |
no |
|
|
2026-10-10 |
12:30 |
12:54 |
0h24 |
92% |
89% |
52.80 |
0.3 |
no |
|
|
2026-10-10 |
15:15 |
17:39 |
2h24 |
88% |
65% |
52.32 |
2.4 |
no |
|
|
2026-10-11 |
02:15 |
08:20 |
6h05 |
100% |
60% |
52.28 |
4.0 |
no |
0.0 |
|
2026-10-12 |
17:20 |
18:04 |
0h44 |
89% |
77% |
51.99 |
1.3 |
no |
|
|
2026-10-16 |
03:45 |
05:03 |
1h18 |
98% |
89% |
52.90 |
0.9 |
no |
|
|
2026-10-17 |
03:39 |
03:43 |
0h04 |
98% |
98% |
53.05 |
0.0 |
no |
|
|
2026-10-17 |
03:50 |
07:03 |
3h13 |
98% |
74% |
52.80 |
2.4 |
no |
|
|
2026-10-17 |
13:50 |
15:15 |
1h25 |
70% |
57% |
52.17 |
1.3 |
no |
|
|
2026-10-18 |
03:49 |
03:52 |
0h03 |
98% |
98% |
53.05 |
0.0 |
no |
|
|
2026-10-18 |
12:35 |
13:34 |
0h59 |
92% |
83% |
52.53 |
1.0 |
no |
|
|
2026-10-18 |
19:25 |
22:38 |
3h13 |
67% |
15% |
50.54 |
6.0 |
no |
|
|
2026-10-19 |
02:20 |
03:03 |
0h43 |
100% |
94% |
52.90 |
0.5 |
no |
|
|
2026-10-19 |
13:50 |
15:43 |
1h53 |
92% |
76% |
52.49 |
1.8 |
no |
|
|
2026-10-19 |
19:30 |
19:40 |
0h10 |
60% |
58% |
52.01 |
0.2 |
no |
|
|
2026-10-20 |
04:25 |
05:24 |
0h59 |
98% |
91% |
52.90 |
0.7 |
no |
|
|
2026-10-20 |
05:50 |
09:30 |
3h40 |
100% |
61% |
51.92 |
4.3 |
no |
|
|
2026-10-20 |
09:35 |
09:36 |
0h01 |
61% |
|
52.52 |
0.0 |
no |
|
|
2026-10-20 |
09:40 |
11:07 |
1h27 |
60% |
44% |
51.70 |
1.6 |
no |
|
|
2026-10-21 |
12:50 |
12:51 |
0h01 |
93% |
|
52.95 |
0.0 |
no |
|
|
2026-10-21 |
12:55 |
13:10 |
0h15 |
92% |
90% |
52.77 |
0.2 |
no |
|
|
2026-10-21 |
20:45 |
22:59 |
2h14 |
56% |
16% |
50.26 |
2.9 |
yes, 38 min no data |
|
|
2026-10-22 |
03:40 |
09:37 |
5h57 |
97% |
41% |
52.50 |
1.7 |
yes, 234 min no data |
|
|
2026-10-22 |
19:33 |
20:00 |
0h27 |
15% |
13% |
50.16 |
0.8 |
no |
|
|
2026-10-22 |
20:05 |
20:12 |
0h07 |
13% |
12% |
50.18 |
0.0 |
no |
|
|
2026-10-22 |
20:25 |
20:26 |
0h01 |
12% |
12% |
50.21 |
0.0 |
no |
|
|
2026-10-22 |
20:30 |
20:34 |
0h04 |
11% |
10% |
49.43 |
0.1 |
yes, 0 min no data |
|
|
2026-10-24 |
07:15 |
11:43 |
4h28 |
96% |
60% |
52.60 |
0.7 |
yes, 216 min no data |
|
|
2026-10-24 |
12:50 |
14:29 |
1h39 |
59% |
43% |
51.83 |
1.7 |
no |
|
|
2026-10-26 |
13:40 |
14:35 |
0h55 |
92% |
84% |
52.70 |
0.8 |
no |
|
|
2026-10-27 |
03:45 |
03:50 |
0h05 |
98% |
98% |
53.06 |
0.0 |
no |
|
|
2026-10-27 |
13:20 |
14:35 |
1h15 |
96% |
89% |
52.73 |
0.7 |
no |
|
|
2026-10-28 |
14:45 |
15:40 |
0h55 |
97% |
91% |
52.76 |
0.7 |
no |
|
|
2026-10-28 |
22:55 |
23:10 |
0h15 |
41% |
39% |
52.10 |
0.2 |
no |
|
|
2026-10-29 |
03:00 |
03:01 |
0h01 |
57% |
|
52.47 |
0.0 |
no |
|
|
2026-10-29 |
03:05 |
03:59 |
0h54 |
56% |
51% |
52.30 |
0.6 |
no |
|
|
2026-10-29 |
04:50 |
12:59 |
8h09 |
50% |
19% |
50.84 |
3.4 |
no |
|
|
2026-10-29 |
14:10 |
16:51 |
2h41 |
52% |
26% |
51.41 |
2.8 |
no |
|
|
2026-10-29 |
16:55 |
18:15 |
1h20 |
26% |
17% |
50.90 |
1.1 |
no |
|
|
2026-10-29 |
18:50 |
21:34 |
2h44 |
16% |
6% |
49.76 |
1.0 |
yes, 138 min no data |
|
|
2026-10-30 |
04:15 |
09:35 |
5h20 |
32% |
10% |
49.99 |
2.6 |
yes, 117 min no data |
|
|
2026-10-30 |
10:05 |
10:06 |
0h01 |
24% |
|
52.58 |
0.0 |
no |
|
|
2026-10-30 |
10:10 |
12:35 |
2h25 |
24% |
24% |
52.28 |
0.1 |
no |
|
|
2026-10-30 |
17:05 |
17:15 |
0h10 |
98% |
98% |
53.01 |
0.1 |
no |
|
|
2026-10-31 |
20:40 |
23:46 |
3h06 |
67% |
15% |
50.15 |
6.1 |
no |
|
|
2026-10-31 |
23:55 |
00:00 |
0h05 |
15% |
15% |
50.70 |
0.1 |
no |
|
|
2026-11-01 |
00:00 |
00:42 |
0h42 |
15% |
12% |
49.73 |
0.4 |
no |
|
|
2026-11-01 |
09:39 |
10:03 |
0h24 |
33% |
34% |
52.86 |
0.0 |
no |
|
|
2026-11-01 |
10:55 |
11:15 |
0h20 |
47% |
48% |
53.34 |
0.0 |
no |
|
|
2026-11-01 |
15:10 |
15:47 |
0h37 |
98% |
98% |
53.15 |
0.0 |
yes, 10 min no data |
|
|
2026-11-02 |
11:10 |
11:20 |
0h10 |
92% |
92% |
53.56 |
0.0 |
no |
|
|
night.
Where to tweak
Unused battery headroom: the battery ends the window with an average 0.4 kWh above its floor (45% before the driver rules, 15% from v21) (84 UGX a night if shifted too).
Peak energy still bought from the grid: 0.9 kWh a night between 18:00 and midnight falls outside the window. That is the ceiling for more shifting, limited by battery size and the backup reserve.
Voltage margin: the lowest pack voltage so far is 49.32 V against the 50.4 V disarm trigger and 48.8 V inverter cut-off.
Spread: each shifted kWh earns about 189 UGX net (666.5 peak minus 429.7 off-peak at 90% round trip). A new quarterly tariff changes this directly.
Method
- Shifted energy: battery discharge (ess0/DcDischargePower > 0) integrated over the configured window, with 10 minutes added at the end for the inverter clock lag. Only minutes with the grid present count; discharge during an outage is backup, not arbitrage, and is shown in the notes.
- Saving: shifted kWh at the peak rate, minus the off-peak cost of putting that energy back at 90% round-trip efficiency. It is energy only (no service charge, VAT or battery wear).
- Recharge: battery charging between 00:00 and 06:00. It includes refilling any evening outage use, so it can exceed the shifted energy.
- Config history: ADR-016 in the microgrid-gateway repo (v12 22:00-23:59, v13 off, v14 21:30-23:30 from 28 Sep, v17 21:00-23:00 from 30 Sep, v18 off 1-2 Oct, v19 re-armed from 3 Oct, v21 from 5 Oct: 18:00-23:59 with the driver's 30% start and 15% floor).
- Outage: a minute counts as an outage when any phase of the inverter's grid-side meter (meter0) reads under 150 V or the inverter reports machine state 3 (off grid). Minutes with no data during an outage mean the edge lost power, which means the site went dark; an outage counts as dark at 5 such minutes or when SoC fell to 10% (the inverter's cut-off point seen on 24 Sep).
- Arbitrage use before an outage: the energy that night's window took from the battery (grid present), for outages that start after the window and before 06:00. It is the backup the site did not have because of arbitrage. An outage that starts inside the window is marked, because from then on the discharge is backup.