Home IO Control
ESPHome add-on for IO-Homecontrol devices
Loading...
Searching...
No Matches
Todo List
Member esphome::home_io_control::create_execute_heating_level (IoFrame &f, const uint8_t *own, const uint8_t *dst, bool low_power, uint8_t level)
Experimental: no level change has been seen on a heater's display or read back yet, so the frame stays unconfirmed on hardware until a reporter's heater does.
Member esphome::home_io_control::create_set_config1 (IoFrame &f, const uint8_t *own, const uint8_t *dst)
Confirm on real hardware which device families actually honor this SetConfig1 payload and emit unsolicited status updates after pairing.
Member esphome::home_io_control::create_subscribe_event (IoFrame &f, const uint8_t *own, const uint8_t *dst, uint16_t event_id, bool low_power)
The request shape is unconfirmed on hardware: no device has been captured answering it.
Member esphome::home_io_control::create_unsubscribe_event (IoFrame &f, const uint8_t *own, const uint8_t *dst, uint16_t event_id, bool low_power)
The action value 0x00 is a guess from the frame's shape: no device has been seen to stop reporting after it. It exists to test whether a subscription can be undone.
Member esphome::home_io_control::decisions::AttemptRequest::with_state_unknown () const
Untested on hardware, like WakeBelief::UNKNOWN itself.
Member esphome::home_io_control::decisions::AttemptRequest::with_wake_preamble_first () const
Untested on hardware: needs a low-power cover that reports a remaining time.
Member esphome::home_io_control::decisions::moving_until_holds (const TargetEvidence &evidence, uint32_t now)
Untested on hardware: needs a low-power cover that reports a remaining time (ADR 0077).
Member esphome::home_io_control::decisions::UNKNOWN
Experimental: rests on a moving VELUX screen ignoring the wake-up preamble (issues #114 and #209); no bench run has met a read to a receiver in this state yet.
Member esphome::home_io_control::decode_battery_level_event (const IoFrame &frame, uint8_t &out)
Percent rests on one captured value (100, with the status byte reading full).
Member esphome::home_io_control::decode_sun_level_event (const IoFrame &frame, uint16_t &out)
Unit and scale unknown; confirmed on one RS100 Solar io only.
Member esphome::home_io_control::device_feature::PEDESTRIAN
Confirm on a real gate opener that 0xD807 opens it to a pedestrian position (experimental).
Member esphome::home_io_control::discovery_slot_count (const uint8_t addr[NODE_ID_SIZE])
3C = 64 and 3E = 255 slots are unconfirmed: no capture of a search to either suffix yet.
Member esphome::home_io_control::effective_inverted (const OneWayControllerIdentity &identity)
Confirm on a second inverted-kind 1W receiver.
Member esphome::home_io_control::encode_dhw_duration_write (DhwOperatingFeature which, uint8_t out[HEATING_PAYLOAD_MAX_SIZE])
Experimental: confirm on the heater what these durations do (issue #198).
Member esphome::home_io_control::encode_heating_register_read (uint8_t reg_hi, uint8_t reg_lo, uint8_t out[HEATING_PAYLOAD_MAX_SIZE])
Register family 0x00xx is untested on hardware. Family 0x01xx is the one encode_heating_read() already sends to Atlantic radiators.
Member esphome::home_io_control::EVENT_LOCAL_SENSOR
The value's unit and scale are unknown; the surrounding two bytes are undecoded.
Member esphome::home_io_control::EVENT_SUBSCRIPTION_UNSUBSCRIBE
A guess from the frame's shape: no device has been seen to act on it. Kept only to test whether a subscription can be undone.
Member esphome::home_io_control::ExecutionState
Experimental: WAITING_FOR_POWER and WAITING_FOR_EXECUTING are not yet captured in an ordinary status reply, only WAITING_FOR_POWER in a main-parameter read of a shutter queued behind another on one supply. Following such a cover rests on that and on the API; it needs a captured ordinary status reply from a waiting cover.
Class esphome::home_io_control::IOHomeBatteryLevelSensor
Percent rests on one captured value (100); confirmed on one Somfy RS100 Solar io only.
Member esphome::home_io_control::IOHomeControlComponent::set_water_heater_away (const std::string &device_id, bool on)
Experimental: confirm on a real water heater that this starts and ends the holiday mode.
Member esphome::home_io_control::IOHomeControlComponent::set_water_heater_boost (const std::string &device_id, bool on)
Experimental: confirm on a real water heater that this starts and ends a boost.
Member esphome::home_io_control::IOHomeCover::control (const cover::CoverCall &call) override
Monitor https://github.com/home-assistant/core/issues/174533 — if HA adds a combined cover.set_cover_position_and_tilt action, this branch would be exercised directly from a single CoverCall. The queue coalescing in queue_set_device_position/tilt remains a useful optimization for the two-separate-calls path regardless.
Class esphome::home_io_control::IOHomeCoverCommandButton

Confirm on a real gate opener that PEDESTRIAN (0xD807) moves the motor to that position (experimental; the button is disabled by default). PARTIAL (0xD809) runs a garage opener's stored partial position (issue #163).

Class esphome::home_io_control::IOHomeDhwBoostSwitch
Experimental: confirm on a real water heater that switching on starts a boost and switching off ends it (issue #198).
Class esphome::home_io_control::IOHomeHeaterNightLight
Experimental: confirm on a real heater that writing 0x0144 switches the light (the heater's own controller writes it, issue #222) and that writing 0x0142 dims it.
Class esphome::home_io_control::IOHomeSunLevelSensor
Unit and scale unknown; confirmed on one Somfy RS100 Solar io only (issue #156).
Member esphome::home_io_control::key_extraction_session_window_ms (uint8_t multi_info)
Measure on hardware how soon, and on which channel, a third-party hub's in-session frame follows our reply. Two passive community captures show a controller's 0x3D on another channel than the device's 0x3C; a hub that does so would be heard only once the hold ends.
Member esphome::home_io_control::NAMED_POSITIONS []
Confirm 0xD807 on a real gate opener. Adding one is a bit (with its evidence), a row here, a CoverCommand value, the rows that have it in the type table, and a companion button in the Python codegen.
Member esphome::home_io_control::NIGHT_LIGHT_BRIGHTNESS
Confirm on a real heater that the value is a percentage and that a write dims the light (issue #222).
Member esphome::home_io_control::PEDESTRIAN
Confirm on a real gate opener that 0xD807 opens it to a pedestrian position.
Member esphome::home_io_control::POS_PEDESTRIAN_MODIFIER
Confirm on a real gate opener that main=0xD8, modifier=0x07 opens it to a pedestrian position (experimental).
Member esphome::home_io_control::SOFT_PHY_CCA_SETTLE_US
Confirm on the bench (Heltec V3, T3-S3 LR1121): time the retune and compare the reading against one taken after a long dwell on the same channel.
Member esphome::home_io_control::SX1276_CCA_SETTLE_US
Confirm on the bench (Heltec V2): time the retune and compare the reading against one taken after a long dwell on the same channel.
Member esphome::home_io_control::TEMPERATURE_IN_FORCE
Confirm on a second towel dryer (the reads so far are from one unit).
Member esphome::home_io_control::TRANSFER_OBJECT_ACTUATOR_STATE
Byte layout unknown.
Member esphome::home_io_control::TRANSFER_OBJECT_CLASS_SOMFY
No device has been captured answering an open of this class yet.
Member esphome::home_io_control::TRANSFER_READABLE_OBJECTS []
The layouts of entries 5 to 29 are unknown: read them to learn what they hold.
File hub_status.cpp
Validate the unsolicited CMD_STATUS_UPDATE path on hardware that actually emits device-initiated updates after pairing, including inbound authentication, three-channel ACK broadcast, and Home Assistant state publication without polling.
File pairing_engine.cpp

Validate the full discovery and re-pair flow on freshly reset SX1276-backed devices.

Validate the full discovery and re-pair flow on freshly reset SX1262-backed devices.

Add first-class platform coverage for additional paired device classes once hardware is available.

File platform_climate.h
The heating-level and temperature EXECUTE paths are unconfirmed on hardware; confirm with a capture from a plain heater, a heating temperature interface or a heat pump.
File platform_climate_controls.h
Experimental: the meaning of registers 0x010E (window sensor) and 0x0106 (open-window detection) is unconfirmed on hardware. An AGILIA IO radiator answers both reads (window 0, detection 1, tests/corpus/captures/exchange/atlantic_agilia_exchange_status_read.yaml), but no report has opened a window or switched detection off yet (issue #165).
File platform_fan.h
Experimental: no exterior heater has been exercised on hardware. Confirm the position mapping and the status read with a capture or a reporter's heater.
File platform_lock.h
Validate end-to-end behavior with physical IO-Homecontrol lock devices, including any vendor-specific status encodings beyond the shared 0/100 binary mapping used here.
File platform_switch.h
Validate end-to-end behavior with physical IO-Homecontrol switch devices, including passive state updates, startup state restoration, and any vendor-specific position encodings that do not map cleanly to binary on/off semantics.
File platform_water_heater.h

The mode mapping and the target steps rest on that one heater; confirm them on a second one.

Experimental: confirm on a real water heater that away mode starts and ends the holiday mode and that the state follows the heater's operating-mode word (issue #198).

File proto_dhw.h
Experimental: confirm on a real water heater that the three FP16 values start and end a boost and the holiday mode (issue #198).
File proto_heating_profiles.h

Heating-level control of the plain electrical heater (node type 52, subtype 0) has no capture or hardware report yet. Confirm with one before calling it supported.

Every 52/1 seen is an Atlantic heater. A non-Atlantic 52/1 would need the heating-level path instead; the profile keys on (type, subtype, model), and the model is the YAML's.

File radio_sx1262.h
Validate the Heltec V4.2 on real hardware, especially its assumed front-end module enable pins and TCXO voltage selection. The V4.3 is validated and does not settle this: its GC1109 is a different part from the V4.3's KCT8103L, and the two are wired the other way round (see ADR 0035).