diff --git a/data/config.json b/data/config.json
index b00e72d2..8c8b402a 100644
--- a/data/config.json
+++ b/data/config.json
@@ -18,5 +18,6 @@
"webpass": "admin",
"udponoff": "1",
"blink": "0",
- "oneWirePin": "2"
+ "oneWirePin": "2",
+ "serverip": "http://206.189.49.244"
}
\ No newline at end of file
diff --git a/data/items/logging.txt b/data/items/logging.txt
new file mode 100644
index 00000000..8253774f
--- /dev/null
+++ b/data/items/logging.txt
@@ -0,0 +1 @@
+0;logging;id;chart;Графики;История;order;val[any];int[60];cnt[100]
\ No newline at end of file
diff --git a/data/js/function.js.gz b/data/js/function.js.gz
index 10c9953a..b3e5ea56 100644
Binary files a/data/js/function.js.gz and b/data/js/function.js.gz differ
diff --git a/data/set.dev.json b/data/set.dev.json
new file mode 100644
index 00000000..fb697b50
--- /dev/null
+++ b/data/set.dev.json
@@ -0,0 +1,46 @@
+{
+ "configs": [
+ "/config.setup.json",
+ "/lang/lang.ru.json"
+ ],
+ "title": "Конфигурация",
+ "class": "col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6",
+ "content": [
+ {
+ "type": "h5",
+ "title": "{{name}}",
+ "class": "alert-default"
+ },
+ {
+ "type": "link",
+ "title": "{{ButMainPage}}",
+ "action": "/",
+ "class": "btn btn-block btn-default"
+ },
+ {
+ "type": "hr"
+ },
+ {
+ "type": "h3",
+ "title": "Адрес сервера обновлений"
+ },
+ {
+ "type": "input",
+ "title": "ip address",
+ "name": "serverip-arg",
+ "state": "{{serverip}}"
+ },
+ {
+ "type": "button",
+ "title": "{{ButSave}}",
+ "action": "set?serverip=[[serverip-arg]]",
+ "class": "btn btn-block btn-default"
+ },
+ {
+ "type": "link",
+ "title": "Перезагрузить устройство",
+ "action": "javascript:if(confirm(renameBlock(jsonResponse,'Перезагрузить?'))){send_request(this,'/set?device=ok');}",
+ "class": "btn btn-block btn-danger"
+ }
+ ]
+ }
\ No newline at end of file
diff --git a/data/set.device.json b/data/set.device.json
index e6d6698e..e504dd19 100644
--- a/data/set.device.json
+++ b/data/set.device.json
@@ -75,7 +75,8 @@
"/set?addItem=bmp280-temp": "18.Датчик температуры bmp280",
"/set?addItem=bmp280-press": "19.Датчик давления bmp280",
"/set?addItem=modbus": "20.Прочитать регистр modbus устройства",
- "/set?addItem=uptime": "a.Отобразить время работы устройства"
+ "/set?addItem=logging": "a.Логгирование и вывод в график любой величины",
+ "/set?addItem=uptime": "b.Отобразить время работы устройства"
}
},
@@ -98,6 +99,9 @@
"action": "/set?saveItems",
"class": "btn btn-block btn-default"
},
+ {
+ "type": "hr"
+ },
{
"type": "link",
"title": "Удалить выбранные элементы",
@@ -112,7 +116,7 @@
},
{
"type": "text",
- "title": "
После любого изменения таблицы элементов, включая удаление/добавление строк, необходимо нажать кнопку Save
"
+ "title": "После любого изменения таблицы элементов, включая удаление/добавление строк, необходимо нажать кнопку Сохранить таблицу
"
},
{
"type": "h2",
diff --git a/data/widgets/chart.json b/data/widgets/chart.json
index 47c6473b..9ecc61e3 100644
--- a/data/widgets/chart.json
+++ b/data/widgets/chart.json
@@ -1,5 +1,4 @@
{
"widget": "chart",
- "series": "Temperature, °C",
"dateFormat": "HH:mm"
}
\ No newline at end of file
diff --git a/include/Class/LineParsing.h b/include/Class/LineParsing.h
index fa117948..faa4848e 100644
--- a/include/Class/LineParsing.h
+++ b/include/Class/LineParsing.h
@@ -12,7 +12,6 @@ class LineParsing {
String _page;
String _descr;
String _order;
-
String _addr;
String _reg;
String _pin;
@@ -22,6 +21,9 @@ class LineParsing {
String _state;
String _db;
String _type;
+ String _int;
+ String _cnt;
+ String _val;
public:
LineParsing() :
@@ -39,7 +41,10 @@ class LineParsing {
_inv{""},
_state{""},
_db{""},
- _type{""}
+ _type{""},
+ _int{""},
+ _cnt{""},
+ _val{""}
{};
@@ -84,6 +89,15 @@ class LineParsing {
if (arg.indexOf("reg[") != -1) {
_reg = extractInner(arg);
}
+ if (arg.indexOf("int[") != -1) {
+ _int = extractInner(arg);
+ }
+ if (arg.indexOf("cnt[") != -1) {
+ _cnt = extractInner(arg);
+ }
+ if (arg.indexOf("val[") != -1) {
+ _val = extractInner(arg);
+ }
}
}
@@ -115,10 +129,10 @@ class LineParsing {
return _order;
}
String gpin() {
- return _pin; //
+ return _pin;
}
String ginv() {
- return _inv; //
+ return _inv;
}
String gstate() {
return _state;
@@ -138,6 +152,15 @@ class LineParsing {
String gregaddr() {
return _reg;
}
+ String gint() {
+ return _int;
+ }
+ String gmaxcnt() {
+ return _cnt;
+ }
+ String gvalue() {
+ return _val;
+ }
void clear() {
_key = "";
@@ -154,6 +177,9 @@ class LineParsing {
_state = "";
_db = "";
_type = "";
+ _int = "";
+ _cnt = "";
+ _val = "";
}
String extractInnerDigit(String str) {
diff --git a/include/Consts.h b/include/Consts.h
index 8379bf8d..fcda15c4 100644
--- a/include/Consts.h
+++ b/include/Consts.h
@@ -44,7 +44,7 @@
//#define MDNS_ENABLED
//#define WEBSOCKET_ENABLED
//#define LAYOUT_IN_RAM
-//#define UDP_ENABLED
+#define UDP_ENABLED
#define SSDP_ENABLED
//
@@ -88,13 +88,6 @@ enum TimerTask_t { WIFI_SCAN,
WIFI_MQTT_CONNECTION_CHECK,
SENSORS10SEC,
SENSORS30SEC,
- STEPPER1,
- STEPPER2,
- LOG1,
- LOG2,
- LOG3,
- LOG4,
- LOG5,
TIMER_COUNTDOWN,
TIME,
TIME_SYNC,
diff --git a/include/ItemsCmd.h b/include/ItemsCmd.h
index 4330993f..24d04b67 100644
--- a/include/ItemsCmd.h
+++ b/include/ItemsCmd.h
@@ -49,3 +49,5 @@ extern void bmp280ReadingPress();
extern void sysUptime();
extern void uptimeReading();
+
+extern void logging();
diff --git a/include/RemoteOrdersUdp.h b/include/RemoteOrdersUdp.h
index 5aff5be4..a8c2d8e0 100644
--- a/include/RemoteOrdersUdp.h
+++ b/include/RemoteOrdersUdp.h
@@ -1,7 +1,7 @@
-//#pragma once
-//#include "ESPAsyncUDP.h"
-//extern AsyncUDP asyncUdp;
-//extern void asyncUdpInit();
-//extern String uint8tToString(uint8_t* data, size_t len);
-//extern bool udpPacketValidation(String& data);
-//extern void udpPacketParse(String& data);
\ No newline at end of file
+#pragma once
+#include "ESPAsyncUDP.h"
+extern AsyncUDP asyncUdp;
+extern void asyncUdpInit();
+extern String uint8tToString(uint8_t* data, size_t len);
+extern bool udpPacketValidation(String& data);
+extern void udpPacketParse(String& data);
\ No newline at end of file
diff --git a/src/Global.cpp b/src/Global.cpp
index 4de7df8c..c47fe17e 100644
--- a/src/Global.cpp
+++ b/src/Global.cpp
@@ -47,7 +47,7 @@ String logging_value_names_list;
int enter_to_logging_counter;
// Upgrade
-String serverIP = "http://206.189.49.244";
+String serverIP;
// Scenario
int scenario_line_status[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
diff --git a/src/Init.cpp b/src/Init.cpp
index f2e5c82e..8fc8f6aa 100644
--- a/src/Init.cpp
+++ b/src/Init.cpp
@@ -14,6 +14,8 @@ void loadConfig() {
prex = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId;
Serial.println(configSetupJson);
+
+ serverIP = jsonReadStr(configSetupJson, "serverip");
}
void all_init() {
diff --git a/src/ItemsCmd.cpp b/src/ItemsCmd.cpp
index 678aa11c..2a949050 100644
--- a/src/ItemsCmd.cpp
+++ b/src/ItemsCmd.cpp
@@ -47,6 +47,8 @@ void cmd_init() {
sCmd.addCommand("uptime", sysUptime);
+ sCmd.addCommand("logging", logging);
+
handle_time_init();
}
diff --git a/src/Logging.cpp b/src/Logging.cpp
index 44b323a4..41f04790 100644
--- a/src/Logging.cpp
+++ b/src/Logging.cpp
@@ -7,7 +7,7 @@ void sendLogData(String file, String topic);
#ifdef LOGGING_ENABLED
//===============================================Логирование============================================================
//logging temp1 1 10 Температура Датчики 2
-void logging() {
+/*void logging2() {
String value_name = sCmd.next();
String period_min = sCmd.next();
String maxCount = sCmd.next();
@@ -67,12 +67,12 @@ void logging() {
},
nullptr, false);
}
-}
+}*/
/*
* Удаление стрых данных и запись новых
*/
-void deleteOldDate(const String filename, size_t max_lines_cnt, String payload) {
+/*void deleteOldDate(const String filename, size_t max_lines_cnt, String payload) {
String log_date = readFile(filename, 5120);
size_t lines_cnt = itemsCount(log_date, "\r\n");
@@ -94,7 +94,7 @@ void deleteOldDate(const String filename, size_t max_lines_cnt, String payload)
addFileLn(filename, timeNow->getTimeUnix() + " " + payload);
}
}
-}
+}*/
//=========================================Выбор какие данные отправлять==================================================================
void choose_log_date_and_send() {
diff --git a/src/RemoteOrdersUdp.cpp b/src/RemoteOrdersUdp.cpp
index e09693b0..6187d0bd 100644
--- a/src/RemoteOrdersUdp.cpp
+++ b/src/RemoteOrdersUdp.cpp
@@ -1,71 +1,70 @@
-//#include "RemoteOrdersUdp.h"
-//
-//#include
-//
-//#include "Global.h"
-//
-//AsyncUDP asyncUdp;
-//
-//void asyncUdpInit() {
-// //if (asyncUdp.listen(1234)) {
-// if (asyncUdp.listenMulticast(IPAddress(239, 255, 255, 255), 1234)) {
-// asyncUdp.onPacket([](AsyncUDPPacket packet) {
-//
-// //Serial.print("UDP Packet Type: ");
-// //Serial.print(packet.isBroadcast() ? "Broadcast" : packet.isMulticast() ? "Multicast" : "Unicast");
-// //
-// //Serial.print(", From: ");
-// //Serial.print(packet.remoteIP());
-// //Serial.print(":");
-// //Serial.print(packet.remotePort());
-// //
-// //Serial.print(", To: ");
-// //Serial.print(packet.localIP());
-// //Serial.print(":");
-// //Serial.print(packet.localPort());
-// //
-// //Serial.print(", Length: ");
-// //Serial.print(packet.length());
-// //
-// //Serial.print(", Data: ");
-// //Serial.write(packet.data(), packet.length());
-//
-// String data = uint8tToString(packet.data(), packet.length());
-// Serial.print("[i] [udp] Packet received: '");
-// Serial.print(data);
-// if (udpPacketValidation(data)) {
-// udpPacketParse(data);
-// //Serial.println("', Packet valid");
-// } else {
-// //Serial.println("', Packet invalid");
-// }
-//
-// //reply to the client
-//
-// packet.printf("Got %u bytes of data", packet.length());
-// });
-// }
-//}
-//
-//String uint8tToString(uint8_t* data, size_t len) {
-// String ret;
-// while (len--) {
-// ret += (char)*data++;
-// }
-// return ret;
-//}
-//
-//bool udpPacketValidation(String& data) {
-// if (data.indexOf("iotm;") != -1 && data.indexOf(getChipId()) != -1) {
-// return true;
-// } else {
-// return false;
-// }
-//}
-//
-////iotm;chipid;button-out-1_1
-//void udpPacketParse(String& data) {
-// data = selectFromMarkerToMarker(data, ";", 2);
-// data.replace("_", " ");
-// orderBuf += data + ",";
-//}
\ No newline at end of file
+#include "RemoteOrdersUdp.h"
+#include
+#include "Global.h"
+
+#ifdef UDP_ENABLED
+AsyncUDP asyncUdp;
+
+void asyncUdpInit() {
+ //if (asyncUdp.listen(1234)) {
+ if (asyncUdp.listenMulticast(IPAddress(239, 255, 255, 255), 1234)) {
+ asyncUdp.onPacket([](AsyncUDPPacket packet) {
+ //Serial.print("UDP Packet Type: ");
+ //Serial.print(packet.isBroadcast() ? "Broadcast" : packet.isMulticast() ? "Multicast" : "Unicast");
+ //
+ //Serial.print(", From: ");
+ //Serial.print(packet.remoteIP());
+ //Serial.print(":");
+ //Serial.print(packet.remotePort());
+ //
+ //Serial.print(", To: ");
+ //Serial.print(packet.localIP());
+ //Serial.print(":");
+ //Serial.print(packet.localPort());
+ //
+ //Serial.print(", Length: ");
+ //Serial.print(packet.length());
+ //
+ //Serial.print(", Data: ");
+ //Serial.write(packet.data(), packet.length());
+
+ String data = uint8tToString(packet.data(), packet.length());
+ Serial.print("[i] [udp] Packet received: '");
+ Serial.print(data);
+ if (udpPacketValidation(data)) {
+ udpPacketParse(data);
+ //Serial.println("', Packet valid");
+ } else {
+ //Serial.println("', Packet invalid");
+ }
+
+ //reply to the client
+
+ packet.printf("Got %u bytes of data", packet.length());
+ });
+ }
+}
+
+String uint8tToString(uint8_t* data, size_t len) {
+ String ret;
+ while (len--) {
+ ret += (char)*data++;
+ }
+ return ret;
+}
+
+bool udpPacketValidation(String& data) {
+ if (data.indexOf("iotm;") != -1 && data.indexOf(getChipId()) != -1) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+//iotm;chipid;button-out-1_1
+void udpPacketParse(String& data) {
+ data = selectFromMarkerToMarker(data, ";", 2);
+ data.replace("_", " ");
+ orderBuf += data + ",";
+}
+#endif
\ No newline at end of file
diff --git a/src/Web.cpp b/src/Web.cpp
index 409f9836..fe1a1a02 100644
--- a/src/Web.cpp
+++ b/src/Web.cpp
@@ -200,6 +200,14 @@ void web_init() {
myNotAsyncActions->make(do_BUSSCAN);
request->redirect("/?set.utilities");
}
+
+ //==============================developer settings=============================================
+ if (request->hasArg("serverip")) {
+ jsonWriteStr(configSetupJson, "serverip", request->getParam("serverip")->value());
+ saveConfig();
+ serverIP = jsonReadStr(configSetupJson, "serverip");
+ request->send(200);
+ }
});
//==============================list of items=====================================================
diff --git a/src/items/LoggingClass.cpp b/src/items/LoggingClass.cpp
index 8fffec28..0b809781 100644
--- a/src/items/LoggingClass.cpp
+++ b/src/items/LoggingClass.cpp
@@ -1,7 +1,13 @@
#include "items/LoggingClass.h"
+#include
+
+#include "Class/LineParsing.h"
+#include "Global.h"
+#include "ItemsCmd.h"
+
LoggingClass::LoggingClass(unsigned long period, unsigned int maxPoints, String key) {
- _period = period;
+ _period = period * 1000;
_maxPoints = maxPoints;
_key = key;
}
@@ -17,7 +23,6 @@ void LoggingClass::loop() {
}
}
-
void LoggingClass::addNewDelOldData(const String filename, size_t maxPoints, String payload) {
String logData = readFile(filename, 5120);
size_t lines_cnt = itemsCount(logData, "\r\n");
@@ -28,18 +33,33 @@ void LoggingClass::addNewDelOldData(const String filename, size_t maxPoints, Str
removeFile(filename);
lines_cnt = 0;
}
-
- if (lines_cnt > maxPoints) {
- logData = deleteBeforeDelimiter(logData, "\r\n");
- if (timeNow->hasTimeSynced()) {
- logData += timeNow->getTimeUnix() + " " + payload + "\r\n";
- writeFile(filename, logData);
- }
- } else {
- if (timeNow->hasTimeSynced()) {
- addFileLn(filename, timeNow->getTimeUnix() + " " + payload);
+
+ if (payload != "") {
+ if (lines_cnt > maxPoints) {
+ logData = deleteBeforeDelimiter(logData, "\r\n");
+ if (timeNow->hasTimeSynced()) {
+ logData += timeNow->getTimeUnix() + " " + payload + "\r\n";
+ writeFile(filename, logData);
+ }
+ } else {
+ if (timeNow->hasTimeSynced()) {
+ addFileLn(filename, timeNow->getTimeUnix() + " " + payload);
+ }
}
}
}
-MyLoggingVector* myLogging = nullptr;
\ No newline at end of file
+MyLoggingVector* myLogging = nullptr;
+
+void logging() {
+ myLineParsing.update();
+ String value = myLineParsing.gvalue();
+ String interv = myLineParsing.gint();
+ String maxcnt = myLineParsing.gmaxcnt();
+ myLineParsing.clear();
+
+ static bool firstTime = true;
+ if (firstTime) myLogging = new MyLoggingVector();
+ firstTime = false;
+ myLogging->push_back(LoggingClass(interv.toInt(), maxcnt.toInt(), value));
+}
diff --git a/src/main.cpp b/src/main.cpp
index 8bd9b7ca..287e340f 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -14,7 +14,7 @@
#include "Utils/WebUtils.h"
#include "items/ButtonInClass.h"
#include "items/LoggingClass.h"
-//#include "RemoteOrdersUdp.h"
+#include "RemoteOrdersUdp.h"
#include "Bus.h"
void not_async_actions();
@@ -74,9 +74,11 @@ void setup() {
SerialPrint("I", "Stat", "Stat Init");
initSt();
-
- //SerialPrint("I","UDP","Udp Init");
- //asyncUdpInit();
+
+ #ifdef UDP_ENABLED
+ SerialPrint("I","UDP","Udp Init");
+ asyncUdpInit();
+ #endif
SerialPrint("I", "Bus", "Bus Init");
busInit();
@@ -97,8 +99,8 @@ 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)
- myLogging = new MyLoggingVector();
- myLogging->push_back(LoggingClass(30000, 10, "analog-adc-1"));
+ //myLogging = new MyLoggingVector();
+ //myLogging->push_back(LoggingClass(30000, 10, "analog-adc-1"));
//myLogging->push_back(LoggingClass(10000, 1, "10 sec"));
}