From 0bfc876c655507bea75371864005fe62fe4e4735 Mon Sep 17 00:00:00 2001
From: Dmitry Borisenko <49808844+DmitryBorisenko33@users.noreply.github.com>
Date: Mon, 2 Nov 2020 01:21:51 +0300
Subject: [PATCH] 263 Impuls added
---
data/items/impuls-out.txt | 1 +
data/set.device.json | 7 +--
include/BufferExecute.h | 4 +-
include/Class/LineParsing.h | 4 +-
include/Consts.h | 4 +-
include/Global.h | 13 ++---
include/ItemsCmd.h | 2 +
include/items/ImpulsOutClass.h | 14 +++---
src/BufferExecute.cpp | 30 +++++++++---
src/Global.cpp | 8 +++-
src/Init.cpp | 33 +++----------
src/ItemsCmd.cpp | 2 +
src/MqttClient.cpp | 86 ++++++++++++++++++----------------
src/Utils/StringUtils.cpp | 6 ++-
src/items/ImpulsOutClass.cpp | 56 ++++++++++++++--------
src/items/LoggingClass.cpp | 8 ++--
src/main.cpp | 10 ++--
17 files changed, 161 insertions(+), 127 deletions(-)
create mode 100644 data/items/impuls-out.txt
diff --git a/data/items/impuls-out.txt b/data/items/impuls-out.txt
new file mode 100644
index 00000000..99994ae5
--- /dev/null
+++ b/data/items/impuls-out.txt
@@ -0,0 +1 @@
+0;impuls-out;id;na;na;na;order;pin
\ No newline at end of file
diff --git a/data/set.device.json b/data/set.device.json
index 1a94ee8d..ae32d833 100644
--- a/data/set.device.json
+++ b/data/set.device.json
@@ -43,7 +43,7 @@
},
{
"type": "h4",
- "title": "LittleFS version: 262"
+ "title": "LittleFS version: 263"
},
{
"type": "hr"
@@ -74,7 +74,8 @@
"/set?addItem=bme280-press": "17.Датчик давления bme280",
"/set?addItem=bmp280-temp": "18.Датчик температуры bmp280",
"/set?addItem=bmp280-press": "19.Датчик давления bmp280",
- "/set?addItem=modbus": "20.Прочитать регистр modbus устройства",
+ "/set?addItem=impuls-out": "20.Создать импульсы через заданный промежуток времени (управление шд)",
+ "/set?addItem=modbus": "21.Прочитать регистр modbus устройства",
"/set?addItem=logging": "a.Логгирование и вывод в график любой величины",
"/set?addItem=uptime": "b.Отобразить время работы устройства"
}
@@ -116,7 +117,7 @@
},
{
"type": "text",
- "title": "
После любого изменения таблицы элементов, включая удаление/добавление строк, необходимо нажать кнопку СОХРАНИТЬ ТАБЛИЦУ
"
+ "title": "После любого изменения таблицы элементов, включая удаление/добавление строк, необходимо нажать кнопку СОХРАНИТЬ ТАБЛИЦУ. Иногда, для корректной работы необходимо перезагрузить устройство после финального завершения его настройки
"
},
{
"type": "h2",
diff --git a/include/BufferExecute.h b/include/BufferExecute.h
index 85252a36..8575f6f4 100644
--- a/include/BufferExecute.h
+++ b/include/BufferExecute.h
@@ -5,4 +5,6 @@ extern void loopCmdAdd(const String &cmdStr);
extern void fileCmdExecute(const String &filename);
extern void csvCmdExecute(String &cmdStr);
extern void spaceCmdExecute(String &cmdStr);
-extern void loopCmdExecute();
\ No newline at end of file
+extern void loopCmdExecute();
+extern void addKey(String& key, int number);
+extern int getKeyNum(String& key);
\ No newline at end of file
diff --git a/include/Class/LineParsing.h b/include/Class/LineParsing.h
index 3543b581..52135995 100644
--- a/include/Class/LineParsing.h
+++ b/include/Class/LineParsing.h
@@ -155,10 +155,10 @@ class LineParsing {
String gint() {
return _int;
}
- String gmaxcnt() {
+ String gcnt() {
return _cnt;
}
- String gvalue() {
+ String gval() {
return _val;
}
diff --git a/include/Consts.h b/include/Consts.h
index fe42560a..61cbf9e1 100644
--- a/include/Consts.h
+++ b/include/Consts.h
@@ -3,7 +3,7 @@
//===========Firmware=============================================================================================================================================
#ifdef ESP8266
#define FIRMWARE_NAME "esp8266-iotm"
-#define FIRMWARE_VERSION 262
+#define FIRMWARE_VERSION 263
#endif
#ifdef ESP32
#define FIRMWARE_NAME "esp32-iotm"
@@ -31,7 +31,7 @@
//#define MDNS_ENABLED
//#define WEBSOCKET_ENABLED
//#define LAYOUT_IN_RAM
-//#define UDP_ENABLED
+#define UDP_ENABLED
//#define SSDP_ENABLED
//=========Sensors enable/disable=================================================================================================================================
diff --git a/include/Global.h b/include/Global.h
index fc9646a5..6a794f67 100644
--- a/include/Global.h
+++ b/include/Global.h
@@ -65,23 +65,20 @@ extern String eventBuf;
extern String itemsFile;
extern String itemsLine;
+//key lists and numbers
+extern String impulsKeyList;
+extern int impulsEnterCounter;
+
// Sensors
extern String sensorReadingMap10sec;
extern String sensorReadingMap30sec;
extern int8_t dallasEnterCounter;
-extern String logging_value_names_list;
+extern String loggingKeyList;
extern int enter_to_logging_counter;
extern int scenario_line_status[40];
extern int lastVersion;
-//Global functions
-// Logging
-extern void logging();
-extern void deleteOldDate(String filename, size_t max_lines, String date_to_add);
-
-
-
// Main
extern void setChipId();
extern void saveConfig();
diff --git a/include/ItemsCmd.h b/include/ItemsCmd.h
index 24d04b67..39bbca79 100644
--- a/include/ItemsCmd.h
+++ b/include/ItemsCmd.h
@@ -51,3 +51,5 @@ extern void sysUptime();
extern void uptimeReading();
extern void logging();
+
+extern void impuls();
diff --git a/include/items/ImpulsOutClass.h b/include/items/ImpulsOutClass.h
index 2f6b8651..1d9f9fa6 100644
--- a/include/items/ImpulsOutClass.h
+++ b/include/items/ImpulsOutClass.h
@@ -9,21 +9,23 @@ typedef std::vector MyImpulsOutVector;
class ImpulsOutClass {
public:
- ImpulsOutClass(unsigned long impulsPeriod, unsigned int impulsCount, unsigned int impulsPin);
+ ImpulsOutClass(unsigned int impulsPin);
~ImpulsOutClass();
void loop();
- void activate();
+ void execute(unsigned long impulsPeriod, unsigned int impulsCount);
private:
unsigned long currentMillis;
unsigned long prevMillis;
- unsigned long _impulsPeriod;
- unsigned int _impulsCount;
- unsigned int _impulsCountBuf;
- unsigned int _impulsPin;
+ unsigned long _impulsPeriod = 0;
+ unsigned int _impulsCount = 0;
+ unsigned int _impulsCountBuf = 0;
+ unsigned int _impulsPin = 0;
};
extern MyImpulsOutVector* myImpulsOut;
+
+extern void impulsExecute();
diff --git a/src/BufferExecute.cpp b/src/BufferExecute.cpp
index 83d6ab45..2e580fee 100644
--- a/src/BufferExecute.cpp
+++ b/src/BufferExecute.cpp
@@ -3,19 +3,19 @@
#include "Global.h"
#include "Module/Terminal.h"
-void loopCmdAdd(const String &cmdStr) {
+void loopCmdAdd(const String& cmdStr) {
orderBuf += cmdStr;
if (!cmdStr.endsWith(",")) {
orderBuf += ",";
}
}
-void fileCmdExecute(const String &filename) {
+void fileCmdExecute(const String& filename) {
String cmdStr = readFile(filename, 4096);
csvCmdExecute(cmdStr);
}
-void csvCmdExecute(String &cmdStr) {
+void csvCmdExecute(String& cmdStr) {
cmdStr.replace(";", " ");
cmdStr += "\r\n";
cmdStr.replace("\r\n", "\n");
@@ -30,7 +30,7 @@ void csvCmdExecute(String &cmdStr) {
}
}
-void spaceCmdExecute(String &cmdStr) {
+void spaceCmdExecute(String& cmdStr) {
cmdStr += "\r\n";
cmdStr.replace("\r\n", "\n");
cmdStr.replace("\r", "\n");
@@ -52,7 +52,7 @@ void loopCmdExecute() {
void sensorsInit() {
ts.add(
- SENSORS10SEC, 10000, [&](void *) {
+ SENSORS10SEC, 10000, [&](void*) {
String buf = sensorReadingMap10sec;
while (buf.length()) {
String tmp = selectToMarker(buf, ",");
@@ -63,7 +63,7 @@ void sensorsInit() {
nullptr, true);
ts.add(
- SENSORS30SEC, 30000, [&](void *) {
+ SENSORS30SEC, 30000, [&](void*) {
String buf = sensorReadingMap30sec;
while (buf.length()) {
String tmp = selectToMarker(buf, ",");
@@ -74,3 +74,21 @@ void sensorsInit() {
nullptr, true);
}
+void addKey(String& key, int number) {
+ impulsKeyList += key + " " + String(number) + ",";
+}
+
+int getKeyNum(String& key) {
+ String keyNumberTableBuf = impulsKeyList;
+ //SerialPrint("","",impulsKeyList);
+ 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;
+}
diff --git a/src/Global.cpp b/src/Global.cpp
index c47fe17e..3a572d9d 100644
--- a/src/Global.cpp
+++ b/src/Global.cpp
@@ -33,17 +33,21 @@ String scenario = "";
//orders and events
String orderBuf = "";
String eventBuf = "";
-
String itemsFile = "";
String itemsLine = "";
+//key lists and numbers
+String impulsKeyList = "";
+int impulsEnterCounter = -1;
+
+
// Sensors
int8_t dallasEnterCounter = -1;
String sensorReadingMap10sec;
String sensorReadingMap30sec;
// Logging
-String logging_value_names_list;
+String loggingKeyList;
int enter_to_logging_counter;
// Upgrade
diff --git a/src/Init.cpp b/src/Init.cpp
index e8cccfdb..0996230a 100644
--- a/src/Init.cpp
+++ b/src/Init.cpp
@@ -1,5 +1,5 @@
#include "Init.h"
-
+#include "BufferExecute.h"
#include "Cmd.h"
#include "Global.h"
#include "items/LoggingClass.h"
@@ -31,32 +31,13 @@ void Device_init() {
if (myLogging != nullptr) {
myLogging->clear();
}
- logging_value_names_list = "";
+
+ loggingKeyList = "";
+
+ impulsKeyList = "";
+ impulsEnterCounter = -1;
+
-
- //enter_to_logging_counter = LOG1 - 1;
- //analog_value_names_list = "";
- //enter_to_analog_counter = 0;
- //dallas_value_name = "";
- //enter_to_dallas_counter = 0;
- //levelPr_value_name = "";
- //ultrasonicCm_value_name = "";
- //dhtT_value_name = "";
- //dhtH_value_name = "";
- //bmp280T_value_name = "";
- //bmp280P_value_name = "";
- //bme280T_value_name = "";
- //bme280P_value_name = "";
- //bme280H_value_name = "";
- //bme280A_value_name = "";
- //int array_sz = sizeof(sensors_reading_map) / sizeof(sensors_reading_map[0]);
- //for (int i = 0; i < array_sz; i++) {
- // sensors_reading_map[i] = 0;
- //}
- //for (int i = LOG1; i <= LOG5; i++) {
- // ts.remove(i);
- //}
-
#ifdef LAYOUT_IN_RAM
all_widgets = "";
#else
diff --git a/src/ItemsCmd.cpp b/src/ItemsCmd.cpp
index 2a949050..4fc35acd 100644
--- a/src/ItemsCmd.cpp
+++ b/src/ItemsCmd.cpp
@@ -49,6 +49,8 @@ void cmd_init() {
sCmd.addCommand("logging", logging);
+ sCmd.addCommand("impuls-out", impuls);
+
handle_time_init();
}
diff --git a/src/MqttClient.cpp b/src/MqttClient.cpp
index 6c94d73c..2210cbb3 100644
--- a/src/MqttClient.cpp
+++ b/src/MqttClient.cpp
@@ -26,11 +26,13 @@ void mqttInit() {
if (mqtt.connected()) {
SerialPrint("I", "MQTT", "OK");
setLedStatus(LED_OFF);
- } else {
+ }
+ else {
SerialPrint("E", "MQTT", "lost connection");
mqttConnect();
}
- } else {
+ }
+ else {
SerialPrint("E", "WIFI", "Lost WiFi connection");
ts.remove(WIFI_MQTT_CONNECTION_CHECK);
startAPMode();
@@ -89,7 +91,8 @@ boolean mqttConnect() {
setLedStatus(LED_OFF);
mqttSubscribe();
res = true;
- } else {
+ }
+ else {
SerialPrint("E", "MQTT", "could't connect, retry in " + String(MQTT_RECONNECT_INTERVAL / 1000) + "s");
setLedStatus(LED_FAST);
}
@@ -116,8 +119,9 @@ void mqttCallback(char* topic, uint8_t* payload, size_t length) {
choose_log_date_and_send();
#endif
- } else if (topicStr.indexOf("control")) {
-
+ }
+ else if (topicStr.indexOf("control")) {
+
String key = selectFromMarkerToMarker(topicStr, "/", 3);
orderBuf += key;
@@ -125,12 +129,14 @@ void mqttCallback(char* topic, uint8_t* payload, size_t length) {
orderBuf += payloadStr;
orderBuf += ",";
- } else if (topicStr.indexOf("order")) {
+ }
+ else if (topicStr.indexOf("order")) {
payloadStr.replace("_", " ");
orderBuf += payloadStr;
orderBuf += ",";
- } else if (topicStr.indexOf("update")) {
+ }
+ else if (topicStr.indexOf("update")) {
if (payloadStr == "1") {
myNotAsyncActions->make(do_UPGRADE);
}
@@ -245,38 +251,38 @@ void publishState() {
const String getStateStr() {
switch (mqtt.state()) {
- case -4:
- return F("no respond");
- break;
- case -3:
- return F("connection was broken");
- break;
- case -2:
- return F("connection failed");
- break;
- case -1:
- return F("client disconnected");
- break;
- case 0:
- return F("client connected");
- break;
- case 1:
- return F("doesn't support the requested version");
- break;
- case 2:
- return F("rejected the client identifier");
- break;
- case 3:
- return F("unable to accept the connection");
- break;
- case 4:
- return F("wrong username/password");
- break;
- case 5:
- return F("not authorized to connect");
- break;
- default:
- return F("unspecified");
- break;
+ case -4:
+ return F("no respond");
+ break;
+ case -3:
+ return F("connection was broken");
+ break;
+ case -2:
+ return F("connection failed");
+ break;
+ case -1:
+ return F("client disconnected");
+ break;
+ case 0:
+ return F("client connected");
+ break;
+ case 1:
+ return F("doesn't support the requested version");
+ break;
+ case 2:
+ return F("rejected the client identifier");
+ break;
+ case 3:
+ return F("unable to accept the connection");
+ break;
+ case 4:
+ return F("wrong username/password");
+ break;
+ case 5:
+ return F("not authorized to connect");
+ break;
+ default:
+ return F("unspecified");
+ break;
}
}
diff --git a/src/Utils/StringUtils.cpp b/src/Utils/StringUtils.cpp
index bf6af4b1..a158fa94 100644
--- a/src/Utils/StringUtils.cpp
+++ b/src/Utils/StringUtils.cpp
@@ -75,7 +75,7 @@ uint16_t hexStringToUint16(String hex) {
}
}
-size_t itemsCount(String str, const String &separator) {
+size_t itemsCount(String str, const String& separator) {
// если строки поиск нет сразу выход
if (str.indexOf(separator) == -1) {
return 0;
@@ -91,7 +91,7 @@ size_t itemsCount(String str, const String &separator) {
return cnt;
}
-boolean isDigitStr(const String &str) {
+boolean isDigitStr(const String& str) {
for (size_t i = 0; i < str.length(); i++) {
if (!isDigit(str.charAt(i))) {
return false;
@@ -111,3 +111,5 @@ String prettyBytes(size_t size) {
return String(size / 1024.0 / 1024.0 / 1024.0) + "GB";
}
+
+
diff --git a/src/items/ImpulsOutClass.cpp b/src/items/ImpulsOutClass.cpp
index 6a0df539..fb423dcc 100644
--- a/src/items/ImpulsOutClass.cpp
+++ b/src/items/ImpulsOutClass.cpp
@@ -1,21 +1,21 @@
#include "items/ImpulsOutClass.h"
#include
-
+#include "BufferExecute.h"
#include "Class/LineParsing.h"
#include "Global.h"
#include "ItemsCmd.h"
-ImpulsOutClass::ImpulsOutClass(unsigned long impulsPeriod, unsigned int impulsCount, unsigned int impulsPin) {
- _impulsPeriod = impulsPeriod;
- _impulsCount = impulsCount * 2;
+ImpulsOutClass::ImpulsOutClass(unsigned int impulsPin) {
_impulsPin = impulsPin;
pinMode(impulsPin, OUTPUT);
}
ImpulsOutClass::~ImpulsOutClass() {}
-void ImpulsOutClass::activate() {
+void ImpulsOutClass::execute(unsigned long impulsPeriod, unsigned int impulsCount) {
+ _impulsPeriod = impulsPeriod;
+ _impulsCount = impulsCount * 2;
_impulsCountBuf = _impulsCount;
}
@@ -38,18 +38,34 @@ void ImpulsOutClass::loop() {
MyImpulsOutVector* myImpulsOut = nullptr;
-//void impuls() {
-// myLineParsing.update();
-// String loggingValueKey = myLineParsing.gvalue();
-// String key = myLineParsing.gkey();
-// String interv = myLineParsing.gint();
-// String maxcnt = myLineParsing.gmaxcnt();
-// myLineParsing.clear();
-//
-// logging_value_names_list += key + ",";
-//
-// static bool firstTime = true;
-// if (firstTime) myImpulsOut = new MyImpulsOutVector();
-// firstTime = false;
-// myImpulsOut->push_back(ImpulsOutClass(interv.toInt(), maxcnt.toInt(), loggingValueKey, key));
-//}
+void impuls() {
+ myLineParsing.update();
+ String key = myLineParsing.gkey();
+ String pin = myLineParsing.gpin();
+ myLineParsing.clear();
+
+ impulsEnterCounter++;
+ addKey(key, impulsEnterCounter);
+
+ static bool firstTime = true;
+ if (firstTime) myImpulsOut = new MyImpulsOutVector();
+ firstTime = false;
+ myImpulsOut->push_back(ImpulsOutClass(pin.toInt()));
+
+ sCmd.addCommand(key.c_str(), impulsExecute);
+}
+
+void impulsExecute() {
+ String key = sCmd.order();
+ String impulsPeriod = sCmd.next();
+ String impulsCount = sCmd.next();
+
+ int number = getKeyNum(key);
+ SerialPrint("I", "Impuls", key + " " + String(number));
+
+ if (myImpulsOut != nullptr) {
+ if (number != -1) {
+ myImpulsOut->at(number).execute(impulsPeriod.toInt(), impulsCount.toInt());
+ }
+ }
+}
diff --git a/src/items/LoggingClass.cpp b/src/items/LoggingClass.cpp
index de9cdee3..ca34a0ce 100644
--- a/src/items/LoggingClass.cpp
+++ b/src/items/LoggingClass.cpp
@@ -54,13 +54,13 @@ MyLoggingVector* myLogging = nullptr;
void logging() {
myLineParsing.update();
- String loggingValueKey = myLineParsing.gvalue();
+ String loggingValueKey = myLineParsing.gval();
String key = myLineParsing.gkey();
String interv = myLineParsing.gint();
- String maxcnt = myLineParsing.gmaxcnt();
+ String maxcnt = myLineParsing.gcnt();
myLineParsing.clear();
- logging_value_names_list += key + ",";
+ loggingKeyList += key + ",";
static bool firstTime = true;
if (firstTime) myLogging = new MyLoggingVector();
@@ -69,7 +69,7 @@ void logging() {
}
void choose_log_date_and_send() {
- String all_line = logging_value_names_list;
+ String all_line = loggingKeyList;
while (all_line.length() != 0) {
String tmp = selectToMarker(all_line, ",");
sendLogData("logs/" + tmp + ".txt", tmp);
diff --git a/src/main.cpp b/src/main.cpp
index 14293ccc..15fc5ef4 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -101,11 +101,11 @@ void setup() {
just_load = false;
initialized = true; //this second POST makes the data to be processed (you don't need to connect as "keep-alive" for that to work)
- static bool firstTime = true;
- if (firstTime) myImpulsOut = new MyImpulsOutVector();
- firstTime = false;
- myImpulsOut->push_back(ImpulsOutClass(500, 10, 13));
- myImpulsOut->at(0).activate();
+ //static bool firstTime = true;
+ //if (firstTime) myImpulsOut = new MyImpulsOutVector();
+ //firstTime = false;
+ //myImpulsOut->push_back(ImpulsOutClass(500, 10, 13));
+ //myImpulsOut->at(0).execute();
}
void loop() {