9#include "esphome/core/hal.h"
10#include "esphome/core/log.h"
23constexpr float MS_PER_SECOND = 1000.0F;
27constexpr uint32_t HEARTBEAT_INTERVAL_MS = 60000;
34 this->publish_state(ema_dbm);
39 static const char *
const TAG =
"home_io_control.rssi";
40 LOG_SENSOR(
"",
"IO-Homecontrol RSSI",
this);
41 ESP_LOGCONFIG(TAG,
" Device ID: %s", this->
device_id_.c_str());
47 this->set_interval(
"heartbeat", HEARTBEAT_INTERVAL_MS, [
this]() {
50 if (
const auto *dev = this->
parent_->
get_device(this->device_id_); dev !=
nullptr)
57 this->publish_state(
static_cast<float>(millis() - dev.
last_seen_ms) / MS_PER_SECOND);
61 static const char *
const TAG =
"home_io_control.last_contact";
62 LOG_SENSOR(
"",
"IO-Homecontrol Last Contact",
this);
63 ESP_LOGCONFIG(TAG,
" Device ID: %s", this->
device_id_.c_str());
72 static const char *
const TAG =
"home_io_control.exchange_failures";
73 LOG_SENSOR(
"",
"IO-Homecontrol Exchange Failures",
this);
74 ESP_LOGCONFIG(TAG,
" Device ID: %s", this->
device_id_.c_str());
78 static const char *
const TAG =
"home_io_control.unconfirmed_exchanges";
79 LOG_SENSOR(
"",
"IO-Homecontrol Unconfirmed Exchanges",
this);
80 ESP_LOGCONFIG(TAG,
" Device ID: %s", this->
device_id_.c_str());
89 this->set_timeout(
"init_name", INITIAL_STATUS_REQUEST_DELAY_MS,
94 static const char *
const TAG =
"home_io_control.device_name";
95 LOG_TEXT_SENSOR(
"",
"IO-Homecontrol Device Name",
this);
96 ESP_LOGCONFIG(TAG,
" Device ID: %s", this->
device_id_.c_str());
107 static const char *
const TAG =
"home_io_control.active_issue";
108 LOG_TEXT_SENSOR(
"",
"IO-Homecontrol Active Issue",
this);
109 ESP_LOGCONFIG(TAG,
" Device ID: %s", this->
device_id_.c_str());
122 static const char *
const TAG =
"home_io_control.last_commanded_by";
123 LOG_TEXT_SENSOR(
"",
"IO-Homecontrol Last Commanded By",
this);
124 ESP_LOGCONFIG(TAG,
" Device ID: %s", this->
device_id_.c_str());
133 static const char *
const TAG =
"home_io_control.last_command_source";
134 LOG_TEXT_SENSOR(
"",
"IO-Homecontrol Last Command Source",
this);
135 ESP_LOGCONFIG(TAG,
" Device ID: %s", this->
device_id_.c_str());
void register_companion_binding_(const std::function< void(const IoDevice &)> &publish)
Shared setup() body: subscribe to this device's updates and publish the initial state.
IOHomeControlComponent * parent_
void setup() override
Register the device-update subscription and publish the initial cached state.
void dump_config() override
Dump text-sensor configuration to the log.
std::string describe_last_commander(const IoDevice &dev) const
Render a device's "last commanded by" string, resolving this hub's own node ID.
virtual IoDevice * get_device(const std::string &device_id)
Retrieve a device by ID; returns nullptr if not found.
virtual void queue_request_device_name(const std::string &device_id)
Queue an async device-name request; returns immediately, executed in loop().
void setup() final
Register the device-update subscription and publish the initial cached count.
virtual uint16_t counter_value(const IoDevice &dev) const =0
Return the counter this sensor publishes.
void setup() override
Register the device-update subscription and schedule an initial name fetch.
void dump_config() override
Dump text-sensor configuration to the log.
void dump_config() override
Dump sensor configuration to the log.
void dump_config() override
void dump_config() override
void dump_config() override
Dump sensor configuration to the log.
Conversions and renderers shared by the hub and its Home Assistant entities.
std::string describe_last_command_source(const IoDevice &dev)
Render the "Last Command Source" sensor string.
const char * command_result_name(uint8_t result)
Return a stable symbolic name for a CMD_ERROR_RESP result code.
int16_t device_rssi_ema_dbm(const IoDevice &dev)
A device's smoothed RSSI in whole dBm.
IO-Homecontrol command IDs, result codes and protocol enumerations.
Runtime state of a paired IO‑Homecontrol device.
uint8_t last_result_code
Last CMD_ERROR_RESP result byte (0 = none recorded).
char name[DEVICE_NAME_BUFFER_SIZE]
Cached UTF-8 device name decoded from Latin-1 wire payloads.
uint32_t last_seen_ms
millis() of the last frame received from this device (any command), 0 = never.