Merge branch 'IoTManagerProject:ver4dev' into ver4dev

This commit is contained in:
2022-02-22 22:42:30 +03:00
committed by GitHub
11 changed files with 75 additions and 21 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -4,7 +4,7 @@
<meta charset='utf-8'>
<meta name='viewport' content='width=device-width,initial-scale=1'>
<title>IoT Manager</title>
<title>IoT Manager 4.0.8</title>
<link rel='icon' type='image/png' href='/favicon.ico'>
<link rel='stylesheet' href='/build/bundle.css'>

View File

@@ -0,0 +1,8 @@
#pragma once
#include "Global.h"
extern void generateOrder(const String& id, const String& value);
extern void handleOrder();
extern void generateEvent(const String& id, const String& value);
extern void handleEvent();

View File

@@ -12,3 +12,4 @@
#include "DeviceList.h"
#include "PeriodicTasks.h"
#include "classes/IoTScenario.h"
#include "EventsAndOrders.h"

View File

@@ -3,6 +3,7 @@
#include "classes/NotAsync.h"
#include "Global.h"
#include "utils/WiFiUtils.h"
#include "EventsAndOrders.h"
void mqttInit();
void selectBroker();

View File

@@ -38,7 +38,7 @@ void asyncUdpInit() {
String data = uint8tToString(packet.data(), packet.length());
// Serial.println(data);
if (udpPacketValidation(data)) {
SerialPrint("i", F("UDP"), "Udp packet received, IP: " + packet.remoteIP().toString() + ":" + String(packet.remotePort()));
SerialPrint("i", F("UDP"), "IP: " + packet.remoteIP().toString() + ":" + String(packet.remotePort()));
// Serial.println(data);
jsonMergeArrays(devListHeapJson, data);
// Serial.println(devListHeapJson);

47
src/EventsAndOrders.cpp Normal file
View File

@@ -0,0 +1,47 @@
#include "EventsAndOrders.h"
// orderBuf - буфер прямых команд, которые нужно выпонить сразу, нажали на кнопку в приложении, сработало условие сценария
//необходимо тут же изменить параметр, записать новое значение
// eventBuf - буфер событий, в нем как на конвеере едут события, и каждое событие проверяется через все условия сценариев
//его главное отличие от orderBuf в том что события в нем не для выполнения, а для проверки в условиях сценариев
//события в нем лишь вызывают другие команды, помещенные в блоке сценария, если условие совпало.
//эта функция будет вызываться:
// 1.на приеме сообщений в mqtt (см mqttCallback строку 142 в mqttClient.cpp)
// 2.на приеме сообщений в ws
// 3.в сценарях когда надо выполнить команды
void generateOrder(const String& id, const String& value) {
String event = id + " " + value + ",";
orderBuf += event;
}
//эта функция будет вызываться в loop()
void handleOrder() {
if (orderBuf.length()) {
String order = selectToMarker(orderBuf, ",");
Serial.println("order: " + order);
//здесь нужно перебрать все методы execute всех векторов и выполнить те id которых совпали с id события
orderBuf = deleteBeforeDelimiter(orderBuf, ",");
}
}
//эта функция будет вызываться:
// 1.в местах где событие только что произошло (IoTItem::regEvent)
void generateEvent(const String& id, const String& value) {
String event = id + " " + value + ",";
eventBuf += event;
}
//эта функция будет вызываться в loop()
void handleEvent() {
if (eventBuf.length()) {
String event = selectToMarker(eventBuf, ",");
Serial.println("event: " + event);
//здесь нужно пропускать данное событие через условия сценариев
//и если оно есть в условии сценария и совподает
//то нужно поместить все команды этого блока сценария в generateOrder(order1, order2, ....)
//который в свою очередь их выполнит
eventBuf = deleteBeforeDelimiter(eventBuf, ",");
}
}

View File

@@ -98,5 +98,9 @@ void loop() {
IoTItems[i]->loop();
}
handleOrder();
handleEvent();
// iotScen.ExecScenario();
}

View File

@@ -139,20 +139,12 @@ void mqttCallback(char* topic, uint8_t* payload, size_t length) {
#endif
}
// else if (topicStr.indexOf("control") != -1) {
// String key = selectFromMarkerToMarker(topicStr, "/", 3);
//
// String order;
// order += key;
// order += " ";
// order += payloadStr;
// order += ",";
//
// loopCmdAdd(order);
//
// SerialPrint("i", F("=>MQTT"), "Msg from iotmanager app: " + key + " " + payloadStr);
//}
//
else if (topicStr.indexOf("control") != -1) {
String key = selectFromMarkerToMarker(topicStr, "/", 3);
generateOrder(key, payloadStr);
SerialPrint("i", F("=>MQTT"), "Msg from iotmanager app: " + key + " " + payloadStr);
}
// else if (topicStr.indexOf("event") != -1) {
// if (!jsonReadBool(settingsFlashJson, "MqttIn")) {
// return;

View File

@@ -4,6 +4,7 @@
#include "classes/IoTItem.h"
#include "WsServer.h"
#include "ESPConfiguration.h"
#include "EventsAndOrders.h"
IoTItem::IoTItem(String parameters) {
jsonRead(parameters, F("int"), _interval);
@@ -43,7 +44,7 @@ void IoTItem::loop() {
}
void IoTItem::regEvent(String value, String consoleInfo = "") {
eventGen2(_id, value);
generateEvent(_id, value);
jsonWriteStr(paramsHeapJson, _id, value);
publishStatusMqtt(_id, value);
publishStatusWs(_id, value);