ESPHome  2022.8.0
sml_text_sensor.cpp
Go to the documentation of this file.
1 #include "esphome/core/helpers.h"
2 #include "esphome/core/log.h"
3 #include "sml_text_sensor.h"
4 #include "../sml_parser.h"
5 
6 namespace esphome {
7 namespace sml {
8 
9 static const char *const TAG = "sml_text_sensor";
10 
11 SmlTextSensor::SmlTextSensor(std::string server_id, std::string obis_code, SmlType format)
12  : SmlListener(std::move(server_id), std::move(obis_code)), format_(format) {}
13 
14 void 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
std::string bytes_repr(const bytes &buffer)
Definition: sml_parser.cpp:78
SmlTextSensor(std::string server_id, std::string obis_code, SmlType format)
STL namespace.
int64_t bytes_to_int(const bytes &buffer)
Definition: sml_parser.cpp:94
void publish_state(const std::string &state)
Definition: text_sensor.cpp:12
uint64_t bytes_to_uint(const bytes &buffer)
Definition: sml_parser.cpp:86
std::string server_id
Definition: sml.h:14
std::string to_string(int value)
Definition: helpers.cpp:36
std::string obis_code
Definition: sml.h:15
void publish_val(const ObisInfo &obis_info) override
Definition: a4988.cpp:4