mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-26 22:22:16 +03:00
111 lines
5.6 KiB
C++
111 lines
5.6 KiB
C++
#pragma once
|
||
#include "classes/IoTGpio.h"
|
||
|
||
struct IoTValue {
|
||
float valD = 0;
|
||
String valS = "";
|
||
|
||
bool isDecimal = true;
|
||
};
|
||
|
||
class IoTItem {
|
||
public:
|
||
IoTItem(const String& parameters);
|
||
virtual ~IoTItem() {}
|
||
virtual void loop();
|
||
virtual void doByInterval();
|
||
virtual IoTValue execute(String command, std::vector<IoTValue>& param);
|
||
|
||
void checkIntFromNet();
|
||
|
||
virtual void regEvent(const String& value, const String& consoleInfo, bool error = false, bool genEvent = true);
|
||
virtual void regEvent(float value, const String& consoleInfo, bool error = false, bool genEvent = true);
|
||
|
||
String getSubtype();
|
||
|
||
String getID();
|
||
bool isStrInID(const String& str);
|
||
int getIntFromNet();
|
||
virtual String getValue();
|
||
long getInterval();
|
||
bool isGlobal();
|
||
|
||
void sendSubWidgetsValues(String& id, String& json);
|
||
|
||
void setInterval(long interval);
|
||
void setIntFromNet(int interval);
|
||
|
||
unsigned long currentMillis;
|
||
unsigned long prevMillis;
|
||
unsigned long difference;
|
||
|
||
IoTValue value; // хранение основного значения, которое обновляется из сценария, execute(), loop() или doByInterval()
|
||
|
||
// bool iAmDead = false; // признак необходимости удалить объект из базы
|
||
bool iAmLocal = true; // признак того, что айтем был создан локально
|
||
|
||
bool enableDoByInt = true;
|
||
|
||
virtual IoTGpio* getGpioDriver();
|
||
virtual IoTItem* getRtcDriver();
|
||
virtual unsigned long getRtcUnixTime();
|
||
|
||
virtual void setValue(const IoTValue& Value, bool genEvent = true);
|
||
virtual void setValue(const String& valStr, bool genEvent = true);
|
||
String getRoundValue();
|
||
void getNetEvent(String& event);
|
||
|
||
// хуки для системных событий (должны начинаться с "on")
|
||
virtual void onRegEvent(IoTItem* item);
|
||
virtual void onMqttRecive(String& topic, String& msg);
|
||
virtual void onMqttWsAppConnectEvent();
|
||
virtual void onModuleOrder(String& key, String& value);
|
||
|
||
// делаем доступным модулям отправку сообщений в телеграм
|
||
virtual void sendTelegramMsg(bool often, String msg);
|
||
|
||
// методы для графиков (будет упрощено)
|
||
virtual void publishValue();
|
||
virtual void clearValue();
|
||
virtual void setPublishDestination(int type, int wsNum = -1);
|
||
virtual void clearHistory();
|
||
virtual void setTodayDate();
|
||
|
||
protected:
|
||
bool _needSave = false; // признак необходимости сохранять и загружать значение элемента на flash
|
||
String _subtype = "";
|
||
String _id = "errorId"; // если будет попытка создания Item без указания id, то элемент оставит это значение
|
||
long _interval = 0;
|
||
int _intFromNet = -2; // количество секунд доверия, пришедших из сети вместе с данными для текущего ИД
|
||
// -2 - данные не приходили, скорее всего, элемент локальный, доверие есть, в случае прихода сетевого значения с int=0, будет выключен механизм проверки доверия
|
||
// -1 - данные приходили и обратный отсчет дошел до нуля, значит доверия нет и элемент будет удален при следующем такте loop
|
||
|
||
float _multiply; // умножаем на значение
|
||
float _plus; // увеличиваем на значение
|
||
int _map1 = 0;
|
||
int _map2 = 0;
|
||
int _map3 = 0;
|
||
int _map4 = 0;
|
||
int _round = 1; // 1, 10, 100, 1000, 10000
|
||
int _numDigits = 1; // количество целых значений, не значимые позиции заменяются нулем в строковом формате
|
||
|
||
bool _global = false; // характеристика айтема, что ему нужно слать и принимать события из внешнего мира
|
||
};
|
||
|
||
IoTItem* findIoTItem(const String& name); // поиск экземпляра элемента модуля по имени
|
||
IoTItem* findIoTItemByPartOfName(const String& partName); // поиск элемента модуля в существующей конфигурации по части имени
|
||
String getItemValue(const String& name); // поиск плюс получение значения
|
||
bool isItemExist(const String& name); // существует ли айтем
|
||
//StaticJsonDocument<JSON_BUFFER_SIZE>* getLocalItemsAsJSON(); // сбор всех локальных значений Items
|
||
|
||
IoTItem* createItemFromNet(const String& itemId, const String& value, int interval);
|
||
IoTItem* createItemFromNet(const String& msgFromNet);
|
||
void analyzeMsgFromNet(const String& msg, String altId = "");
|
||
|
||
// class externalVariable : IoTItem { // объект, создаваемый при получении информации о событии на другом контроллере для хранения информации о событии указанное время
|
||
|
||
// public:
|
||
// externalVariable(const String& parameters);
|
||
// ~externalVariable();
|
||
// void doByInterval(); // для данного класса doByInterval+int выполняет роль счетчика обратного отсчета до уничтожения
|
||
// };
|