mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-30 11:59:12 +03:00
renaming
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
dhtT t 2 dht11 Температура#DHT,#t°C Датчики any-data 1
|
dhtT t 2 dht11 Температура#DHT,#t°C Датчики anydata 1
|
||||||
dhtH h 2 dht11 Влажность#DHT,#t°C Датчики any-data 2
|
dhtH h 2 dht11 Влажность#DHT,#t°C Датчики anydata 2
|
||||||
dhtComfort Степень#комфорта: Датчики 3
|
dhtComfort Степень#комфорта: Датчики 3
|
||||||
dhtPerception Восприятие: Датчики 4
|
dhtPerception Восприятие: Датчики 4
|
||||||
dhtDewpoint Точка#росы: Датчики 5
|
dhtDewpoint Точка#росы: Датчики 5
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
dhtT t 2 dht22 Температура#DHT,#t°C Датчики any-data 1
|
dhtT t 2 dht22 Температура#DHT,#t°C Датчики anydata 1
|
||||||
dhtH h 2 dht22 Влажность#DHT,#t°C Датчики any-data 2
|
dhtH h 2 dht22 Влажность#DHT,#t°C Датчики anydata 2
|
||||||
dhtComfort Степень#комфорта: Датчики 3
|
dhtComfort Степень#комфорта: Датчики 3
|
||||||
dhtPerception Восприятие: Датчики 4
|
dhtPerception Восприятие: Датчики 4
|
||||||
dhtDewpoint Точка#росы: Датчики 5
|
dhtDewpoint Точка#росы: Датчики 5
|
||||||
@@ -5,4 +5,4 @@ logging adc 5 100 Аналоговый#вход Датчики 2
|
|||||||
//значение чтения аналогового входа будут примерно равным
|
//значение чтения аналогового входа будут примерно равным
|
||||||
//при 1 вольте - 310, а при 2 вольтах - 620 (считаем по пропорции)
|
//при 1 вольте - 310, а при 2 вольтах - 620 (считаем по пропорции)
|
||||||
//данная строка переведет диапазон 310-620 в диапазон 1-100 и отобразит в приложении
|
//данная строка переведет диапазон 310-620 в диапазон 1-100 и отобразит в приложении
|
||||||
//варианты отображения: any-data, progress-round, progress-line, fill-gauge
|
//варианты отображения: anydata, progress-round, progress-line, fillgauge
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
bmp280T temp1 0x76 Температура#bmp280 Датчики any-data 1
|
bmp280T temp1 0x76 Температура#bmp280 Датчики anydata 1
|
||||||
bmp280P press1 0x76 Давление#bmp280 Датчики any-data 2
|
bmp280P press1 0x76 Давление#bmp280 Датчики anydata 2
|
||||||
logging temp1 1 100 Температура Датчики 3
|
logging temp1 1 100 Температура Датчики 3
|
||||||
logging press1 1 100 Давление Датчики 4
|
logging press1 1 100 Давление Датчики 4
|
||||||
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
bme280T temp1 0x76 Температура#bmp280 Датчики any-data 1
|
bme280T temp1 0x76 Температура#bmp280 Датчики anydata 1
|
||||||
bme280P pres1 0x76 Давление#bmp280 Датчики any-data 2
|
bme280P pres1 0x76 Давление#bmp280 Датчики anydata 2
|
||||||
bme280H hum1 0x76 Влажность#bmp280 Датчики any-data 3
|
bme280H hum1 0x76 Влажность#bmp280 Датчики anydata 3
|
||||||
bme280A altit1 0x76 Высота#bmp280 Датчики any-data 4
|
bme280A altit1 0x76 Высота#bmp280 Датчики anydata 4
|
||||||
logging temp1 1 100 Температура Датчики 5
|
logging temp1 1 100 Температура Датчики 5
|
||||||
logging press1 1 100 Давление Датчики 6
|
logging press1 1 100 Давление Датчики 6
|
||||||
logging hum1 1 100 Влажность Датчики 7
|
logging hum1 1 100 Влажность Датчики 7
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
dallas temp1 2 123456 Водонагреватель,#t°C Датчики any-data 1
|
dallas temp1 2 123456 Водонагреватель,#t°C Датчики anydata 1
|
||||||
logging dallas 1 100 Температура Датчики 2
|
logging dallas 1 100 Температура Датчики 2
|
||||||
|
|
||||||
//2 - номер пина датчика
|
//2 - номер пина датчика
|
||||||
//варианты отображения: any-data, progress-round, progress-line, fill-gauge
|
//варианты отображения: anydata, progress-round, progress-line, fillgauge
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
dallas 2 Водонагреватель,#t°C Термостат any-data 1
|
dallas 2 Водонагреватель,#t°C Термостат anydata 1
|
||||||
logging dallas 5 100 Температура Термостат 2
|
logging dallas 5 100 Температура Термостат 2
|
||||||
inputDigit digit1 При#скольки#выключить? Термостат 40 3
|
inputDigit digit1 При#скольки#выключить? Термостат 40 3
|
||||||
inputDigit digit2 При#скольки#включить? Термостат 20 4
|
inputDigit digit2 При#скольки#включить? Термостат 20 4
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
levelPr p 14 12 Уровень#в#баке,#% Датчики fill-gauge 125 25 1
|
levelPr p 14 12 Уровень#в#баке,#% Датчики fillgauge 125 25 1
|
||||||
ultrasonicCm cm 14 12 Дистанция,#см Датчики any-data 2
|
ultrasonicCm cm 14 12 Дистанция,#см Датчики anydata 2
|
||||||
inputDigit digit1 При#скольки#выключить? Датчики 95 3
|
inputDigit digit1 При#скольки#выключить? Датчики 95 3
|
||||||
inputDigit digit2 При#скольки#включить? Датчики 10 4
|
inputDigit digit2 При#скольки#включить? Датчики 10 4
|
||||||
button 1 5 Насос Датчики 0 5
|
button 1 5 Насос Датчики 0 5
|
||||||
@@ -9,4 +9,4 @@ logging p 1 100 Вода#в#баке Датчики 6
|
|||||||
//25 - это расстояние от датчика до поверхности воды когда бак полный в сантиметрах
|
//25 - это расстояние от датчика до поверхности воды когда бак полный в сантиметрах
|
||||||
//distancePr - эта строка выводит процент заполнения бака
|
//distancePr - эта строка выводит процент заполнения бака
|
||||||
//distanceCm - эта строка выводит расстояние в сантиметрах
|
//distanceCm - эта строка выводит расстояние в сантиметрах
|
||||||
//варианты отображения: any-data, progress-round, progress-line, fill-gauge
|
//варианты отображения: anydata, progress-round, progress-line, fillgauge
|
||||||
@@ -3,7 +3,7 @@ button 2 13 Прихожая Реле 0 2
|
|||||||
button 3 14 Кухня Реле 0 3
|
button 3 14 Кухня Реле 0 3
|
||||||
pwm 1 3 Яркость#коредор: Реле 1023 4
|
pwm 1 3 Яркость#коредор: Реле 1023 4
|
||||||
pwm 2 4 Яркость#ванная: Реле 510 5
|
pwm 2 4 Яркость#ванная: Реле 510 5
|
||||||
analog adc 0 Аналоговый#вход Датчики fill-gauge 1 1023 1 1023 6
|
analog adc 0 Аналоговый#вход Датчики fillgauge 1 1023 1 1023 6
|
||||||
logging adc 1 100 Аналоговый#вход Датчики 7
|
logging adc 1 100 Аналоговый#вход Датчики 7
|
||||||
|
|
||||||
//Это демо конфигурация. В ней показано как связать кнопки c помощью сценариев
|
//Это демо конфигурация. В ней показано как связать кнопки c помощью сценариев
|
||||||
@@ -3,19 +3,19 @@
|
|||||||
"chipID": "",
|
"chipID": "",
|
||||||
"apssid": "IoTmanager",
|
"apssid": "IoTmanager",
|
||||||
"appass": "",
|
"appass": "",
|
||||||
"routerssid": "rise",
|
"routerssid": "HomeNet",
|
||||||
"routerpass": "hostel3333",
|
"routerpass": "#19821111_",
|
||||||
"timezone": 2,
|
"timezone": 2,
|
||||||
"ntp": "pool.ntp.org",
|
"ntp": "pool.ntp.org",
|
||||||
"mqttServer": "91.204.228.124",
|
"mqttServer": "192.168.1.30",
|
||||||
"mqttPort": 1883,
|
"mqttPort": 1883,
|
||||||
"mqttPrefix": "/rise",
|
"mqttPrefix": "/iot",
|
||||||
"mqttUser": "test",
|
"mqttUser": "devices",
|
||||||
"mqttPass": "test",
|
"mqttPass": "devices",
|
||||||
"scen": "1",
|
"scen": "1",
|
||||||
"pushingboxid": "v7C133E426B0C69E",
|
"pushingboxid": "v7C133E426B0C69E",
|
||||||
"weblogin": "admin",
|
"weblogin": "admin",
|
||||||
"webpass": "admin",
|
"webpass": "admin",
|
||||||
"udponoff": "1",
|
"udponoff": "1",
|
||||||
"blink":"1"
|
"blink": "1"
|
||||||
}
|
}
|
||||||
@@ -3,7 +3,7 @@ button 2 13 Прихожая Реле 0 2
|
|||||||
button 3 14 Кухня Реле 0 3
|
button 3 14 Кухня Реле 0 3
|
||||||
pwm 1 3 Яркость#коредор: Реле 1023 4
|
pwm 1 3 Яркость#коредор: Реле 1023 4
|
||||||
pwm 2 4 Яркость#ванная: Реле 510 5
|
pwm 2 4 Яркость#ванная: Реле 510 5
|
||||||
analog adc 0 Аналоговый#вход Датчики fill-gauge 1 1023 1 1023 6
|
analog adc 0 Аналоговый#вход Датчики fillgauge 1 1023 1 1023 6
|
||||||
logging adc 1 100 Аналоговый#вход Датчики 7
|
logging adc 1 100 Аналоговый#вход Датчики 7
|
||||||
|
|
||||||
//Это демо конфигурация. В ней показано как связать кнопки c помощью сценариев
|
//Это демо конфигурация. В ней показано как связать кнопки c помощью сценариев
|
||||||
@@ -85,7 +85,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "file",
|
||||||
"state": "100с.txt",
|
"state": "dev_conf.txt",
|
||||||
"style": "width:100%;height:350px",
|
"style": "width:100%;height:350px",
|
||||||
"title": "Сохранить",
|
"title": "Сохранить",
|
||||||
"action": "/set?devinit",
|
"action": "/set?devinit",
|
||||||
@@ -104,7 +104,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "file",
|
||||||
"state": "100s.txt",
|
"state": "dev_scen.txt",
|
||||||
"style": "width:100%;height:350px",
|
"style": "width:100%;height:350px",
|
||||||
"title": "Сохранить",
|
"title": "Сохранить",
|
||||||
"action": "/set?sceninit",
|
"action": "/set?sceninit",
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ enum LedStatus_t {
|
|||||||
};
|
};
|
||||||
|
|
||||||
enum ConfigType_t {
|
enum ConfigType_t {
|
||||||
CT_MACRO,
|
CT_CONFIG,
|
||||||
CT_SCENARIO
|
CT_SCENARIO
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,10 @@
|
|||||||
#define MQTT_RECONNECT_INTERVAL 20000
|
#define MQTT_RECONNECT_INTERVAL 20000
|
||||||
// 1000 * 60 * 60 * 2
|
// 1000 * 60 * 60 * 2
|
||||||
#define TELEMETRY_UPDATE_INTERVAL 0
|
#define TELEMETRY_UPDATE_INTERVAL 0
|
||||||
|
#define DEVICE_CONFIG_FILE "dev_conf.txt"
|
||||||
|
#define DEVICE_SCENARIO_FILE "dev_scen.txt"
|
||||||
|
#define DEFAULT_PRESET 100
|
||||||
|
#define DEFAULT_SCENARIO 100
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Optional
|
* Optional
|
||||||
|
|||||||
@@ -107,6 +107,7 @@ extern boolean mqttParamsChanged;
|
|||||||
extern boolean udp_data_parse;
|
extern boolean udp_data_parse;
|
||||||
extern boolean mqtt_send_settings_to_udp;
|
extern boolean mqtt_send_settings_to_udp;
|
||||||
extern boolean i2c_scanning;
|
extern boolean i2c_scanning;
|
||||||
|
extern boolean fscheck_flag;
|
||||||
|
|
||||||
extern int sensors_reading_map[15];
|
extern int sensors_reading_map[15];
|
||||||
|
|
||||||
@@ -143,19 +144,15 @@ extern void mqttOrderSend();
|
|||||||
extern void httpOrderSend();
|
extern void httpOrderSend();
|
||||||
extern void firmwareVersion();
|
extern void firmwareVersion();
|
||||||
extern void firmwareUpdate();
|
extern void firmwareUpdate();
|
||||||
extern void Scenario_init();
|
extern void loadScenario();
|
||||||
extern void txtExecution(String file);
|
|
||||||
extern void stringExecution(String str);
|
|
||||||
|
|
||||||
// i2c_bu
|
|
||||||
extern void do_i2c_scanning();
|
|
||||||
extern String i2c_scan();
|
|
||||||
|
|
||||||
|
extern void fileExecute(const String& filename);
|
||||||
|
extern void stringExecute(String& cmdStr);
|
||||||
// Init
|
// Init
|
||||||
extern void loadConfig();
|
extern void loadConfig();
|
||||||
extern void All_init();
|
extern void All_init();
|
||||||
extern void statistics_init();
|
extern void statistics_init();
|
||||||
extern void Scenario_init();
|
extern void loadScenario();
|
||||||
extern void Device_init();
|
extern void Device_init();
|
||||||
extern void prsets_init();
|
extern void prsets_init();
|
||||||
extern void up_time();
|
extern void up_time();
|
||||||
@@ -245,9 +242,6 @@ extern void UDP_init();
|
|||||||
extern void do_udp_data_parse();
|
extern void do_udp_data_parse();
|
||||||
extern void do_mqtt_send_settings_to_udp();
|
extern void do_mqtt_send_settings_to_udp();
|
||||||
|
|
||||||
// WebServer
|
|
||||||
extern void Web_server_init();
|
|
||||||
|
|
||||||
// iot_firmware
|
// iot_firmware
|
||||||
extern void addCommandLoop(const String& cmdStr);
|
extern void addCommandLoop(const String& cmdStr);
|
||||||
extern void loopSerial();
|
extern void loopSerial();
|
||||||
|
|||||||
@@ -20,37 +20,37 @@ bool fileSystemInit();
|
|||||||
/*
|
/*
|
||||||
* Удалить файл
|
* Удалить файл
|
||||||
*/
|
*/
|
||||||
void removeFile(const String filename);
|
void removeFile(const String& filename);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Открыть файл на позиции
|
* Открыть файл на позиции
|
||||||
*/
|
*/
|
||||||
File seekFile(const String filename, size_t position = 0);
|
File seekFile(const String& filename, size_t position = 0);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Чтение строки из файла
|
* Чтение строки из файла
|
||||||
* возвращает стоку из файла в которой есть искомое слово found
|
* возвращает стоку из файла в которой есть искомое слово found
|
||||||
*/
|
*/
|
||||||
String readFileString(const String filename, const String to_find);
|
const String readFileString(const String& filename, const String& to_find);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Добовление строки в файл
|
* Добовление строки в файл
|
||||||
*/
|
*/
|
||||||
String addFile(const String filename, const String str);
|
const String addFile(const String& filename, const String& str);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Запись строки в файл
|
* Запись строки в файл
|
||||||
*/
|
*/
|
||||||
String writeFile(const String filename, const String str);
|
const String writeFile(const String& filename, const String& str);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Чтение файла в строку
|
* Чтение файла в строку
|
||||||
*/
|
*/
|
||||||
String readFile(const String filename, size_t max_size);
|
const String readFile(const String& filename, size_t max_size);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Размер файла
|
* Размер файла
|
||||||
*/
|
*/
|
||||||
String getFileSize(const String filename);
|
const String getFileSize(const String& filename);
|
||||||
|
|
||||||
bool copyFile(const String src, const String dst, bool overwrite = true);
|
bool copyFile(const String& src, const String& dst, bool overwrite = true);
|
||||||
@@ -4,8 +4,7 @@
|
|||||||
|
|
||||||
#include "CommonTypes.h"
|
#include "CommonTypes.h"
|
||||||
|
|
||||||
const String getPresetFile(uint8_t preset, ConfigType_t type);
|
const String getConfigFile(uint8_t preset, ConfigType_t type);
|
||||||
|
|
||||||
const String getItemName(Item_t item);
|
const String getItemName(Item_t item);
|
||||||
|
|
||||||
const Item_t getPresetItem(uint8_t preset);
|
|
||||||
|
|||||||
7
include/Utils/i2c_bus.h
Normal file
7
include/Utils/i2c_bus.h
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <Arduino.h>
|
||||||
|
|
||||||
|
void do_i2c_scanning();
|
||||||
|
|
||||||
|
const String i2c_scan();
|
||||||
@@ -6,7 +6,7 @@ static const char* MODULE = "Clock";
|
|||||||
|
|
||||||
void startTimeSync() {
|
void startTimeSync() {
|
||||||
if (!hasTimeSynced()) {
|
if (!hasTimeSynced()) {
|
||||||
pm.info("Start syncing");
|
pm.info("Start sync");
|
||||||
reconfigTime();
|
reconfigTime();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -42,7 +42,7 @@ void reconfigTime() {
|
|||||||
while (!hasTimeSynced() && i < 4) {
|
while (!hasTimeSynced() && i < 4) {
|
||||||
Serial.print(".");
|
Serial.print(".");
|
||||||
i++;
|
i++;
|
||||||
delay(300);
|
delay(30);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
57
src/Cmd.cpp
57
src/Cmd.cpp
@@ -120,13 +120,13 @@ void button() {
|
|||||||
|
|
||||||
if (button_param == "scen") {
|
if (button_param == "scen") {
|
||||||
jsonWriteStr(configSetupJson, "scen", start_state);
|
jsonWriteStr(configSetupJson, "scen", start_state);
|
||||||
Scenario_init();
|
loadScenario();
|
||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (button_param.indexOf("line") != -1) {
|
if (button_param.indexOf("line") != -1) {
|
||||||
String str = button_param;
|
String str = button_param;
|
||||||
while (str.length() != 0) {
|
while (str.length()) {
|
||||||
if (str == "") return;
|
if (str == "") return;
|
||||||
String tmp = selectToMarker(str, ","); //line1,
|
String tmp = selectToMarker(str, ","); //line1,
|
||||||
String number = deleteBeforeDelimiter(tmp, "e"); //1,
|
String number = deleteBeforeDelimiter(tmp, "e"); //1,
|
||||||
@@ -137,7 +137,7 @@ void button() {
|
|||||||
str = deleteBeforeDelimiter(str, ",");
|
str = deleteBeforeDelimiter(str, ",");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
createWidget(widget_name, page_name, page_number, "widgets/widget.toggle.json", "button" + button_number);
|
createWidget(widget_name, page_name, page_number, "toggle", "button" + button_number);
|
||||||
}
|
}
|
||||||
|
|
||||||
void buttonSet() {
|
void buttonSet() {
|
||||||
@@ -151,7 +151,7 @@ void buttonSet() {
|
|||||||
|
|
||||||
if (button_param == "scen") {
|
if (button_param == "scen") {
|
||||||
jsonWriteStr(configSetupJson, "scen", button_state);
|
jsonWriteStr(configSetupJson, "scen", button_state);
|
||||||
Scenario_init();
|
loadScenario();
|
||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -187,6 +187,7 @@ void buttonChange() {
|
|||||||
}
|
}
|
||||||
order_loop += "buttonSet " + button_number + " " + current_state + ",";
|
order_loop += "buttonSet " + button_number + " " + current_state + ",";
|
||||||
jsonWriteStr(configLiveJson, "button" + button_number, current_state);
|
jsonWriteStr(configLiveJson, "button" + button_number, current_state);
|
||||||
|
|
||||||
MqttClient::publishStatus("button" + button_number, current_state);
|
MqttClient::publishStatus("button" + button_number, current_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -221,7 +222,7 @@ void pwm() {
|
|||||||
//analogWriteFreq(32000);
|
//analogWriteFreq(32000);
|
||||||
jsonWriteStr(configLiveJson, "pwm" + pwm_number, start_state);
|
jsonWriteStr(configLiveJson, "pwm" + pwm_number, start_state);
|
||||||
|
|
||||||
createWidget(widget_name, page_name, page_number, "widgets/widget.range.json", "pwm" + pwm_number);
|
createWidget(widget_name, page_name, page_number, "range", "pwm" + pwm_number);
|
||||||
}
|
}
|
||||||
|
|
||||||
void pwmSet() {
|
void pwmSet() {
|
||||||
@@ -290,7 +291,7 @@ void inputDigit() {
|
|||||||
String start_state = sCmd.next();
|
String start_state = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
jsonWriteStr(configLiveJson, "digit" + number, start_state);
|
jsonWriteStr(configLiveJson, "digit" + number, start_state);
|
||||||
createWidget(widget_name, page_name, page_number, "widgets/widget.inputNum.json", "digit" + number);
|
createWidget(widget_name, page_name, page_number, "inputNum", "digit" + number);
|
||||||
}
|
}
|
||||||
|
|
||||||
void digitSet() {
|
void digitSet() {
|
||||||
@@ -312,7 +313,7 @@ void inputTime() {
|
|||||||
String start_state = sCmd.next();
|
String start_state = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
jsonWriteStr(configLiveJson, "time" + number, start_state);
|
jsonWriteStr(configLiveJson, "time" + number, start_state);
|
||||||
createWidget(widget_name, page_name, page_number, "widgets/widget.inputTime.json", "time" + number);
|
createWidget(widget_name, page_name, page_number, "inputTime", "time" + number);
|
||||||
}
|
}
|
||||||
|
|
||||||
void timeSet() {
|
void timeSet() {
|
||||||
@@ -342,7 +343,7 @@ void text() {
|
|||||||
String page_name = sCmd.next();
|
String page_name = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
|
|
||||||
createWidget(widget_name, page_name, page_number, "widgets/widget.anyData.json", "text" + number);
|
createWidget(widget_name, page_name, page_number, "anydata", "text" + number);
|
||||||
}
|
}
|
||||||
|
|
||||||
void textSet() {
|
void textSet() {
|
||||||
@@ -475,7 +476,7 @@ void servo_() {
|
|||||||
|
|
||||||
jsonWriteStr(configLiveJson, "servo" + servo_number, start_state);
|
jsonWriteStr(configLiveJson, "servo" + servo_number, start_state);
|
||||||
|
|
||||||
createWidgetParam(widget_name, page_name, page_number, "widgets/widget.range.json", "servo" + servo_number, "min", min_value, "max", max_value, "k", "1");
|
createWidgetParam(widget_name, page_name, page_number, "range", "servo" + servo_number, "min", min_value, "max", max_value, "k", "1");
|
||||||
}
|
}
|
||||||
|
|
||||||
void servoSet() {
|
void servoSet() {
|
||||||
@@ -580,7 +581,7 @@ void firmwareVersion() {
|
|||||||
String page_name = sCmd.next();
|
String page_name = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
jsonWriteStr(configLiveJson, "firmver", FIRMWARE_VERSION);
|
jsonWriteStr(configLiveJson, "firmver", FIRMWARE_VERSION);
|
||||||
createWidgetByType(widget_name, page_name, page_number, "any-data", "firmver");
|
createWidgetByType(widget_name, page_name, page_number, "anydata", "firmver");
|
||||||
}
|
}
|
||||||
|
|
||||||
void addCommandLoop(const String &cmdStr) {
|
void addCommandLoop(const String &cmdStr) {
|
||||||
@@ -599,30 +600,28 @@ void loopCmd() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void txtExecution(String file) {
|
void fileExecute(const String &filename) {
|
||||||
String command_all = readFile(file, 2048) + "\r\n";
|
String cmdStr = readFile(filename, 2048);
|
||||||
|
cmdStr += "\r\n";
|
||||||
|
cmdStr.replace("\r\n", "\n");
|
||||||
|
cmdStr.replace("\r", "\n");
|
||||||
|
|
||||||
command_all.replace("\r\n", "\n");
|
while (cmdStr.length() != 0) {
|
||||||
command_all.replace("\r", "\n");
|
String buf = selectToMarker(cmdStr, "\n");
|
||||||
|
sCmd.readStr(buf);
|
||||||
while (command_all.length() != 0) {
|
cmdStr = deleteBeforeDelimiter(cmdStr, "\n");
|
||||||
String tmp = selectToMarker(command_all, "\n");
|
|
||||||
sCmd.readStr(tmp);
|
|
||||||
command_all = deleteBeforeDelimiter(command_all, "\n");
|
|
||||||
}
|
}
|
||||||
command_all = "";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void stringExecution(String str) {
|
void stringExecute(String &cmdStr) {
|
||||||
str = str + "\r\n";
|
cmdStr = cmdStr + "\r\n";
|
||||||
|
|
||||||
str.replace("\r\n", "\n");
|
cmdStr.replace("\r\n", "\n");
|
||||||
str.replace("\r", "\n");
|
cmdStr.replace("\r", "\n");
|
||||||
|
|
||||||
while (str.length() != 0) {
|
while (cmdStr.length()) {
|
||||||
String tmp = selectToMarker(str, "\n");
|
String buf = selectToMarker(cmdStr, "\n");
|
||||||
sCmd.readStr(tmp);
|
sCmd.readStr(buf);
|
||||||
|
cmdStr = deleteBeforeDelimiter(cmdStr, "\n");
|
||||||
str = deleteBeforeDelimiter(str, "\n");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -17,8 +17,6 @@ AsyncWebServer server(80);
|
|||||||
|
|
||||||
DallasTemperature sensors;
|
DallasTemperature sensors;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Global vars
|
* Global vars
|
||||||
*/
|
*/
|
||||||
@@ -73,3 +71,4 @@ boolean mqttParamsChanged = false;
|
|||||||
boolean udp_data_parse = false;
|
boolean udp_data_parse = false;
|
||||||
boolean mqtt_send_settings_to_udp = false;
|
boolean mqtt_send_settings_to_udp = false;
|
||||||
boolean i2c_scanning = false;
|
boolean i2c_scanning = false;
|
||||||
|
boolean fscheck_flag = false;
|
||||||
|
|||||||
15
src/Init.cpp
15
src/Init.cpp
@@ -19,7 +19,7 @@ void loadConfig() {
|
|||||||
|
|
||||||
void All_init() {
|
void All_init() {
|
||||||
Device_init();
|
Device_init();
|
||||||
Scenario_init();
|
loadScenario();
|
||||||
Timer_countdown_init();
|
Timer_countdown_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,17 +57,17 @@ void Device_init() {
|
|||||||
#ifdef LAYOUT_IN_RAM
|
#ifdef LAYOUT_IN_RAM
|
||||||
all_widgets = "";
|
all_widgets = "";
|
||||||
#else
|
#else
|
||||||
removeFile("/layout.txt");
|
removeFile(String("layout.txt"));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
txtExecution("100с.txt");
|
fileExecute(String(DEVICE_CONFIG_FILE));
|
||||||
//outcoming_date();
|
//outcoming_date();
|
||||||
}
|
}
|
||||||
//-------------------------------сценарии-----------------------------------------------------
|
//-------------------------------сценарии-----------------------------------------------------
|
||||||
|
|
||||||
void Scenario_init() {
|
void loadScenario() {
|
||||||
if (jsonReadStr(configSetupJson, "scen") == "1") {
|
if (jsonReadStr(configSetupJson, "scen") == "1") {
|
||||||
scenario = readFile("100s.txt", 2048);
|
scenario = readFile(String(DEVICE_SCENARIO_FILE), 2048);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -107,20 +107,15 @@ void handle_statistics() {
|
|||||||
urls += "iot-manager_esp32";
|
urls += "iot-manager_esp32";
|
||||||
#endif
|
#endif
|
||||||
urls += "&";
|
urls += "&";
|
||||||
//-----------------------------------------------------------------
|
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
urls += ESP.getResetReason();
|
urls += ESP.getResetReason();
|
||||||
//Serial.println(ESP.getResetReason());
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef ESP32
|
#ifdef ESP32
|
||||||
urls += "Power on";
|
urls += "Power on";
|
||||||
#endif
|
#endif
|
||||||
urls += "&";
|
urls += "&";
|
||||||
//-----------------------------------------------------------------
|
|
||||||
urls += "ver: ";
|
urls += "ver: ";
|
||||||
urls += String(FIRMWARE_VERSION);
|
urls += String(FIRMWARE_VERSION);
|
||||||
//-----------------------------------------------------------------
|
|
||||||
String stat = getURL(urls);
|
String stat = getURL(urls);
|
||||||
//Serial.println(stat);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
void sendLogData(String file, String topic);
|
void sendLogData(String file, String topic);
|
||||||
|
|
||||||
|
static const char* MODULE = "Log";
|
||||||
|
|
||||||
#ifdef LOGGING_ENABLED
|
#ifdef LOGGING_ENABLED
|
||||||
//===============================================Логирование============================================================
|
//===============================================Логирование============================================================
|
||||||
//logging temp1 1 10 Температура Датчики 2
|
//logging temp1 1 10 Температура Датчики 2
|
||||||
@@ -17,15 +19,18 @@ void logging() {
|
|||||||
String page_name = sCmd.next();
|
String page_name = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
logging_value_names_list += value_name + ",";
|
logging_value_names_list += value_name + ",";
|
||||||
enter_to_logging_counter++; //считаем количество входов в эту функцию
|
enter_to_logging_counter++; //считаем количество входов в эту функцию
|
||||||
jsonWriteStr(configOptionJson, value_name + "_c", maxCount); //создаем в файловой системе переменную количества точек на графике с отметкой _c что значит count
|
jsonWriteStr(configOptionJson, value_name + "_c", maxCount); //создаем в файловой системе переменную количества точек на графике с отметкой _c что значит count
|
||||||
createChart(widget_name, page_name, page_number, "widgets/widget.chart.json", value_name + "_ch", maxCount); //создаем график в приложении с топиком _ch /prefix/3234045-1589487/value_name_ch
|
|
||||||
|
//создаем график в приложении с топиком _ch /prefix/3234045-1589487/value_name_ch
|
||||||
|
createChart(widget_name, page_name, page_number, "chart", value_name + "_ch", maxCount);
|
||||||
|
|
||||||
if (enter_to_logging_counter == LOG1) {
|
if (enter_to_logging_counter == LOG1) {
|
||||||
ts.add(
|
ts.add(
|
||||||
LOG1, period_min.toInt() * 1000 * 60, [&](void*) {
|
LOG1, period_min.toInt() * 1000 * 60, [&](void*) {
|
||||||
String tmp_buf_1 = selectFromMarkerToMarker(logging_value_names_list, ",", 0);
|
String tmp_buf_1 = selectFromMarkerToMarker(logging_value_names_list, ",", 0);
|
||||||
deleteOldDate("log." + tmp_buf_1 + ".txt", jsonReadInt(configOptionJson, tmp_buf_1 + "_c"), jsonReadStr(configLiveJson, tmp_buf_1));
|
deleteOldDate("log." + tmp_buf_1 + ".txt", jsonReadInt(configOptionJson, tmp_buf_1 + "_c"), jsonReadStr(configLiveJson, tmp_buf_1));
|
||||||
Serial.println("[I] LOGGING for sensor '" + tmp_buf_1 + "' done");
|
pm.info("logging for " + tmp_buf_1 + " done");
|
||||||
},
|
},
|
||||||
nullptr, false);
|
nullptr, false);
|
||||||
}
|
}
|
||||||
@@ -34,7 +39,7 @@ void logging() {
|
|||||||
LOG2, period_min.toInt() * 1000 * 60, [&](void*) {
|
LOG2, period_min.toInt() * 1000 * 60, [&](void*) {
|
||||||
String tmp_buf_2 = selectFromMarkerToMarker(logging_value_names_list, ",", 1);
|
String tmp_buf_2 = selectFromMarkerToMarker(logging_value_names_list, ",", 1);
|
||||||
deleteOldDate("log." + tmp_buf_2 + ".txt", jsonReadInt(configOptionJson, tmp_buf_2 + "_c"), jsonReadStr(configLiveJson, tmp_buf_2));
|
deleteOldDate("log." + tmp_buf_2 + ".txt", jsonReadInt(configOptionJson, tmp_buf_2 + "_c"), jsonReadStr(configLiveJson, tmp_buf_2));
|
||||||
Serial.println("[I] LOGGING for sensor '" + tmp_buf_2 + "' done");
|
pm.info("logging for " + tmp_buf_2 + " done");
|
||||||
},
|
},
|
||||||
nullptr, false);
|
nullptr, false);
|
||||||
}
|
}
|
||||||
@@ -43,7 +48,7 @@ void logging() {
|
|||||||
LOG3, period_min.toInt() * 1000 * 60, [&](void*) {
|
LOG3, period_min.toInt() * 1000 * 60, [&](void*) {
|
||||||
String tmp_buf_3 = selectFromMarkerToMarker(logging_value_names_list, ",", 2);
|
String tmp_buf_3 = selectFromMarkerToMarker(logging_value_names_list, ",", 2);
|
||||||
deleteOldDate("log." + tmp_buf_3 + ".txt", jsonReadInt(configOptionJson, tmp_buf_3 + "_c"), jsonReadStr(configLiveJson, tmp_buf_3));
|
deleteOldDate("log." + tmp_buf_3 + ".txt", jsonReadInt(configOptionJson, tmp_buf_3 + "_c"), jsonReadStr(configLiveJson, tmp_buf_3));
|
||||||
Serial.println("[I] LOGGING for sensor '" + tmp_buf_3 + "' done");
|
pm.info("logging for " + tmp_buf_3 + " done");
|
||||||
},
|
},
|
||||||
nullptr, false);
|
nullptr, false);
|
||||||
}
|
}
|
||||||
@@ -52,7 +57,7 @@ void logging() {
|
|||||||
LOG4, period_min.toInt() * 1000 * 60, [&](void*) {
|
LOG4, period_min.toInt() * 1000 * 60, [&](void*) {
|
||||||
String tmp_buf_4 = selectFromMarkerToMarker(logging_value_names_list, ",", 3);
|
String tmp_buf_4 = selectFromMarkerToMarker(logging_value_names_list, ",", 3);
|
||||||
deleteOldDate("log." + tmp_buf_4 + ".txt", jsonReadInt(configOptionJson, tmp_buf_4 + "_c"), jsonReadStr(configLiveJson, tmp_buf_4));
|
deleteOldDate("log." + tmp_buf_4 + ".txt", jsonReadInt(configOptionJson, tmp_buf_4 + "_c"), jsonReadStr(configLiveJson, tmp_buf_4));
|
||||||
Serial.println("[I] LOGGING for sensor '" + tmp_buf_4 + "' done");
|
pm.info("logging for " + tmp_buf_4 + " done");
|
||||||
},
|
},
|
||||||
nullptr, false);
|
nullptr, false);
|
||||||
}
|
}
|
||||||
@@ -61,7 +66,7 @@ void logging() {
|
|||||||
LOG5, period_min.toInt() * 1000 * 60, [&](void*) {
|
LOG5, period_min.toInt() * 1000 * 60, [&](void*) {
|
||||||
String tmp_buf_5 = selectFromMarkerToMarker(logging_value_names_list, ",", 4);
|
String tmp_buf_5 = selectFromMarkerToMarker(logging_value_names_list, ",", 4);
|
||||||
deleteOldDate("log." + tmp_buf_5 + ".txt", jsonReadInt(configOptionJson, tmp_buf_5 + "_c"), jsonReadStr(configLiveJson, tmp_buf_5));
|
deleteOldDate("log." + tmp_buf_5 + ".txt", jsonReadInt(configOptionJson, tmp_buf_5 + "_c"), jsonReadStr(configLiveJson, tmp_buf_5));
|
||||||
Serial.println("[I] LOGGING for sensor '" + tmp_buf_5 + "' done");
|
pm.info("logging for " + tmp_buf_5 + " done");
|
||||||
},
|
},
|
||||||
nullptr, false);
|
nullptr, false);
|
||||||
}
|
}
|
||||||
@@ -74,10 +79,10 @@ void deleteOldDate(const String filename, size_t max_lines_cnt, String date_to_a
|
|||||||
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");
|
||||||
|
|
||||||
Serial.printf("[I] log %s (%d lines)\n", filename.c_str(), lines_cnt);
|
pm.info("log " + filename + " (" + String(lines_cnt, DEC) + ")");
|
||||||
|
|
||||||
if ((lines_cnt > max_lines_cnt + 1) || !lines_cnt) {
|
if ((lines_cnt > max_lines_cnt + 1) || !lines_cnt) {
|
||||||
removeFile("/" + filename);
|
removeFile(filename);
|
||||||
lines_cnt = 0;
|
lines_cnt = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,7 +97,6 @@ void deleteOldDate(const String filename, size_t max_lines_cnt, String date_to_a
|
|||||||
addFile(filename, getTimeUnix() + " " + date_to_add);
|
addFile(filename, getTimeUnix() + " " + date_to_add);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log_date = "";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//=========================================Выбор какие данные отправлять==================================================================
|
//=========================================Выбор какие данные отправлять==================================================================
|
||||||
@@ -103,19 +107,18 @@ void choose_log_date_and_send() {
|
|||||||
sendLogData("log." + tmp + ".txt", tmp + "_ch");
|
sendLogData("log." + tmp + ".txt", tmp + "_ch");
|
||||||
all_line = deleteBeforeDelimiter(all_line, ",");
|
all_line = deleteBeforeDelimiter(all_line, ",");
|
||||||
}
|
}
|
||||||
all_line = "";
|
|
||||||
}
|
}
|
||||||
//=========================================Отправка данных===================================================================================
|
//=========================================Отправка данных===================================================================================
|
||||||
void sendLogData(String file, String topic) {
|
void sendLogData(String file, String topic) {
|
||||||
String log_date = readFile(file, 5000);
|
String log_date = readFile(file, 5120);
|
||||||
if (log_date != "Failed") {
|
if (log_date != "failed") {
|
||||||
log_date.replace("\r\n", "\n");
|
log_date.replace("\r\n", "\n");
|
||||||
log_date.replace("\r", "\n");
|
log_date.replace("\r", "\n");
|
||||||
String buf = "{}";
|
String buf = "{}";
|
||||||
String json_array;
|
String json_array;
|
||||||
String unix_time;
|
String unix_time;
|
||||||
String value;
|
String value;
|
||||||
while (log_date.length() != 0) {
|
while (log_date.length()) {
|
||||||
String tmp = selectToMarker(log_date, "\n");
|
String tmp = selectToMarker(log_date, "\n");
|
||||||
log_date = deleteBeforeDelimiter(log_date, "\n");
|
log_date = deleteBeforeDelimiter(log_date, "\n");
|
||||||
unix_time = selectToMarker(tmp, " ");
|
unix_time = selectToMarker(tmp, " ");
|
||||||
@@ -133,40 +136,18 @@ void sendLogData(String file, String topic) {
|
|||||||
value = "";
|
value = "";
|
||||||
log_date = "";
|
log_date = "";
|
||||||
json_array = "{\"status\":[" + json_array + "]}";
|
json_array = "{\"status\":[" + json_array + "]}";
|
||||||
Serial.println(json_array);
|
pm.info(json_array);
|
||||||
|
|
||||||
MqttClient::publishChart(topic, json_array);
|
MqttClient::publishChart(topic, json_array);
|
||||||
json_array = "";
|
|
||||||
printMemoryStatus("[I] send log date");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
//----------------------------------------------
|
|
||||||
File configFile = SPIFFS.open("/" + file, "r");
|
|
||||||
if (!configFile) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
configFile.seek(0, SeekSet); //поставим курсор в начало файла
|
|
||||||
while (configFile.position() != configFile.size()) {
|
|
||||||
String tmp = configFile.readStringUntil('\r\n');
|
|
||||||
String unix_time = selectToMarker (tmp, " ");
|
|
||||||
String value = deleteBeforeDelimiter(tmp, " ");
|
|
||||||
String final_line = "{\"status\":{\"x\":" + unix_time + ",\"y1\":" + value + "}}";
|
|
||||||
//Serial.println(final_line);
|
|
||||||
sendCHART(topic, final_line);
|
|
||||||
}
|
|
||||||
getMemoryLoad("[I] after send log date");
|
|
||||||
*/
|
|
||||||
|
|
||||||
//=========================================Очистка данных===================================================================================
|
|
||||||
void clean_log_date() {
|
void clean_log_date() {
|
||||||
String all_line = logging_value_names_list;
|
String all_line = logging_value_names_list;
|
||||||
while (all_line.length() != 0) {
|
while (all_line.length()) {
|
||||||
String tmp = selectToMarker(all_line, ",");
|
String tmp = selectToMarker(all_line, ",");
|
||||||
removeFile("/log." + tmp + ".txt");
|
removeFile("log." + tmp + ".txt");
|
||||||
all_line = deleteBeforeDelimiter(all_line, ",");
|
all_line = deleteBeforeDelimiter(all_line, ",");
|
||||||
}
|
}
|
||||||
all_line = "";
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -29,7 +29,7 @@ void init() {
|
|||||||
if (!just_load) mqtt_lost_error++;
|
if (!just_load) mqtt_lost_error++;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
pm.error("WiFi connection lost");
|
pm.error("connection lost");
|
||||||
ts.remove(WIFI_MQTT_CONNECTION_CHECK);
|
ts.remove(WIFI_MQTT_CONNECTION_CHECK);
|
||||||
wifi_lost_error++;
|
wifi_lost_error++;
|
||||||
startAPMode();
|
startAPMode();
|
||||||
@@ -86,7 +86,7 @@ boolean connect() {
|
|||||||
mqttRootDevice = mqttPrefix + "/" + chipId;
|
mqttRootDevice = mqttPrefix + "/" + chipId;
|
||||||
|
|
||||||
pm.info("broker " + addr + ":" + String(port, DEC));
|
pm.info("broker " + addr + ":" + String(port, DEC));
|
||||||
pm.info("root " + mqttRootDevice);
|
pm.info("topic " + mqttRootDevice);
|
||||||
|
|
||||||
setLedStatus(LED_FAST);
|
setLedStatus(LED_FAST);
|
||||||
mqtt.setServer(addr.c_str(), port);
|
mqtt.setServer(addr.c_str(), port);
|
||||||
@@ -115,10 +115,8 @@ void handleSubscribedUpdates(char* topic, uint8_t* payload, size_t length) {
|
|||||||
payloadStr += (char)payload[i];
|
payloadStr += (char)payload[i];
|
||||||
}
|
}
|
||||||
pm.info(payloadStr);
|
pm.info(payloadStr);
|
||||||
|
if (payloadStr.startsWith("HELLO")) {
|
||||||
if (payloadStr == "HELLO") {
|
pm.info("Full update");
|
||||||
//данные которые отправляем при подключении или отбновлении страницы
|
|
||||||
pm.info("Send web page updates");
|
|
||||||
publishWidgets();
|
publishWidgets();
|
||||||
publishState();
|
publishState();
|
||||||
#ifdef LOGGING_ENABLED
|
#ifdef LOGGING_ENABLED
|
||||||
@@ -148,11 +146,11 @@ void handleSubscribedUpdates(char* topic, uint8_t* payload, size_t length) {
|
|||||||
upgrade = true;
|
upgrade = true;
|
||||||
}
|
}
|
||||||
} else if (topicStr.indexOf("devc")) {
|
} else if (topicStr.indexOf("devc")) {
|
||||||
writeFile("100с.txt", payloadStr);
|
writeFile(String(DEVICE_CONFIG_FILE), payloadStr);
|
||||||
Device_init();
|
Device_init();
|
||||||
} else if (topicStr.indexOf("devs")) {
|
} else if (topicStr.indexOf("devs")) {
|
||||||
writeFile("100s.txt", payloadStr);
|
writeFile(String(DEVICE_SCENARIO_FILE), payloadStr);
|
||||||
Scenario_init();
|
loadScenario();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -225,13 +223,14 @@ void publishWidgets() {
|
|||||||
|
|
||||||
#ifndef LAYOUT_IN_RAM
|
#ifndef LAYOUT_IN_RAM
|
||||||
void publishWidgets() {
|
void publishWidgets() {
|
||||||
auto file = seekFile("/layout.txt");
|
auto file = seekFile("layout.txt");
|
||||||
if (!file) {
|
if (!file) {
|
||||||
|
pm.error("on seek layout.txt");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
while (file.position() != file.size()) {
|
while (file.available()) {
|
||||||
String payload = file.readStringUntil('\n');
|
String payload = file.readStringUntil('\n');
|
||||||
pm.info("publish: " + payload);
|
pm.info("widgets: " + payload);
|
||||||
publishData("config", payload);
|
publishData("config", payload);
|
||||||
}
|
}
|
||||||
file.close();
|
file.close();
|
||||||
@@ -243,14 +242,13 @@ void publishState() {
|
|||||||
// {"name":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1"}
|
// {"name":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1"}
|
||||||
// "name":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1"
|
// "name":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1"
|
||||||
// "name":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1",
|
// "name":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1",
|
||||||
String current_config = configLiveJson;
|
String str = configLiveJson;
|
||||||
printMemoryStatus("[I] after send all date");
|
str.replace("{", "");
|
||||||
current_config.replace("{", "");
|
str.replace("}", "");
|
||||||
current_config.replace("}", "");
|
str += ",";
|
||||||
current_config += ",";
|
|
||||||
|
|
||||||
while (current_config.length()) {
|
while (str.length()) {
|
||||||
String tmp = selectToMarker(current_config, ",");
|
String tmp = selectToMarker(str, ",");
|
||||||
|
|
||||||
String topic = selectToMarker(tmp, ":");
|
String topic = selectToMarker(tmp, ":");
|
||||||
topic.replace("\"", "");
|
topic.replace("\"", "");
|
||||||
@@ -261,7 +259,7 @@ void publishState() {
|
|||||||
if (topic != "name" && topic != "lang" && topic != "ip" && topic.indexOf("_in") < 0) {
|
if (topic != "name" && topic != "lang" && topic != "ip" && topic.indexOf("_in") < 0) {
|
||||||
publishStatus(topic, state);
|
publishStatus(topic, state);
|
||||||
}
|
}
|
||||||
current_config = deleteBeforeDelimiter(current_config, ",");
|
str = deleteBeforeDelimiter(str, ",");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ void loopScenario() {
|
|||||||
|
|
||||||
if (flag) {
|
if (flag) {
|
||||||
tmp = deleteBeforeDelimiter(tmp, "\n"); //удаляем строку самого сценария оставляя только команды
|
tmp = deleteBeforeDelimiter(tmp, "\n"); //удаляем строку самого сценария оставляя только команды
|
||||||
stringExecution(tmp); //выполняем все команды
|
stringExecute(tmp); //выполняем все команды
|
||||||
|
|
||||||
Serial.println("[SCENARIO] '" + condition + "'");
|
Serial.println("[SCENARIO] '" + condition + "'");
|
||||||
//Serial.println(" " + tmp);
|
//Serial.println(" " + tmp);
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ void sensors_init() {
|
|||||||
//=========================================================================================================================================
|
//=========================================================================================================================================
|
||||||
//=========================================Модуль измерения уровня в баке==================================================================
|
//=========================================Модуль измерения уровня в баке==================================================================
|
||||||
#ifdef LEVEL_ENABLED
|
#ifdef LEVEL_ENABLED
|
||||||
//levelPr p 14 12 Вода#в#баке,#% Датчики fill-gauge 125 20 1
|
//levelPr p 14 12 Вода#в#баке,#% Датчики fillgauge 125 20 1
|
||||||
void levelPr() {
|
void levelPr() {
|
||||||
String value_name = sCmd.next();
|
String value_name = sCmd.next();
|
||||||
String trig = sCmd.next();
|
String trig = sCmd.next();
|
||||||
@@ -102,7 +102,7 @@ void levelPr() {
|
|||||||
createWidgetByType(widget_name, page_name, page_number, type, value_name);
|
createWidgetByType(widget_name, page_name, page_number, type, value_name);
|
||||||
sensors_reading_map[0] = 1;
|
sensors_reading_map[0] = 1;
|
||||||
}
|
}
|
||||||
//ultrasonicCm cm 14 12 Дистанция,#см Датчики fill-gauge 1
|
//ultrasonicCm cm 14 12 Дистанция,#см Датчики fillgauge 1
|
||||||
void ultrasonicCm() {
|
void ultrasonicCm() {
|
||||||
String value_name = sCmd.next();
|
String value_name = sCmd.next();
|
||||||
String trig = sCmd.next();
|
String trig = sCmd.next();
|
||||||
@@ -399,7 +399,7 @@ void dhtC() {
|
|||||||
String widget_name = sCmd.next();
|
String widget_name = sCmd.next();
|
||||||
String page_name = sCmd.next();
|
String page_name = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
createWidgetByType(widget_name, page_name, page_number, "any-data", "dhtComfort");
|
createWidgetByType(widget_name, page_name, page_number, "anydata", "dhtComfort");
|
||||||
sensors_reading_map[7] = 1;
|
sensors_reading_map[7] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -459,7 +459,7 @@ void dhtD() {
|
|||||||
String widget_name = sCmd.next();
|
String widget_name = sCmd.next();
|
||||||
String page_name = sCmd.next();
|
String page_name = sCmd.next();
|
||||||
String page_number = sCmd.next();
|
String page_number = sCmd.next();
|
||||||
createWidgetByType(widget_name, page_name, page_number, "any-data", "dhtDewpoint");
|
createWidgetByType(widget_name, page_name, page_number, "anydata", "dhtDewpoint");
|
||||||
sensors_reading_map[8] = 1;
|
sensors_reading_map[8] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#include "Global.h"
|
#include "Global.h"
|
||||||
|
|
||||||
void init_updater() {
|
void init_updater() {
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
if (WiFi.status() == WL_CONNECTED) last_version = getURL("http://91.204.228.124:1100/update/esp8266/version.txt");
|
if (WiFi.status() == WL_CONNECTED) last_version = getURL("http://91.204.228.124:1100/update/esp8266/version.txt");
|
||||||
@@ -28,8 +29,9 @@ void upgrade_firmware() {
|
|||||||
String scenario_for_update;
|
String scenario_for_update;
|
||||||
String config_for_update;
|
String config_for_update;
|
||||||
String configSetup_for_update;
|
String configSetup_for_update;
|
||||||
scenario_for_update = readFile("100s.txt", 4000);
|
|
||||||
config_for_update = readFile("100с.txt", 4000);
|
scenario_for_update = readFile(String(DEVICE_SCENARIO_FILE), 4000);
|
||||||
|
config_for_update = readFile(String(DEVICE_CONFIG_FILE), 4000);
|
||||||
configSetup_for_update = configSetupJson;
|
configSetup_for_update = configSetupJson;
|
||||||
|
|
||||||
Serial.println("Start upgrade SPIFFS, please wait...");
|
Serial.println("Start upgrade SPIFFS, please wait...");
|
||||||
@@ -46,8 +48,8 @@ void upgrade_firmware() {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (ret == HTTP_UPDATE_OK) {
|
if (ret == HTTP_UPDATE_OK) {
|
||||||
writeFile("100s.txt", scenario_for_update);
|
writeFile(String(DEVICE_SCENARIO_FILE), scenario_for_update);
|
||||||
writeFile("100с.txt", config_for_update);
|
writeFile(String(DEVICE_CONFIG_FILE), config_for_update);
|
||||||
writeFile("config.json", configSetup_for_update);
|
writeFile("config.json", configSetup_for_update);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
|
|
||||||
|
|||||||
@@ -15,27 +15,34 @@ bool fileSystemInit() {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void removeFile(const String filename) {
|
void removeFile(const String& filename) {
|
||||||
if (!LittleFS.remove(filepath(filename))) {
|
String path = filepath(filename);
|
||||||
pm.error("remove " + filename);
|
if (LittleFS.exists(path)) {
|
||||||
|
if (!LittleFS.remove(path)) {
|
||||||
|
pm.error("remove " + path);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
pm.info("not exist" + path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
File seekFile(const String filename, size_t position) {
|
File seekFile(const String& filename, size_t position) {
|
||||||
auto file = LittleFS.open(filepath(filename), "r");
|
String path = filepath(filename);
|
||||||
|
auto file = LittleFS.open(path, "r");
|
||||||
if (!file) {
|
if (!file) {
|
||||||
pm.error("open " + filename);
|
pm.error("open " + path);
|
||||||
}
|
}
|
||||||
// поставим курсор в начало файла
|
// поставим курсор в начало файла
|
||||||
file.seek(position, SeekSet);
|
file.seek(position, SeekSet);
|
||||||
return file;
|
return file;
|
||||||
}
|
}
|
||||||
|
|
||||||
String readFileString(const String filename, const String to_find) {
|
const String readFileString(const String& filename, const String& to_find) {
|
||||||
String res = "Failed";
|
String path = filepath(filename);
|
||||||
auto file = LittleFS.open(filepath(filename), "r");
|
String res = "failed";
|
||||||
|
auto file = LittleFS.open(path, "r");
|
||||||
if (!file) {
|
if (!file) {
|
||||||
return "Failed";
|
return "failed";
|
||||||
}
|
}
|
||||||
if (file.find(to_find.c_str())) {
|
if (file.find(to_find.c_str())) {
|
||||||
res = file.readStringUntil('\n');
|
res = file.readStringUntil('\n');
|
||||||
@@ -44,19 +51,21 @@ String readFileString(const String filename, const String to_find) {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
String addFile(const String filename, const String str) {
|
const String addFile(const String& filename, const String& str) {
|
||||||
auto file = LittleFS.open(filepath(filename), "a");
|
String path = filepath(filename);
|
||||||
|
auto file = LittleFS.open(path, "a");
|
||||||
if (!file) {
|
if (!file) {
|
||||||
return "Failed";
|
return "failed";
|
||||||
}
|
}
|
||||||
file.println(str);
|
file.println(str);
|
||||||
file.close();
|
file.close();
|
||||||
return "Sucсess";
|
return "sucсess";
|
||||||
}
|
}
|
||||||
|
|
||||||
bool copyFile(const String src, const String dst, bool overwrite) {
|
bool copyFile(const String& src, const String& dst, bool overwrite) {
|
||||||
String srcPath = filepath(src);
|
String srcPath = filepath(src);
|
||||||
String dstPath = filepath(dst);
|
String dstPath = filepath(dst);
|
||||||
|
pm.info("copy " + srcPath + " to " + dstPath);
|
||||||
if (!LittleFS.exists(srcPath)) {
|
if (!LittleFS.exists(srcPath)) {
|
||||||
pm.error("not exist: " + srcPath);
|
pm.error("not exist: " + srcPath);
|
||||||
return false;
|
return false;
|
||||||
@@ -81,35 +90,37 @@ bool copyFile(const String src, const String dst, bool overwrite) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
String writeFile(const String filename, const String str) {
|
const String writeFile(const String& filename, const String& str) {
|
||||||
auto file = LittleFS.open(filepath(filename), "w");
|
String path = filepath(filename);
|
||||||
|
auto file = LittleFS.open(path, "w");
|
||||||
if (!file) {
|
if (!file) {
|
||||||
return "Failed";
|
return "failed";
|
||||||
}
|
}
|
||||||
file.print(str);
|
file.print(str);
|
||||||
file.close();
|
file.close();
|
||||||
return "Sucсess";
|
return "sucсess";
|
||||||
}
|
}
|
||||||
|
|
||||||
String readFile(const String filename, size_t max_size) {
|
const String readFile(const String& filename, size_t max_size) {
|
||||||
auto file = LittleFS.open(filepath(filename), "r");
|
String path = filepath(filename);
|
||||||
|
auto file = LittleFS.open(path, "r");
|
||||||
if (!file) {
|
if (!file) {
|
||||||
return "Failed";
|
return "failed";
|
||||||
}
|
}
|
||||||
size_t size = file.size();
|
size_t size = file.size();
|
||||||
if (size > max_size) {
|
if (size > max_size) {
|
||||||
file.close();
|
file.close();
|
||||||
return "Large";
|
return "large";
|
||||||
}
|
}
|
||||||
String temp = file.readString();
|
String temp = file.readString();
|
||||||
file.close();
|
file.close();
|
||||||
return temp;
|
return temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
String getFileSize(const String filename) {
|
const String getFileSize(const String filename) {
|
||||||
auto file = LittleFS.open(filepath(filename), "r");
|
auto file = LittleFS.open(filepath(filename), "r");
|
||||||
if (!file) {
|
if (!file) {
|
||||||
return "Failed";
|
return "failed";
|
||||||
}
|
}
|
||||||
size_t size = file.size();
|
size_t size = file.size();
|
||||||
file.close();
|
file.close();
|
||||||
|
|||||||
@@ -1,54 +1,9 @@
|
|||||||
#include "Utils/PresetUtils.h"
|
#include "Utils/PresetUtils.h"
|
||||||
|
|
||||||
static const char* item_names[NUM_ITEMS] = {"relay", "pwm",
|
static const char* config_file_fmt PROGMEM = "/conf/%s%03d.txt";
|
||||||
"dht11", "dht22", "analog",
|
|
||||||
"bmp280", "bme280", "dallas",
|
|
||||||
"termostat", "ultrasonic",
|
|
||||||
"motion", "stepper",
|
|
||||||
"servo", "firmware"};
|
|
||||||
|
|
||||||
static const char* config_file_fmt = "/conf/%03d%s.txt";
|
const String getConfigFile(uint8_t preset, ConfigType_t type) {
|
||||||
|
|
||||||
const String getPresetFile(uint8_t preset, ConfigType_t type) {
|
|
||||||
char buf[64];
|
char buf[64];
|
||||||
sprintf(buf, config_file_fmt, preset, type == CT_MACRO ? "c" : "s");
|
sprintf_P(buf, config_file_fmt, (type == CT_CONFIG) ? "c" : "s", preset);
|
||||||
return String(buf);
|
return String(buf);
|
||||||
}
|
|
||||||
|
|
||||||
const String getItemName(Item_t item) {
|
|
||||||
return String(item_names[item]);
|
|
||||||
}
|
|
||||||
|
|
||||||
const Item_t getPresetItem(uint8_t num) {
|
|
||||||
Item_t res = NUM_ITEMS;
|
|
||||||
if (num >= 1 && num <= 7) {
|
|
||||||
res = RELAY;
|
|
||||||
} else if (num == 8) {
|
|
||||||
res = PWM;
|
|
||||||
} else if (num == 9) {
|
|
||||||
res = DHT11;
|
|
||||||
} else if (num == 10) {
|
|
||||||
res = DHT22;
|
|
||||||
} else if (num == 11) {
|
|
||||||
res = ANALOG;
|
|
||||||
} else if (num == 12) {
|
|
||||||
res = BMP280;
|
|
||||||
} else if (num == 13) {
|
|
||||||
res = BME280;
|
|
||||||
} else if (num == 14) {
|
|
||||||
res = DALLAS;
|
|
||||||
} else if (num == 15) {
|
|
||||||
res = TERMOSTAT;
|
|
||||||
} else if (num == 16) {
|
|
||||||
res = ULTRASONIC;
|
|
||||||
} else if (num >= 17 || num <= 18) {
|
|
||||||
res = MOTION;
|
|
||||||
} else if (num == 19) {
|
|
||||||
res = STEPPER;
|
|
||||||
} else if (num == 20) {
|
|
||||||
res = SERVO;
|
|
||||||
} else if (num == 21) {
|
|
||||||
res = FIRMWARE;
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
@@ -28,7 +28,7 @@ time_t getSystemTime() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool hasTimeSynced() {
|
bool hasTimeSynced() {
|
||||||
time_t now = time(nullptr);
|
unsigned long now = time(nullptr);
|
||||||
return now > millis();
|
return now > millis();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
30
src/Utils/i2c_bus.cpp
Normal file
30
src/Utils/i2c_bus.cpp
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
#include "Utils/i2c_bus.h"
|
||||||
|
|
||||||
|
#include "Global.h"
|
||||||
|
|
||||||
|
void do_i2c_scanning() {
|
||||||
|
String tmp = i2c_scan();
|
||||||
|
if (tmp == "error") {
|
||||||
|
tmp = i2c_scan();
|
||||||
|
}
|
||||||
|
jsonWriteStr(configLiveJson, "i2c", tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
const String i2c_scan() {
|
||||||
|
String out;
|
||||||
|
byte count = 0;
|
||||||
|
Wire.begin();
|
||||||
|
for (byte i = 8; i < 120; i++) {
|
||||||
|
Wire.beginTransmission(i);
|
||||||
|
if (Wire.endTransmission() == 0) {
|
||||||
|
count++;
|
||||||
|
out += String(count) + ". 0x" + String(i, HEX) + "; ";
|
||||||
|
delay(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (count == 0) {
|
||||||
|
return "error";
|
||||||
|
} else {
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
}
|
||||||
31
src/Web.cpp
31
src/Web.cpp
@@ -11,7 +11,7 @@ static const uint8_t MAX_PRESET = 21;
|
|||||||
bool parseRequestForPreset(AsyncWebServerRequest* request, uint8_t& preset) {
|
bool parseRequestForPreset(AsyncWebServerRequest* request, uint8_t& preset) {
|
||||||
if (request->hasArg("preset")) {
|
if (request->hasArg("preset")) {
|
||||||
preset = request->getParam("preset")->value().toInt();
|
preset = request->getParam("preset")->value().toInt();
|
||||||
return (preset >= MIN_PRESET && preset <= MAX_PRESET) || preset == 100;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -22,15 +22,13 @@ void web_init() {
|
|||||||
server.on("/set", HTTP_GET, [](AsyncWebServerRequest* request) {
|
server.on("/set", HTTP_GET, [](AsyncWebServerRequest* request) {
|
||||||
uint8_t preset;
|
uint8_t preset;
|
||||||
if (parseRequestForPreset(request, preset)) {
|
if (parseRequestForPreset(request, preset)) {
|
||||||
pm.info("activate # " + String(preset, DEC) + "(" + getItemName(getPresetItem(preset)) + ")");
|
pm.info("activate #" + String(preset, DEC));
|
||||||
String srcMacro = preset == 21 ? "configs/100с.txt" : getPresetFile(preset, CT_MACRO);
|
String configFile = DEVICE_CONFIG_FILE;
|
||||||
String srcScenario = preset == 21 ? "configs/100s.txt" : getPresetFile(preset, CT_SCENARIO);
|
String scenarioFile = DEVICE_SCENARIO_FILE;
|
||||||
copyFile(srcMacro, "100с.txt");
|
copyFile(getConfigFile(preset, CT_CONFIG), configFile);
|
||||||
copyFile(srcScenario, "100s.txt");
|
copyFile(getConfigFile(preset, CT_SCENARIO), scenarioFile);
|
||||||
|
|
||||||
Device_init();
|
Device_init();
|
||||||
Scenario_init();
|
loadScenario();
|
||||||
|
|
||||||
request->redirect("/?set.device");
|
request->redirect("/?set.device");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45,18 +43,18 @@ void web_init() {
|
|||||||
if (value == "0") {
|
if (value == "0") {
|
||||||
jsonWriteStr(configSetupJson, "scen", value);
|
jsonWriteStr(configSetupJson, "scen", value);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
Scenario_init();
|
loadScenario();
|
||||||
}
|
}
|
||||||
if (value == "1") {
|
if (value == "1") {
|
||||||
jsonWriteStr(configSetupJson, "scen", value);
|
jsonWriteStr(configSetupJson, "scen", value);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
Scenario_init();
|
loadScenario();
|
||||||
}
|
}
|
||||||
request->send(200, "text/text", "OK");
|
request->send(200, "text/text", "OK");
|
||||||
}
|
}
|
||||||
//--------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------
|
||||||
if (request->hasArg("sceninit")) {
|
if (request->hasArg("sceninit")) {
|
||||||
Scenario_init();
|
loadScenario();
|
||||||
request->send(200, "text/text", "OK");
|
request->send(200, "text/text", "OK");
|
||||||
}
|
}
|
||||||
//--------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------
|
||||||
@@ -72,12 +70,12 @@ void web_init() {
|
|||||||
if (value == "0") {
|
if (value == "0") {
|
||||||
jsonWriteStr(configSetupJson, "udponoff", value);
|
jsonWriteStr(configSetupJson, "udponoff", value);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
Scenario_init();
|
loadScenario();
|
||||||
}
|
}
|
||||||
if (value == "1") {
|
if (value == "1") {
|
||||||
jsonWriteStr(configSetupJson, "udponoff", value);
|
jsonWriteStr(configSetupJson, "udponoff", value);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
Scenario_init();
|
loadScenario();
|
||||||
}
|
}
|
||||||
request->send(200, "text/text", "OK");
|
request->send(200, "text/text", "OK");
|
||||||
}
|
}
|
||||||
@@ -222,6 +220,11 @@ void web_init() {
|
|||||||
i2c_scanning = true;
|
i2c_scanning = true;
|
||||||
request->redirect("/?set.utilities");
|
request->redirect("/?set.utilities");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (request->hasArg("fscheck")) {
|
||||||
|
fscheck_flag = true;
|
||||||
|
request->redirect("/?set.utilities");
|
||||||
|
}
|
||||||
});
|
});
|
||||||
//==============================upgrade settings=============================================
|
//==============================upgrade settings=============================================
|
||||||
server.on("/check", HTTP_GET, [](AsyncWebServerRequest* request) {
|
server.on("/check", HTTP_GET, [](AsyncWebServerRequest* request) {
|
||||||
|
|||||||
@@ -1,18 +1,24 @@
|
|||||||
#include "Global.h"
|
#include "Global.h"
|
||||||
|
|
||||||
|
static const char* MODULE = "Widget";
|
||||||
|
|
||||||
const String getWidgetFile(const String& name);
|
const String getWidgetFile(const String& name);
|
||||||
|
|
||||||
bool loadWidget(const String filename, String& buf) {
|
bool loadWidget(const String& filename, String& buf) {
|
||||||
buf = readFile(filename, 1024);
|
buf = readFile(filename, 2048);
|
||||||
return !(buf == "Failed" || buf == "Large");
|
bool res = !(buf == "Failed" || buf == "Large");
|
||||||
|
if (!res) {
|
||||||
|
pm.error("on load" + filename);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
void createWidget(String widget, String page, String pageNumber, String filename, String topic) {
|
void createWidget(String widget, String page, String pageNumber, String filename, String topic) {
|
||||||
String buf;
|
String buf = "{}";
|
||||||
if (!loadWidget(filename, buf)) {
|
if (!loadWidget(filename, buf)) {
|
||||||
|
pm.error("failed " + widget);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
widget.replace("#", " ");
|
widget.replace("#", " ");
|
||||||
page.replace("#", " ");
|
page.replace("#", " ");
|
||||||
|
|
||||||
@@ -29,7 +35,7 @@ void createWidget(String widget, String page, String pageNumber, String filename
|
|||||||
}
|
}
|
||||||
|
|
||||||
void createWidgetParam(String widget, String page, String pageNumber, String filename, String topic, String name1, String param1, String name2, String param2, String name3, String param3) {
|
void createWidgetParam(String widget, String page, String pageNumber, String filename, String topic, String name1, String param1, String name2, String param2, String name3, String param3) {
|
||||||
String buf;
|
String buf = "";
|
||||||
if (!loadWidget(filename, buf)) {
|
if (!loadWidget(filename, buf)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -54,7 +60,7 @@ void createWidgetParam(String widget, String page, String pageNumber, String fil
|
|||||||
}
|
}
|
||||||
|
|
||||||
void createChart(String widget, String page, String pageNumber, String filename, String topic, String maxCount) {
|
void createChart(String widget, String page, String pageNumber, String filename, String topic, String maxCount) {
|
||||||
String buf;
|
String buf = "";
|
||||||
if (!loadWidget(filename, buf)) {
|
if (!loadWidget(filename, buf)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -77,9 +83,11 @@ void createChart(String widget, String page, String pageNumber, String filename,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void createWidgetByType(String widget, String page, String pageNumber, String type, String topic) {
|
void createWidgetByType(String widget, String page, String pageNumber, String type, String topic) {
|
||||||
|
pm.info("create" + type);
|
||||||
createWidget(widget, page, pageNumber, getWidgetFile(type), topic);
|
createWidget(widget, page, pageNumber, getWidgetFile(type), topic);
|
||||||
}
|
}
|
||||||
|
|
||||||
const String getWidgetFile(const String& name) {
|
const String getWidgetFile(const String& name) {
|
||||||
return "widgets/" + name + ".json";
|
pm.info("get " + name);
|
||||||
|
return "/widgets/" + name + ".json";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,35 +0,0 @@
|
|||||||
#include "Global.h"
|
|
||||||
|
|
||||||
void do_i2c_scanning() {
|
|
||||||
if (i2c_scanning) {
|
|
||||||
i2c_scanning = false;
|
|
||||||
String tmp = i2c_scan();
|
|
||||||
if (tmp == "error") {
|
|
||||||
tmp = i2c_scan();
|
|
||||||
Serial.println(tmp);
|
|
||||||
jsonWriteStr(configLiveJson, "i2c", tmp);
|
|
||||||
} else {
|
|
||||||
Serial.println(tmp);
|
|
||||||
jsonWriteStr(configLiveJson, "i2c", tmp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
String i2c_scan() {
|
|
||||||
String out;
|
|
||||||
byte count = 0;
|
|
||||||
Wire.begin();
|
|
||||||
for (byte i = 8; i < 120; i++) {
|
|
||||||
Wire.beginTransmission(i);
|
|
||||||
if (Wire.endTransmission() == 0) {
|
|
||||||
count++;
|
|
||||||
out += String(count) + ". 0x" + String(i, HEX) + "; ";
|
|
||||||
delay(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (count == 0) {
|
|
||||||
return "error";
|
|
||||||
} else {
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
18
src/main.cpp
18
src/main.cpp
@@ -1,11 +1,15 @@
|
|||||||
#include "Global.h"
|
#include "Global.h"
|
||||||
|
|
||||||
#include "HttpServer.h"
|
#include "HttpServer.h"
|
||||||
|
#include "Utils/i2c_bus.h"
|
||||||
|
|
||||||
void not_async_actions();
|
void not_async_actions();
|
||||||
|
|
||||||
static const char* MODULE = "Main";
|
static const char* MODULE = "Main";
|
||||||
|
|
||||||
|
void do_fscheck(String& results) {
|
||||||
|
}
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
WiFi.setAutoConnect(false);
|
WiFi.setAutoConnect(false);
|
||||||
WiFi.persistent(false);
|
WiFi.persistent(false);
|
||||||
@@ -73,7 +77,7 @@ void setup() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void saveConfig() {
|
void saveConfig() {
|
||||||
writeFile("config.json", configSetupJson);
|
writeFile(String("config.json"), configSetupJson);
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
@@ -114,7 +118,17 @@ void not_async_actions() {
|
|||||||
do_mqtt_send_settings_to_udp();
|
do_mqtt_send_settings_to_udp();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
do_i2c_scanning();
|
if (i2c_scanning) {
|
||||||
|
do_i2c_scanning();
|
||||||
|
i2c_scanning = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fscheck_flag) {
|
||||||
|
String buf;
|
||||||
|
do_fscheck(buf);
|
||||||
|
jsonWriteStr(configLiveJson, "fscheck", buf);
|
||||||
|
fscheck_flag = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String getURL(const String& urls) {
|
String getURL(const String& urls) {
|
||||||
|
|||||||
Reference in New Issue
Block a user