Home IO Control
ESPHome add-on for IO-Homecontrol devices
Loading...
Searching...
No Matches
home_io_control Namespace Reference

Namespaces

namespace  button
namespace  climate
namespace  cover
namespace  light
namespace  lock
namespace  lr1121_firmware
namespace  platform_common
namespace  switch
namespace  tuning

Functions

 _inject_hub_entity_id (config, *, flag_key, id_key, suffix, cls)
 _inject_accept_foreign_pairing_switch_id (config)
 _inject_recover_oneway_key_switch_id (config)
 _inject_scan_paired_devices_button_id (config)
 validate_lr1121_firmware_source (value, *, expect_loader=False)
 validate_checksum_md5 (value)
 to_code (config)
 _create_oneway_controller_entities (identity, var)
 _create_hub_arming_switch (config, var, *, cls, id_key, name)
 _create_scan_paired_devices_button (config, var)
 _cached_http_fetch (cache_dir)
 _render_lr1121_image_header (image, array_name, words_name, version_name)
 _render_lr1121_firmware_header (image)
 _render_lr1121_bootloader_loader_header (image)
 _create_lr1121_firmware_update (config, var)
 _create_lr1121_bootloader_update (bootloader_config, config, var, cache_dir)

Variables

 _LOGGER = logging.getLogger(__name__)
list DEPENDENCIES = ["api", "spi"]
list AUTO_LOAD = ["button", "climate", "cover", "light", "lock", "number", "select", "sensor", "switch", "text_sensor"]
bool MULTI_CONF = False
str CONF_HOME_IO_CONTROL_ID = "home_io_control_id"
str CONF_RST_PIN = "rst_pin"
str CONF_DIO0_PIN = "dio0_pin"
str CONF_DIO4_PIN = "dio4_pin"
str CONF_DIO1_PIN = "dio1_pin"
str CONF_BUSY_PIN = "busy_pin"
str CONF_NODE_ID = "node_id"
str CONF_SYSTEM_KEY = "system_key"
str CONF_TX_POWER = "tx_power"
str CONF_PA_PIN = "pa_pin"
str CONF_RADIO_TYPE = "radio_type"
str CONF_FEM_EN_PIN = "fem_en_pin"
str CONF_VFEM_PIN = "vfem_pin"
str CONF_FEM_PA_PIN = "fem_pa_pin"
str CONF_TCXO_VOLTAGE = "tcxo_voltage"
str CONF_EXPOSED_SENDERS = "exposed_senders"
str CONF_ACCEPT_FOREIGN_PAIRING = "accept_foreign_pairing"
str CONF_RECOVER_ONEWAY_KEY = "recover_oneway_key"
str CONF_SCAN_PAIRED_DEVICES_BUTTON = "scan_paired_devices_button"
str CONF_ONEWAY_CONTROLLERS = "oneway_controllers"
str CONF_NODE_ID_DERIVED = "_node_id_derived"
str CONF_MANUFACTURER = "manufacturer"
str CONF_IO_DEVICE_TYPE = "io_device_type"
str CONF_INITIAL_SEQUENCE = "initial_sequence"
str CONF_COMMANDS = "commands"
str CONF_EXECUTE_ACEI = "execute_acei"
str CONF_EXECUTE_BROADCAST = "execute_broadcast"
str CONF_ENROLLMENT = "enrollment"
str CONF_ENROLLMENT_WITH_MAC = "enrollment_with_mac"
str CONF_ENROLLMENT_CLASSES = "enrollment_classes"
str CONF_BUTTON_IDS = "button_ids"
str CONF_LAST_COMMAND_SENSOR_ID = "last_command_sensor_id"
str CONF_ENROLL_BUTTON_ID = "_enroll_button_id"
str CONF_DIAGNOSTIC_PROBES = "diagnostic_probes"
str CONF_LR1121_FIRMWARE_UPDATE = "lr1121_firmware_update"
str CONF_LR1121_BOOTLOADER = "bootloader"
str CONF_CHECKSUM_MD5 = "checksum_md5"
str CONF_TARGET_VERSION = "target_version"
int MIN_STATUS_POLL_INTERVAL_MS = 500
str CONF_ACCEPT_FOREIGN_PAIRING_SWITCH_ID = "_accept_foreign_pairing_switch_id"
str CONF_RECOVER_ONEWAY_KEY_SWITCH_ID = "_recover_oneway_key_switch_id"
str CONF_LR1121_FIRMWARE_UPDATE_BUTTON_ID = "_lr1121_firmware_update_button_id"
str CONF_SCAN_PAIRED_DEVICES_BUTTON_ID = "_scan_paired_devices_button_id"
str CONF_LR1121_BOOTLOADER_SWITCH_ID = "_lr1121_bootloader_switch_id"
 home_io_control_ns = cg.esphome_ns.namespace("home_io_control")
 IOHomeControlComponent
 IOHomeAcceptForeignPairingSwitch
 IOHomeRecoverOneWayKeySwitch
 IOHomeLr1121FirmwareUpdateButton
 IOHomeScanPairedDevicesButton
 IOHomeOneWayCommandButton
 IOHomeOneWayLastCommandTextSensor
 IOHomeOneWayEnrollButton
 OneWayButtonAction = home_io_control_ns.enum("OneWayButtonAction", is_class=True)
