1.8 KiB
1.8 KiB
EVS Bridge (Home Assistant + MQTT + WebSocket)
This service is the audio bridge between your ESP32 client and your Home Assistant stack.
It provides:
- WebSocket endpoint for raw PCM audio (
/audio) - MQTT status/events (
evs/<device_id>/status) - MQTT playback input (
evs/<device_id>/play_pcm16le) - Optional Home Assistant webhook callbacks (
connected,start,stop,disconnected)
1) Start the bridge
- Copy env template:
cp .env.example .env
- Edit
.env:
MQTT_HOST,MQTT_USER,MQTT_PASSWORDHA_WEBHOOK_URL(optional)
- Start:
docker compose up -d --build
2) Configure ESP32
In src/main.cpp:
- no environment-specific values should be edited directly
In include/secrets.h:
- copy from
include/secrets.example.h - set WiFi credentials
- set bridge host
- set WS port/path
- set unique
EVS_DEVICE_ID
Then upload firmware.
3) Test flow
- Flash ESP32
- Open serial monitor
- Send
s(stream mode) - In bridge logs, you should see the device connection
- If
ECHO_ENABLED=true, incoming audio is returned to ESP32 speaker
4) MQTT topics
- Status/events published by bridge:
evs/<device_id>/status(JSON)
- Playback input to device:
evs/<device_id>/play_pcm16le- payload options:
- raw binary PCM16LE
- JSON
{ "pcm16le_b64": "<base64>" }
5) Home Assistant integration
Use webhook for event hooks:
- Configure
HA_WEBHOOK_URLin.env - Bridge sends JSON with event and metadata on:
connectedstartstopdisconnected
You can build automations on these events (for STT/TTS pipelines or Node-RED handoff).
6) Notes
- Audio format: PCM16LE, mono, 16 kHz
SAVE_SESSIONS=truestores.wavfiles inbridge/data/sessions- MQTT is recommended for control/events, WebSocket for streaming audio