mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-26 22:22:16 +03:00
Добавляем сценарии https://github.com/biveraxe/IoTScenario
This commit is contained in:
@@ -11,3 +11,4 @@
|
||||
#include "WsServer.h"
|
||||
#include "DeviceList.h"
|
||||
#include "PeriodicTasks.h"
|
||||
#include "Classes/IoTScenario.h"
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
#pragma once
|
||||
|
||||
#include <WString.h>
|
||||
struct IoTValue {
|
||||
float valD = 0;
|
||||
String valS = "";
|
||||
bool isDecimal = true;
|
||||
};
|
||||
|
||||
class IoTItem {
|
||||
public:
|
||||
@@ -9,7 +13,7 @@ class IoTItem {
|
||||
|
||||
void loop();
|
||||
virtual void doByInterval();
|
||||
virtual void execute(String command, String param);
|
||||
virtual IoTValue execute(String command, std::vector<IoTValue> ¶m);
|
||||
|
||||
void regEvent(String value, String consoleInfo);
|
||||
void regEvent(float value, String consoleInfo);
|
||||
@@ -21,6 +25,8 @@ class IoTItem {
|
||||
unsigned long prevMillis;
|
||||
unsigned long difference;
|
||||
|
||||
IoTValue value; // хранение основного значения, котрое обновляется из сценария, execute(), loop() или doByInterval()
|
||||
|
||||
protected:
|
||||
String _subtype;
|
||||
String _id;
|
||||
@@ -34,3 +40,5 @@ class IoTItem {
|
||||
int _map4;
|
||||
int _round; // 1, 10, 100, 1000, 10000
|
||||
};
|
||||
|
||||
IoTItem* findIoTItem(String name); // поиск экземпляра элемента модуля по имени
|
||||
|
||||
93
include/classes/IoTScenario.h
Normal file
93
include/classes/IoTScenario.h
Normal file
@@ -0,0 +1,93 @@
|
||||
#pragma once
|
||||
#include "Global.h"
|
||||
#include "Classes/IoTItem.h"
|
||||
#include <map>
|
||||
|
||||
class ExprAST {
|
||||
public:
|
||||
virtual ~ExprAST();
|
||||
virtual IoTValue* exec();
|
||||
virtual int setValue(IoTValue *val); // ret 0 - установка значения не поддерживается наследником
|
||||
};
|
||||
|
||||
class IoTScenario {
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Lexer (Лексический анализатор)
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
String IdentifierStr; // Заполняется, если tok_identifier
|
||||
float NumVal; // Заполняется, если tok_number
|
||||
char LastChar = ' ';
|
||||
|
||||
/// gettok - Возвращает следующий токен из стандартного потока ввода.
|
||||
int gettok();
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Parser (Парсер или Синтаксический Анализатор)
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
/// CurTok/getNextToken - Предоставляет простой буфер токенов. CurTok - это текущий
|
||||
/// токен, просматриваемый парсером. getNextToken получает следующий токен от
|
||||
/// лексического анализатора и обновляет CurTok.
|
||||
int CurTok;
|
||||
int getNextToken();
|
||||
|
||||
/// BinopPrecedence - Содержит приоритеты для бинарных операторов
|
||||
std::map<signed char, int> BinopPrecedence;
|
||||
|
||||
/// GetTokPrecedence - Возвращает приоритет текущего бинарного оператора.
|
||||
int GetTokPrecedence();
|
||||
|
||||
/// Error* - Это небольшие вспомогательные функции для обработки ошибок.
|
||||
ExprAST *Error(const char *Str);
|
||||
|
||||
/// identifierexpr
|
||||
/// ::= identifier
|
||||
/// ::= identifier '(' expression* ')'
|
||||
ExprAST *ParseIdentifierExpr();
|
||||
|
||||
/// numberexpr ::= number
|
||||
ExprAST *ParseNumberExpr();
|
||||
|
||||
/// parenexpr ::= '(' expression ')'
|
||||
ExprAST *ParseParenExpr();
|
||||
|
||||
/// bracketsexpr ::= '{' expression '}'
|
||||
ExprAST *ParseBracketsExpr();
|
||||
|
||||
/// quotesexpr ::= '"' expression '"'
|
||||
ExprAST *ParseQuotesExpr();
|
||||
|
||||
/// ifexpr ::= 'if' expression 'then' expression 'else' expression
|
||||
ExprAST *ParseIfExpr();
|
||||
|
||||
/// primary
|
||||
/// ::= identifierexpr
|
||||
/// ::= numberexpr
|
||||
/// ::= parenexpr
|
||||
ExprAST *ParsePrimary();
|
||||
|
||||
/// binoprhs
|
||||
/// ::= ('+' primary)*
|
||||
ExprAST *ParseBinOpRHS(int ExprPrec, ExprAST *LHS);
|
||||
|
||||
/// expression
|
||||
/// ::= primary binoprhs
|
||||
///
|
||||
ExprAST *ParseExpression();
|
||||
|
||||
std::vector<ExprAST*> ScenarioElements; // корневые элементы дерава
|
||||
|
||||
String *strFromFile;
|
||||
char getLastChar();
|
||||
int strIterator = 0;
|
||||
|
||||
void clearScenarioElements();
|
||||
|
||||
public:
|
||||
void loadScenario(String fileName);
|
||||
void ExecScenario();
|
||||
|
||||
IoTScenario();
|
||||
~IoTScenario();
|
||||
};
|
||||
Reference in New Issue
Block a user