I ran a Wi-Fi router from a power bank until it died. Twice.
Two overnight tests, one travel router, a USB power meter, five-second telemetry and a camera teaching itself to read a very confused battery display.
I wanted a boring answer to a boring question: how long will my travel router run from this power bank?
The router is WildWanderer, my GL.iNet AXT1800. The battery is a UGREEN Nexode rated at 25,000 mAh and 90 Wh. On paper, the maths looked easy. Measure the router's draw, divide the battery capacity by it, shave something off for conversion losses, and go to bed.
That is not what happened.
I ran the battery down twice over two nights. The first test gave me a suspicious result. The second involved a USB power meter, five-second router telemetry, Discord alerts, a camera watching the display, and eventually OCR checking that camera every five minutes. By the end I had a much better runtime figure and much less faith in the percentage on the front of the battery.
The rig
The physical setup for the second test was simple:
UGREEN power bank
-> FNIRSI FNB58 USB power meter
-> GL.iNet AXT1800 travel router

The FNB58 measured voltage, current and power downstream of the battery. That matters: it tells me what reached the router, after the power bank had converted its internal cell voltage to USB output.
I did not leave the router sitting at an unrealistically light idle. I pinned a yes process to one CPU core and kept it at about 99% of that core while the router carried on doing its normal work. The load settled around 4.4 W.
GOLIATH watched WildWanderer every five seconds using both ping and SSH. The SSH sample collected uptime, load, temperature, upstream Wi-Fi signal, traffic counters and available memory. Either ping or SSH counted as alive. Both had to fail twelve times in a row, roughly one minute, before the test was declared finished.
That delay was deliberate. Wi-Fi has moods. A missed packet is not a dead battery.
The monitor also checked its own gateway and the wider internet before blaming the power bank, wrote everything to CSV, and sent status messages to me on Discord. The final runtime was bracketed between the last successful contact and the first failed sample instead of pretending I knew the shutdown instant to the millisecond.
Test one: useful, but messy
The first run started at 100% and lasted 14 hours, 25 minutes.
It was not a clean laboratory run. I spent the first hour with a lighter router load. Worse, I pressed the button on the power bank while checking its display and managed to interrupt the output. WildWanderer rebooted, the monitor quite reasonably announced that the test was over, and I had to send a correction and resume it.
The actual terminal outage came much later. About seventy minutes before that outage, the display still showed 89%.
That number made no sense. Either the display was wildly optimistic, the output had stopped for some reason other than empty cells, or I had built a bad test.
So I did it again.
Test two: meter, camera and far too many logs
Before the second run I used the only display-calibration procedure I could find for the UGREEN bank. I put the FNB58 inline, started the router load almost immediately, and logged electrical data about once a second.
The result was 15 hours, 17 minutes. That is only 51 minutes longer than the interrupted first run, despite the calibration.

The power trace is almost boring, which is exactly what I wanted. The router sat close to 4.4 W for most of the night. There was one 55-second spell where the router stopped answering, but meter power remained normal and it recovered before the one-minute cutoff rule. That was a network event, not a power failure.
The end was different. In the minute before shutdown, the router was still drawing about 4.37 W. Then the USB output fell off a cliff. The first sub-1 W sample arrived at about 07:25:31, followed by voltage collapsing from around 5.2 V toward zero.

There was no long, graceful fade. It was working, and then it wasn't.
I taught a camera to read the battery
Halfway through this I realised I already had a useful instrument pointed at the test: a Wyze Pan Camera.
I set up an authenticated Wyze bridge on docktopus and had GOLIATH fetch camera frames. Every five minutes it took three frames, cropped the battery display, tried several contrast treatments through Tesseract, and accepted a percentage only when multiple OCR passes agreed. It also rejected readings that went upward or dropped implausibly fast.
Only percentage changes were saved. That produced a strange little time series:

The display moved slowly at first, then much faster near the end:
- 96% at 01:47
- 93% at 04:00
- 90% at 05:35
- 86% at 06:30
- 83% at 06:50
- 82% at 07:20
Five minutes after that last image, the power output died.
When I got up later in the morning, I pressed the power-bank button. It showed 0% and still produced no power.
That follow-up matters. My first reaction was that the bank must have shut its output off while most of the cells were still charged. The later 0% reading makes an ordinary low-cell cutoff much more plausible. The real problem is the display: it went from showing 82% shortly before death to showing 0% sometime after shutdown. I did not catch the transition.

Whatever algorithm is behind that percentage, I would not use it to decide whether this router can survive another hour.
A correction I found while writing the report
The live logger initially reported 70.598 Wh delivered. That figure appeared in my first completion message.
While building the final charts I found 1,983 places where timestamps moved backward in the append-only meter CSV after the logger had been restarted and its history restored. The live cumulative calculation had integrated overlapping time more than once.
I went back to the raw evidence, sorted all 59,611 valid samples chronologically, and integrated each real interval once. The corrected result is:
- 67.442 Wh measured
- 0.058 Wh estimated for the documented 47.8-second logging gap
- 67.501 Wh corrected total
- 4.417 W corrected average power
The correction does not change the runtime or the cutoff. It does change the energy number, and pretending otherwise would defeat the point of instrumenting the test in the first place.
The 90 Wh printed on the battery is stored cell energy. My 67.5 Wh is measured at the USB output, after conversion losses, so the simple 75% ratio is not a direct health score for the cells.
What I would actually plan around
A perfect 90 Wh source feeding a 4.417 W load would last a little over twenty hours. Real hardware never gets the perfect figure, but these two runs landed at fourteen and fifteen hours.
For WildWanderer, I am going to plan around 14 hours of unattended runtime and treat anything beyond that as reserve. I will not trust the front-panel percentage as a forecast.
The next useful experiment is not another identical overnight run. I want to press the battery button immediately at cutoff, on camera, rather than discovering the 0% reading hours later. I also want to try another output port, another cable, and eventually a stable electronic load so I can test the bank without the router in the loop.
For now, the answer to my original boring question is finally boring enough:
WildWanderer gets about fourteen dependable hours from this power bank.