mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-26 22:22:16 +03:00
process to asinc
This commit is contained in:
@@ -1,143 +1,65 @@
|
||||
{
|
||||
"configs": [
|
||||
"/config.setup.json",
|
||||
"/config.option.json",
|
||||
"/config.live.json",
|
||||
"/lang/lang.ru.json"
|
||||
],
|
||||
"class": "col-sm-offset-1 col-sm-10",
|
||||
"content": [
|
||||
{
|
||||
"type": "h5",
|
||||
"title": "{{name}}",
|
||||
"class": "alert-default"
|
||||
},
|
||||
{
|
||||
"type": "link",
|
||||
"title": "{{ButMainPage}}",
|
||||
"action": "/",
|
||||
"class": "btn btn-block btn-default"
|
||||
},
|
||||
{
|
||||
"type": "hr"
|
||||
},
|
||||
{
|
||||
"type": "h4",
|
||||
"title": "Device ID: {{chipID}}"
|
||||
},
|
||||
{
|
||||
"type": "h4",
|
||||
"title": "IP address: {{ip}}"
|
||||
},
|
||||
{
|
||||
"type": "h4",
|
||||
"title": "Time: {{time}}"
|
||||
},
|
||||
{
|
||||
"type": "h4",
|
||||
"title": "Uptime: {{uptime}}"
|
||||
},
|
||||
{
|
||||
"type": "h4",
|
||||
"title": "Build version: {{firmware_version}}"
|
||||
},
|
||||
{
|
||||
"type": "h4",
|
||||
"title": "LittleFS version: 2.3.5"
|
||||
},
|
||||
{
|
||||
"type": "hr"
|
||||
},
|
||||
{
|
||||
"type": "dropdown",
|
||||
"name": "help-url",
|
||||
"class": "btn btn-default",
|
||||
"style": "display:inline",
|
||||
"title": {
|
||||
"#": "{{SetDevPreset}}<span class=\"caret\"></span>",
|
||||
"/set?preset=001": "1.Вкл. выкл. локального реле",
|
||||
"/set?preset=002": "2.Вкл. выкл. локального реле в определенное время",
|
||||
"/set?preset=003": "3.Вкл. выкл. локального реле на определенный период времени",
|
||||
"/set?preset=004": "4.Вкл. выкл. нескольких локальных реле кнопкой в приложении",
|
||||
"/set?preset=005": "5.Вкл. выкл. локального реле физической кнопкой и кнопкой в приложении параллельно (для выключателя света)",
|
||||
"/set?preset=006": "6.Вкл. выкл. нескольких удаленных реле кнопкой в приложении (нужно указать Device ID)",
|
||||
"/set?preset=007": "7.Вкл. выкл. нескольких удаленных реле физической кнопкой (нужно указать Device ID)",
|
||||
"/set?preset=008": "8.Широтно импульсная модуляция",
|
||||
"/set?preset=009": "9.Сенсор DHT11 (темп, влажность) и логгирование",
|
||||
"/set?preset=010": "10.Сенсор DHT22, DHT33, DHT44, AM2302, RHT03 (темп, влажность) и логгирование",
|
||||
"/set?preset=011": "11.Аналоговый сенсор и логгирование",
|
||||
"/set?preset=012": "12.Cенсор bmp280 (темп, давление) и логгирование",
|
||||
"/set?preset=013": "13.Cенсор bme280 (темп, давление, влажность, высота) и логгирование",
|
||||
"/set?preset=014": "14.Сенсор DS18B20 (темп) и логгирование",
|
||||
"/set?preset=015": "15.Термостат на DS18B20 с переключением в ручной режим и логгированием",
|
||||
"/set?preset=016": "16.Котроль уровня в баке (датчик расстояния) на сенсорах: JSN-SR04T, HC-SR04, HY-SRF05 и логгирование",
|
||||
"/set?preset=017": "17.Датчик движения включающий свет",
|
||||
"/set?preset=018": "18.Охранный датчик движения",
|
||||
"/set?preset=019": "19.Система управления шаговыми двигателями на основе драйвера A4988 (открытие закрытие штор)",
|
||||
"/set?preset=020": "20.Система управления сервоприводами",
|
||||
"/set?preset=021": "21.Модуль uart (serial). Двухстороняя связь с устройством через uart. Получение данных и отправка команд",
|
||||
"/set?preset=100": "22.Настройки по умолчанию"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "h2",
|
||||
"title": "{{SetDevConf}}"
|
||||
},
|
||||
{
|
||||
"type": "file",
|
||||
"state": "dev_conf.txt",
|
||||
"style": "width:100%;height:350px",
|
||||
"title": "Сохранить",
|
||||
"action": "/set?devinit",
|
||||
"class": "btn btn-block btn-default"
|
||||
},
|
||||
|
||||
{
|
||||
"type": "h2",
|
||||
"title": "Сценарии"
|
||||
},
|
||||
{
|
||||
"type": "checkbox",
|
||||
"name": "scen",
|
||||
"title": "Включить сценарии",
|
||||
"action": "/set?scen=[[scen]]",
|
||||
"state": "{{scen}}"
|
||||
},
|
||||
{
|
||||
"type": "file",
|
||||
"state": "dev_scen.txt",
|
||||
"style": "width:100%;height:350px",
|
||||
"title": "Сохранить",
|
||||
"action": "/set?sceninit",
|
||||
"class": "btn btn-block btn-default"
|
||||
},
|
||||
{
|
||||
"type": "link",
|
||||
"title": "Инструкция к системе автоматизации",
|
||||
"action": "https://github.com/DmitryBorisenko33/esp32-esp8266_iot-manager_modules_firmware/wiki/Instruction",
|
||||
"class": "btn btn-block btn-default"
|
||||
},
|
||||
{
|
||||
"type": "link",
|
||||
"title": "Очистить логи сенсоров",
|
||||
"action": "/set?cleanlog",
|
||||
"class": "btn btn-block btn-default"
|
||||
},
|
||||
{
|
||||
"type": "hr"
|
||||
},
|
||||
{
|
||||
"type": "h3",
|
||||
"name": "my-block",
|
||||
"style": "position:fixed;top:50%;left:50%;width:400px;margin-left:-200px;text-align:center;",
|
||||
"class": "hidden"
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"title": "Обновить прошивку устройства",
|
||||
"action": "/check",
|
||||
"response": "[[my-block]]",
|
||||
"class": "btn btn-block btn-default"
|
||||
}
|
||||
]
|
||||
"configs": [
|
||||
"/config.setup.json",
|
||||
"/config.option.json",
|
||||
"/config.live.json",
|
||||
"/lang/lang.ru.json"
|
||||
],
|
||||
"class": "col-sm-offset-1 col-sm-10",
|
||||
"content": [
|
||||
{
|
||||
"type": "h5",
|
||||
"title": "{{name}}",
|
||||
"class": "alert-default"
|
||||
},
|
||||
{
|
||||
"type": "link",
|
||||
"title": "{{ButMainPage}}",
|
||||
"action": "/",
|
||||
"class": "btn btn-block btn-default"
|
||||
},
|
||||
{
|
||||
"type": "hr"
|
||||
},
|
||||
{
|
||||
"type": "dropdown",
|
||||
"name": "help-url",
|
||||
"class": "btn btn-default",
|
||||
"style": "display:inline",
|
||||
"title": {
|
||||
"#": "Выберите элемент из списка<span class=\"caret\"></span>",
|
||||
"/set?addItem=button-out": "1.Кнопка управляющая пином",
|
||||
"/set?addItem=button-out-i": "2.Кнопка управляющая пином с инверсией",
|
||||
"/set?addItem=pwm-out": "3.Широтно импульсная подуляция",
|
||||
"/set?addItem=button-in": "4.Физическая кнопка"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "hr"
|
||||
},
|
||||
{
|
||||
"type": "csv",
|
||||
"title": [
|
||||
"html",
|
||||
"text",
|
||||
"text",
|
||||
"text",
|
||||
"text",
|
||||
"text"
|
||||
],
|
||||
"state": "conf.csv",
|
||||
"style": "width:100%;",
|
||||
"action": "/set?saveItems",
|
||||
"class": "btn btn-block btn-default"
|
||||
},
|
||||
{
|
||||
"type": "link",
|
||||
"title": "Удалить все",
|
||||
"action": "/set?delAllItems",
|
||||
"class": "btn btn-block btn-default"
|
||||
},
|
||||
{
|
||||
"type": "hr"
|
||||
}
|
||||
]
|
||||
}
|
||||
143
data/set.deviceold.json
Normal file
143
data/set.deviceold.json
Normal file
@@ -0,0 +1,143 @@
|
||||
{
|
||||
"configs": [
|
||||
"/config.setup.json",
|
||||
"/config.option.json",
|
||||
"/config.live.json",
|
||||
"/lang/lang.ru.json"
|
||||
],
|
||||
"class": "col-sm-offset-1 col-sm-10",
|
||||
"content": [
|
||||
{
|
||||
"type": "h5",
|
||||
"title": "{{name}}",
|
||||
"class": "alert-default"
|
||||
},
|
||||
{
|
||||
"type": "link",
|
||||
"title": "{{ButMainPage}}",
|
||||
"action": "/",
|
||||
"class": "btn btn-block btn-default"
|
||||
},
|
||||
{
|
||||
"type": "hr"
|
||||
},
|
||||
{
|
||||
"type": "h4",
|
||||
"title": "Device ID: {{chipID}}"
|
||||
},
|
||||
{
|
||||
"type": "h4",
|
||||
"title": "IP address: {{ip}}"
|
||||
},
|
||||
{
|
||||
"type": "h4",
|
||||
"title": "Time: {{time}}"
|
||||
},
|
||||
{
|
||||
"type": "h4",
|
||||
"title": "Uptime: {{uptime}}"
|
||||
},
|
||||
{
|
||||
"type": "h4",
|
||||
"title": "Build version: {{firmware_version}}"
|
||||
},
|
||||
{
|
||||
"type": "h4",
|
||||
"title": "LittleFS version: 2.3.5"
|
||||
},
|
||||
{
|
||||
"type": "hr"
|
||||
},
|
||||
{
|
||||
"type": "dropdown",
|
||||
"name": "help-url",
|
||||
"class": "btn btn-default",
|
||||
"style": "display:inline",
|
||||
"title": {
|
||||
"#": "{{SetDevPreset}}<span class=\"caret\"></span>",
|
||||
"/set?preset=001": "1.Вкл. выкл. локального реле",
|
||||
"/set?preset=002": "2.Вкл. выкл. локального реле в определенное время",
|
||||
"/set?preset=003": "3.Вкл. выкл. локального реле на определенный период времени",
|
||||
"/set?preset=004": "4.Вкл. выкл. нескольких локальных реле кнопкой в приложении",
|
||||
"/set?preset=005": "5.Вкл. выкл. локального реле физической кнопкой и кнопкой в приложении параллельно (для выключателя света)",
|
||||
"/set?preset=006": "6.Вкл. выкл. нескольких удаленных реле кнопкой в приложении (нужно указать Device ID)",
|
||||
"/set?preset=007": "7.Вкл. выкл. нескольких удаленных реле физической кнопкой (нужно указать Device ID)",
|
||||
"/set?preset=008": "8.Широтно импульсная модуляция",
|
||||
"/set?preset=009": "9.Сенсор DHT11 (темп, влажность) и логгирование",
|
||||
"/set?preset=010": "10.Сенсор DHT22, DHT33, DHT44, AM2302, RHT03 (темп, влажность) и логгирование",
|
||||
"/set?preset=011": "11.Аналоговый сенсор и логгирование",
|
||||
"/set?preset=012": "12.Cенсор bmp280 (темп, давление) и логгирование",
|
||||
"/set?preset=013": "13.Cенсор bme280 (темп, давление, влажность, высота) и логгирование",
|
||||
"/set?preset=014": "14.Сенсор DS18B20 (темп) и логгирование",
|
||||
"/set?preset=015": "15.Термостат на DS18B20 с переключением в ручной режим и логгированием",
|
||||
"/set?preset=016": "16.Котроль уровня в баке (датчик расстояния) на сенсорах: JSN-SR04T, HC-SR04, HY-SRF05 и логгирование",
|
||||
"/set?preset=017": "17.Датчик движения включающий свет",
|
||||
"/set?preset=018": "18.Охранный датчик движения",
|
||||
"/set?preset=019": "19.Система управления шаговыми двигателями на основе драйвера A4988 (открытие закрытие штор)",
|
||||
"/set?preset=020": "20.Система управления сервоприводами",
|
||||
"/set?preset=021": "21.Модуль uart (serial). Двухстороняя связь с устройством через uart. Получение данных и отправка команд",
|
||||
"/set?preset=100": "22.Настройки по умолчанию"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "h2",
|
||||
"title": "{{SetDevConf}}"
|
||||
},
|
||||
{
|
||||
"type": "file",
|
||||
"state": "dev_conf.txt",
|
||||
"style": "width:100%;height:350px",
|
||||
"title": "Сохранить",
|
||||
"action": "/set?devinit",
|
||||
"class": "btn btn-block btn-default"
|
||||
},
|
||||
|
||||
{
|
||||
"type": "h2",
|
||||
"title": "Сценарии"
|
||||
},
|
||||
{
|
||||
"type": "checkbox",
|
||||
"name": "scen",
|
||||
"title": "Включить сценарии",
|
||||
"action": "/set?scen=[[scen]]",
|
||||
"state": "{{scen}}"
|
||||
},
|
||||
{
|
||||
"type": "file",
|
||||
"state": "dev_scen.txt",
|
||||
"style": "width:100%;height:350px",
|
||||
"title": "Сохранить",
|
||||
"action": "/set?sceninit",
|
||||
"class": "btn btn-block btn-default"
|
||||
},
|
||||
{
|
||||
"type": "link",
|
||||
"title": "Инструкция к системе автоматизации",
|
||||
"action": "https://github.com/DmitryBorisenko33/esp32-esp8266_iot-manager_modules_firmware/wiki/Instruction",
|
||||
"class": "btn btn-block btn-default"
|
||||
},
|
||||
{
|
||||
"type": "link",
|
||||
"title": "Очистить логи сенсоров",
|
||||
"action": "/set?cleanlog",
|
||||
"class": "btn btn-block btn-default"
|
||||
},
|
||||
{
|
||||
"type": "hr"
|
||||
},
|
||||
{
|
||||
"type": "h3",
|
||||
"name": "my-block",
|
||||
"style": "position:fixed;top:50%;left:50%;width:400px;margin-left:-200px;text-align:center;",
|
||||
"class": "hidden"
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"title": "Обновить прошивку устройства",
|
||||
"action": "/check",
|
||||
"response": "[[my-block]]",
|
||||
"class": "btn btn-block btn-default"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,123 +0,0 @@
|
||||
{
|
||||
"configs": [
|
||||
"/config.setup.json",
|
||||
"/config.option.json",
|
||||
"/config.live.json",
|
||||
"/lang/lang.ru.json"
|
||||
],
|
||||
"class": "col-sm-offset-1 col-sm-10",
|
||||
"content": [
|
||||
{
|
||||
"type": "h5",
|
||||
"title": "{{name}}",
|
||||
"class": "alert-default"
|
||||
},
|
||||
{
|
||||
"type": "link",
|
||||
"title": "{{ButMainPage}}",
|
||||
"action": "/",
|
||||
"class": "btn btn-block btn-default"
|
||||
},
|
||||
{
|
||||
"type": "hr"
|
||||
},
|
||||
{
|
||||
"type": "dropdown",
|
||||
"name": "help-url",
|
||||
"class": "btn btn-default",
|
||||
"style": "display:inline",
|
||||
"title": {
|
||||
"#": "Выберите элемент из списка<span class=\"caret\"></span>",
|
||||
"/set?element=button-out": "1.Кнопка управляющая пином",
|
||||
"/set?element=button-out-i": "2.Кнопка управляющая пином с инверсией",
|
||||
"/set?element=pwm-out": "3.Широтно импульсная подуляция",
|
||||
"/set?element=button-in": "4.Физическая кнопка"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "hr"
|
||||
},
|
||||
{
|
||||
"type": "csv",
|
||||
"title": [
|
||||
"html",
|
||||
"text",
|
||||
"text",
|
||||
"text",
|
||||
"text",
|
||||
"text"
|
||||
],
|
||||
"state": "conf.csv",
|
||||
"style": "width:100%;",
|
||||
"action": "/set?save",
|
||||
"class": "btn btn-block btn-default"
|
||||
},
|
||||
{
|
||||
"type": "link",
|
||||
"title": "Удалить все",
|
||||
"action": "/set?cleanconf",
|
||||
"class": "btn btn-block btn-default"
|
||||
},
|
||||
{
|
||||
"type": "hr"
|
||||
},
|
||||
{
|
||||
"type": "h4",
|
||||
"title": "Если",
|
||||
"style": "width:25%;float:left;"
|
||||
},
|
||||
{
|
||||
"type": "select",
|
||||
"name": "id-arg",
|
||||
"action": "/set?id=[[id-arg]]",
|
||||
"state": "en",
|
||||
"title": "items/elements.json",
|
||||
"style": "width:25%;float:left"
|
||||
},
|
||||
{
|
||||
"type": "select",
|
||||
"name": "id-arg2",
|
||||
"action": "/set?id=[[id-arg2]]",
|
||||
"state": "en",
|
||||
"title": "items/signs.json",
|
||||
"style": "width:25%;float:left"
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"title": "",
|
||||
"name": "fsi-arg",
|
||||
"pattern": "",
|
||||
"state": "{{fsi}}",
|
||||
"style": "width:25%;float:left"
|
||||
},
|
||||
{
|
||||
"type": "hr"
|
||||
},
|
||||
{
|
||||
"type": "h4",
|
||||
"title": "То",
|
||||
"style": "width:25%;float:left;"
|
||||
},
|
||||
{
|
||||
"type": "select",
|
||||
"name": "id-arg3",
|
||||
"action": "/set?id=[[id-arg3]]",
|
||||
"state": "en",
|
||||
"title": "items/elements.json",
|
||||
"style": "width:25%;float:left"
|
||||
},
|
||||
{
|
||||
"type": "h4",
|
||||
"title": "=",
|
||||
"style": "width:25%;float:left;"
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"title": "",
|
||||
"name": "fsi-arg",
|
||||
"pattern": "",
|
||||
"state": "{{fsi}}",
|
||||
"style": "width:25%;float:left"
|
||||
}
|
||||
]
|
||||
}
|
||||
31
include/Class/NotAsinc.h
Normal file
31
include/Class/NotAsinc.h
Normal file
@@ -0,0 +1,31 @@
|
||||
#pragma once
|
||||
#include <Arduino.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include <functional>
|
||||
|
||||
typedef std::function<void(void*)> NotAsincCb;
|
||||
|
||||
struct NotAsincItem {
|
||||
bool test;
|
||||
NotAsincCb cb;
|
||||
void * cb_arg;
|
||||
volatile bool is_used = false;
|
||||
};
|
||||
|
||||
class NotAsinc {
|
||||
private:
|
||||
uint8_t size;
|
||||
uint8_t task = 0;
|
||||
NotAsincItem* items = NULL;
|
||||
void handle(NotAsincCb f, void* arg);
|
||||
|
||||
public:
|
||||
NotAsinc(uint8_t size);
|
||||
~NotAsinc();
|
||||
|
||||
void add(uint8_t i, NotAsincCb, void* arg);
|
||||
void make(uint8_t task);
|
||||
void loop();
|
||||
};
|
||||
extern NotAsinc* myNotAsincActions;
|
||||
@@ -84,6 +84,11 @@ enum TimerTask_t { WIFI_SCAN,
|
||||
UDP_DB,
|
||||
TEST };
|
||||
|
||||
enum notAsincActions {
|
||||
ZERO,
|
||||
do_UPGRADE,
|
||||
};
|
||||
|
||||
enum ErrorType_t {
|
||||
ET_NONE,
|
||||
ET_FUNCTION,
|
||||
|
||||
@@ -3,10 +3,6 @@
|
||||
#include <Arduino.h>
|
||||
#include "Global.h"
|
||||
|
||||
extern void addElement(String name);
|
||||
extern void delAllElement();
|
||||
extern void addItem(String name);
|
||||
extern void delAllItems();
|
||||
extern int getNewElementNumber(String file);
|
||||
extern void do_getJsonListFromCsv();
|
||||
extern String getJsonListFromCsv(String csvFile,int colum);
|
||||
extern void do_delElement();
|
||||
extern void delElement(String itemsFile, String itemsLine);
|
||||
@@ -211,7 +211,7 @@ extern void timerStop_();
|
||||
extern void delTimer(String number);
|
||||
extern int readTimer(int number);
|
||||
|
||||
extern void initUpdater();
|
||||
extern void upgradeInit();
|
||||
|
||||
// widget
|
||||
extern void createWidgetByType(String widget_name, String page_name, String page_number, String file, String topic);
|
||||
|
||||
30
src/Class/NotAsinc.cpp
Normal file
30
src/Class/NotAsinc.cpp
Normal file
@@ -0,0 +1,30 @@
|
||||
#include "Class/NotAsinc.h"
|
||||
|
||||
NotAsinc::NotAsinc(uint8_t size) {
|
||||
this->items = new NotAsincItem[size];
|
||||
this->size = size;
|
||||
}
|
||||
|
||||
NotAsinc::~NotAsinc() {}
|
||||
|
||||
void NotAsinc::add(uint8_t i, NotAsincCb f, void* arg) {
|
||||
this->items[i].cb = f;
|
||||
this->items[i].cb_arg = arg;
|
||||
this->items[i].is_used = true;
|
||||
}
|
||||
|
||||
void NotAsinc::loop() {
|
||||
if (this->items[task].is_used) {
|
||||
handle(this->items[task].cb, this->items[task].cb_arg);
|
||||
task = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void NotAsinc::make(uint8_t task) {
|
||||
this->task = task;
|
||||
}
|
||||
|
||||
void NotAsinc::handle(NotAsincCb f, void* arg) {
|
||||
f(arg);
|
||||
}
|
||||
NotAsinc* myNotAsincActions;
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "Class/Pwm.h"
|
||||
#include "Class/Switch.h"
|
||||
//-----------------------------
|
||||
#include "Class/NotAsinc.h"
|
||||
#include "Global.h"
|
||||
#include "Module/Terminal.h"
|
||||
#include "Servo/Servos.h"
|
||||
@@ -439,7 +440,7 @@ void httpOrderSend() {
|
||||
}
|
||||
|
||||
void firmwareUpdate() {
|
||||
updateFlag = true;
|
||||
myNotAsincActions->make(do_UPGRADE);
|
||||
}
|
||||
|
||||
void firmwareVersion() {
|
||||
|
||||
@@ -2,19 +2,17 @@
|
||||
|
||||
static const char* firstLine PROGMEM = "Тип элемента;Id;Виджет;Имя вкладки;Имя виджета;Позиция виджета";
|
||||
|
||||
void addElement(String name) {
|
||||
void addItem(String name) {
|
||||
String item = readFile("items/" + name + ".txt", 1024);
|
||||
|
||||
item.replace("id", "id" + String(getNewElementNumber("id.txt")));
|
||||
item.replace("order", String(getNewElementNumber("order.txt")));
|
||||
|
||||
item.replace("\r\n", "");
|
||||
item.replace("\r", "");
|
||||
item.replace("\n", "");
|
||||
addFile("conf.csv", "\n" + item);
|
||||
}
|
||||
|
||||
void delAllElement() {
|
||||
void delAllItems() {
|
||||
removeFile("conf.csv");
|
||||
addFile("conf.csv", String(firstLine));
|
||||
removeFile("id.txt");
|
||||
@@ -29,71 +27,73 @@ int getNewElementNumber(String file) {
|
||||
return number;
|
||||
}
|
||||
|
||||
void do_getJsonListFromCsv() {
|
||||
if (getJsonListFromCsvFlag) {
|
||||
getJsonListFromCsvFlag = false;
|
||||
removeFile("items/elements.json");
|
||||
addFile("items/elements.json", getJsonListFromCsv("conf.csv", 1));
|
||||
}
|
||||
}
|
||||
|
||||
String getJsonListFromCsv(String csvFile, int colum) {
|
||||
File configFile = LittleFS.open("/" + csvFile, "r");
|
||||
if (!configFile) {
|
||||
return "error";
|
||||
}
|
||||
configFile.seek(0, SeekSet);
|
||||
|
||||
String outJson = "{}";
|
||||
|
||||
int count = -1;
|
||||
|
||||
while (configFile.position() != configFile.size()) {
|
||||
count++;
|
||||
String item = configFile.readStringUntil('\n');
|
||||
if (count > 0) {
|
||||
String line = selectFromMarkerToMarker(item, ";", colum);
|
||||
jsonWriteStr(outJson, line, line);
|
||||
}
|
||||
}
|
||||
configFile.close();
|
||||
csvFile = "";
|
||||
return outJson;
|
||||
}
|
||||
|
||||
void do_delElement() {
|
||||
if (delElementFlag) {
|
||||
delElementFlag = false;
|
||||
delElement(itemsFile, itemsLine);
|
||||
}
|
||||
}
|
||||
|
||||
void delElement(String _itemsFile, String _itemsLine) {
|
||||
File configFile = LittleFS.open("/" + _itemsFile, "r");
|
||||
if (!configFile) {
|
||||
return;
|
||||
}
|
||||
configFile.seek(0, SeekSet);
|
||||
String finalConf;
|
||||
int count = -1;
|
||||
while (configFile.position() != configFile.size()) {
|
||||
count++;
|
||||
String item = configFile.readStringUntil('\n');
|
||||
Serial.print(_itemsLine);
|
||||
Serial.print(" ");
|
||||
Serial.println(count);
|
||||
if (count != _itemsLine.toInt()) {
|
||||
if (count == 0) {
|
||||
finalConf += item;
|
||||
} else {
|
||||
finalConf += "\n" + item;
|
||||
}
|
||||
}
|
||||
}
|
||||
removeFile(_itemsFile);
|
||||
addFile(_itemsFile, finalConf);
|
||||
Serial.println(finalConf);
|
||||
itemsFile = "";
|
||||
itemsLine = "";
|
||||
configFile.close();
|
||||
}
|
||||
//void do_getJsonListFromCsv() {
|
||||
// if (getJsonListFromCsvFlag) {
|
||||
// getJsonListFromCsvFlag = false;
|
||||
// removeFile("items/items.json");
|
||||
// addFile("items/items.json", getJsonListFromCsv("conf.csv", 1));
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//String getJsonListFromCsv(String csvFile, int colum) {
|
||||
// File configFile = LittleFS.open("/" + csvFile, "r");
|
||||
// if (!configFile) {
|
||||
// return "error";
|
||||
// }
|
||||
// configFile.seek(0, SeekSet);
|
||||
//
|
||||
// String outJson = "{}";
|
||||
//
|
||||
// int count = -1;
|
||||
//
|
||||
// while (configFile.position() != configFile.size()) {
|
||||
// count++;
|
||||
// String item = configFile.readStringUntil('\n');
|
||||
// if (count > 0) {
|
||||
// String line = selectFromMarkerToMarker(item, ";", colum);
|
||||
// jsonWriteStr(outJson, line, line);
|
||||
// }
|
||||
// }
|
||||
// configFile.close();
|
||||
// csvFile = "";
|
||||
// return outJson;
|
||||
//}
|
||||
//
|
||||
//void do_delElement() {
|
||||
// if (delElementFlag) {
|
||||
// delElementFlag = false;
|
||||
// delElement(itemsFile, itemsLine);
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//void delElement(String _itemsFile, String _itemsLine) {
|
||||
// File configFile = LittleFS.open("/" + _itemsFile, "r");
|
||||
// if (!configFile) {
|
||||
// return;
|
||||
// }
|
||||
// configFile.seek(0, SeekSet);
|
||||
// String finalConf;
|
||||
// int count = -1;
|
||||
// while (configFile.position() != configFile.size()) {
|
||||
// count++;
|
||||
// String item = configFile.readStringUntil('\n');
|
||||
// Serial.print(_itemsLine);
|
||||
// Serial.print(" ");
|
||||
// Serial.println(count);
|
||||
// if (count != _itemsLine.toInt()) {
|
||||
// if (count == 0) {
|
||||
// finalConf += item;
|
||||
// } else {
|
||||
// finalConf += "\n" + item;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// removeFile(_itemsFile);
|
||||
// addFile(_itemsFile, finalConf);
|
||||
// Serial.println(finalConf);
|
||||
// itemsFile = "";
|
||||
// itemsLine = "";
|
||||
// configFile.close();
|
||||
//}
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "Global.h"
|
||||
#include "Init.h"
|
||||
#include <LittleFS.h>
|
||||
#include "Class/NotAsinc.h"
|
||||
|
||||
static const char* MODULE = "Mqtt";
|
||||
|
||||
@@ -151,7 +152,7 @@ void handleSubscribedUpdates(char* topic, uint8_t* payload, size_t length) {
|
||||
} else if (topicStr.indexOf("update")) {
|
||||
|
||||
if (payloadStr == "1") {
|
||||
updateFlag = true;
|
||||
myNotAsincActions->make(do_UPGRADE);
|
||||
}
|
||||
|
||||
} else if (topicStr.indexOf("devc")) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#include "Upgrade.h"
|
||||
|
||||
#include "Class/NotAsinc.h"
|
||||
#include "Global.h"
|
||||
#include "ESP8266.h"
|
||||
|
||||
@@ -27,7 +27,14 @@ void getLastVersion() {
|
||||
}
|
||||
}
|
||||
|
||||
void initUpdater() {
|
||||
void upgradeInit() {
|
||||
|
||||
myNotAsincActions->add(
|
||||
do_UPGRADE, [&](void*) {
|
||||
upgrade_firmware();
|
||||
},
|
||||
nullptr);
|
||||
|
||||
if (isNetworkActive()) {
|
||||
getLastVersion();
|
||||
if (lastVersion.length()) {
|
||||
@@ -78,10 +85,3 @@ void upgrade_firmware() {
|
||||
pm.error("on firmware");
|
||||
}
|
||||
}
|
||||
|
||||
void do_update() {
|
||||
if (updateFlag) {
|
||||
updateFlag = false;
|
||||
upgrade_firmware();
|
||||
}
|
||||
}
|
||||
32
src/Web.cpp
32
src/Web.cpp
@@ -1,6 +1,7 @@
|
||||
#include "DeviceList.h"
|
||||
#include "Global.h"
|
||||
#include "Init.h"
|
||||
#include "Class/NotAsinc.h"
|
||||
|
||||
static const char* MODULE = "Web";
|
||||
|
||||
@@ -26,6 +27,8 @@ void web_init() {
|
||||
});
|
||||
|
||||
server.on("/set", HTTP_GET, [](AsyncWebServerRequest* request) {
|
||||
|
||||
//==============================presets===========================================================================================================
|
||||
uint8_t preset;
|
||||
if (parseRequestForPreset(request, preset)) {
|
||||
pm.info("activate #" + String(preset, DEC));
|
||||
@@ -38,37 +41,30 @@ void web_init() {
|
||||
request->redirect("/?set.device");
|
||||
}
|
||||
|
||||
//==============================list of items=====================================================
|
||||
if (request->hasArg("element")) {
|
||||
String name = request->getParam("element")->value();
|
||||
addElement(name);
|
||||
getJsonListFromCsvFlag = true;
|
||||
//==============================list of items====================================================================================================
|
||||
if (request->hasArg("addItem")) {
|
||||
String name = request->getParam("addItem")->value();
|
||||
addItem(name);
|
||||
Device_init();
|
||||
request->redirect("/?setn.device");
|
||||
}
|
||||
|
||||
if (request->hasArg("cleanconf")) {
|
||||
delAllElement();
|
||||
removeFile("items/elements.json");
|
||||
if (request->hasArg("delAllItems")) {
|
||||
delAllItems();
|
||||
Device_init();
|
||||
request->redirect("/?setn.device");
|
||||
}
|
||||
|
||||
if (request->hasArg("save")) {
|
||||
if (request->hasArg("saveItems")) {
|
||||
Device_init();
|
||||
getJsonListFromCsvFlag = true;
|
||||
request->redirect("/?setn.device");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------
|
||||
if (request->hasArg("devinit")) {
|
||||
Device_init();
|
||||
request->send(200);
|
||||
}
|
||||
//--------------------------------------------------------------------------------
|
||||
|
||||
if (request->hasArg("scen")) {
|
||||
bool value = request->getParam("scen")->value().toInt();
|
||||
jsonWriteBool(configSetupJson, "scen", value);
|
||||
@@ -76,12 +72,12 @@ void web_init() {
|
||||
loadScenario();
|
||||
request->send(200);
|
||||
}
|
||||
//--------------------------------------------------------------------------------
|
||||
|
||||
if (request->hasArg("sceninit")) {
|
||||
loadScenario();
|
||||
request->send(200);
|
||||
}
|
||||
//--------------------------------------------------------------------------------
|
||||
|
||||
#ifdef LOGGING_ENABLED
|
||||
if (request->hasArg("cleanlog")) {
|
||||
clean_log_date();
|
||||
@@ -295,7 +291,7 @@ void web_init() {
|
||||
* Upgrade
|
||||
*/
|
||||
server.on("/upgrade", HTTP_GET, [](AsyncWebServerRequest* request) {
|
||||
updateFlag = true;
|
||||
myNotAsincActions->make(do_UPGRADE);;
|
||||
request->send(200, "text/html");
|
||||
});
|
||||
}
|
||||
28
src/main.cpp
28
src/main.cpp
@@ -1,5 +1,6 @@
|
||||
#include "Bus/BusScannerFactory.h"
|
||||
#include "Class/AsyncActions.h"
|
||||
#include "Class/CallBackTest.h"
|
||||
#include "Class/NotAsinc.h"
|
||||
#include "Class/Switch.h"
|
||||
#include "Cmd.h"
|
||||
#include "DeviceList.h"
|
||||
@@ -56,7 +57,7 @@ void setup() {
|
||||
telemetry_init();
|
||||
|
||||
pm.info("Updater");
|
||||
initUpdater();
|
||||
upgradeInit();
|
||||
|
||||
pm.info("HttpServer");
|
||||
HttpServer::init();
|
||||
@@ -70,22 +71,15 @@ void setup() {
|
||||
#endif
|
||||
|
||||
ts.add(
|
||||
TEST, 1000 * 60, [&](void*) { pm.info(printMemoryStatus()); }, nullptr, true);
|
||||
TEST, 1000 * 60, [&](void*) {
|
||||
pm.info(printMemoryStatus());
|
||||
},
|
||||
nullptr, true);
|
||||
|
||||
just_load = false;
|
||||
initialized = true;
|
||||
|
||||
CB = new CallBackTest();
|
||||
|
||||
CB->setCallback([]() {
|
||||
Serial.println("123");
|
||||
});
|
||||
|
||||
CB->setCallback([](const String str) {
|
||||
Serial.println(str);
|
||||
return true;
|
||||
});
|
||||
|
||||
myNotAsincActions = new NotAsinc(5);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
@@ -102,7 +96,7 @@ void loop() {
|
||||
loopUdp();
|
||||
#endif
|
||||
timeNow->loop();
|
||||
async->loop();
|
||||
myNotAsincActions->loop();
|
||||
not_async_actions();
|
||||
MqttClient::loop();
|
||||
loopCmd();
|
||||
@@ -124,10 +118,8 @@ void not_async_actions() {
|
||||
|
||||
getLastVersion();
|
||||
|
||||
do_update();
|
||||
|
||||
do_scan_bus();
|
||||
do_delElement();
|
||||
do_getJsonListFromCsv();
|
||||
}
|
||||
|
||||
String getURL(const String& urls) {
|
||||
|
||||
Reference in New Issue
Block a user