#include "sensor.h" #include #include SensorStore globalSensors; SensorStore::SensorStore(QObject *parent): QObject(parent) { sensors_.push_back(Sensor(Sensor::TYPE_DOOR,1,0,"Front door")); sensors_.push_back(Sensor(Sensor::TYPE_DOOR,0,0,"Bedroom door")); } void SensorStore::store(QJsonObject& json) { QJsonArray sensorsArray; for(const Sensor& sensor : sensors_) { QJsonObject sensorObject; sensor.store(sensorObject); sensorsArray.append(sensorObject); } json["Sensors"] = sensorsArray; } void SensorStore::load(const QJsonObject& json) { knownSensors_.clear(); QJsonArray sensorsArray = json["Sensors"].toArray(); for(const QJsonValue& value : sensorsArray) { knownSensors_.push_back(Sensor(value.toObject())); } } std::vector SensorStore::allGroups() const { std::vector groups; for(const Sensor& sensor : sensors_) { if(!sensor.groupName.isEmpty()) { bool found = false; for(const QString& group : groups) { if(group == sensor.groupName) { found = true; break; } } if(!found) groups.push_back(sensor.groupName); } } return groups; } void SensorStore::sensorGotState(const Sensor& sensor, sensor_update_type_t type) { bool inSensors = false; for(unsigned i = 0; i < sensors_.size(); ++i) { if(sensor.type == sensors_[i].type && sensor.id == sensors_[i].id) { sensors_[i].updateSeen(); if(sensors_[i].field != sensor.field) { sensors_[i].field = sensor.field; if(type == SENSOR_UPDATE_USER) { sensors_[i].name = sensor.name; sensors_[i].hidden = sensor.hidden; sensors_[i].groupName = sensor.groupName; // Also update knownSensors_ for(Sensor& known : knownSensors_) { if(sensor.type == known.type && sensor.id == known.id) { known.name = sensor.name; known.hidden = sensor.hidden; known.groupName = sensor.groupName; break; } } } sensorChangedState(sensors_[i], type); stateChenged(sensors_); } inSensors = true; break; } } if(!inSensors) { Sensor newSensor = sensor; // Check knownSensors_ for matching sensor to override name and hidden state for(const Sensor& known : knownSensors_) { if(sensor.type == known.type && sensor.id == known.id) { newSensor.name = known.name; newSensor.hidden = known.hidden; newSensor.groupName = known.groupName; break; } } sensors_.push_back(newSensor); sensorChangedState(newSensor, type); stateChenged(sensors_); } for(unsigned i = 0; i < sensors_.size(); ++i) { if(sensors_[i].type > 0 && sensors_[i].type < 128 && QDateTime::currentDateTime() > sensors_[i].lastSeen.addSecs(1800)) { sensorDeleted(sensors_[i]); stateChenged(sensors_); sensors_.erase(sensors_.begin()+i); } } }