ESPHome 2026.10.0
Loading...
Searching...
No Matches
homeassistant_text.cpp
Go to the documentation of this file.
2
3#include <cstring>
4
8#include "esphome/core/log.h"
10
11namespace esphome::homeassistant {
12
13static const char *const TAG = "homeassistant.text";
14
16 if (state == this->state) {
17 return;
18 }
19 ESP_LOGD(TAG, "'%s': Got state %s", this->entity_id_, state.c_str());
20 this->publish_state(state.c_str(), state.size());
21}
22
24 auto min_value = parse_number<int>(min.c_str());
25 if (!min_value.has_value()) {
26 ESP_LOGE(TAG, "'%s': Can't convert 'min' value '%s' to number!", this->entity_id_, min.c_str());
27 return;
28 }
29 ESP_LOGD(TAG, "'%s': Min retrieved: %s", this->entity_id_, min.c_str());
30 this->traits.set_min_length(min_value.value());
31}
32
34 auto max_value = parse_number<int>(max.c_str());
35 if (!max_value.has_value()) {
36 ESP_LOGE(TAG, "'%s': Can't convert 'max' value '%s' to number!", this->entity_id_, max.c_str());
37 return;
38 }
39 ESP_LOGD(TAG, "'%s': Max retrieved: %s", this->entity_id_, max.c_str());
40 this->traits.set_max_length(max_value.value());
41}
42
44 if (mode == "text") {
46 } else if (mode == "password") {
48 } else {
49 ESP_LOGW(TAG, "'%s': Unknown 'mode' value '%s'", this->entity_id_, mode.c_str());
50 return;
51 }
52 ESP_LOGD(TAG, "'%s': Mode retrieved: %s", this->entity_id_, mode.c_str());
53}
54
57 [this](StringRef state) { this->state_changed_(state); });
58
60 [this](StringRef min) { this->min_retrieved_(min); });
62 [this](StringRef max) { this->max_retrieved_(max); });
64 [this](StringRef mode) { this->mode_retrieved_(mode); });
65 // The "pattern" attribute is not fetched: Home Assistant sends "None" when it is unset,
66 // and a runtime pattern would need its own buffer.
67}
68
70 LOG_TEXT("", "Homeassistant Text", this);
71 ESP_LOGCONFIG(TAG, " Entity ID: '%s'", this->entity_id_);
72}
73
75
76void HomeassistantText::control(const std::string &value) {
77 if (!api::global_api_server->is_connected()) {
78 ESP_LOGE(TAG, "No clients connected to API server");
79 return;
80 }
81
82#ifdef USE_API_WIZARD_LINKED_INPUTS
83 if (this->entity_id_[0] == '\0') {
84 ESP_LOGW(TAG, "'%s': No entity ID set yet", this->get_name().c_str());
85 return;
86 }
87#endif
88
89 static constexpr auto SERVICE_TEXT = StringRef::from_lit("text.set_value");
90 static constexpr auto SERVICE_INPUT_TEXT = StringRef::from_lit("input_text.set_value");
91 static constexpr auto ENTITY_ID_KEY = StringRef::from_lit("entity_id");
92 static constexpr auto VALUE_KEY = StringRef::from_lit("value");
93 static constexpr char INPUT_PREFIX[] = "input_";
94
96 if (strncmp(this->entity_id_, INPUT_PREFIX, sizeof(INPUT_PREFIX) - 1) == 0) {
97 resp.service = SERVICE_INPUT_TEXT;
98 } else {
99 resp.service = SERVICE_TEXT;
100 }
101
102 resp.data.init(2);
103 auto &entity_id_kv = resp.data.emplace_back();
104 entity_id_kv.key = ENTITY_ID_KEY;
105 entity_id_kv.value = StringRef(this->entity_id_);
106
107 auto &value_kv = resp.data.emplace_back();
108 value_kv.key = VALUE_KEY;
109 value_kv.value = StringRef(value.data(), value.size());
110
112}
113
114} // namespace esphome::homeassistant
BedjetMode mode
BedJet operating mode.
const StringRef & get_name() const
Definition entity_base.h:71
StringRef is a reference to a string owned by something else.
Definition string_ref.h:30
constexpr const char * c_str() const
Definition string_ref.h:77
static constexpr StringRef from_lit(const CharT(&s)[N])
Definition string_ref.h:54
void get_home_assistant_state(const char *entity_id, const char *attribute, std::function< void(StringRef)> &&f)
void send_homeassistant_action(const HomeassistantActionRequest &call)
void subscribe_home_assistant_state(const char *entity_id, const char *attribute, std::function< void(StringRef)> &&f)
FixedVector< HomeassistantServiceMap > data
Definition api_pb2.h:1414
void control(const std::string &value) override
void publish_state(const std::string &state)
Definition text.h:26
std::string state
Definition text.h:23
TextTraits traits
Definition text.h:24
void set_mode(TextMode mode)
Definition text_traits.h:29
void set_max_length(int max_length)
Definition text_traits.h:19
void set_min_length(int min_length)
Definition text_traits.h:17
bool state
Definition fan.h:2
APIServer * global_api_server
constexpr float AFTER_CONNECTION
For components that should be initialized after a data connection (API/MQTT) is connected.
Definition component.h:57
optional< T > parse_number(const char *str)
Parse an unsigned decimal number from a null-terminated string.
Definition helpers.h:1273