Добавляем сценарии https://github.com/biveraxe/IoTScenario

This commit is contained in:
2022-02-14 12:48:59 +03:00
parent 15c55c2df6
commit 0b4f771c48
8 changed files with 775 additions and 5 deletions

View File

@@ -11,3 +11,4 @@
#include "WsServer.h"
#include "DeviceList.h"
#include "PeriodicTasks.h"
#include "Classes/IoTScenario.h"

View File

@@ -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> &param);
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); // поиск экземпляра элемента модуля по имени

View 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();
};