Files
IoTManager/src/BufferExecute.cpp
2021-12-15 17:20:44 +03:00

224 lines
6.9 KiB
C++

#include "BufferExecute.h"
#include "Global.h"
#include "SoftUART.h"
#include "items/test.h"
#include "items/vButtonOut.h"
#include "items/vCountDown.h"
#include "items/vImpulsOut.h"
#include "items/vInput.h"
#include "items/vLogging.h"
#include "items/vOutput.h"
#include "items/vPwmOut.h"
#include "items/vSensorAnalog.h"
#include "items/vSensorAny.h"
#include "items/vSensorBme280.h"
#include "items/vSensorBmp280.h"
#include "items/vSensorCcs811.h"
#include "items/vSensorDallas.h"
#include "items/vSensorDht.h"
#include "items/vSensorNode.h"
#include "items/vSensorPzem.h"
#include "items/vSensorSHT20.h"
#include "items/vSensorUltrasonic.h"
#include "items/vSensorUptime.h"
void loopCmdAdd(const String& cmdStr) {
if (cmdStr.endsWith(",")) {
orderBuf += cmdStr;
SerialPrint("I", F("Order add"), cmdStr);
#ifdef EnableUart
if (jsonReadBool(configSetupJson, "uart")) {
if (jsonReadBool(configSetupJson, "uartEvents")) {
if (myUART) {
myUART->print(cmdStr);
SerialPrint("I", F("<=UART"), cmdStr);
}
}
}
#endif
}
}
void loopCmdExecute() {
if (orderBuf.length()) {
String tmp = selectToMarker(orderBuf, ","); //выделяем первую команду rel 5 1,
sCmd.readStr(tmp); //выполняем
if (tmp != "") {
sCmd.readStr(tmp);
SerialPrint("I", F("Order done L"), tmp);
}
orderBuf = deleteBeforeDelimiter(orderBuf, ","); //осекаем
}
}
void fileCmdExecute(const String& filename) {
String cmdStr = readFile(filename, 4096);
csvCmdExecute(cmdStr);
}
void csvCmdExecute(String& cmdStr) {
cmdStr.replace(";", " ");
cmdStr += "\r\n";
cmdStr.replace("\r\n", "\n");
cmdStr.replace("\r", "\n");
int count = 0;
while (cmdStr.length()) {
String buf = selectToMarker(cmdStr, "\n");
buf = deleteBeforeDelimiter(buf, " "); //отсечка чекбокса
count++;
if (count > 1) {
// SerialPrint("I", "Items", buf);
String order = selectToMarker(buf, " "); //отсечка самой команды
if (order == F("button-out")) {
#ifdef EnableButtonOut
sCmd.addCommand(order.c_str(), buttonOut);
#endif
} else if (order == F("pwm-out")) {
#ifdef EnablePwmOut
sCmd.addCommand(order.c_str(), pwmOut);
#endif
} else if (order == F("button-in")) {
#ifdef EnableButtonIn
sCmd.addCommand(order.c_str(), buttonIn);
#endif
} else if (order == F("input-value")) {
#ifdef EnableInput
sCmd.addCommand(order.c_str(), inputValue);
#endif
} else if (order == F("output-value")) {
#ifdef EnableOutput
sCmd.addCommand(order.c_str(), outputValue);
#endif
} else if (order == F("analog-adc")) {
#ifdef EnableSensorAnalog
sCmd.addCommand(order.c_str(), analogAdc);
#endif
} else if (order == F("ultrasonic-cm")) {
#ifdef EnableSensorUltrasonic
sCmd.addCommand(order.c_str(), ultrasonic);
#endif
//ИНТЕГРИРУЮ: Первая интеграция в ядро. Следим за наименованием
} else if (order == F("dallas-temp")) {
#ifdef EnableSensorDallas
sCmd.addCommand(order.c_str(), dallas);
#endif
} else if (order == F("dht")) {
#ifdef EnableSensorDht
sCmd.addCommand(order.c_str(), dhtSensor);
#endif
} else if (order == F("bme280")) {
#ifdef EnableSensorBme280
sCmd.addCommand(order.c_str(), bme280Sensor);
#endif
} else if (order == F("sht20")) {
#ifdef EnableSensorSht20
sCmd.addCommand(order.c_str(), sht20Sensor);
#endif
} else if (order == F("sensor")) {
#ifdef EnableSensorAny
sCmd.addCommand(order.c_str(), AnySensor);
#endif
} else if (order == F("bmp280")) {
#ifdef EnableSensorBmp280
sCmd.addCommand(order.c_str(), bmp280Sensor);
#endif
} else if (order == F("ccs811")) {
#ifdef EnableSensorCcs811
sCmd.addCommand(order.c_str(), ccs811Sensor);
#endif
} else if (order == F("pzem")) {
#ifdef EnableSensorPzem
sCmd.addCommand(order.c_str(), pzemSensor);
#endif
} else if (order == F("uptime")) {
#ifdef EnableSensorUptime
sCmd.addCommand(order.c_str(), uptimeSensor);
#endif
} else if (order == F("logging")) {
#ifdef EnableLogging
sCmd.addCommand(order.c_str(), logging);
#endif
} else if (order == F("impuls-out")) {
#ifdef EnableImpulsOut
sCmd.addCommand(order.c_str(), impuls);
#endif
} else if (order == F("count-down")) {
#ifdef EnableCountDown
sCmd.addCommand(order.c_str(), countDown);
#endif
} else if (order == F("impuls-in")) {
#ifdef EnableImpulsIn
// sCmd.addCommand(order.c_str(), impulsInSensor);
#endif
} else if (order == F("sensor-node")) {
#ifdef EnableSensorNode
sCmd.addCommand(order.c_str(), nodeSensor);
#endif
}
sCmd.readStr(buf);
}
cmdStr = deleteBeforeDelimiter(cmdStr, "\n");
}
}
void spaceCmdExecute(String& cmdStr) {
cmdStr += "\r\n";
cmdStr.replace("\r\n", "\n");
cmdStr.replace("\r", "\n");
while (cmdStr.length()) {
String buf = selectToMarker(cmdStr, "\n");
if (buf != "") {
sCmd.readStr(buf);
SerialPrint("I", F("Order done W"), buf);
}
cmdStr = deleteBeforeDelimiter(cmdStr, "\n");
}
}
//альтернативный вариант распределяющий нагрузку более правильно
void spaceCmdExecute2(String& cmdStr) {
cmdStr += "\r\n";
cmdStr.replace("\r\n", "\n");
cmdStr.replace("\r", "\n");
cmdStr.replace("\n", ",");
cmdStr.replace(",,", ",");
loopCmdAdd(cmdStr);
}
void addKey(String& key, String& keyNumberTable, int number) {
keyNumberTable += key + " " + String(number) + ",";
}
int getKeyNum(String& key, String& keyNumberTable) {
String keyNumberTableBuf = keyNumberTable;
int number = -1;
while (keyNumberTableBuf.length()) {
String tmp = selectToMarker(keyNumberTableBuf, ",");
String keyIncomming = selectToMarker(tmp, " ");
if (keyIncomming == key) {
number = selectToMarkerLast(tmp, " ").toInt();
}
keyNumberTableBuf = deleteBeforeDelimiter(keyNumberTableBuf, ",");
}
return number;
}
String getValue(String& key) {
String live = jsonReadStr(configLiveJson, key);
String store = jsonReadStr(configStoreJson, key);
if (live != nullptr) {
return live;
} else if (store != nullptr) {
return store;
} else if (store == nullptr && live == nullptr) {
return "no value";
} else {
return "data error";
}
}