2022-01-14 21:48:43 +01:00
# pragma once
2022-02-14 18:33:52 +03:00
# include "classes/IoTGpio.h"
2022-01-14 21:48:43 +01:00
2022-02-14 12:48:59 +03:00
struct IoTValue {
float valD = 0 ;
String valS = " " ;
2022-08-12 17:53:08 +02:00
2022-02-14 12:48:59 +03:00
bool isDecimal = true ;
} ;
2022-01-14 21:48:43 +01:00
2022-02-06 09:11:07 +03:00
class IoTItem {
2022-01-15 16:30:34 +01:00
public :
2022-12-04 01:37:27 +01:00
IoTItem ( const String & parameters ) ;
2022-02-25 15:38:32 +03:00
virtual ~ IoTItem ( ) { }
2022-03-08 13:10:34 +03:00
virtual void loop ( ) ;
2022-01-15 16:30:34 +01:00
virtual void doByInterval ( ) ;
2022-08-12 17:53:08 +02:00
virtual IoTValue execute ( String command , std : : vector < IoTValue > & param ) ;
2022-02-06 09:32:28 +03:00
2022-10-30 12:12:15 +03:00
void checkIntFromNet ( ) ;
2022-10-29 20:04:02 +03:00
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 ) ;
2022-01-14 21:48:43 +01:00
2022-02-01 12:30:13 +03:00
String getSubtype ( ) ;
2022-08-25 15:46:19 +02:00
2022-01-15 16:30:34 +01:00
String getID ( ) ;
2022-10-30 12:12:15 +03:00
int getIntFromNet ( ) ;
2022-08-14 19:06:05 +03:00
virtual String getValue ( ) ;
2022-11-04 16:46:49 +03:00
long getInterval ( ) ;
2022-11-07 17:26:24 +03:00
bool isGlobal ( ) ;
2022-12-04 01:37:27 +01:00
void sendSubWidgetsValues ( String & id , String & json ) ;
2022-11-04 16:46:49 +03:00
void setInterval ( long interval ) ;
2022-10-30 12:12:15 +03:00
void setIntFromNet ( int interval ) ;
2022-04-27 14:18:44 +03:00
2022-01-15 16:30:34 +01:00
unsigned long currentMillis ;
unsigned long prevMillis ;
unsigned long difference ;
2022-06-02 23:17:52 +03:00
IoTValue value ; // хранение основного значения, которое обновляется из сценария, execute(), loop() или doByInterval()
2022-08-12 17:53:08 +02:00
2022-12-04 01:37:27 +01:00
// bool iAmDead = false; // признак необходимости удалить объект из базы
2022-08-23 23:17:59 +03:00
bool iAmLocal = true ; // признак того, что айтем был создан локально
2022-02-14 12:48:59 +03:00
2022-06-02 23:17:52 +03:00
bool enableDoByInt = true ;
2022-03-27 09:11:24 +03:00
2022-10-01 22:58:27 +03:00
virtual IoTGpio * getGpioDriver ( ) ;
2022-10-29 20:04:02 +03:00
virtual void setValue ( const IoTValue & Value , bool genEvent = true ) ;
virtual void setValue ( const String & valStr , bool genEvent = true ) ;
2022-10-07 22:18:05 +03:00
String getRoundValue ( ) ;
2022-11-04 16:46:49 +03:00
void getNetEvent ( String & event ) ;
2022-12-04 14:50:16 +01:00
// хуки для системных событий (должны начинаться с "on")
2022-11-04 16:46:49 +03:00
virtual void onRegEvent ( IoTItem * item ) ;
2022-11-25 22:00:33 +03:00
virtual void onMqttRecive ( String & topic , String & msg ) ;
2022-12-04 14:50:16 +01:00
virtual void onMqttWsAppConnectEvent ( ) ;
2022-02-14 18:33:52 +03:00
2022-12-10 02:13:23 +01:00
// делаем доступным модулям отправку сообщений в телеграм
virtual void sendTelegramMsg ( bool often , String msg ) ;
// методы для графиков (будет упрощено)
2022-09-22 22:55:04 +02:00
virtual void publishValue ( ) ;
virtual void clearValue ( ) ;
2022-09-23 02:24:50 +02:00
virtual void setPublishDestination ( int type , int wsNum = - 1 ) ;
2022-09-22 22:55:04 +02:00
virtual void clearHistory ( ) ;
virtual void setTodayDate ( ) ;
2022-01-15 16:30:34 +01:00
protected :
2022-10-20 00:18:41 +03:00
bool _needSave = false ; // признак необходимости сохранять и загружать значение элемента на flash
2022-10-29 20:04:02 +03:00
String _subtype = " " ;
2022-12-04 01:37:27 +01:00
String _id = " errorId " ; // если будет попытка создания Item без указания id, то элемент оставит это значение
2022-11-04 16:46:49 +03:00
long _interval = 0 ;
2022-12-04 01:37:27 +01:00
int _intFromNet = - 2 ; // количество секунд доверия, пришедших из сети вместе с данными для текущего ИД
// -2 - данные не приходили, скорее всего, элемент локальный, доверие есть
// -1 - данные приходили и обратный отсчет дошел до нуля, значит доверия нет
2022-08-12 17:53:08 +02:00
2022-02-01 23:04:06 +03:00
float _multiply ; // умножаем на значение
2022-08-12 17:53:08 +02:00
float _plus ; // увеличиваем на значение
2022-10-29 20:04:02 +03:00
int _map1 = 0 ;
int _map2 = 0 ;
int _map3 = 0 ;
int _map4 = 0 ;
int _round = 1 ; // 1, 10, 100, 1000, 10000
2022-08-23 23:17:59 +03:00
2022-08-25 02:18:21 +02:00
bool _global = false ; // характеристика айтема, что ему нужно слать и принимать события из внешнего мира
2022-01-15 16:30:34 +01:00
} ;
2022-02-14 12:48:59 +03:00
2022-12-04 01:37:27 +01:00
IoTItem * findIoTItem ( const String & name ) ; // поиск экземпляра элемента модуля по имени
String getItemValue ( const String & name ) ; // поиск плюс получение значения
bool isItemExist ( const String & name ) ; // существует ли айтем
2022-10-22 14:13:23 +03:00
StaticJsonDocument < JSON_BUFFER_SIZE > * getLocalItemsAsJSON ( ) ; // с б о р всех локальных значений Items
2022-02-25 13:20:03 +03:00
2022-11-01 12:33:39 +03:00
IoTItem * createItemFromNet ( const String & itemId , const String & value , int interval ) ;
2022-11-04 16:46:49 +03:00
IoTItem * createItemFromNet ( const String & msgFromNet ) ;
void analyzeMsgFromNet ( const String & msg , String altId = " " ) ;
2022-02-25 13:20:03 +03:00
2022-11-01 12:33:39 +03:00
// class externalVariable : IoTItem { // объект, создаваемый при получении информации о событии на другом контроллере для хранения информации о событии указанное время
// public:
// externalVariable(const String& parameters);
// ~externalVariable();
// void doByInterval(); // для данного класса doByInterval+int выполняет роль счетчика обратного отсчета до уничтожения
// };