Home IO Control
ESPHome add-on for IO-Homecontrol devices
Loading...
Searching...
No Matches
proto_commands.h File Reference

Command builders for the IO‑Homecontrol protocol. More...

#include "proto_frame.h"
Include dependency graph for proto_commands.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Namespaces

namespace  esphome
namespace  esphome::home_io_control

Functions

bool esphome::home_io_control::create_execute (IoFrame &f, const uint8_t *own, const uint8_t *dst, bool low_power, uint8_t position)
 Build an execute command (0x00) to control a device.
bool esphome::home_io_control::create_get_status (IoFrame &f, const uint8_t *own, const uint8_t *dst)
 Build a get-status request (0x03). The device responds with its current position.
bool esphome::home_io_control::create_execute_tilt (IoFrame &f, const uint8_t *own, const uint8_t *dst, bool low_power, uint8_t tilt_percent)
 Build a tilt execute command (0x00) for devices that support slat angle control.
bool esphome::home_io_control::create_get_status_tilt (IoFrame &f, const uint8_t *own, const uint8_t *dst)
 Build a tilt-aware get-status request (0x03) that returns the extended 16-byte tilt payload.
bool esphome::home_io_control::create_discover (IoFrame &f, const uint8_t *own)
 Build a discovery broadcast (0x28).
bool esphome::home_io_control::create_key_init (IoFrame &f, const uint8_t *own, const uint8_t *dst)
 Build a key-init request (0x31) to start the pairing key exchange with a discovered device.
bool esphome::home_io_control::create_key_transfer (IoFrame &f, IoFrame &old_frame, const uint8_t *dst, const uint8_t *src, const uint8_t key[AES_KEY_SIZE], const uint8_t challenge[HMAC_SIZE])
 Build a key-transfer frame (0x32) containing the system key encrypted with the transfer key.
bool esphome::home_io_control::create_challenge_req (IoFrame &f, const uint8_t *dst, const uint8_t *src)
 Build a challenge request (0x3C) containing 6 random bytes.
bool esphome::home_io_control::create_challenge_resp (IoFrame &f, const uint8_t *dst, const uint8_t *src, const uint8_t challenge[HMAC_SIZE], const IoFrame &origin, const uint8_t *key)
 Build a challenge response (0x3D) proving we know the system key.
bool esphome::home_io_control::create_status_update_resp (IoFrame &f, const uint8_t *own, const uint8_t *dst)
 Build a status-update acknowledgment (0x72).
bool esphome::home_io_control::create_set_config1 (IoFrame &f, const uint8_t *own, const uint8_t *dst)
 Build a set-config command (0x6F) to tell the device to automatically send status updates when controlled by any remote (not just us).

Detailed Description

Command builders for the IO‑Homecontrol protocol.

This module provides builder functions that populate IoFrame structures for the various commands used in discovery, pairing, control, and status operations. All builders follow the same pattern: fill an IoFrame with CTRL0/CTRL1 flags, addresses, command ID, and optional payload.

Position encoding:

  • IO protocol position values: 0 = fully open, 100 = fully closed.
  • Special values: POS_STOP (0xD2), POS_FAVORITE (0xD8), POS_UNKNOWN (0xD4).
  • The Home Assistant layer maps HA's 1.0=open/0.0=closed to the IO scale via ha_position = 1.0 - (io_position / 100.0). Some devices (horizontal awnings) have inverted mapping; see platform_cover.h.

Preamble handling:

  • Commands to battery/solar‑powered devices must use LONG_PREAMBLE (1024 bytes) so the sleeping receiver can detect the frame. Mains‑powered devices use SHORT_PREAMBLE (8 bytes). See CTRL1_LOW_POWER flag and battery_powered_ field in IoDevice.

Definition in file proto_commands.h.