diff --git a/include/classes/IoTItem.h b/include/classes/IoTItem.h index 337a9911..9ba3d501 100644 --- a/include/classes/IoTItem.h +++ b/include/classes/IoTItem.h @@ -20,6 +20,7 @@ class IoTItem { String getSubtype(); String getID(); + String getValue(); unsigned long currentMillis; unsigned long prevMillis; @@ -48,6 +49,7 @@ class IoTItem { }; IoTItem* findIoTItem(String name); // поиск экземпляра элемента модуля по имени +StaticJsonDocument* getLocalItemsAsJSON(); // сбор всех локальных занчений Items class externalVariable: IoTItem { // объект, создаваемый при получении информации о событии на другом контроллере для хранения информации о событии указанное время diff --git a/src/Main.cpp b/src/Main.cpp index f1ed3ea1..af7f5283 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -67,6 +67,10 @@ void setup() { IoTItems.push_back((IoTItem*) new externalVariable("{\"id\":\"rel4\",\"val\":34,\"int\":30}")); + // пример получения JSON всех Items + serializeJson(*getLocalItemsAsJSON(), Serial); + Serial.println(""); + //тест перебора пинов из расширения // for (int i = 109; i < 112; i++) { // IoTgpio.pinMode(i, OUTPUT); diff --git a/src/classes/IoTItem.cpp b/src/classes/IoTItem.cpp index ab2de760..30f568d3 100644 --- a/src/classes/IoTItem.cpp +++ b/src/classes/IoTItem.cpp @@ -42,6 +42,11 @@ String IoTItem::getID() { return _id; }; +String IoTItem::getValue() { + if (value.isDecimal) return (String)value.valD; + else return value.valS; +} + void IoTItem::loop() { currentMillis = millis(); difference = currentMillis - prevMillis; @@ -86,16 +91,6 @@ void IoTItem::doByInterval() {} IoTValue IoTItem::execute(String command, std::vector& param) { return {}; } -IoTItem* findIoTItem(String name) { // поиск элемента модуля в существующей конфигурации - for (std::list::iterator it=IoTItems.begin(); it != IoTItems.end(); ++it) { - if ((*it)->getID() == name) return *it; - } - - return nullptr; -} - -IoTItem* myIoTItem; - IoTGpio* IoTItem::getGpioDriver() { return nullptr; } @@ -119,4 +114,26 @@ externalVariable::~externalVariable() { void externalVariable::doByInterval() { // для данного класса doByInterval+int выполняет роль счетчика обратного отсчета до уничтожения iAmDead = true; +} + + +IoTItem* myIoTItem; + +IoTItem* findIoTItem(String name) { // поиск элемента модуля в существующей конфигурации + for (std::list::iterator it=IoTItems.begin(); it != IoTItems.end(); ++it) { + if ((*it)->getID() == name) return *it; + } + + return nullptr; +} + +StaticJsonDocument docForExport; + +StaticJsonDocument* getLocalItemsAsJSON () { + docForExport.clear(); + for (std::list::iterator it=IoTItems.begin(); it != IoTItems.end(); ++it) { + if ((*it)->iAmLocal) docForExport[(*it)->getID()] = (*it)->getValue(); + } + + return &docForExport; } \ No newline at end of file