mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-26 22:22:16 +03:00
Merge pull request #143 from biveraxe/ver4dev
Добавляем externalVariable для приема и фиксации на время значения события для использования в сценариях
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
#include "Global.h"
|
||||
#include "classes/IoTItem.h"
|
||||
|
||||
extern std::vector<IoTItem*> IoTItems; // вектор ссылок базового класса IoTItem - список всех запущенных сенсоров
|
||||
extern std::list<IoTItem*> IoTItems; // вектор ссылок базового класса IoTItem - список всех запущенных сенсоров
|
||||
|
||||
extern void configure(String path);
|
||||
void clearConfigure();
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include <TickerScheduler.h>
|
||||
#include <PubSubClient.h>
|
||||
#include <StringCommand.h>
|
||||
#include <list>
|
||||
|
||||
#ifdef ESP32
|
||||
#include "WiFi.h"
|
||||
|
||||
@@ -10,8 +10,7 @@ struct IoTValue {
|
||||
class IoTItem {
|
||||
public:
|
||||
IoTItem(String parameters);
|
||||
~IoTItem();
|
||||
|
||||
virtual ~IoTItem() {}
|
||||
void loop();
|
||||
virtual void doByInterval();
|
||||
virtual IoTValue execute(String command, std::vector<IoTValue> ¶m);
|
||||
@@ -27,6 +26,8 @@ class IoTItem {
|
||||
unsigned long difference;
|
||||
|
||||
IoTValue value; // хранение основного значения, котрое обновляется из сценария, execute(), loop() или doByInterval()
|
||||
|
||||
bool iAmDead = false; // признак необходимости удалить объект из базы
|
||||
|
||||
virtual IoTGpio* getGpioDriver();
|
||||
virtual void setValue(IoTValue Value);
|
||||
@@ -46,3 +47,13 @@ class IoTItem {
|
||||
};
|
||||
|
||||
IoTItem* findIoTItem(String name); // поиск экземпляра элемента модуля по имени
|
||||
|
||||
|
||||
class externalVariable: IoTItem { // объект, создаваемый при получении информации о событии на другом контроллере для хранения информации о событии указанное время
|
||||
|
||||
public:
|
||||
externalVariable(String parameters);
|
||||
~externalVariable();
|
||||
void doByInterval(); // для данного класса doByInterval+int выполняет роль счетчика обратного отсчета до уничтожения
|
||||
|
||||
};
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
extern IoTGpio IoTgpio;
|
||||
|
||||
std::vector<IoTItem*> IoTItems;
|
||||
std::list<IoTItem*> IoTItems;
|
||||
void* getAPI(String subtype, String params);
|
||||
|
||||
void configure(String path) {
|
||||
@@ -38,8 +38,8 @@ void configure(String path) {
|
||||
|
||||
void clearConfigure() {
|
||||
Serial.printf("Start clearing config\n");
|
||||
for (unsigned int i = 0; i < IoTItems.size(); i++) {
|
||||
if (IoTItems[i]) delete IoTItems[i];
|
||||
for (std::list<IoTItem*>::iterator it=IoTItems.begin(); it != IoTItems.end(); ++it) {
|
||||
if (*it) delete *it;
|
||||
}
|
||||
IoTItems.clear();
|
||||
}
|
||||
17
src/Main.cpp
17
src/Main.cpp
@@ -56,12 +56,17 @@ void setup() {
|
||||
|
||||
//загрузка сценария
|
||||
iotScen.loadScenario("/scenario.txt");
|
||||
iotScen.ExecScenario("");
|
||||
//iotScen.ExecScenario("");
|
||||
|
||||
// test
|
||||
Serial.println("-------test start--------");
|
||||
Serial.println("--------test end---------");
|
||||
|
||||
// симуляция добавления внешних событий
|
||||
IoTItems.push_back((IoTItem*) new externalVariable("{\"id\":\"rel1\",\"val\":10,\"int\":20}"));
|
||||
IoTItems.push_back((IoTItem*) new externalVariable("{\"id\":\"rel4\",\"val\":34,\"int\":30}"));
|
||||
|
||||
|
||||
//тест перебора пинов из расширения
|
||||
// for (int i = 109; i < 112; i++) {
|
||||
// IoTgpio.pinMode(i, OUTPUT);
|
||||
@@ -94,8 +99,14 @@ void loop() {
|
||||
//обновление mqtt
|
||||
mqttLoop();
|
||||
|
||||
for (unsigned int i = 0; i < IoTItems.size(); i++) {
|
||||
IoTItems[i]->loop();
|
||||
// передаем управление каждому элементу конфигурации для выполнения своих функций
|
||||
for (std::list<IoTItem*>::iterator it=IoTItems.begin(); it != IoTItems.end(); ++it) {
|
||||
(*it)->loop();
|
||||
if ((*it)->iAmDead) {
|
||||
delete *it;
|
||||
IoTItems.erase(it);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
handleOrder();
|
||||
|
||||
@@ -15,6 +15,13 @@ IoTItem::IoTItem(String parameters) {
|
||||
jsonRead(parameters, F("plus"), _plus, false);
|
||||
jsonRead(parameters, F("round"), _round, false);
|
||||
|
||||
String valAsStr;
|
||||
if (jsonRead(parameters, F("val"), valAsStr, false)) // значение переменной или датчика при инициализации если есть в конфигурации
|
||||
if (value.isDecimal = isDigitDotCommaStr(valAsStr))
|
||||
value.valD = valAsStr.toFloat();
|
||||
else
|
||||
value.valS = valAsStr;
|
||||
|
||||
String map;
|
||||
jsonRead(parameters, F("map"), map, false);
|
||||
if (map != "") {
|
||||
@@ -24,7 +31,8 @@ IoTItem::IoTItem(String parameters) {
|
||||
_map4 = selectFromMarkerToMarker(map, ",", 3).toInt();
|
||||
}
|
||||
}
|
||||
IoTItem::~IoTItem() {}
|
||||
|
||||
// IoTItem::~IoTItem() {}
|
||||
|
||||
String IoTItem::getSubtype() {
|
||||
return _subtype;
|
||||
@@ -79,8 +87,8 @@ void IoTItem::doByInterval() {}
|
||||
IoTValue IoTItem::execute(String command, std::vector<IoTValue>& param) { return {}; }
|
||||
|
||||
IoTItem* findIoTItem(String name) { // поиск элемента модуля в существующей конфигурации
|
||||
for (unsigned int i = 0; i < IoTItems.size(); i++) {
|
||||
if (IoTItems[i]->getID() == name) return IoTItems[i];
|
||||
for (std::list<IoTItem*>::iterator it=IoTItems.begin(); it != IoTItems.end(); ++it) {
|
||||
if ((*it)->getID() == name) return *it;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
@@ -96,4 +104,18 @@ void IoTItem::setValue(IoTValue Value) {
|
||||
value = Value;
|
||||
if (value.isDecimal) regEvent(value.valD, "");
|
||||
else regEvent(value.valS, "");
|
||||
}
|
||||
|
||||
|
||||
externalVariable::externalVariable(String parameters) : IoTItem(parameters) {
|
||||
prevMillis = millis(); // запоминаем текущее значение таймера для выполения doByInterval после int сек
|
||||
Serial.printf("Call from externalVariable: parameters %s %d\n", parameters.c_str(), _interval);
|
||||
}
|
||||
|
||||
externalVariable::~externalVariable() {
|
||||
Serial.printf("Call from ~externalVariable: Im dead\n");
|
||||
}
|
||||
|
||||
void externalVariable::doByInterval() { // для данного класса doByInterval+int выполняет роль счетчика обратного отсчета до уничтожения
|
||||
iAmDead = true;
|
||||
}
|
||||
@@ -58,7 +58,7 @@ class Ads1115 : public IoTItem {
|
||||
}
|
||||
}
|
||||
|
||||
~Ads1115();
|
||||
~Ads1115() {};
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ class Aht20t : public IoTItem {
|
||||
else SerialPrint("E", "Sensor AHTt", "Error");
|
||||
}
|
||||
|
||||
~Aht20t();
|
||||
~Aht20t() {};
|
||||
};
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ class Aht20h : public IoTItem {
|
||||
else SerialPrint("E", "Sensor AHTt", "Error");
|
||||
}
|
||||
|
||||
~Aht20h();
|
||||
~Aht20h() {};
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ class AnalogAdc : public IoTItem {
|
||||
}
|
||||
//=======================================================================================================
|
||||
|
||||
~AnalogAdc();
|
||||
~AnalogAdc() {};
|
||||
};
|
||||
|
||||
//после замены названия сенсора, на функцию можно не обращать внимания
|
||||
|
||||
@@ -29,7 +29,7 @@ class Bme280t : public IoTItem {
|
||||
SerialPrint("E", "Sensor Bme280t", "Error");
|
||||
}
|
||||
|
||||
~Bme280t();
|
||||
~Bme280t() {};
|
||||
};
|
||||
|
||||
class Bme280h : public IoTItem {
|
||||
@@ -49,7 +49,7 @@ class Bme280h : public IoTItem {
|
||||
SerialPrint("E", "Sensor Bme280h", "Error");
|
||||
}
|
||||
|
||||
~Bme280h();
|
||||
~Bme280h() {};
|
||||
};
|
||||
|
||||
class Bme280p : public IoTItem {
|
||||
@@ -70,7 +70,7 @@ class Bme280p : public IoTItem {
|
||||
SerialPrint("E", "Sensor Bme280p", "Error");
|
||||
}
|
||||
|
||||
~Bme280p();
|
||||
~Bme280p() {};
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ class Bmp280t : public IoTItem {
|
||||
else SerialPrint("E", "Sensor DHTt", "Error");
|
||||
}
|
||||
|
||||
~Bmp280t();
|
||||
~Bmp280t() {};
|
||||
};
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ class Bmp280p : public IoTItem {
|
||||
} else SerialPrint("E", "Sensor DHTh", "Error");
|
||||
}
|
||||
|
||||
~Bmp280p();
|
||||
~Bmp280p() {};
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ class ButtonOut : public IoTItem {
|
||||
}
|
||||
//=======================================================================================================
|
||||
|
||||
~ButtonOut();
|
||||
~ButtonOut() {};
|
||||
};
|
||||
|
||||
void* getAPI_ButtonOut(String subtype, String param) {
|
||||
|
||||
@@ -29,7 +29,7 @@ class Dht1122t : public IoTItem {
|
||||
else SerialPrint("E", "Sensor DHTt", "Error");
|
||||
}
|
||||
|
||||
~Dht1122t();
|
||||
~Dht1122t() {};
|
||||
};
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ class Dht1122h : public IoTItem {
|
||||
else SerialPrint("E", "Sensor DHTh", "Error");
|
||||
}
|
||||
|
||||
~Dht1122h();
|
||||
~Dht1122h() {};
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ class Ds18b20 : public IoTItem {
|
||||
}
|
||||
//=======================================================================================================
|
||||
|
||||
~Ds18b20(){};
|
||||
~Ds18b20() {};
|
||||
};
|
||||
|
||||
//после замены названия сенсора, на функцию можно не обращать внимания
|
||||
|
||||
@@ -24,7 +24,7 @@ class GY21t : public IoTItem {
|
||||
else SerialPrint("E", "Sensor GY21t", "Error");
|
||||
}
|
||||
|
||||
~GY21t();
|
||||
~GY21t() {};
|
||||
};
|
||||
|
||||
class GY21h : public IoTItem {
|
||||
@@ -38,7 +38,7 @@ class GY21h : public IoTItem {
|
||||
else SerialPrint("E", "Sensor GY21h", "Error");
|
||||
}
|
||||
|
||||
~GY21h();
|
||||
~GY21h() {};
|
||||
};
|
||||
|
||||
void* getAPI_GY21(String subtype, String param) {
|
||||
|
||||
@@ -25,7 +25,7 @@ class Hdc1080t : public IoTItem {
|
||||
else SerialPrint("E", "Sensor Hdc1080t", "Error");
|
||||
}
|
||||
|
||||
~Hdc1080t();
|
||||
~Hdc1080t() {};
|
||||
};
|
||||
|
||||
class Hdc1080h : public IoTItem {
|
||||
@@ -38,7 +38,7 @@ class Hdc1080h : public IoTItem {
|
||||
else SerialPrint("E", "Sensor Hdc1080h", "Error");
|
||||
}
|
||||
|
||||
~Hdc1080h();
|
||||
~Hdc1080h() {};
|
||||
};
|
||||
|
||||
void* getAPI_Hdc1080(String subtype, String param) {
|
||||
|
||||
@@ -85,7 +85,7 @@ class Lcd2004 : public IoTItem {
|
||||
LCDI2C->print(tmpStr);
|
||||
}
|
||||
|
||||
~Lcd2004(){};
|
||||
~Lcd2004() {};
|
||||
};
|
||||
|
||||
void* getAPI_Lcd2004(String subtype, String param) {
|
||||
|
||||
@@ -18,7 +18,7 @@ class Sht20t : public IoTItem {
|
||||
else SerialPrint("E", "Sensor Sht20t", "Error");
|
||||
}
|
||||
|
||||
~Sht20t();
|
||||
~Sht20t() {};
|
||||
};
|
||||
|
||||
class Sht20h : public IoTItem {
|
||||
@@ -32,7 +32,7 @@ class Sht20h : public IoTItem {
|
||||
else SerialPrint("E", "Sensor Sht20h", "Error");
|
||||
}
|
||||
|
||||
~Sht20h();
|
||||
~Sht20h() {};
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ class SysExt : public IoTItem {
|
||||
return {}; // команда поддерживает возвращаемое значения. Т.е. по итогу выполнения команды или общения с внешней системой, можно вернуть значение в сценарий для дальнейшей обработки
|
||||
}
|
||||
|
||||
~SysExt(){};
|
||||
~SysExt() {};
|
||||
};
|
||||
|
||||
void* getAPI_SysExt(String subtype, String param) {
|
||||
|
||||
Reference in New Issue
Block a user