logging and udp

This commit is contained in:
Dmitry Borisenko
2020-11-01 02:52:57 +03:00
parent 8445dd3b0c
commit 1126575822
18 changed files with 223 additions and 118 deletions

View File

@@ -18,5 +18,6 @@
"webpass": "admin", "webpass": "admin",
"udponoff": "1", "udponoff": "1",
"blink": "0", "blink": "0",
"oneWirePin": "2" "oneWirePin": "2",
"serverip": "http://206.189.49.244"
} }

1
data/items/logging.txt Normal file
View File

@@ -0,0 +1 @@
0;logging;id;chart;Графики;История;order;val[any];int[60];cnt[100]

Binary file not shown.

46
data/set.dev.json Normal file
View File

@@ -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"
}
]
}

View File

@@ -75,7 +75,8 @@
"/set?addItem=bmp280-temp": "18.Датчик температуры bmp280", "/set?addItem=bmp280-temp": "18.Датчик температуры bmp280",
"/set?addItem=bmp280-press": "19.Датчик давления bmp280", "/set?addItem=bmp280-press": "19.Датчик давления bmp280",
"/set?addItem=modbus": "20.Прочитать регистр modbus устройства", "/set?addItem=modbus": "20.Прочитать регистр modbus устройства",
"/set?addItem=uptime": "a.Отобразить время работы устройства" "/set?addItem=logging": "a.Логгирование и вывод в график любой величины",
"/set?addItem=uptime": "b.Отобразить время работы устройства"
} }
}, },
@@ -98,6 +99,9 @@
"action": "/set?saveItems", "action": "/set?saveItems",
"class": "btn btn-block btn-default" "class": "btn btn-block btn-default"
}, },
{
"type": "hr"
},
{ {
"type": "link", "type": "link",
"title": "Удалить выбранные элементы", "title": "Удалить выбранные элементы",
@@ -112,7 +116,7 @@
}, },
{ {
"type": "text", "type": "text",
"title": "<div style='margin-top:10px;margin-bottom:10px;'><font color='black'><p style='border: 1px solid #DCDCDC; border-radius: 3px; background-color: #F5F5F5; padding: 10px;'>После любого изменения таблицы элементов, включая удаление/добавление строк, необходимо нажать кнопку <b>Save</b></p></font></div>" "title": "<div style='margin-top:10px;margin-bottom:10px;'><font color='black'><p style='border: 1px solid #DCDCDC; border-radius: 3px; background-color: #F5F5F5; padding: 10px;'>После любого изменения таблицы элементов, включая удаление/добавление строк, необходимо нажать кнопку <b>Сохранить таблицу</b></p></font></div>"
}, },
{ {
"type": "h2", "type": "h2",

View File

@@ -1,5 +1,4 @@
{ {
"widget": "chart", "widget": "chart",
"series": "Temperature, °C",
"dateFormat": "HH:mm" "dateFormat": "HH:mm"
} }

View File

@@ -12,7 +12,6 @@ class LineParsing {
String _page; String _page;
String _descr; String _descr;
String _order; String _order;
String _addr; String _addr;
String _reg; String _reg;
String _pin; String _pin;
@@ -22,6 +21,9 @@ class LineParsing {
String _state; String _state;
String _db; String _db;
String _type; String _type;
String _int;
String _cnt;
String _val;
public: public:
LineParsing() : LineParsing() :
@@ -39,7 +41,10 @@ class LineParsing {
_inv{""}, _inv{""},
_state{""}, _state{""},
_db{""}, _db{""},
_type{""} _type{""},
_int{""},
_cnt{""},
_val{""}
{}; {};
@@ -84,6 +89,15 @@ class LineParsing {
if (arg.indexOf("reg[") != -1) { if (arg.indexOf("reg[") != -1) {
_reg = extractInner(arg); _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; return _order;
} }
String gpin() { String gpin() {
return _pin; // return _pin;
} }
String ginv() { String ginv() {
return _inv; // return _inv;
} }
String gstate() { String gstate() {
return _state; return _state;
@@ -138,6 +152,15 @@ class LineParsing {
String gregaddr() { String gregaddr() {
return _reg; return _reg;
} }
String gint() {
return _int;
}
String gmaxcnt() {
return _cnt;
}
String gvalue() {
return _val;
}
void clear() { void clear() {
_key = ""; _key = "";
@@ -154,6 +177,9 @@ class LineParsing {
_state = ""; _state = "";
_db = ""; _db = "";
_type = ""; _type = "";
_int = "";
_cnt = "";
_val = "";
} }
String extractInnerDigit(String str) { String extractInnerDigit(String str) {

View File

@@ -44,7 +44,7 @@
//#define MDNS_ENABLED //#define MDNS_ENABLED
//#define WEBSOCKET_ENABLED //#define WEBSOCKET_ENABLED
//#define LAYOUT_IN_RAM //#define LAYOUT_IN_RAM
//#define UDP_ENABLED #define UDP_ENABLED
#define SSDP_ENABLED #define SSDP_ENABLED
// //
@@ -88,13 +88,6 @@ enum TimerTask_t { WIFI_SCAN,
WIFI_MQTT_CONNECTION_CHECK, WIFI_MQTT_CONNECTION_CHECK,
SENSORS10SEC, SENSORS10SEC,
SENSORS30SEC, SENSORS30SEC,
STEPPER1,
STEPPER2,
LOG1,
LOG2,
LOG3,
LOG4,
LOG5,
TIMER_COUNTDOWN, TIMER_COUNTDOWN,
TIME, TIME,
TIME_SYNC, TIME_SYNC,

View File

@@ -49,3 +49,5 @@ extern void bmp280ReadingPress();
extern void sysUptime(); extern void sysUptime();
extern void uptimeReading(); extern void uptimeReading();
extern void logging();

View File

@@ -1,7 +1,7 @@
//#pragma once #pragma once
//#include "ESPAsyncUDP.h" #include "ESPAsyncUDP.h"
//extern AsyncUDP asyncUdp; extern AsyncUDP asyncUdp;
//extern void asyncUdpInit(); extern void asyncUdpInit();
//extern String uint8tToString(uint8_t* data, size_t len); extern String uint8tToString(uint8_t* data, size_t len);
//extern bool udpPacketValidation(String& data); extern bool udpPacketValidation(String& data);
//extern void udpPacketParse(String& data); extern void udpPacketParse(String& data);

View File

@@ -47,7 +47,7 @@ String logging_value_names_list;
int enter_to_logging_counter; int enter_to_logging_counter;
// Upgrade // Upgrade
String serverIP = "http://206.189.49.244"; String serverIP;
// Scenario // 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}; 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};

View File

@@ -14,6 +14,8 @@ void loadConfig() {
prex = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId; prex = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId;
Serial.println(configSetupJson); Serial.println(configSetupJson);
serverIP = jsonReadStr(configSetupJson, "serverip");
} }
void all_init() { void all_init() {

View File

@@ -47,6 +47,8 @@ void cmd_init() {
sCmd.addCommand("uptime", sysUptime); sCmd.addCommand("uptime", sysUptime);
sCmd.addCommand("logging", logging);
handle_time_init(); handle_time_init();
} }

View File

@@ -7,7 +7,7 @@ void sendLogData(String file, String topic);
#ifdef LOGGING_ENABLED #ifdef LOGGING_ENABLED
//===============================================Логирование============================================================ //===============================================Логирование============================================================
//logging temp1 1 10 Температура Датчики 2 //logging temp1 1 10 Температура Датчики 2
void logging() { /*void logging2() {
String value_name = sCmd.next(); String value_name = sCmd.next();
String period_min = sCmd.next(); String period_min = sCmd.next();
String maxCount = sCmd.next(); String maxCount = sCmd.next();
@@ -67,12 +67,12 @@ void logging() {
}, },
nullptr, false); 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); String log_date = readFile(filename, 5120);
size_t lines_cnt = itemsCount(log_date, "\r\n"); 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); addFileLn(filename, timeNow->getTimeUnix() + " " + payload);
} }
} }
} }*/
//=========================================Выбор какие данные отправлять================================================================== //=========================================Выбор какие данные отправлять==================================================================
void choose_log_date_and_send() { void choose_log_date_and_send() {

View File

@@ -1,71 +1,70 @@
//#include "RemoteOrdersUdp.h" #include "RemoteOrdersUdp.h"
// #include <Arduino.h>
//#include <Arduino.h> #include "Global.h"
//
//#include "Global.h" #ifdef UDP_ENABLED
// AsyncUDP asyncUdp;
//AsyncUDP asyncUdp;
// void asyncUdpInit() {
//void asyncUdpInit() { //if (asyncUdp.listen(1234)) {
// //if (asyncUdp.listen(1234)) { if (asyncUdp.listenMulticast(IPAddress(239, 255, 255, 255), 1234)) {
// if (asyncUdp.listenMulticast(IPAddress(239, 255, 255, 255), 1234)) { asyncUdp.onPacket([](AsyncUDPPacket packet) {
// asyncUdp.onPacket([](AsyncUDPPacket packet) { //Serial.print("UDP Packet Type: ");
// //Serial.print(packet.isBroadcast() ? "Broadcast" : packet.isMulticast() ? "Multicast" : "Unicast");
// //Serial.print("UDP Packet Type: "); //
// //Serial.print(packet.isBroadcast() ? "Broadcast" : packet.isMulticast() ? "Multicast" : "Unicast"); //Serial.print(", From: ");
// // //Serial.print(packet.remoteIP());
// //Serial.print(", From: "); //Serial.print(":");
// //Serial.print(packet.remoteIP()); //Serial.print(packet.remotePort());
// //Serial.print(":"); //
// //Serial.print(packet.remotePort()); //Serial.print(", To: ");
// // //Serial.print(packet.localIP());
// //Serial.print(", To: "); //Serial.print(":");
// //Serial.print(packet.localIP()); //Serial.print(packet.localPort());
// //Serial.print(":"); //
// //Serial.print(packet.localPort()); //Serial.print(", Length: ");
// // //Serial.print(packet.length());
// //Serial.print(", Length: "); //
// //Serial.print(packet.length()); //Serial.print(", Data: ");
// // //Serial.write(packet.data(), packet.length());
// //Serial.print(", Data: ");
// //Serial.write(packet.data(), packet.length()); String data = uint8tToString(packet.data(), packet.length());
// Serial.print("[i] [udp] Packet received: '");
// String data = uint8tToString(packet.data(), packet.length()); Serial.print(data);
// Serial.print("[i] [udp] Packet received: '"); if (udpPacketValidation(data)) {
// Serial.print(data); udpPacketParse(data);
// if (udpPacketValidation(data)) { //Serial.println("', Packet valid");
// udpPacketParse(data); } else {
// //Serial.println("', Packet valid"); //Serial.println("', Packet invalid");
// } else { }
// //Serial.println("', Packet invalid");
// } //reply to the client
//
// //reply to the client packet.printf("Got %u bytes of data", packet.length());
// });
// packet.printf("Got %u bytes of data", packet.length()); }
// }); }
// }
//} String uint8tToString(uint8_t* data, size_t len) {
// String ret;
//String uint8tToString(uint8_t* data, size_t len) { while (len--) {
// String ret; ret += (char)*data++;
// while (len--) { }
// ret += (char)*data++; return ret;
// } }
// return ret;
//} bool udpPacketValidation(String& data) {
// if (data.indexOf("iotm;") != -1 && data.indexOf(getChipId()) != -1) {
//bool udpPacketValidation(String& data) { return true;
// if (data.indexOf("iotm;") != -1 && data.indexOf(getChipId()) != -1) { } else {
// return true; return false;
// } else { }
// return false; }
// }
//} //iotm;chipid;button-out-1_1
// void udpPacketParse(String& data) {
////iotm;chipid;button-out-1_1 data = selectFromMarkerToMarker(data, ";", 2);
//void udpPacketParse(String& data) { data.replace("_", " ");
// data = selectFromMarkerToMarker(data, ";", 2); orderBuf += data + ",";
// data.replace("_", " "); }
// orderBuf += data + ","; #endif
//}

View File

@@ -200,6 +200,14 @@ void web_init() {
myNotAsyncActions->make(do_BUSSCAN); myNotAsyncActions->make(do_BUSSCAN);
request->redirect("/?set.utilities"); 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===================================================== //==============================list of items=====================================================

View File

@@ -1,7 +1,13 @@
#include "items/LoggingClass.h" #include "items/LoggingClass.h"
#include <Arduino.h>
#include "Class/LineParsing.h"
#include "Global.h"
#include "ItemsCmd.h"
LoggingClass::LoggingClass(unsigned long period, unsigned int maxPoints, String key) { LoggingClass::LoggingClass(unsigned long period, unsigned int maxPoints, String key) {
_period = period; _period = period * 1000;
_maxPoints = maxPoints; _maxPoints = maxPoints;
_key = key; _key = key;
} }
@@ -17,7 +23,6 @@ void LoggingClass::loop() {
} }
} }
void LoggingClass::addNewDelOldData(const String filename, size_t maxPoints, String payload) { void LoggingClass::addNewDelOldData(const String filename, size_t maxPoints, String payload) {
String logData = readFile(filename, 5120); String logData = readFile(filename, 5120);
size_t lines_cnt = itemsCount(logData, "\r\n"); size_t lines_cnt = itemsCount(logData, "\r\n");
@@ -29,17 +34,32 @@ void LoggingClass::addNewDelOldData(const String filename, size_t maxPoints, Str
lines_cnt = 0; lines_cnt = 0;
} }
if (lines_cnt > maxPoints) { if (payload != "") {
logData = deleteBeforeDelimiter(logData, "\r\n"); if (lines_cnt > maxPoints) {
if (timeNow->hasTimeSynced()) { logData = deleteBeforeDelimiter(logData, "\r\n");
logData += timeNow->getTimeUnix() + " " + payload + "\r\n"; if (timeNow->hasTimeSynced()) {
writeFile(filename, logData); logData += timeNow->getTimeUnix() + " " + payload + "\r\n";
} writeFile(filename, logData);
} else { }
if (timeNow->hasTimeSynced()) { } else {
addFileLn(filename, timeNow->getTimeUnix() + " " + payload); if (timeNow->hasTimeSynced()) {
addFileLn(filename, timeNow->getTimeUnix() + " " + payload);
}
} }
} }
} }
MyLoggingVector* myLogging = nullptr; 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));
}

View File

@@ -14,7 +14,7 @@
#include "Utils/WebUtils.h" #include "Utils/WebUtils.h"
#include "items/ButtonInClass.h" #include "items/ButtonInClass.h"
#include "items/LoggingClass.h" #include "items/LoggingClass.h"
//#include "RemoteOrdersUdp.h" #include "RemoteOrdersUdp.h"
#include "Bus.h" #include "Bus.h"
void not_async_actions(); void not_async_actions();
@@ -75,8 +75,10 @@ void setup() {
SerialPrint("I", "Stat", "Stat Init"); SerialPrint("I", "Stat", "Stat Init");
initSt(); initSt();
//SerialPrint("I","UDP","Udp Init"); #ifdef UDP_ENABLED
//asyncUdpInit(); SerialPrint("I","UDP","Udp Init");
asyncUdpInit();
#endif
SerialPrint("I", "Bus", "Bus Init"); SerialPrint("I", "Bus", "Bus Init");
busInit(); busInit();
@@ -97,8 +99,8 @@ void setup() {
just_load = false; 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) 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 = new MyLoggingVector();
myLogging->push_back(LoggingClass(30000, 10, "analog-adc-1")); //myLogging->push_back(LoggingClass(30000, 10, "analog-adc-1"));
//myLogging->push_back(LoggingClass(10000, 1, "10 sec")); //myLogging->push_back(LoggingClass(10000, 1, "10 sec"));
} }