7static const char *
const TAG =
"emontx";
21 uint8_t received = this->
read();
23 if (received ==
'\r') {
25 }
else if (received ==
'\n') {
34 ESP_LOGD(TAG,
"Received line: %s",
line.c_str());
41 ESP_LOGV(TAG,
"Line is JSON, parsing...");
46 ESP_LOGW(TAG,
"Buffer overflow (>%zu bytes), discarding buffer", MAX_LINE_LENGTH);
55 bool success =
json::parse_json(
reinterpret_cast<const uint8_t *
>(data),
len, [
this, data,
len](JsonObject root) {
57 for (
auto &sensor_pair : this->
sensors_) {
58 auto val = root[sensor_pair.first];
59 if (
val.is<JsonVariant>()) {
61 ESP_LOGV(TAG,
"Updating sensor '%s' with value: %.2f", sensor_pair.first, value);
62 sensor_pair.second->publish_state(value);
72 ESP_LOGW(TAG,
"Failed to parse JSON");
80 ESP_LOGCONFIG(TAG,
"EmonTx:");
83 ESP_LOGCONFIG(TAG,
" Registered sensors: %zu", this->
sensors_.size());
84 for (
const auto &sensor_pair : this->
sensors_) {
85 ESP_LOGCONFIG(TAG,
" Sensor: %s", sensor_pair.first);
88 ESP_LOGCONFIG(TAG,
" Sensor support: DISABLED");
98 ESP_LOGD(TAG,
"Sending command to emonTx: %s", command.c_str());
111 ESP_LOGCONFIG(TAG,
"Registering sensor for tag: %s", tag_name);
112 this->
sensors_.emplace_back(tag_name, sensor);
StringRef is a reference to a string owned by something else.
FixedVector< std::pair< const char *, sensor::Sensor * > > sensors_
void loop() override
Implements the main loop for parsing data from the serial port.
void dump_config() override
Logs the EmonTx component configuration details.
std::array< char, MAX_LINE_LENGTH+1 > buffer_
void send_command(const std::string &command)
Sends a command string to the emonTx device via UART.
void register_sensor(const char *tag_name, sensor::Sensor *sensor)
Registers a sensor to receive updates for a specific JSON tag.
LazyCallbackManager< void(JsonObject, StringRef)> json_callbacks_
LazyCallbackManager< void(StringRef)> data_callbacks_
void parse_json_(const char *data, size_t len)
Base-class for all sensors.
void write_str(const char *str)
void write_byte(uint8_t data)
bool parse_json(const std::string &data, const json_parse_t &f)
Parse a JSON string and run the provided json parse function if it's valid.