diff --git a/src/actors/sensoractor.cpp b/src/actors/sensoractor.cpp index 5e083ef..55dac9b 100644 --- a/src/actors/sensoractor.cpp +++ b/src/actors/sensoractor.cpp @@ -4,12 +4,12 @@ SensorActor::SensorActor(const Sensor sensor, QObject* parent): Actor(parent), sensor_(sensor) { - + connect(&timer_, &QTimer::timeout, this, &SensorActor::delayTimeout); } SensorActor::SensorActor(QObject* parent): Actor(parent) { - + connect(&timer_, &QTimer::timeout, this, &SensorActor::delayTimeout); } void SensorActor::setSensor(const Sensor sensor) @@ -17,14 +17,25 @@ void SensorActor::setSensor(const Sensor sensor) sensor_ = sensor; } +void SensorActor::delayTimeout() +{ + performAction(); +} + void SensorActor::sensorEvent(Sensor sensor, sensor_update_type_t type) { if(sensor == sensor_) { if((sloap_ == SLOPE_UP || sloap_ == SLOPE_BOTH) && sensor_.field < threshold_ - && sensor.field >= threshold_ ) performAction(); + && sensor.field >= threshold_ ) + { + timer_.start(delayMs_); + } else if((sloap_ == SLOPE_DOWN || sloap_ == SLOPE_BOTH) && sensor_.field > threshold_ - && sensor.field <= threshold_) performAction(); + && sensor.field <= threshold_) + { + timer_.start(delayMs_); + } sensor_ = sensor; } } @@ -39,21 +50,33 @@ void SensorActor::setThreshold(float threshold) threshold_ = threshold; } +void SensorActor::setDelayMs(int ms) +{ + delayMs_ = ms; +} + float SensorActor::getThreshold() { return threshold_; } + uint8_t SensorActor::getSloap() { return sloap_; } +int SensorActor::getDelayMs() +{ + return delayMs_; +} + void SensorActor::store(QJsonObject& json) { json["Type"] = "Sensor"; Actor::store(json); json["Sloap"] = sloap_; json["Threshold"] = threshold_; + json["Delay"] = delayMs_; json["SensorType"] = static_cast(sensor_.type); json["SensorId"] = static_cast(sensor_.id); json["SensorField"] = sensor_.field; @@ -65,6 +88,7 @@ void SensorActor::load(const QJsonObject& json, bool preserve) Actor::load(json, preserve); sloap_ = json["Sloap"].toInt(0); threshold_ = json["Threshold"].toDouble(0); + delayMs_ = json["Delay"].toInt(0); sensor_.type = static_cast(json["SensorType"].toInt(0)); sensor_.id = json["SensorId"].toInt(0); sensor_.field = json["SensorField"].toInt(0); diff --git a/src/actors/sensoractor.h b/src/actors/sensoractor.h index 99e2865..a233541 100644 --- a/src/actors/sensoractor.h +++ b/src/actors/sensoractor.h @@ -1,6 +1,7 @@ #pragma once #include "actor.h" #include "sensors/sensor.h" +#include class SensorActor : public Actor { @@ -15,6 +16,11 @@ private: Sensor sensor_; uint8_t sloap_ = SLOPE_UP; float threshold_ = 0; + int delayMs_ = 0; + QTimer timer_; + +private slots: + void delayTimeout(); public slots: @@ -22,7 +28,9 @@ public slots: void setSloap(uint8_t sloap); void setSensor(const Sensor sensor); - void setThreshold( float threshold ); + void setThreshold(float threshold); + void setDelayMs(int ms); + int getDelayMs(); public: