Why I Built It
While working on my Wiz Lamp Control dashboard, I kept needing to see the raw state of every lamp — IP addresses, power draw, firmware versions, scene configs. Logging UDP packets manually with tcpdump worked, but it was slow and hostile to iterate on.
So I packaged the debugging workflow into a browser extension.
What It Does
- Device discovery panel — lists every Wiz device found on the network with live status
- Raw message inspector — send arbitrary JSON-RPC commands and view responses inline
- State diffing — snapshot a lamp’s config before and after a change to see exactly what moved
- Preset command library — common getPilot/setPilot payloads one click away
Implementation Details
The extension uses Chrome’s Manifest V3 service worker to fire UDP packets through a tiny local relay bridge, since browsers can’t send UDP natively. The popup UI is built with plain HTML/CSS and renders device state in a collapsible tree.
Lessons Learned
This project taught me a lot about debugging tooling as a product: the features I thought would matter (raw packet view) mattered less than the ones I almost skipped (state diffing). Good tools expose changes, not just data.
Note — If you build a tool like this, make every destructive action undoable. Debugging is inherently exploratory, and you should never punish the user for clicking the wrong button.