Sensor4/src/patrix/Node.h

57 lines
1.0 KiB
C++

#ifndef NODE_H
#define NODE_H
#include "sensor/Sensor.h"
class Node {
public:
virtual ~Node() = default;
void toJson(const JsonObject& json) {
auto index = 0;
Sensor *sensor;
while ((sensor = getSensor(index++)) != nullptr) {
sensor->toJson(json[sensor->getName()].to<JsonObject>());
}
}
void send(const bool mqtt, const bool websocket) {
JsonDocument json;
toJson(json.to<JsonObject>());
mqttPublish(String(WiFiClass::getHostname()) + "/json", json, mqtt, websocket);
}
void loop() {
loopBeforeSensors();
const auto changed = loopSensors();
if (changed) {
send(true, true);
}
}
virtual void setup() {}
virtual void loopBeforeSensors() {}
virtual Sensor *getSensor(int index) = 0;
private:
bool loopSensors() {
auto changed = false;
auto index = 0;
Sensor *sensor;
while ((sensor = getSensor(index++)) != nullptr) {
if (sensor->loop()) {
changed = true;
}
}
return changed;
}
};
#endif //NODE_H