57 lines
1.0 KiB
C++
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
|