Add optional delay to sensor actor

This commit is contained in:
Carl Philipp Klemm 2026-06-24 09:18:31 +02:00
parent 58ba22b267
commit 8db0ac7290
2 changed files with 37 additions and 5 deletions

View file

@ -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<int>(sensor_.type);
json["SensorId"] = static_cast<int>(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<Sensor::sensor_type_t>(json["SensorType"].toInt(0));
sensor_.id = json["SensorId"].toInt(0);
sensor_.field = json["SensorField"].toInt(0);

View file

@ -1,6 +1,7 @@
#pragma once
#include "actor.h"
#include "sensors/sensor.h"
#include <QTimer>
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: