|
Home IO Control
ESPHome add-on for IO-Homecontrol devices
|
An electric towel dryer with a display, sold by Atlantic. Its display names the model "ADELIS 2 DIGIT". It speaks io-homecontrol two-way like the Atlantic AGILIA IO radiator, so the hub sets its temperature, mode, boost and drying, and reads back all of them with the room temperature and whether it heats. Two units are reported on an SX1276 board (issue #202); see Heating and climate for the options.
The towel dryer reports the same device type and subtype as the AGILIA radiator, an electrical heater with an adjustable setpoint (0x34/1). The radio does not say which of the two a device is, so its climate: entry adds io_model: towel_dryer. Without it the hub drives the towel dryer as a radiator: the target and the room temperature still work, but the mode writes go to the radiator's register, boost and drying are missing, and a Window sensor and an Open Window Detection switch appear that do nothing.
The block that Discover & Pair or Scan Paired Devices prints names the type and subtype only, so add the io_model: line yourself.
| Capability | Status |
|---|---|
| Discover & Pair | ✅ Reported on two units; each has a key of its own |
| Target temperature | ✅ Reported working from the climate entity |
| Room temperature | ✅ Read on both units |
| Mode read-back (off / MANUEL / PROG) | ✅ Read on the display's three modes |
| Boost and drying read-back | ✅ Read during a boost and during a drying run |
| Heating / idle | ✅ Read: the element's working rate is 100 % in boost and drying |
| Changing the mode from Home Assistant | ✅ The display follows off, MANUEL and PROG at once |
| Starting or ending boost and drying from Home Assistant | ✅ The display starts and ends both |
| Boost started on the dryer itself | ✅ Shows as the boost preset and heating at the next poll |
| Comfort or eco period of PROG | ⚠️ Experimental: read on one unit, in a comfort period and in an eco period; no second unit has confirmed it yet |
| Towel dryer display | Home Assistant |
|---|---|
| Off | off |
| MANUEL — holds the set temperature | heat |
| PROG — follows the dryer's weekly program | auto, with the comfort or eco preset of the period that runs (experimental) |
| BOOST | the boost preset, on top of the mode |
| Drying | the custom Drying preset, on top of the mode |
Boost and drying run for the duration set on the display, and the mode underneath stays as it was. Select the none preset to end a boost or a drying run from Home Assistant.
While PROG runs with no boost or drying on top, the card shows the period the program is in: the comfort or eco preset, and the temperature the dryer heats to right now as the target. The hub reads the dryer's temperature in force at each poll and compares it with the comfort setpoint (comfort) and with the comfort setpoint minus the eco setback (eco). A temperature that fits neither, such as a frost-protection value, shows as the target with no comfort or eco preset. The comfort and eco presets are shown only: selecting one sends nothing and the hub logs a warning.
climate: - platform: home_io_control name: "Bathroom towel dryer" io_device_id: "BD684B" io_device_type: "electrical_heater" io_subtype: 1 io_model: towel_dryer system_key: !secret towel_dryer_key
Give every towel dryer its own entry with its own system_key:.
The menu path is the AGILIA radiator's: on the towel dryer, open Paramètres → Connectivité → Connexion, then press Discover & Pair on the hub. Follow Pairing a radiator for the key and the printed block, and add io_model: towel_dryer to the block before you flash.
At the first poll the hub reads the heater's model name and logs it once:
It also logs a warning when the declaration does not fit what the heater answers: a heater declared io_model: towel_dryer that holds no towel-dryer mode looks like a radiator, and a heater declared without a model that holds one looks like a towel dryer. The warning never changes what the hub does. An AGILIA radiator has not been read for these registers yet, so the wording stays "looks like".
Corpus captures from issue #202, on an SX1276 board: