2022-01-14 21:48:43 +01:00
# pragma once
2022-02-14 18:33:52 +03:00
# include "classes/IoTGpio.h"
2022-04-24 23:29:54 +03:00
# include <iarduino_RTC.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-06-02 23:17:52 +03:00
2022-08-12 17:53:08 +02:00
uint8_t * extBinInfo = NULL ; // дополнительные бинарные данные из модуля
size_t extBinInfoSize = 0 ; // размер дополнительных данных в байтах
2022-02-14 12:48:59 +03:00
} ;
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-02-06 09:11:07 +03:00
IoTItem ( 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-01-15 16:30:34 +01:00
void regEvent ( String value , String consoleInfo ) ;
2022-02-01 23:04:06 +03:00
void regEvent ( float value , String consoleInfo ) ;
2022-01-14 21:48:43 +01:00
2022-02-01 12:30:13 +03:00
String getSubtype ( ) ;
2022-01-15 16:30:34 +01:00
String getID ( ) ;
2022-08-14 19:06:05 +03:00
virtual String getValue ( ) ;
2022-01-14 21:48:43 +01:00
2022-04-27 14:18:44 +03:00
void setInterval ( unsigned long interval ) ;
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
bool iAmDead = false ; // признак необходимости удалить объект из базы
2022-08-23 23:17:59 +03:00
bool iAmLocal = true ; // признак того, что айтем был создан локально
2022-02-14 12:48:59 +03:00
2022-03-27 09:11:24 +03:00
bool needSave = false ;
2022-06-02 23:17:52 +03:00
bool enableDoByInt = true ;
2022-03-27 09:11:24 +03:00
2022-08-12 22:13:50 +02:00
virtual bool isGpioDriver ( ) ;
2022-04-24 23:29:54 +03:00
virtual iarduino_RTC_BASE * getRtcDriver ( ) ;
2022-02-22 22:48:35 +03:00
virtual void setValue ( IoTValue Value ) ;
2022-04-25 10:48:44 +03:00
virtual void setValue ( String valStr ) ;
2022-02-14 18:33:52 +03:00
2022-01-15 16:30:34 +01:00
protected :
2022-02-01 12:30:13 +03:00
String _subtype ;
2022-01-15 16:30:34 +01:00
String _id ;
unsigned long _interval ;
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-02-01 23:04:06 +03:00
int _map1 ;
int _map2 ;
int _map3 ;
int _map4 ;
int _round ; // 1, 10, 100, 1000, 10000
2022-08-23 23:17:59 +03:00
bool _global = false ; // характеристика айтема, что ему нужно слать и принимать события из внешнего мира
2022-01-15 16:30:34 +01:00
} ;
2022-02-14 12:48:59 +03:00
2022-08-12 17:53:08 +02:00
IoTItem * findIoTItem ( String name ) ; // поиск экземпляра элемента модуля по имени
String getItemValue ( String name ) ; // поиск плюс получение значения
2022-02-26 22:42:57 +03:00
StaticJsonDocument < JSON_BUFFER_SIZE > * getLocalItemsAsJSON ( ) ; // с б о р всех локальных занчений Items
2022-02-25 13:20:03 +03:00
2022-08-12 17:53:08 +02:00
class externalVariable : IoTItem { // объект, создаваемый при получении информации о событии на другом контроллере для хранения информации о событии указанное время
2022-02-25 13:20:03 +03:00
2022-08-12 17:53:08 +02:00
public :
externalVariable ( String parameters ) ;
~ externalVariable ( ) ;
void doByInterval ( ) ; // для данного класса doByInterval+int выполняет роль счетчика обратного отсчета до уничтожения
2022-02-25 13:20:03 +03:00
} ;