# ADR-084 Generic OT-bus state MQTT topics (amends ADR-065) ## Status Accepted. Date: 2026-04-24. Amends ADR-065 (otgw-pic/ MQTT subtree as stable public topic API). Partially breaks the MQTT API published by firmware 1.4.x and by pre-release 2.0.0 builds. ## Context The `feature-dev-2.0.0-otgw32-esp32-sat-support` branch introduces a second hardware variant, the OTGW32, which reads the OpenTherm bus directly via the OTDirect driver on an ESP32 instead of through the PIC coprocessor used on the NodoShop OTGW. The two variants are mutually exclusive per binary: board configuration sets either `HAS_PIC=1, HAS_DIRECT_OT=0` (ESP8266 + PIC) or `HAS_PIC=0, HAS_DIRECT_OT=1` (OTGW32). A single device is never both at the same time. Three values describe what the firmware *observes on the OpenTherm bus*: whether a boiler is present, whether a thermostat is present, and whether the bus itself is online. They are fed by a single source of truth in the state struct: - `state.otBus.bBoilerState` to `boiler_connected` - `state.otBus.bThermostatState` to `thermostat_connected` - `state.otBus.bOnline` to `otgw_connected` Both hardware paths populate the same state fields. The publish side, however, has evolved independently. Today (pre-patch) these values are emitted in three places per cycle (`src/OTGW-firmware/MQTTstuff.ino:1299-1331`): 1. Unconditionally to the generic namespace: `OTGW/value//