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

Controller identities for the one-way (1W) protocol. More...

#include "proto_codecs.h"
#include "proto_constants.h"
#include "proto_device_model.h"
#include "proto_sizes.h"
#include <array>
#include <cstdint>
#include <optional>
#include <string>
#include <vector>
Include dependency graph for oneway_controller.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  esphome::home_io_control::OneWayCopyShape
 The preamble and CTRL1 shape one copy of a 1W burst gets. More...
struct  esphome::home_io_control::OneWayControllerIdentity
 One configured 1W controller identity. More...
struct  esphome::home_io_control::OneWayWireProfile
 Vendor-divergent 1W wire settings for a controller identity. More...
struct  esphome::home_io_control::OneWayActionEncoding
 How a OneWayButtonAction reaches the wire. More...
class  esphome::home_io_control::OneWayControllerRegistry
 The configured 1W controller identities, in YAML declaration order. More...

Namespaces

namespace  esphome
namespace  esphome::home_io_control

Enumerations

enum class  esphome::home_io_control::OneWayPowerClass : uint8_t { esphome::home_io_control::LEGACY_LONG , esphome::home_io_control::ALWAYS_ALIVE , esphome::home_io_control::LOW_POWER }
 Which preamble/CTRL1 shape a 1W identity's bursts actually go out with. More...
enum class  esphome::home_io_control::OneWayPreamble : uint8_t { esphome::home_io_control::WAKE , esphome::home_io_control::NORMAL }
 Which wake-up shape one copy of a 1W burst gets. More...
enum class  esphome::home_io_control::EnrollGesture : uint8_t { esphome::home_io_control::SOMFY , esphome::home_io_control::VELUX_KLI }
 Which 1W enrollment gesture a manufacturer's actuators expect. More...
enum class  esphome::home_io_control::OneWayButtonAction : uint8_t {
  esphome::home_io_control::OneWayButtonAction::OPEN , esphome::home_io_control::OneWayButtonAction::CLOSE , esphome::home_io_control::OneWayButtonAction::STOP , esphome::home_io_control::OneWayButtonAction::VENT ,
  esphome::home_io_control::OneWayButtonAction::FAVORITE
}
 The command a generated 1W button sends. More...

Functions

const char * esphome::home_io_control::oneway_power_class_name (OneWayPowerClass power_class)
 Human-readable name for a OneWayPowerClass, as it appears in the boot log.
OneWayCopyShape esphome::home_io_control::oneway_burst_copy_shape (OneWayPowerClass power_class, uint8_t copy_index)
 Resolve which preamble/CTRL1 shape one copy of a burst gets, from the identity's power class and the copy's position in the burst.
OneWayWireProfile esphome::home_io_control::resolve_oneway_wire_profile (uint8_t manufacturer)
 Resolve an identity's 1W wire profile from its manufacturer byte.
std::array< DeviceType, 3 > esphome::home_io_control::effective_enrollment_classes (const OneWayControllerIdentity &identity)
 The device classes this identity's 0x30 enrollment sweep will actually target.
uint8_t esphome::home_io_control::effective_execute_acei (const OneWayControllerIdentity &identity)
 The ACEI byte a given identity will put on air for a 1W EXECUTE frame.
bool esphome::home_io_control::has_execute_acei_override (const OneWayControllerIdentity &identity)
 Whether this identity's ACEI comes from an explicit execute_acei: rather than the profile.
OneWayPowerClass esphome::home_io_control::effective_power_class (const OneWayControllerIdentity &identity)
 The burst shape this identity actually transmits with.
bool esphome::home_io_control::has_power_class_override (const OneWayControllerIdentity &identity)
 Whether this identity's burst shape comes from an explicit low_power: rather than the profile.
OneWayActionEncoding esphome::home_io_control::encode_oneway_action (OneWayButtonAction action)
 Resolve a button action to the call that sends it.
const char * esphome::home_io_control::oneway_button_action_name (OneWayButtonAction action)
 Human-readable name for a button action, as it appears in the diagnostic sensor.

Variables

static constexpr std::array< DeviceType, 3 > esphome::home_io_control::VELUX_KLI_ENROLLMENT_CLASSES
 The default 0x30 sweep for manufacturer: velux: the exterior-shading classes a KLI 310/313 names — roller shutter, awning, dual shutter (issue #74 capture, decoded with broadcast_target_type(); matches samr037/iohc-flipper's PAIR_DST_{WINDOW,SHUTTER,OTHER}).
static constexpr uint8_t esphome::home_io_control::ONEWAY_POSITION_FULLY_OPEN = 0
 Wire-scale position meaning "fully closed" (0 means fully open).
static constexpr uint8_t esphome::home_io_control::ONEWAY_POSITION_FULLY_CLOSED = 100

Detailed Description

Controller identities for the one-way (1W) protocol.

1W frames are class-addressed: a command goes to a typed broadcast address (io_device_type << 6) | 0x3F, not to an individual device. Nothing on the wire names a device, so a 1W entity has no node address to bind to. What distinguishes one 1W control surface from another is the controller doing the transmitting — its source address, its network key, and the device class it speaks to. That triple is a controller identity, and it takes the place node addressing has for 2W. See ADR 0027.

A hub holds several, deliberately: adopting a foreign 1W network's key (see oneway_key_adoption.cpp) produces an identity whose key is not the hub's own, and it must coexist with identities on the hub's own network rather than replace them.

Note
Ownership. These identities belong to the OneWayTransmitter collaborator (oneway_transmitter.h), held by value in the hub, which keeps only the wiring (ADR 0004). This header owns the types; it does not own an instance of them.

Definition in file oneway_controller.h.