1 #pragma once 2 3 #include "interfaces/clock.hpp" 4 #include "interfaces/sensor.hpp" 5 #include "interfaces/sensor_listener.hpp" 6 #include "interfaces/threshold.hpp" 7 #include "interfaces/trigger_action.hpp" 8 #include "types/trigger_types.hpp" 9 10 #include <boost/asio/steady_timer.hpp> 11 12 #include <chrono> 13 #include <memory> 14 #include <vector> 15 16 class OnChangeThreshold : 17 public interfaces::Threshold, 18 public interfaces::SensorListener, 19 public std::enable_shared_from_this<OnChangeThreshold> 20 { 21 public: 22 OnChangeThreshold( 23 const std::string& triggerId, Sensors sensors, 24 std::vector<std::unique_ptr<interfaces::TriggerAction>> actions, 25 std::unique_ptr<interfaces::Clock> clock); 26 ~OnChangeThreshold() = default; 27 OnChangeThreshold(const OnChangeThreshold&) = delete; 28 OnChangeThreshold& operator=(const OnChangeThreshold&) = delete; 29 OnChangeThreshold(OnChangeThreshold&&) = delete; 30 OnChangeThreshold& operator=(OnChangeThreshold&&) = delete; 31 32 void initialize() override; 33 void sensorUpdated(interfaces::Sensor&, Milliseconds, double) override; 34 LabeledThresholdParam getThresholdParam() const override; 35 void updateSensors(Sensors newSensors) override; 36 37 private: 38 const std::string& triggerId; 39 Sensors sensors; 40 const std::vector<std::unique_ptr<interfaces::TriggerAction>> actions; 41 bool initialized = false; 42 bool isFirstReading = true; 43 std::unique_ptr<interfaces::Clock> clock; 44 45 void commit(const std::string&, double); 46 }; 47