|
Home IO Control
ESPHome add-on for IO-Homecontrol devices
|
An electric radiator with a built-in display, sold by Atlantic mainly in France. It speaks io-homecontrol two-way, so the hub sets its temperature and mode and reads back the room temperature and whether it is heating. Three radiators are confirmed on a Heltec V3 (SX1262) with the climate: platform; see Heating and climate for every option.
| Capability | Status |
|---|---|
| Discover & Pair | ✅ Confirmed on three radiators; the hub pulls each radiator's own key |
| Target temperature | ✅ Confirmed — the display follows, and the hub reads the value back |
| Off, Heat, Auto and the Program preset | ✅ Confirmed — the display follows, and the hub reads the mode back |
| Room temperature | ✅ Confirmed |
| Heating / idle | ✅ Confirmed; follows a change from Home Assistant at the poll 45 seconds later, other changes at the regular poll (every 5 minutes by default) |
| Maximum setpoint | ✅ Confirmed — the radiator reports 28.0 °C |
| home / away presets | ⚠️ The radiator acknowledges both; no visible change on the display yet (in AUTO, the manual describes a gradual reduction after half an hour away) |
| Window sensor | ✅ Confirmed — turns on when a window near the radiator is opened |
| Open Window Detection switch | ⚠️ Reads back the radiator's setting; switching detection off from Home Assistant is not tested yet |
The radiator has three operating modes, described in its installation manual. Home Assistant has no mode for a weekly program, so the program mode appears as auto with the Program preset:
| Radiator display | Home Assistant |
|---|---|
| BASIC — holds the set temperature, smart functions off | heat |
| AUTO — learns when the room is used and adjusts the temperature | auto, no preset |
| PROG — follows the radiator's weekly program | auto with the Program preset |
| Off | off |
Choosing the Program preset switches the radiator to PROG; choosing heat or off leaves it. The weekly program itself is edited on the radiator.
Each radiator answers as two io-homecontrol nodes:
Each radiator has a key of its own. The hub handles both points for you: Discover & Pair pulls the key, reads the heater at the next address under that key, and prints a block for the heater with that key in it. If the heater does not answer that read, the hub looks for it with a roll-call instead, which takes about 20 seconds.
The radiator's Expert menu (hold both arrow keys for more than 3 seconds) can delete all its connections. That gives the radiator a new key and new addresses for both nodes, and the new heater address is unrelated to the new pairing address. Your existing climate: entry for it stops working: pair the radiator again and replace the entry with the new block. The hub finds the heater with its roll-call, so this pairing takes about 20 seconds.
Pair one radiator at a time. The menus are in French.
The pairing takes a few seconds, or about 15 seconds when the hub has to fall back to a roll-call to find the heater. The radiator then reports that the device was added ("Appareil ajouté avec succès"). The hub's log prints a report between DEVICE KEY RECEIVED -- DO NOT SHARE IT and END OF DEVICE KEY REPORT, with a climate: block for the heater that includes the radiator's system_key:.
Until you flash, the hub controls the heater with the pulled key; after a reboot it needs the system_key: in your YAML.
If neither the direct read nor the roll-call reaches the heater, the log says outcome=key_received and prints the key without a block for the heater. Run Discover & Pair again with the radiator in Connexion mode, or put the key into a climate: entry's system_key:, flash, and press Scan Paired Devices. The heater answers only some roll-call requests, so repeat the scan if it finds nothing.
A radiator that already holds the hub's own key (for example, one you paired before by setting its key as the hub's system_key:) gets a block without system_key:, because its heater uses the hub's key. If the hub cannot reach the heater, the attempt ends as hub_key_returned: press Scan Paired Devices, and again if nothing answers.
Pairing the same radiator again before you flash prints its block again. Press Discover & Pair once per attempt: a press made while an attempt runs is ignored, with a log line saying so.
climate: - platform: home_io_control name: "Bedroom radiator" io_device_id: "986111" io_device_type: "electrical_heater" io_subtype: 1 system_key: !secret bedroom_radiator_key
io_device_id is the heater's address as the printed block shows it. Give every radiator its own entry with its own system_key:.
Six corpus captures from issue #165, on a Heltec V3 with the SX1262 driver:
An earlier capture shows the radiator refusing a pushed key: atlantic_agilia_pairing_key_transfer_command_unknown.