Files
IoTManager/src/Scenario.cpp
2020-06-27 05:22:24 +03:00

102 lines
4.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "Global.h"
static const char* MODULE = "Scen";
boolean isScenarioEnabled() {
return jsonReadBool(configSetupJson, "scen") && jsonReadStr(configOptionJson, "scenario_status") != "";
}
void loopScenario() {
if (!isScenarioEnabled()) {
return;
}
String str = scenario;
str += "\n";
str.replace("\r\n", "\n");
str.replace("\r", "\n");
size_t i = 0;
while (str.length()) {
String block = selectToMarker(str, "end");
if (!block.length()) {
return;
}
i++;
if (scenario_line_status[i] == 1) {
//выделяем первую строку самого сценария button1 = 1 (условие)
String condition = selectToMarker(block, "\n");
String param_name = selectFromMarkerToMarker(condition, " ", 0);
String order = jsonReadStr(configOptionJson, "scenario_status"); //читаем весь файл событий
String param = selectToMarker(order, ","); //читаем первое событие из файла событий
if (param_name == param) { //если поступившее событие равно событию заданному buttonSet1 в файле начинаем его обработку
String sign = selectFromMarkerToMarker(condition, " ", 1); //читаем знак (=)
String value = selectFromMarkerToMarker(condition, " ", 2); //читаем значение (1)
if (value.indexOf("digit") != -1) {
// value = add_set(value);
value = jsonReadStr(configLiveJson, value);
}
if (value.indexOf("time") != -1) {
// value = add_set(value);
value = jsonReadStr(configLiveJson, value);
}
boolean flag = false; //если одно из значений совпало то только тогда начинаем выполнять комнады
if (sign == "=") {
if (jsonReadStr(configLiveJson, param_name) == value) flag = true;
}
if (sign == "!=") {
if (jsonReadStr(configLiveJson, param_name) != value) flag = true;
}
if (sign == "<") {
if (jsonReadStr(configLiveJson, param_name).toInt() < value.toInt()) flag = true;
}
if (sign == ">") {
if (jsonReadStr(configLiveJson, param_name).toInt() > value.toInt()) flag = true;
}
if (sign == ">=") {
if (jsonReadStr(configLiveJson, param_name).toInt() >= value.toInt()) flag = true;
}
if (sign == "<=") {
if (jsonReadStr(configLiveJson, param_name).toInt() <= value.toInt()) flag = true;
}
if (flag) {
block = deleteBeforeDelimiter(block, "\n"); //удаляем строку самого сценария оставляя только команды
stringExecute(block); //выполняем все команды
pm.info(condition + "'");
}
}
}
str = deleteBeforeDelimiter(str, "end\n"); //удаляем первый сценарий
//-----------------------------------------------------------------------------------------------------------------------
}
String tmp2 = jsonReadStr(configOptionJson, "scenario_status"); //читаем файл событий
tmp2 = deleteBeforeDelimiter(tmp2, ","); //удаляем выполненное событие
jsonWriteStr(configOptionJson, "scenario_status", tmp2); //записываем обновленный файл событий
}
// событие: имя + Set + номер
// button+Set+1
void eventGen(String event_name, String number) {
if (!jsonReadBool(configSetupJson, "scen")) {
return;
}
// генерирование события
String tmp = jsonReadStr(configOptionJson, "scenario_status");
jsonWriteStr(configOptionJson, "scenario_status", tmp + event_name + number + ",");
}
String add_set(String str) {
String num1 = str.substring(str.length() - 1);
String num2 = str.substring(str.length() - 2, str.length() - 1);
if (isDigitStr(num1) && isDigitStr(num2)) {
str = str.substring(0, str.length() - 2) + "Set" + num2 + num1;
} else {
if (isDigitStr(num1)) {
str = str.substring(0, str.length() - 1) + "Set" + num1;
}
}
return str;
}