screams sensor

Live loudness, no audio.

My house recently got a lot more lively 👶🏻 so I figured this little sensor could help document a newborn’s growing lung capacity. Mostly it just streams how loud the house is, second by second.

Live signal

Controls

About

I recently added a Zigbee antenna (a low-power wireless protocol common in smart-home devices) to my Home Assistant setup and wanted to play with the protocol. My last build, a magic wand, went the WiFi route, so this time I wanted to try something different. The ESP32-H2 was a perfect fit since it has Zigbee — and I like that Zigbee bakes encryption into the protocol itself, so the link between the device and the coordinator is secured by default, no extra crypto layer to wire up.

In plain numbers: the microphone is read about 2,000 times a second, an average of those numbers is calculated resulting in 10 average datapoints for each second that are sent to the database over the air. For each second, every minute, every hour of the day.

The ESP32‑H2 doesn’t speak IP at all — only Zigbee — so everything has to pass through the ZBT‑2 USB coordinator into Home Assistant. Home Assistant ends up acting as the bridge between the radio and the rest of the stack, in both directions.

Telemetry — sensor → chart

ESP32-H2 → ZBT-2 → Home Assistant → Mosquitto → Telegraf → InfluxDB → Grafana → Browser

Buzz command — button → device

Browser → Mosquitto → Home Assistant → ZBT-2 → ESP32-H2

On the HA side, telemetry is bridged out via mqtt_statestream, and commands are handled by an automation that subscribes to screams/cmd/buzz and relays them on to the board.

I could have just used a JavaScript charting library for the time series, but I’d never touched Grafana before and wanted to actually learn what it does — and more generally, I aimed to use the full TIG stack to get a better feel for how the pieces fit together. So the dashboards above are embedded straight from the Grafana instance running in the same Docker compose.

More documentation can be found in the repo's README and the firmware's README.