Add unit support to sensors
This commit is contained in:
parent
3e0ba165e8
commit
37c0c5d17b
12 changed files with 73 additions and 41 deletions
|
|
@ -10,32 +10,34 @@ class Sensor
|
|||
{
|
||||
public:
|
||||
|
||||
static constexpr uint8_t TYPE_DOOR = 0;
|
||||
static constexpr uint8_t TYPE_TEMPERATURE = 1;
|
||||
static constexpr uint8_t TYPE_HUMIDITY = 2;
|
||||
static constexpr uint8_t TYPE_PRESSURE = 3;
|
||||
static constexpr uint8_t TYPE_BRIGHTNESS = 4;
|
||||
static constexpr uint8_t TYPE_BUTTON = 5;
|
||||
static constexpr uint8_t TYPE_ADC = 6;
|
||||
static constexpr uint8_t TYPE_CO2 = 7;
|
||||
static constexpr uint8_t TYPE_FORMALDEHYD= 8;
|
||||
static constexpr uint8_t TYPE_PM25 = 9;
|
||||
static constexpr uint8_t TYPE_TOTAL_VOC = 10;
|
||||
static constexpr uint8_t TYPE_LOWBATTERY = 128;
|
||||
static constexpr uint8_t TYPE_SHUTDOWN_IMMINENT = 251;
|
||||
static constexpr uint8_t TYPE_OCUPANCY = 252;
|
||||
static constexpr uint8_t TYPE_SUN_ALTITUDE = 253;
|
||||
static constexpr uint8_t TYPE_AUDIO_OUTPUT = 254;
|
||||
static constexpr uint8_t TYPE_DUMMY = 255;
|
||||
typedef enum {
|
||||
TYPE_DOOR = 0,
|
||||
TYPE_TEMPERATURE,
|
||||
TYPE_HUMIDITY,
|
||||
TYPE_PRESSURE,
|
||||
TYPE_BRIGHTNESS,
|
||||
TYPE_BUTTON,
|
||||
TYPE_ADC,
|
||||
TYPE_CO2,
|
||||
TYPE_FORMALDEHYD,
|
||||
TYPE_PM25,
|
||||
TYPE_TOTAL_VOC,
|
||||
TYPE_LOWBATTERY = 128,
|
||||
TYPE_SHUTDOWN_IMMINENT = 251,
|
||||
TYPE_OCUPANCY,
|
||||
TYPE_SUN_ALTITUDE,
|
||||
TYPE_AUDIO_OUTPUT,
|
||||
TYPE_DUMMY,
|
||||
} sensor_type_t;
|
||||
|
||||
uint8_t type;
|
||||
sensor_type_t type;
|
||||
uint64_t id;
|
||||
float field;
|
||||
QString name;
|
||||
QDateTime lastSeen;
|
||||
bool hidden;
|
||||
|
||||
Sensor(uint64_t typeIn, uint8_t idIn, float fieldIn = 0, QString nameIn = "", bool hiddenIn = false): type(typeIn),
|
||||
Sensor(sensor_type_t typeIn, uint64_t idIn, float fieldIn = 0, QString nameIn = "", bool hiddenIn = false): type(typeIn),
|
||||
id(idIn), field(fieldIn), name(nameIn), hidden(hiddenIn)
|
||||
{
|
||||
lastSeen = QDateTime::currentDateTime();
|
||||
|
|
@ -48,7 +50,7 @@ public:
|
|||
}
|
||||
Sensor(const QJsonObject& json)
|
||||
{
|
||||
type = json["SensorType"].toInt(0);
|
||||
type = static_cast<sensor_type_t>(json["SensorType"].toInt(0));
|
||||
id = json["Id"].toInt(0);
|
||||
field = json["Field"].toDouble(0);
|
||||
name = json["Name"].toString("Sensor");
|
||||
|
|
@ -72,7 +74,7 @@ public:
|
|||
QStringList bufferList = str.split(' ');
|
||||
if(bufferList.size() >= 7)
|
||||
{
|
||||
Sensor sensor(bufferList[2].toUInt(), bufferList[4].toUInt(), bufferList[6].toUInt());
|
||||
Sensor sensor(static_cast<sensor_type_t>(bufferList[2].toUInt()), bufferList[4].toUInt(), bufferList[6].toUInt());
|
||||
if(sensor.type == Sensor::TYPE_HUMIDITY || sensor.type == Sensor::TYPE_TEMPERATURE)
|
||||
sensor.field = sensor.field/10;
|
||||
|
||||
|
|
@ -100,6 +102,7 @@ public:
|
|||
json["Name"] = name;
|
||||
json["LastSeen"] = lastSeen.toString();
|
||||
json["Hidden"] = hidden;
|
||||
json["Unit"] = getUnit();
|
||||
}
|
||||
inline void generateName()
|
||||
{
|
||||
|
|
@ -119,6 +122,31 @@ public:
|
|||
name = "Shutdown Imminent";
|
||||
else name = "Sensor Type " + QString::number(type) + " Id " + QString::number(id);
|
||||
}
|
||||
QString getUnit()
|
||||
{
|
||||
switch(type)
|
||||
{
|
||||
case TYPE_TEMPERATURE:
|
||||
return "°C";
|
||||
case TYPE_HUMIDITY:
|
||||
return "%";
|
||||
case TYPE_PRESSURE:
|
||||
return "hPa";
|
||||
case TYPE_BRIGHTNESS:
|
||||
return "lx";
|
||||
case TYPE_CO2:
|
||||
return "ppm";
|
||||
case TYPE_FORMALDEHYD:
|
||||
case TYPE_PM25:
|
||||
return "µg/m³";
|
||||
case TYPE_TOTAL_VOC:
|
||||
return "ppb";
|
||||
case TYPE_SUN_ALTITUDE:
|
||||
return "°";
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class SensorStore: public QObject
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue