#pragma once #include <string> #include <vector> #include <functional> #include "device/device_config.h" #ifndef MEASURED_PERIOD_MS #define MEASURED_PERIOD_MS 1000 #endif namespace qthing { namespace measured { typedef struct { const std::string *name; const std::string *type; const std::string *unit; const float value; } sensor_data_t; typedef std::function<float()> sensor_t; typedef std::function<void(const std::vector<sensor_data_t>&)> backend_t; void register_backend(backend_t new_backend); void register_sensor(std::string name, std::string type, std::string unit, sensor_t sensor); void set_measure_period(uint16_t period); class Measured { typedef struct { std::string name; std::string type; std::string unit; qthing::measured::sensor_t sensor; } sensor_config_t; public: Measured(); void register_backend(backend_t new_backend); void register_sensor(std::string name, std::string type, std::string unit, sensor_t sensor); void set_measure_period(uint16_t period); private: std::vector<sensor_config_t> sensors; qthing::measured::backend_t backend; uint16_t measure_period = MEASURED_PERIOD_MS; void measured(); }; namespace backend { void mqtt(const std::vector<qthing::measured::sensor_data_t>& data); } } }