ESPHome 2025.5.0
Loading...
Searching...
No Matches
sml_text_sensor.cpp
Go to the documentation of this file.
2#include "esphome/core/log.h"
3#include "sml_text_sensor.h"
4#include "../sml_parser.h"
5
6namespace esphome {
7namespace sml {
8
9static const char *const TAG = "sml_text_sensor";
10
11SmlTextSensor::SmlTextSensor(std::string server_id, std::string obis_code, SmlType format)
12 : SmlListener(std::move(server_id), std::move(obis_code)), format_(format) {}
13
14void SmlTextSensor::publish_val(const ObisInfo &obis_info) {
15 uint8_t value_type;
16 if (this->format_ == SML_UNDEFINED) {
17 value_type = obis_info.value_type;
18 } else {
19 value_type = this->format_;
20 }
21
22 switch (value_type) {
23 case SML_HEX: {
24 publish_state("0x" + bytes_repr(obis_info.value));
25 break;
26 }
27 case SML_INT: {
29 break;
30 }
31 case SML_BOOL:
32 publish_state(bytes_to_uint(obis_info.value) ? "True" : "False");
33 break;
34 case SML_UINT: {
36 break;
37 }
38 case SML_OCTET: {
39 publish_state(std::string(obis_info.value.begin(), obis_info.value.end()));
40 break;
41 }
42 }
43}
44
46 LOG_TEXT_SENSOR("", "SML", this);
47 if (!this->server_id.empty()) {
48 ESP_LOGCONFIG(TAG, " Server ID: %s", this->server_id.c_str());
49 }
50 ESP_LOGCONFIG(TAG, " OBIS Code: %s", this->obis_code.c_str());
51}
52
53} // namespace sml
54} // namespace esphome
const uint8_t * begin() const noexcept
Definition sml_parser.h:35
const uint8_t * end() const noexcept
Definition sml_parser.h:37
std::string server_id
Definition sml.h:15
std::string obis_code
Definition sml.h:16
SmlTextSensor(std::string server_id, std::string obis_code, SmlType format)
void publish_val(const ObisInfo &obis_info) override
void publish_state(const std::string &state)
std::string bytes_repr(const BytesView &buffer)
int64_t bytes_to_int(const BytesView &buffer)
uint64_t bytes_to_uint(const BytesView &buffer)
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7
std::string to_string(int value)
Definition helpers.cpp:82