Skip to content
Snippets Groups Projects
measured.h 1.59 KiB
Newer Older
fxk8y's avatar
fxk8y committed
#pragma once

#include <string>
fxk8y's avatar
fxk8y committed
#include <vector>
fxk8y's avatar
fxk8y committed
#include <functional>
#include "device/device_config.h"

#ifndef MEASURED_PERIOD_MS
#define MEASURED_PERIOD_MS 1000
#endif


fxk8y's avatar
fxk8y committed
namespace qthing {

    namespace measured {

fxk8y's avatar
fxk8y committed
        typedef struct {
            const std::string *name;
            const std::string *type;
            const std::string *unit;
            const float value;
        } sensor_data_t;

fxk8y's avatar
fxk8y committed
        typedef std::function<float()> sensor_t;
        typedef std::function<void(const std::vector<sensor_data_t>&)> backend_t;
fxk8y's avatar
fxk8y committed
        void register_backend(backend_t new_backend);
        void register_sensor(std::string name, std::string type, std::string unit, sensor_t sensor);
fxk8y's avatar
fxk8y committed
        void set_measure_period(uint16_t period);
fxk8y's avatar
fxk8y committed

fxk8y's avatar
fxk8y committed
        class Measured {

            typedef struct {
                std::string name;
                std::string type;
                std::string unit;
                qthing::measured::sensor_t sensor;
            } sensor_config_t;

            public:
                Measured();
fxk8y's avatar
fxk8y committed
                void register_backend(backend_t new_backend);
                void register_sensor(std::string name, std::string type, std::string unit, sensor_t sensor);
fxk8y's avatar
fxk8y committed
                void set_measure_period(uint16_t period);
fxk8y's avatar
fxk8y committed

            private:
                std::vector<sensor_config_t> sensors;
                qthing::measured::backend_t backend;
                uint16_t measure_period = MEASURED_PERIOD_MS;
                void measured();
        };

fxk8y's avatar
fxk8y committed
        namespace backend {
            void mqtt(const std::vector<qthing::measured::sensor_data_t>& data);
fxk8y's avatar
fxk8y committed
        }