8#include <dsmr_parser/fields.h>
9#include <dsmr_parser/parser.h>
14using namespace dsmr_parser::fields;
18#if !defined(DSMR_SENSOR_LIST) && !defined(DSMR_TEXT_SENSOR_LIST)
20#define DSMR_TEXT_SENSOR_LIST(F, SEP) F(identification)
23#if defined(DSMR_SENSOR_LIST) && defined(DSMR_TEXT_SENSOR_LIST)
29#ifndef DSMR_SENSOR_LIST
30#define DSMR_SENSOR_LIST(F, SEP)
33#ifndef DSMR_TEXT_SENSOR_LIST
34#define DSMR_TEXT_SENSOR_LIST(F, SEP)
37#define DSMR_DATA_SENSOR(s) s
40using MyData = dsmr_parser::ParsedData<DSMR_TEXT_SENSOR_LIST(DSMR_DATA_SENSOR, DSMR_COMMA)
41 DSMR_BOTH DSMR_SENSOR_LIST(DSMR_DATA_SENSOR, DSMR_COMMA)>;
47 void setup()
override;
53#define DSMR_PUBLISH_SENSOR(s) \
54 if (data.s##_present && this->s_##s##_ != nullptr) \
55 s_##s##_->publish_state(data.s);
58#define DSMR_PUBLISH_TEXT_SENSOR(s) \
59 if (data.s##_present && this->s_##s##_ != nullptr) \
60 s_##s##_->publish_state(data.s.c_str());
61 DSMR_TEXT_SENSOR_LIST(DSMR_PUBLISH_TEXT_SENSOR, )
73#define DSMR_SET_SENSOR(s) \
74 void set_##s(sensor::Sensor *sensor) { s_##s##_ = sensor; }
77#define DSMR_SET_TEXT_SENSOR(s) \
78 void set_##s(text_sensor::TextSensor *sensor) { s_##s##_ = sensor; }
79 DSMR_TEXT_SENSOR_LIST(DSMR_SET_TEXT_SENSOR, )
128#define DSMR_DECLARE_SENSOR(s) sensor::Sensor *s_##s##_{nullptr};
131#define DSMR_DECLARE_TEXT_SENSOR(s) text_sensor::TextSensor *s_##s##_{nullptr};
132 DSMR_TEXT_SENSOR_LIST(DSMR_DECLARE_TEXT_SENSOR, )
void stop_requesting_data_()
uint32_t last_request_time_
size_t crypt_telegram_len_
uint32_t receive_timeout_
void set_max_telegram_length(size_t length)
void set_receive_timeout(uint32_t timeout)
void set_telegram(text_sensor::TextSensor *sensor)
bool ready_to_request_data_()
bool available_within_timeout_()
Wait for UART data to become available within the read timeout.
text_sensor::TextSensor * s_telegram_
void publish_sensors(MyData &data)
bool request_interval_reached_()
void start_requesting_data_()
void set_decryption_key(const char *decryption_key)
Dsmr(uart::UARTComponent *uart, bool crc_check)
DSMR_SENSOR_LIST(DSMR_SET_SENSOR,) DSMR_TEXT_SENSOR_LIST(DSMR_SET_TEXT_SENSOR
uint8_t * crypt_telegram_
void set_request_interval(uint32_t interval)
uint32_t request_interval_
DSMR_SENSOR_LIST(DSMR_DECLARE_SENSOR,) DSMR_TEXT_SENSOR_LIST(DSMR_DECLARE_TEXT_SENSOR
std::vector< uint8_t > decryption_key_
void dump_config() override
bool receive_timeout_reached_()
void receive_encrypted_telegram_()
void set_request_pin(GPIOPin *request_pin)
dsmr_parser::ParsedData< DSMR_TEXT_SENSOR_LIST(DSMR_DATA_SENSOR, DSMR_COMMA) DSMR_BOTH DSMR_SENSOR_LIST(DSMR_DATA_SENSOR, DSMR_COMMA)> MyData