13#include <dsmr/parser.h>
14#include <dsmr/fields.h>
21using namespace ::dsmr::fields;
25#if !defined(DSMR_SENSOR_LIST) && !defined(DSMR_TEXT_SENSOR_LIST)
27#define DSMR_TEXT_SENSOR_LIST(F, SEP) F(identification)
30#if defined(DSMR_SENSOR_LIST) && defined(DSMR_TEXT_SENSOR_LIST)
36#ifndef DSMR_SENSOR_LIST
37#define DSMR_SENSOR_LIST(F, SEP)
40#ifndef DSMR_TEXT_SENSOR_LIST
41#define DSMR_TEXT_SENSOR_LIST(F, SEP)
44#define DSMR_DATA_SENSOR(s) s
47using MyData = ::dsmr::ParsedData<DSMR_TEXT_SENSOR_LIST(DSMR_DATA_SENSOR, DSMR_COMMA)
48 DSMR_BOTH DSMR_SENSOR_LIST(DSMR_DATA_SENSOR, DSMR_COMMA)>;
54 void setup()
override;
60#define DSMR_PUBLISH_SENSOR(s) \
61 if (data.s##_present && this->s_##s##_ != nullptr) \
62 s_##s##_->publish_state(data.s);
65#define DSMR_PUBLISH_TEXT_SENSOR(s) \
66 if (data.s##_present && this->s_##s##_ != nullptr) \
67 s_##s##_->publish_state(data.s.c_str());
68 DSMR_TEXT_SENSOR_LIST(DSMR_PUBLISH_TEXT_SENSOR, )
80#define DSMR_SET_SENSOR(s) \
81 void set_##s(sensor::Sensor *sensor) { s_##s##_ = sensor; }
84#define DSMR_SET_TEXT_SENSOR(s) \
85 void set_##s(text_sensor::TextSensor *sensor) { s_##s##_ = sensor; }
86 DSMR_TEXT_SENSOR_LIST(DSMR_SET_TEXT_SENSOR, )
134#define DSMR_DECLARE_SENSOR(s) sensor::Sensor *s_##s##_{nullptr};
137#define DSMR_DECLARE_TEXT_SENSOR(s) text_sensor::TextSensor *s_##s##_{nullptr};
138 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_()
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)
void set_decryption_key(const std::string &decryption_key)
::dsmr::ParsedData< DSMR_TEXT_SENSOR_LIST(DSMR_DATA_SENSOR, DSMR_COMMA) DSMR_BOTH DSMR_SENSOR_LIST(DSMR_DATA_SENSOR, DSMR_COMMA)> MyData
Providing packet encoding functions for exchanging data with a remote host.