113 lines
2.4 KiB
C++
113 lines
2.4 KiB
C++
#include "sensoractor.h"
|
|
|
|
#include <QDebug>
|
|
|
|
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)
|
|
{
|
|
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_ )
|
|
{
|
|
timer_.start(delayMs_);
|
|
}
|
|
else if((sloap_ == SLOPE_DOWN || sloap_ == SLOPE_BOTH) && sensor_.field > threshold_
|
|
&& sensor.field <= threshold_)
|
|
{
|
|
timer_.start(delayMs_);
|
|
}
|
|
sensor_ = sensor;
|
|
}
|
|
}
|
|
|
|
void SensorActor::setSloap(uint8_t sloap)
|
|
{
|
|
sloap_=sloap;
|
|
}
|
|
|
|
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;
|
|
json["SensorName"] = sensor_.name;
|
|
}
|
|
|
|
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);
|
|
sensor_.name = json["SensorName"].toString("Sensor");
|
|
}
|
|
|
|
QString SensorActor::getName() const
|
|
{
|
|
if(name_.size() > 0) return name_;
|
|
else
|
|
{
|
|
QString string;
|
|
string = "Sensor \"" + sensor_.name + "\"";
|
|
|
|
if(sloap_ == SLOPE_UP) string.append(" rises to ");
|
|
else if (sloap_ == SLOPE_DOWN) string.append(" drops to ");
|
|
else if (sloap_ == SLOPE_BOTH) string.append(" passes ");
|
|
|
|
string.append(QString::number(threshold_) + " ");
|
|
return string;
|
|
}
|
|
}
|