SensESP 3.3.0
Universal Signal K sensor toolkit ESP32
Loading...
Searching...
No Matches
sensor.h
Go to the documentation of this file.
1#ifndef SENSESP_SENSORS_SENSOR_H_
2#define SENSESP_SENSORS_SENSOR_H_
3
4#include <Arduino.h>
5#include <set>
6
7#include "ReactESP.h"
11#include "sensesp_base_app.h"
12
13namespace sensesp {
14
30class SensorConfig : virtual public Observable, public FileSystemSaveable {
31 public:
32 SensorConfig(const String& config_path) : FileSystemSaveable(config_path) {}
33
34 private:
35};
36
41template <typename T>
42class Sensor : public SensorConfig, virtual public ValueProducer<T> {
43 public:
44 Sensor(String config_path) : SensorConfig(config_path), ValueProducer<T>() {}
45};
46
51
52template <class T>
53class RepeatSensor : public Sensor<T> {
54 public:
67 RepeatSensor(unsigned int repeat_interval_ms, std::function<T()> callback)
68 : Sensor<T>(""),
69 repeat_interval_ms_(repeat_interval_ms),
70 returning_callback_(callback) {
71 repeat_event_ = event_loop()->onRepeat(repeat_interval_ms_, [this]() {
72 this->emit(this->returning_callback_());
73 });
74 }
75
89 RepeatSensor(unsigned int repeat_interval_ms,
90 std::function<void(RepeatSensor<T>*)> callback)
91 : Sensor<T>(""),
92 repeat_interval_ms_(repeat_interval_ms),
93 emitting_callback_(callback) {
95 [this]() { emitting_callback_(this); });
96 }
97
98 virtual ~RepeatSensor() {
99 if (repeat_event_ != nullptr) {
100 repeat_event_->remove(event_loop());
101 }
102 }
103
104 protected:
106 std::function<T()> returning_callback_ = nullptr;
107 std::function<void(RepeatSensor<T>*)> emitting_callback_ = nullptr;
108 reactesp::RepeatEvent* repeat_event_ = nullptr;
109};
110
111} // namespace sensesp
112
113#endif
FileSystemSaveable(const String &config_path)
Definition saveable.h:63
unsigned int repeat_interval_ms_
Definition sensor.h:105
std::function< void(RepeatSensor< T > *)> emitting_callback_
Definition sensor.h:107
RepeatSensor(unsigned int repeat_interval_ms, std::function< T()> callback)
Construct a new RepeatSensor object.
Definition sensor.h:67
virtual ~RepeatSensor()
Definition sensor.h:98
std::function< T()> returning_callback_
Definition sensor.h:106
RepeatSensor(unsigned int repeat_interval_ms, std::function< void(RepeatSensor< T > *)> callback)
Construct a new RepeatSensor object (supporting asynchronous callbacks).
Definition sensor.h:89
reactesp::RepeatEvent * repeat_event_
Definition sensor.h:108
SensorConfig(const String &config_path)
Definition sensor.h:32
Sensor template class for any sensor producing actual values.
Definition sensor.h:42
Sensor(String config_path)
Definition sensor.h:44
void emit(const T &new_value)
std::shared_ptr< reactesp::EventLoop > event_loop()
Definition sensesp.cpp:9
Sensor< float > FloatSensor
Definition sensor.h:47
Sensor< int > IntSensor
Definition sensor.h:48
Sensor< bool > BoolSensor
Definition sensor.h:49
Sensor< String > StringSensor
Definition sensor.h:50