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 ( ) ;
2023-03-26 13:23:46 +03:00
bool isStrInID ( const String & str ) ;
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 ( ) ;
2023-02-17 20:26:29 +03:00
virtual IoTItem * getRtcDriver ( ) ;
2023-03-26 13:26:57 +03:00
virtual unsigned long getRtcUnixTime ( ) ;
2023-02-17 20:26:29 +03:00
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-12-14 00:56:25 +01:00
virtual void onModuleOrder ( String & key , String & value ) ;
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 ; // количество секунд доверия, пришедших из сети вместе с данными для текущего ИД
2023-02-08 11:20:58 +03:00
// -2 - данные не приходили, скорее всего, элемент локальный, доверие есть, в случае прихода сетевого значения с int=0, будет выключен механизм проверки доверия
// -1 - данные приходили и обратный отсчет дошел до нуля, значит доверия нет и элемент будет удален при следующем такте loop
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
2023-06-30 22:32:01 +03:00
int _numDigits = 1 ; // количество целых значений, не значимые позиции заменяются нулем в строковом формате
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 ) ; // поиск экземпляра элемента модуля по имени
2023-03-26 13:23:46 +03:00
IoTItem * findIoTItemByPartOfName ( const String & partName ) ; // поиск элемента модуля в существующей конфигурации по части имени
2022-12-04 01:37:27 +01:00
String getItemValue ( const String & name ) ; // поиск плюс получение значения
bool isItemExist ( const String & name ) ; // существует ли айтем
2023-02-08 11:40:38 +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 выполняет роль счетчика обратного отсчета до уничтожения
// };