Use case
My ESP32 HomeKey installation is mounted at a door where WiFi reception is poor. Depending on MQTT or Home Assistant automations for the actual door trigger introduces latency and a failure mode: if the broker is unreachable, the door doesn't open — even though the HomeKey tap was valid.
Loxone is a common building automation system that uses a dedicated 1-Wire Extension for iButton (DS1990A) readers. The 1-Wire bus is wired directly to the controller — no network hop, no broker, no automation rules. Everything that works with a physical iButton key fob works with a virtual one.
Proposed feature
After a successful HomeKey authentication, the ESP32 emulates a DS1990A iButton on a configurable open-drain GPIO pin for a short window (default 3 s). The Loxone 1-Wire Extension polls the bus, detects the virtual iButton, and triggers access — exactly as it would with a physical key fob.
The ROM code is derived deterministically from the HomeKey issuerId via SHA-256, so:
- No manual mapping table needed
- One Apple ID (iPhone + Watch + iPad) always maps to the same ROM
- The Loxone assignment survives firmware updates
Optionally, ROM derivation can be switched to endpointId (per device instead of per Apple ID), giving per-device access granularity — useful if different family members should have different access levels in Loxone.
Key design points
- Physical iButtons and HomeKey coexist — the virtual iButton appears on the same 1-Wire bus alongside any existing physical key fobs. No migration required.
- Access control stays in Loxone — schedules, time windows, user logs, and access logic all remain in the Loxone controller. HomeKey acts purely as a protocol converter: NFC tap → iButton presence. No access decisions happen on the ESP32.
- No dependency on MQTT or Home Assistant — the integration works standalone. If the network is down, HomeKey auth + door trigger still work.
Why not MQTT?
|
MQTT/HA |
1-Wire |
| Network dependency |
Yes |
No |
| Latency |
100–500 ms |
<10 ms |
| Broker required |
Yes |
No |
| Works without WiFi |
No |
Yes (auth is local) |
| Existing Loxone setup |
Parallel system |
Native integration |
| Access logs & schedules |
In HA/broker |
In Loxone (unchanged) |
Implementation
Working implementation exists in a fork: https://github.com/MadeInHelpup/HomeKey-ESP32-1wire-lox
LoxoneOneWireManager — FreeRTOS task, GPIO polling, handles reset/presence/ReadROM/SearchROM
- Disabled by default, enabled via Kconfig + Web UI
- No new library dependencies — pure ESP-IDF GPIO
- Loxone 1-Wire Extension documentation: https://www.loxone.com/enen/kb/1-wire-extension/
Happy to submit a PR if there's interest. The feature is fully opt-in and adds no overhead when disabled.
Use case
My ESP32 HomeKey installation is mounted at a door where WiFi reception is poor. Depending on MQTT or Home Assistant automations for the actual door trigger introduces latency and a failure mode: if the broker is unreachable, the door doesn't open — even though the HomeKey tap was valid.
Loxone is a common building automation system that uses a dedicated 1-Wire Extension for iButton (DS1990A) readers. The 1-Wire bus is wired directly to the controller — no network hop, no broker, no automation rules. Everything that works with a physical iButton key fob works with a virtual one.
Proposed feature
After a successful HomeKey authentication, the ESP32 emulates a DS1990A iButton on a configurable open-drain GPIO pin for a short window (default 3 s). The Loxone 1-Wire Extension polls the bus, detects the virtual iButton, and triggers access — exactly as it would with a physical key fob.
The ROM code is derived deterministically from the HomeKey
issuerIdvia SHA-256, so:Optionally, ROM derivation can be switched to
endpointId(per device instead of per Apple ID), giving per-device access granularity — useful if different family members should have different access levels in Loxone.Key design points
Why not MQTT?
Implementation
Working implementation exists in a fork: https://github.com/MadeInHelpup/HomeKey-ESP32-1wire-lox
LoxoneOneWireManager— FreeRTOS task, GPIO polling, handles reset/presence/ReadROM/SearchROMHappy to submit a PR if there's interest. The feature is fully opt-in and adds no overhead when disabled.