ADR 0013: Core-level MQTT bridge for Home Assistant
Status: Accepted Date: 2026-10-31
Context
hald publishes Home Assistant discovery for everything physical (ADR-0007),
so HA works with no core at all. What HA cannot see from the daemon is what
only core knows: the grow cycle, reminders, light hours.
Decision
src/mqtt/bridge.ts is an in-process MQTT client on the operator’s broker
(sleepypod ADR 0019 shape): dormant until settings.mqttUrl, LWT on
seedypod/<unit>/core/availability, TLS opt-in with a separate
mqttTlsInsecure flag, reconnects on settings change. It publishes retained
discovery for reminder binary_sensors with buttons to mark them done,
grow day/stage and light-hour sensors, and a “water now” button whose
press runs a bounded pump cycle through the HAL (refusals surface via the
daemon’s own alert entities).
Consequences
- Two discovery sources, one HA device (shared
identifiers). - Core never republishes the daemon’s entities; no duplication, no drift.
Sources: sleepypod/core (conventions and ADR precedents)
Imported from docs/adr/0013-ha-bridge.md in seedypod/core. Edit it there, not here.