A single purpose doorbell chime that plays audio alerts when triggered over MQTT. The system runs on a custom-built minimal Linux image, boots in under 5 seconds, and provides a web interface for configuration and monitoring. Designed as a device that can be plugged in and forgotten about.
Features
- Fast Boot - Custom Linux image boots to operational state in under 5 seconds
- Dual Daemon Architecture - Audio service and web configuration daemon run independently, ensuring the core ring functionality is never compromised
- MQTT Integration - Listens for doorbell ring events over MQTT and plays audio responses
- Web UI - Web configuration interface built with Svelte, compiled for minimal impact
- OTA Updates - Over-the-air updates for both the application runtime and Web UI
- Custom Linux OS - ~300MB purpose-built image with no unnecessary packages or services
- WiFi Auto-Connect - Automatic wireless network bring-up with wpa_supplicant
- I2S Audio - Direct digital audio via MAX98357A I2S amplifier
Architecture
The chime is built as an embedded device with a clear separation between critical and non-critical services:
Hardware
- Raspberry Pi Zero W - Main platform with built-in WiFi
- MAX98357A I2S Amplifier - Digital-to-analog converter and amplifier chip
- LSM-104F-8 Speaker - Speaker for audio output
- 3D-Printed Enclosure - Custom compact housing for the entire assembly
Runtime
chime
The core service that subscribes to MQTT topics and plays audio files when ring events are detected. Written in C++ for minimal resource usage and fast response times.
chime-webd
Handles configuration, hosting the Web UI, and exposing REST APIs. Runs independently so that any web interface issues cannot affect the audio service.
Build System
Buildroot Configuration - Defines the entire Linux system including kernel, packages, and root filesystem Docker-based Builds - Containerized build environment for reproducible image generation on macOS hosts genimage - Creates the final SD card image with proper partition layout
Infrastructure
- Custom Linux Image - Built with Buildroot, includes BusyBox, Dropbear SSH, wpa_supplicant, and the two C++ daemons
- MQTT Broker - External broker that the chime connects to for receiving events
- WiFi Network - Connects to existing infrastructure via WPA2, configured through the Web UI
- NTP Time Sync - Automatic time synchronization for accurate logging
The chime is deployed as a standalone device. Just plug it in, configure WiFi and MQTT broker via the web interface, and it joins the network to start receiving doorbell events.
