Standby generator monitor
Start a standby generator from your phone, and know that it actually started.
- Role
- App, backend, firmware and hardware design
- Stack
- Expo · React Native · Firebase · ESP32 firmware (PlatformIO)
- Status
- App and firmware complete, on-site install next
The real app, with made-up data and placeholder names.




The problem
An electrical contractor installs whole-house standby generators. The manufacturer's own Wi-Fi feature only works locally, so neither the homeowner nor the contractor can tell from away whether a unit is healthy, or start it ahead of a storm.
The contractor wanted a branded, bilingual app for their customers, a staff view of every generator they look after, and hardware their own electrician could install.
What I built
How it works
The device and the apps never talk to each other directly. Everything goes through Firestore, and its security rules decide who may write what: staff, customers, or the device's own identity.
Status and start / stop
- 2-wire run signal
- Alarm, oil, temperature and frequency faults
- Battery voltage
- Hold-based run relay
- Debounced fault inputs
- Polls for commands
- Device state and history
- Commands
- Alerts and audit log
- Live status
- Start / stop (staff only)
- History and alerts
Alerts, with no cloud functions
- Heartbeats
- Pending commands
- Silent devices
- Command timeouts
- Threshold alerts, de-duplicated
- Message in the customer's language
Key decisions
- Done means the engine is runningA command moves from pending to acknowledged to completed only after run detection confirms the change. If it never does, the sweep times it out and raises an alert instead of showing a false success.
- Read the manufacturer's manual before buying partsThat turned up a documented 2-wire start/stop input and discrete fault outputs on the controller harness. The firmware was redesigned around that hold-based run signal instead of guessing at button presses.
- Free tier on purposeNo Cloud Functions: a small one-shot script run every minute handles offline detection, command timeouts, threshold alerts and push. Alert IDs are deterministic, so re-running it never sends a duplicate.
- A missing sensor is missing, not zeroEvery reading except run state is optional. A basic install shows only what it can really measure, and other generator brands fit the same schema without code changes.
- Test the rules with the queries the app really runsA rule that passed every single-document test failed for the list query a screen used. Rule tests now cover the exact query and batch shapes the app sends.
Where it stands
Today
App, backend and firmware are complete, and the firmware builds against the real ESP32 toolchain. Wi-Fi setup, sign-in, run detection and the command loop can all be bench-tested before any generator is touched.
Next
On-site install with the contractor's electrician: confirm the fault signals' polarity on the real unit and run the full start, detect, stop, detect loop.