dict ONEWAY_COMMANDS
 IOHomeLr1121BootloaderRewriteSwitch
 LR1121_BOOTLOADER_SCHEMA
 LR1121_FIRMWARE_UPDATE_SCHEMA

Function Documentation

◆ _cached_http_fetch()

home_io_control._cached_http_fetch ( cache_dir)
protected
Build a `fetch(url, expected_hash=None) -> bytes` callable for
lr1121_firmware.fetch_and_verify(), backed by an on-disk cache so repeat and offline builds
don't re-download the same source.

The cache key incorporates `expected_hash` (the MD5 fetch_and_verify() already resolved from
the `.md5` sidecar or `checksum_md5:` before calling this for the `.bin`) rather than being
`sha256(url)` alone. With the default `ref: HEAD` the URL never changes, so a plain
url-only key means a corrupt/truncated download poisons the cache permanently -- no config
change can ever invalidate it, since nothing about the request changes on retry. Folding the
expected hash in means correcting a wrong `checksum_md5:` (or a fixed upstream sidecar) misses
the poisoned entry and forces a fresh download. The `.md5` sidecar fetch itself has no
expected_hash to key on (chicken-and-egg -- it's what supplies one for the .bin) and is cached
under the URL alone; a corrupted sidecar is a much smaller/rarer risk than a corrupted 64+ KB
binary, and the cache directory below is a manual escape hatch either way.

Data that fails its own hash check is deliberately never written to the cache (verify-before-store):
a transient network corruption then simply retries cleanly on the next build, with no
config change needed at all.

Definition at line 1309 of file __init__.py.

◆ _create_hub_arming_switch()

home_io_control._create_hub_arming_switch ( config,
var,
* ,
cls,
id_key,
name )
protected
Create a hub-level arming switch (key extraction or key adoption).

Mirrors tuning.py's _create_number()/_create_select(): normalize a bare {id, name} dict
through switch_schema()+COMPONENT_SCHEMA so it carries the entity/component defaults
register_switch()/register_component() require, matching the neighboring pattern rather than
hand-assembling a config dict shape of its own.

ALWAYS_OFF is a security property, not a UX default: every switch built here arms a window
(foreign-key extraction or 1W key adoption) that must never come back armed after a reboot.

Definition at line 1260 of file __init__.py.

◆ _create_lr1121_bootloader_update()

home_io_control._create_lr1121_bootloader_update ( bootloader_config,
config,
var,
cache_dir )
protected
Fetch/verify the configured loader image, generate its header, set the build flag that
gates the bootloader-rewrite feature, and create the arming switch.

Mirrors _create_lr1121_firmware_update() above -- same "block's presence is the build flag"
shape, one level down (ADR 0021). `target_version` is not passed to
fetch_and_verify(): the loader is not a "target" the way the transceiver image is, its version
is only ever compared for *equality* against the currently-running bootloader (Semtech's
rule), so there is nothing to override.

Definition at line 1448 of file __init__.py.

Here is the call graph for this function:

◆ _create_lr1121_firmware_update()

home_io_control._create_lr1121_firmware_update ( config,
var )
protected
Fetch/verify the configured firmware image, generate its header, set the build flag that
gates the whole feature, and create the "Flash LR1121 Radio Firmware" button.

The block's mere presence in YAML is the build flag (ADR 0020) — there is no
separate enable switch, so entering/leaving flash mode is a recompile + OTA each way.

Definition at line 1406 of file __init__.py.

Here is the call graph for this function:

◆ _create_oneway_controller_entities()

home_io_control._create_oneway_controller_entities ( identity,
var )
protected
Create one identity's command buttons and its "Last 1W Command" diagnostic sensor.

Same normalization as the hub-level switches below: run a bare {id, name} dict through the
platform's own schema so it carries the entity/component defaults register_*() require.

Entity names derive from the identity handle and the command ("awning_remote" + "open" ->
"Awning Remote Open"), mirroring how the cover's favourite/vent companions derive theirs. The
*IDs* follow the documented `<identity_id>_<command>` rule instead, because those are what a
`time_based` cover composes against.

Definition at line 1189 of file __init__.py.

◆ _create_scan_paired_devices_button()

home_io_control._create_scan_paired_devices_button ( config,
var )
protected
Create the hub-level "Scan Paired Devices" button.

Same normalization as _create_hub_arming_switch() above: run a bare {id, name} dict through
button_schema()+COMPONENT_SCHEMA so it carries the entity/component defaults register_button()/
register_component() require. The `scan_paired_devices` native API action is registered
independently in C++ (ManagementActions::register_actions()) and is unaffected by this key --
the button is an extra trigger onto the same method, not a replacement.

Definition at line 1286 of file __init__.py.

◆ _inject_accept_foreign_pairing_switch_id()

home_io_control._inject_accept_foreign_pairing_switch_id ( config)
protected

Definition at line 217 of file __init__.py.

Here is the call graph for this function:

◆ _inject_hub_entity_id()

home_io_control._inject_hub_entity_id ( config,
* ,
flag_key,
id_key,
suffix,
cls )
protected
Shared body for the hub-level entities gated by a bare boolean flag in the
`home_io_control:` block (accept_foreign_pairing, recover_oneway_key,
scan_paired_devices_button): declare the entity's ID during validation, under the
`{hub_id}_{suffix}` name, only when its flag is set. See companion_id_base() in
platform_common.py for why this must happen at validation time rather than in to_code().

Definition at line 202 of file __init__.py.

◆ _inject_recover_oneway_key_switch_id()

home_io_control._inject_recover_oneway_key_switch_id ( config)
protected

Definition at line 227 of file __init__.py.

Here is the call graph for this function:

◆ _inject_scan_paired_devices_button_id()

home_io_control._inject_scan_paired_devices_button_id ( config)
protected

Definition at line 237 of file __init__.py.

Here is the call graph for this function:

◆ _render_lr1121_bootloader_loader_header()

home_io_control._render_lr1121_bootloader_loader_header ( image)
protected
Render the verified bootloader *loader* image as a C++ header (ADR 0021).

Definition at line 1399 of file __init__.py.

Here is the call graph for this function:

◆ _render_lr1121_firmware_header()

home_io_control._render_lr1121_firmware_header ( image)
protected
Render the verified transceiver firmware image as a C++ header.

Definition at line 1392 of file __init__.py.

Here is the call graph for this function:

◆ _render_lr1121_image_header()

home_io_control._render_lr1121_image_header ( image,
array_name,
words_name,
version_name )
protected
Render a verified firmware/loader image as a C++ header.

Each raw 4-byte chunk of the `.bin` is exactly one big-endian word as Semtech's own image
format already lays it out, so this only has to slice and format, not transform, the bytes.
`inline const` (not `constexpr`) for the array: it is never used in a constant expression, so
forcing constant-evaluation of up to ~61k elements would only cost compile time; `const` at
namespace scope still lands in `.rodata` (flash) on ESP32, not RAM. Shared by
_render_lr1121_firmware_header() (the transceiver image) and the bootloader loader image --
same shape, different symbol names so both headers can be included from the same translation
unit without colliding.

Definition at line 1352 of file __init__.py.

◆ to_code()

home_io_control.to_code ( config)

Definition at line 1094 of file __init__.py.

Here is the call graph for this function:

◆ validate_checksum_md5()

home_io_control.validate_checksum_md5 ( value)
Validate checksum_md5 as exactly 32 hex characters (MD5).

Definition at line 266 of file __init__.py.

◆ validate_lr1121_firmware_source()

home_io_control.validate_lr1121_firmware_source ( value,
* ,
expect_loader = False )
Validate the lr1121_firmware_update `source:` shorthand at schema time.

Checks the shape (github://owner/repo/path[@ref]) and the image class (transceiver vs.
loader vs. modem, by filename -- see lr1121_firmware.validate_image_class()). The network
fetch and MD5/image-content verification happen later, in to_code(), where a failure is
still a build-time error but one that needs the network anyway.
@param expect_loader True for the bootloader sub-block's `source:` (must be a loader image),
       False for the ordinary transceiver `source:` (must not be one).

Definition at line 247 of file __init__.py.

Variable Documentation

◆ _LOGGER

home_io_control._LOGGER = logging.getLogger(__name__)
protected

Definition at line 46 of file __init__.py.

◆ AUTO_LOAD

list home_io_control.AUTO_LOAD = ["button", "climate", "cover", "light", "lock", "number", "select", "sensor", "switch", "text_sensor"]

Definition at line 49 of file __init__.py.

◆ CONF_ACCEPT_FOREIGN_PAIRING

str home_io_control.CONF_ACCEPT_FOREIGN_PAIRING = "accept_foreign_pairing"

Definition at line 68 of file __init__.py.

◆ CONF_ACCEPT_FOREIGN_PAIRING_SWITCH_ID

str home_io_control.CONF_ACCEPT_FOREIGN_PAIRING_SWITCH_ID = "_accept_foreign_pairing_switch_id"

Definition at line 117 of file __init__.py.

◆ CONF_BUSY_PIN

str home_io_control.CONF_BUSY_PIN = "busy_pin"

Definition at line 57 of file __init__.py.

◆ CONF_BUTTON_IDS

str home_io_control.CONF_BUTTON_IDS = "button_ids"

Definition at line 100 of file __init__.py.

◆ CONF_CHECKSUM_MD5

str home_io_control.CONF_CHECKSUM_MD5 = "checksum_md5"

Definition at line 108 of file __init__.py.

◆ CONF_COMMANDS

str home_io_control.CONF_COMMANDS = "commands"

Definition at line 80 of file __init__.py.

◆ CONF_DIAGNOSTIC_PROBES

str home_io_control.CONF_DIAGNOSTIC_PROBES = "diagnostic_probes"

Definition at line 105 of file __init__.py.

◆ CONF_DIO0_PIN

str home_io_control.CONF_DIO0_PIN = "dio0_pin"

Definition at line 54 of file __init__.py.

◆ CONF_DIO1_PIN

str home_io_control.CONF_DIO1_PIN = "dio1_pin"

Definition at line 56 of file __init__.py.

◆ CONF_DIO4_PIN

str home_io_control.CONF_DIO4_PIN = "dio4_pin"

Definition at line 55 of file __init__.py.

◆ CONF_ENROLL_BUTTON_ID

str home_io_control.CONF_ENROLL_BUTTON_ID = "_enroll_button_id"

Definition at line 104 of file __init__.py.

◆ CONF_ENROLLMENT

str home_io_control.CONF_ENROLLMENT = "enrollment"

Definition at line 89 of file __init__.py.

◆ CONF_ENROLLMENT_CLASSES

str home_io_control.CONF_ENROLLMENT_CLASSES = "enrollment_classes"

Definition at line 97 of file __init__.py.

◆ CONF_ENROLLMENT_WITH_MAC

str home_io_control.CONF_ENROLLMENT_WITH_MAC = "enrollment_with_mac"

Definition at line 93 of file __init__.py.

◆ CONF_EXECUTE_ACEI

str home_io_control.CONF_EXECUTE_ACEI = "execute_acei"

Definition at line 84 of file __init__.py.

◆ CONF_EXECUTE_BROADCAST

str home_io_control.CONF_EXECUTE_BROADCAST = "execute_broadcast"

Definition at line 85 of file __init__.py.

◆ CONF_EXPOSED_SENDERS

str home_io_control.CONF_EXPOSED_SENDERS = "exposed_senders"

Definition at line 67 of file __init__.py.

◆ CONF_FEM_EN_PIN

str home_io_control.CONF_FEM_EN_PIN = "fem_en_pin"

Definition at line 63 of file __init__.py.

◆ CONF_FEM_PA_PIN

str home_io_control.CONF_FEM_PA_PIN = "fem_pa_pin"

Definition at line 65 of file __init__.py.

◆ CONF_HOME_IO_CONTROL_ID

str home_io_control.CONF_HOME_IO_CONTROL_ID = "home_io_control_id"

Definition at line 52 of file __init__.py.

◆ CONF_INITIAL_SEQUENCE

str home_io_control.CONF_INITIAL_SEQUENCE = "initial_sequence"

Definition at line 79 of file __init__.py.

◆ CONF_IO_DEVICE_TYPE

str home_io_control.CONF_IO_DEVICE_TYPE = "io_device_type"

Definition at line 78 of file __init__.py.

◆ CONF_LAST_COMMAND_SENSOR_ID

str home_io_control.CONF_LAST_COMMAND_SENSOR_ID = "last_command_sensor_id"

Definition at line 101 of file __init__.py.

◆ CONF_LR1121_BOOTLOADER

str home_io_control.CONF_LR1121_BOOTLOADER = "bootloader"

Definition at line 107 of file __init__.py.

◆ CONF_LR1121_BOOTLOADER_SWITCH_ID

str home_io_control.CONF_LR1121_BOOTLOADER_SWITCH_ID = "_lr1121_bootloader_switch_id"

Definition at line 130 of file __init__.py.

◆ CONF_LR1121_FIRMWARE_UPDATE

str home_io_control.CONF_LR1121_FIRMWARE_UPDATE = "lr1121_firmware_update"

Definition at line 106 of file __init__.py.

◆ CONF_LR1121_FIRMWARE_UPDATE_BUTTON_ID

str home_io_control.CONF_LR1121_FIRMWARE_UPDATE_BUTTON_ID = "_lr1121_firmware_update_button_id"

Definition at line 123 of file __init__.py.

◆ CONF_MANUFACTURER

str home_io_control.CONF_MANUFACTURER = "manufacturer"

Definition at line 75 of file __init__.py.

◆ CONF_NODE_ID

str home_io_control.CONF_NODE_ID = "node_id"

Definition at line 58 of file __init__.py.

◆ CONF_NODE_ID_DERIVED

str home_io_control.CONF_NODE_ID_DERIVED = "_node_id_derived"

Definition at line 74 of file __init__.py.

◆ CONF_ONEWAY_CONTROLLERS

str home_io_control.CONF_ONEWAY_CONTROLLERS = "oneway_controllers"

Definition at line 71 of file __init__.py.

◆ CONF_PA_PIN

str home_io_control.CONF_PA_PIN = "pa_pin"

Definition at line 61 of file __init__.py.

◆ CONF_RADIO_TYPE

str home_io_control.CONF_RADIO_TYPE = "radio_type"

Definition at line 62 of file __init__.py.

◆ CONF_RECOVER_ONEWAY_KEY

str home_io_control.CONF_RECOVER_ONEWAY_KEY = "recover_oneway_key"

Definition at line 69 of file __init__.py.

◆ CONF_RECOVER_ONEWAY_KEY_SWITCH_ID

str home_io_control.CONF_RECOVER_ONEWAY_KEY_SWITCH_ID = "_recover_oneway_key_switch_id"

Definition at line 120 of file __init__.py.

◆ CONF_RST_PIN

str home_io_control.CONF_RST_PIN = "rst_pin"

Definition at line 53 of file __init__.py.

◆ CONF_SCAN_PAIRED_DEVICES_BUTTON

str home_io_control.CONF_SCAN_PAIRED_DEVICES_BUTTON = "scan_paired_devices_button"

Definition at line 70 of file __init__.py.

◆ CONF_SCAN_PAIRED_DEVICES_BUTTON_ID

str home_io_control.CONF_SCAN_PAIRED_DEVICES_BUTTON_ID = "_scan_paired_devices_button_id"

Definition at line 126 of file __init__.py.

◆ CONF_SYSTEM_KEY

str home_io_control.CONF_SYSTEM_KEY = "system_key"

Definition at line 59 of file __init__.py.

◆ CONF_TARGET_VERSION

str home_io_control.CONF_TARGET_VERSION = "target_version"

Definition at line 109 of file __init__.py.

◆ CONF_TCXO_VOLTAGE

str home_io_control.CONF_TCXO_VOLTAGE = "tcxo_voltage"

Definition at line 66 of file __init__.py.

◆ CONF_TX_POWER

str home_io_control.CONF_TX_POWER = "tx_power"

Definition at line 60 of file __init__.py.

◆ CONF_VFEM_PIN

str home_io_control.CONF_VFEM_PIN = "vfem_pin"

Definition at line 64 of file __init__.py.

◆ DEPENDENCIES

list home_io_control.DEPENDENCIES = ["api", "spi"]

Definition at line 48 of file __init__.py.

◆ home_io_control_ns

home_io_control.home_io_control_ns = cg.esphome_ns.namespace("home_io_control")

Definition at line 132 of file __init__.py.

◆ IOHomeAcceptForeignPairingSwitch

home_io_control.IOHomeAcceptForeignPairingSwitch
Initial value:
1= home_io_control_ns.class_(
2 "IOHomeAcceptForeignPairingSwitch", switch_component.Switch, cg.Component
3)

Definition at line 143 of file __init__.py.

◆ IOHomeControlComponent

home_io_control.IOHomeControlComponent
Initial value:
1= home_io_control_ns.class_(
2 "IOHomeControlComponent", cg.Component, spi.SPIDevice
3)

Definition at line 133 of file __init__.py.

◆ IOHomeLr1121BootloaderRewriteSwitch

home_io_control.IOHomeLr1121BootloaderRewriteSwitch
Initial value:
1= home_io_control_ns.class_(
2 "IOHomeLr1121BootloaderRewriteSwitch", switch_component.Switch, cg.Component
3)

Definition at line 197 of file __init__.py.

◆ IOHomeLr1121FirmwareUpdateButton

home_io_control.IOHomeLr1121FirmwareUpdateButton
Initial value:
1= home_io_control_ns.class_(
2 "IOHomeLr1121FirmwareUpdateButton", button_component.Button, cg.Component
3)

Definition at line 157 of file __init__.py.

◆ IOHomeOneWayCommandButton

home_io_control.IOHomeOneWayCommandButton
Initial value:
1= home_io_control_ns.class_(
2 "IOHomeOneWayCommandButton", button_component.Button, cg.Component
3)

Definition at line 170 of file __init__.py.

◆ IOHomeOneWayEnrollButton

home_io_control.IOHomeOneWayEnrollButton
Initial value:
1= home_io_control_ns.class_(
2 "IOHomeOneWayEnrollButton", button_component.Button, cg.Component
3)

Definition at line 179 of file __init__.py.

◆ IOHomeOneWayLastCommandTextSensor

home_io_control.IOHomeOneWayLastCommandTextSensor
Initial value:
1= home_io_control_ns.class_(
2 "IOHomeOneWayLastCommandTextSensor", text_sensor_component.TextSensor, cg.Component
3)

Definition at line 173 of file __init__.py.

◆ IOHomeRecoverOneWayKeySwitch

home_io_control.IOHomeRecoverOneWayKeySwitch
Initial value:
1= home_io_control_ns.class_(
2 "IOHomeRecoverOneWayKeySwitch", switch_component.Switch, cg.Component
3)

Definition at line 150 of file __init__.py.

◆ IOHomeScanPairedDevicesButton

home_io_control.IOHomeScanPairedDevicesButton
Initial value:
1= home_io_control_ns.class_(
2 "IOHomeScanPairedDevicesButton", button_component.Button, cg.Component
3)

Definition at line 164 of file __init__.py.

◆ LR1121_BOOTLOADER_SCHEMA

home_io_control.LR1121_BOOTLOADER_SCHEMA
Initial value:
1= cv.Schema(
2 {
3 cv.Required(CONF_SOURCE): lambda value: validate_lr1121_firmware_source(value, expect_loader=True),
4 cv.Optional(CONF_REF): cv.string_strict,
5 cv.Optional(CONF_CHECKSUM_MD5): validate_checksum_md5,
6 }
7)

Definition at line 282 of file __init__.py.

◆ LR1121_FIRMWARE_UPDATE_SCHEMA

home_io_control.LR1121_FIRMWARE_UPDATE_SCHEMA

Definition at line 290 of file __init__.py.

◆ MIN_STATUS_POLL_INTERVAL_MS

int home_io_control.MIN_STATUS_POLL_INTERVAL_MS = 500

Definition at line 110 of file __init__.py.

◆ MULTI_CONF

bool home_io_control.MULTI_CONF = False

Definition at line 50 of file __init__.py.

◆ ONEWAY_COMMANDS

dict home_io_control.ONEWAY_COMMANDS
Initial value:
1= {
2 "open": OneWayButtonAction.OPEN,
3 "close": OneWayButtonAction.CLOSE,
4 "stop": OneWayButtonAction.STOP,
5 "vent": OneWayButtonAction.VENT,
6 "favorite": OneWayButtonAction.FAVORITE,
7}

Definition at line 186 of file __init__.py.

◆ OneWayButtonAction

home_io_control.OneWayButtonAction = home_io_control_ns.enum("OneWayButtonAction", is_class=True)

Definition at line 182 of file __init__.py.