Inspiration
In a heat wave, a home battery that stops reporting looks exactly like a dead one. Operators can't tell the difference, so they play safe and cut the whole street. We asked a simple question: what if you could just knock? A silent battery might only have lost its internet. Cutting the street over it means families in the dark, including people on medical equipment.
What it does
KNOCK is decision support for home-battery fleet operators. When a battery goes silent, KNOCK sends it a tiny ±0.5 kW power nudge in a code unique to that battery. It then listens for the answer on the street's existing transformer meter. That tells apart mute, tripped, broken and rogue batteries, so KNOCK can pick the gentlest fix: keep using it, restart it, send one technician, or hold it with a person's approval.
In our simulated LA heat wave, the usual way left 15 homes dark and cut off 6 medical homes. With KNOCK, both numbers were 0.
How we built it
Each battery $i$ gets a Walsh code $c_k \in {-1, +1}$ of 16 chips, 10 s each. We remove the trend from the transformer reading $d_k$ and correlate it with the code:
$$ r_i = -\frac{1}{A\,n}\sum_{k=1}^{n} c_k\, d_k $$
If the signal-to-noise ratio is under 2.5, KNOCK knocks again. A Bayesian posterior then picks the diagnosis:
$$ P(s \mid \text{evidence}) \propto P(\text{evidence} \mid s)\,P(s), \quad s \in {\text{healthy, mute, tripped, broken, rogue}} $$
On top of that physics core sits an advisory AI layer:
- an online least-squares load model for each home;
- a gradient-boosted classifier that gives a second opinion (97% accurate when it agrees with physics);
- a statistical test that catches bad firmware batches;
- a 45-minute overload forecast;
- a read-only IBM watsonx Granite copilot.
The stack is Python, FastAPI, numpy, scikit-learn and a live WebSocket console. We built it with IBM Bob and deployed it on Render.
Challenges we faced
- Noise broke our knocks. White-noise loads drowned out the code, so we switched to AR(1) load noise and added the SNR gate.
- Our fixes caused new problems. Pre-charging blew fuses, and reconnecting homes all at once caused surges. Headroom-aware charging and staggered reconnects fixed them.
- The AI kept trying to act on its own. We made it advisory only. When physics and AI disagree, a person decides.
- Security. A shipped model file failed on another laptop, and pickle files can run code. Now each install trains and signs its own model, and we added roles, a two-person rule and a tamper-evident audit log.
What we learned
Physics makes a better witness than an AI guess, because a hacked battery can fake its messages but not the meter on the street. Simple, explainable rules with a human in the loop earn more trust than a black box.
Quick start
| Website | https://knock-zenith.onrender.com |
| Best browser | Chrome, Edge or Safari on a laptop |
Sign-in details
$$ \begin{array}{ll} \textbf{User name:} & \texttt{supervisor} \ \textbf{Password:} & \texttt{cqsm5Pw-YSSnAVM-km1zdNk} \end{array} $$
- Open the website. A KNOCK sign-in box appears.
- Type the user name and password above and press Sign in.
- You land on Live operations. Press Play in the top bar.
- Watch the two neighborhoods for one minute: the left one is the usual way, the right one is KNOCK.
Built With
- claude
- css3
- fastapi
- git
- github
- html5
- ibm-bob
- ibm-granite
- ibm-watsonx
- javascript
- numpy
- pydantic
- pytest
- python
- render
- scikit-learn
- uvicorn
- websockets
Log in or sign up for Devpost to join the conversation.