|
Home IO Control
ESPHome add-on for IO-Homecontrol devices
|
2W heating devices are driven with CMD_WRITE_PRIVATE (0x20). The set_* functions are write-only — nothing decodes what the radiator actually did back into an entity, and the hub only learns whether the device acknowledged the write. (power_on and midnight_sync are register reads; their ACK payload is logged at DEBUG but not decoded.) State shown in Home Assistant is "last commanded, never confirmed".
Supported device types: heating_temperature_interface (0x0E) is the one selectable from YAML today. exterior_heating (0x15) and heat_pump (0x16) also map to the climate capability class but are not yet YAML-selectable — open an issue if you have one.
climate: - platform: home_io_control name: "Living Room Radiator" io_device_id: "FEEB22" io_device_type: "heating_temperature_interface"
The usual companion diagnostic sensors (Device Name, Active Issue, Last Contact, RSSI, Exchange Failures, Unconfirmed Exchanges, Last Commanded By, Last Command Source) are generated as for the other platforms. Last Contact and Active Issue are the only feedback a write-only device can give.
The setpoint goes on the wire as a 16-bit little-endian value in tenths of a degree (round(10 × °C), so 28.0 °C is 18 01). This component accepts 7.0–28.0 °C, 28.0 being the ceiling Atlantic radiator manuals document, and rejects anything outside that range rather than clamping or truncating. Setpoints above 25.5 °C need the second byte, and that part of the encoding is unverified on real hardware. If your radiator's own panel allows a different maximum, that is worth reporting.
7.0–12.0 °C is the frost-protection (hors-gel) band on these radiators, not a comfort setpoint; the panel's own comfort range starts at 12 °C. The codec still accepts 7–12 °C so a frost-protection setpoint can be commanded directly.
Takes device_id, function, and value. verified is always false.
| function | value | Effect |
|---|---|---|
| power_on | (ignored) | Wake / retrieve paired devices. |
| set_temperature | float °C, 7.0–28.0 | Setpoint. |
| set_mode | auto | manual | prog | off | Operating mode. |
| set_presence | on | off | Presence / absence. |
| set_window | open | close | Open-window / frost protection. |
| midnight_sync | (ignored) | Reads register 0x0130 (the comfort/eco/auto setpoint block). Despite the name, the payload is a 0x60 read, not a clock-set — the device's clock register is 0x010F and this component never writes it. Provided for protocol exploration; the ACK payload is logged at DEBUG. |
action: esphome.hioc_heltec_v2_heating_control data: device_id: "FEEB22" function: set_temperature value: "20.5"
An unknown function, an out-of-range temperature, or a non-climate device_id is reported in the result event's message and nothing is transmitted. A CMD_ERROR_RESP from the device surfaces its decoded result code in result_code / result_code_name. For power_on and midnight_sync (which are register reads) the 0x21 ACK payload is written to the DEBUG log — a midnight_sync read returns the ~17-byte setpoint block, which can help settle the 25.5-vs-28 °C question on real hardware.