#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()); } } void send(const bool mqtt, const bool websocket) { JsonDocument json; toJson(json.to()); 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