ESPHome 2026.1.0-dev
Loading...
Searching...
No Matches
openthread_info_text_sensor.h
Go to the documentation of this file.
1#pragma once
2
6#ifdef USE_OPENTHREAD
7
9
11
13 public:
14 void update() override {
15 auto lock = InstanceLock::try_acquire(10);
16 if (!lock) {
17 return;
18 }
19
20 this->update_instance(lock->get_instance());
21 }
22 float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
23
24 protected:
25 virtual void update_instance(otInstance *instance) = 0;
26};
27
29 public:
30 void update() override {
32 if (!address) {
33 return;
34 }
35
36 char address_as_string[40];
37 otIp6AddressToString(&*address, address_as_string, 40);
38 std::string ip = address_as_string;
39
40 if (this->last_ip_ != ip) {
41 this->last_ip_ = ip;
42 this->publish_state(this->last_ip_);
43 }
44 }
45 float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
46 void dump_config() override;
47
48 protected:
49 std::string last_ip_;
50};
51
53 public:
54 void update_instance(otInstance *instance) override {
55 otDeviceRole role = otThreadGetDeviceRole(instance);
56
57 if (this->last_role_ != role) {
58 this->last_role_ = role;
59 this->publish_state(otThreadDeviceRoleToString(this->last_role_));
60 }
61 }
62 void dump_config() override;
63
64 protected:
65 otDeviceRole last_role_;
66};
67
69 public:
70 void update_instance(otInstance *instance) override {
71 uint16_t rloc16 = otThreadGetRloc16(instance);
72 if (this->last_rloc16_ != rloc16) {
73 this->last_rloc16_ = rloc16;
74 char buf[5];
75 snprintf(buf, sizeof(buf), "%04x", rloc16);
76 this->publish_state(buf);
77 }
78 }
79 float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
80 void dump_config() override;
81
82 protected:
83 uint16_t last_rloc16_;
84};
85
87 public:
88 void update_instance(otInstance *instance) override {
89 const auto *extaddr = otLinkGetExtendedAddress(instance);
90 if (!std::equal(this->last_extaddr_.begin(), this->last_extaddr_.end(), extaddr->m8)) {
91 std::copy(extaddr->m8, extaddr->m8 + 8, this->last_extaddr_.begin());
92 this->publish_state(format_hex(extaddr->m8, 8));
93 }
94 }
95 float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
96 void dump_config() override;
97
98 protected:
99 std::array<uint8_t, 8> last_extaddr_{};
100};
101
103 public:
104 void update_instance(otInstance *instance) override {
105 otExtAddress addr;
106 otLinkGetFactoryAssignedIeeeEui64(instance, &addr);
107
108 if (!std::equal(this->last_eui64_.begin(), this->last_eui64_.end(), addr.m8)) {
109 std::copy(addr.m8, addr.m8 + 8, this->last_eui64_.begin());
110 this->publish_state(format_hex(this->last_eui64_.begin(), 8));
111 }
112 }
113 float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
114 void dump_config() override;
115
116 protected:
117 std::array<uint8_t, 8> last_eui64_{};
118};
119
121 public:
122 void update_instance(otInstance *instance) override {
123 uint8_t channel = otLinkGetChannel(instance);
124 if (this->last_channel_ != channel) {
125 this->last_channel_ = channel;
126 this->publish_state(std::to_string(this->last_channel_));
127 }
128 }
129 float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
130 void dump_config() override;
131
132 protected:
134};
135
137 public:
138 void update_instance(otInstance *instance) override {
139 otOperationalDataset dataset;
140 if (otDatasetGetActive(instance, &dataset) != OT_ERROR_NONE) {
141 return;
142 }
143
144 this->update_dataset(&dataset);
145 }
146
147 protected:
148 virtual void update_dataset(otOperationalDataset *dataset) = 0;
149};
150
152 public:
153 void update_dataset(otOperationalDataset *dataset) override {
154 if (this->last_network_name_ != dataset->mNetworkName.m8) {
155 this->last_network_name_ = dataset->mNetworkName.m8;
157 }
158 }
159 float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
160 void dump_config() override;
161
162 protected:
164};
165
167 public:
168 void update_dataset(otOperationalDataset *dataset) override {
169 if (!std::equal(this->last_key_.begin(), this->last_key_.end(), dataset->mNetworkKey.m8)) {
170 std::copy(dataset->mNetworkKey.m8, dataset->mNetworkKey.m8 + 16, this->last_key_.begin());
171 this->publish_state(format_hex(dataset->mNetworkKey.m8, 16));
172 }
173 }
174 float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
175 void dump_config() override;
176
177 protected:
178 std::array<uint8_t, 16> last_key_{};
179};
180
182 public:
183 void update_dataset(otOperationalDataset *dataset) override {
184 uint16_t panid = dataset->mPanId;
185 if (this->last_panid_ != panid) {
186 this->last_panid_ = panid;
187 char buf[5];
188 snprintf(buf, sizeof(buf), "%04x", panid);
189 this->publish_state(buf);
190 }
191 }
192 float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
193 void dump_config() override;
194
195 protected:
196 uint16_t last_panid_;
197};
198
200 public:
201 void update_dataset(otOperationalDataset *dataset) override {
202 if (!std::equal(this->last_extpanid_.begin(), this->last_extpanid_.end(), dataset->mExtendedPanId.m8)) {
203 std::copy(dataset->mExtendedPanId.m8, dataset->mExtendedPanId.m8 + 8, this->last_extpanid_.begin());
204 this->publish_state(format_hex(this->last_extpanid_.begin(), 8));
205 }
206 }
207
208 float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
209 void dump_config() override;
210
211 protected:
212 std::array<uint8_t, 8> last_extpanid_{};
213};
214
215} // namespace esphome::openthread_info
216#endif
uint8_t address
Definition bl0906.h:4
This class simplifies creating components that periodically check a state.
Definition component.h:474
static std::optional< InstanceLock > try_acquire(int delay)
std::optional< otIp6Address > get_omr_address()
virtual void update_dataset(otOperationalDataset *dataset)=0
void update_dataset(otOperationalDataset *dataset) override
void update_dataset(otOperationalDataset *dataset) override
void update_dataset(otOperationalDataset *dataset) override
virtual void update_instance(otInstance *instance)=0
void update_dataset(otOperationalDataset *dataset) override
void update_instance(otInstance *instance) override
void publish_state(const std::string &state)
OpenThreadComponent * global_openthread_component
const float AFTER_WIFI
For components that should be initialized after WiFi is connected.
Definition component.cpp:88
std::string format_hex(const uint8_t *data, size_t length)
Format the byte array data of length len in lowercased hex.
Definition helpers.cpp:323