Merge pull request #24 from ytrikoz/platformio

some updates
This commit is contained in:
Yuri Trikoz
2020-06-22 14:06:42 +03:00
committed by GitHub
20 changed files with 429 additions and 359 deletions

View File

@@ -20,3 +20,26 @@ enum LedStatus_t {
LED_SLOW, LED_SLOW,
LED_FAST LED_FAST
}; };
enum ConfigType_t {
CT_MACRO,
CT_SCENARIO
};
enum Item_t {
RELAY,
PWM,
DHT11,
DHT22,
ANALOG,
BMP280,
BME280,
DALLAS,
TERMOSTAT,
ULTRASONIC,
MOTION,
STEPPER,
SERVO,
FIRMWARE,
NUM_ITEMS
};

View File

@@ -53,7 +53,7 @@ extern TickerScheduler ts;
extern WiFiClient espClient; extern WiFiClient espClient;
extern PubSubClient client_mqtt; extern PubSubClient mqtt;
extern StringCommand sCmd; extern StringCommand sCmd;
@@ -125,7 +125,7 @@ extern String last_version;
extern boolean upgrade_url; extern boolean upgrade_url;
extern boolean upgrade; extern boolean upgrade;
extern boolean mqtt_connection; 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;
@@ -199,14 +199,17 @@ extern void servo_();
extern void setLedStatus(LedStatus_t); extern void setLedStatus(LedStatus_t);
// Mqtt // Mqtt
extern void MQTT_init(); extern void initMQTT();
extern boolean MQTT_Connecting(); extern void loopMQTT();
extern boolean sendMQTT(String end_of_topik, String data); extern boolean connectMQTT();
extern boolean sendCHART(String topik, String data);
extern void sendSTATUS(String topik, String state); extern boolean publishData(const String& topic, const String& data);
extern void sendCONTROL(String id, String topik, String state); extern boolean publishChart(const String& topic, const String& data);
extern boolean publishControl(String id, String topic, String state);
extern boolean sendSTATUS(String topic, String state);
extern void do_mqtt_connection(); extern void do_mqtt_connection();
extern void handleMQTT();
//Scenario //Scenario
extern void eventGen(String event_name, String number); extern void eventGen(String event_name, String number);

View File

@@ -52,3 +52,5 @@ String readFile(const String filename, size_t max_size);
* Размер файла * Размер файла
*/ */
String getFileSize(const String filename); String getFileSize(const String filename);
bool copyFile(const String src, const String dst, bool overwrite = true);

View File

@@ -2,9 +2,11 @@
#include "Global.h" #include "Global.h"
boolean scanWiFi(String ssid); boolean isNetworkActive();
void startSTAMode(); void startSTAMode();
bool startAPMode(); bool startAPMode();
boolean scanWiFi(String ssid);

View File

@@ -526,7 +526,7 @@ void mqttOrderSend() {
//Serial.print(all_line); //Serial.print(all_line);
//Serial.print("->"); //Serial.print("->");
//Serial.println(order); //Serial.println(order);
client_mqtt.publish(all_line.c_str(), order.c_str(), false); mqtt.publish(all_line.c_str(), order.c_str(), false);
} }
void httpOrderSend() { void httpOrderSend() {

View File

@@ -1,20 +1,15 @@
#include "Global.h" #include "Global.h"
/*
* Objects.cpp(с данными)
*/
#ifdef WS_enable #ifdef WS_enable
AsyncWebSocket ws; AsyncWebSocket ws;
//AsyncEventSource events; //AsyncEventSource events;
#endif #endif
TickerScheduler ts(TEST + 1); TickerScheduler ts(TEST + 1);
WiFiClient espClient; WiFiClient espClient;
PubSubClient client_mqtt(espClient); PubSubClient mqtt(espClient);
StringCommand sCmd; StringCommand sCmd;
@@ -74,7 +69,7 @@ String last_version = "";
// Async actions // Async actions
boolean upgrade_url = false; boolean upgrade_url = false;
boolean upgrade = false; boolean upgrade = false;
boolean mqtt_connection = false; 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;

View File

@@ -134,7 +134,7 @@ void sendLogData(String file, String topic) {
log_date = ""; log_date = "";
json_array = "{\"status\":[" + json_array + "]}"; json_array = "{\"status\":[" + json_array + "]}";
Serial.println(json_array); Serial.println(json_array);
sendCHART(topic, json_array); publishChart(topic, json_array);
json_array = ""; json_array = "";
printMemoryStatus("[I] send log date"); printMemoryStatus("[I] send log date");
} }

View File

@@ -3,34 +3,40 @@
// //
#include <LittleFS.h> #include <LittleFS.h>
static const char* MODULE = "Mqtt";
// Errors // Errors
int wifi_lost_error = 0; int wifi_lost_error = 0;
int mqtt_lost_error = 0; int mqtt_lost_error = 0;
void callback(char* topic, uint8_t* payload, size_t length); // Session params
String stateMQTT(); String mqttPrefix;
void handleSubscribedUpdates(char* topic, uint8_t* payload, size_t length);
const String getMqttStateStr();
void sendAllData(); void sendAllData();
void sendAllWigets(); void sendAllWigets();
void sendSTATUS(String topik, String state); boolean sendSTATUS(String topic, String state);
void outcoming_date(); void outcoming_date();
//===============================================ИНИЦИАЛИЗАЦИЯ================================================ void initMQTT() {
void MQTT_init() { mqtt.setCallback(handleSubscribedUpdates);
ts.add( ts.add(
WIFI_MQTT_CONNECTION_CHECK, MQTT_RECONNECT_INTERVAL, [&](void*) { WIFI_MQTT_CONNECTION_CHECK, MQTT_RECONNECT_INTERVAL,
if (WiFi.status() == WL_CONNECTED) { [&](void*) {
Serial.println("[VV] WiFi-ok"); if (isNetworkActive()) {
if (client_mqtt.connected()) { if (mqtt.connected()) {
Serial.println("[VV] MQTT-ok"); pm.info("OK");
setLedStatus(LED_OFF); setLedStatus(LED_OFF);
} else { } else {
MQTT_Connecting(); connectMQTT();
if (!just_load) mqtt_lost_error++; if (!just_load) mqtt_lost_error++;
} }
} else { } else {
Serial.println("[E] Lost WiFi connection"); pm.error("WiFi connection lost");
wifi_lost_error++;
ts.remove(WIFI_MQTT_CONNECTION_CHECK); ts.remove(WIFI_MQTT_CONNECTION_CHECK);
wifi_lost_error++;
startAPMode(); startAPMode();
} }
}, },
@@ -38,150 +44,161 @@ void MQTT_init() {
} }
void do_mqtt_connection() { void do_mqtt_connection() {
if (mqtt_connection) { if (mqttParamsChanged) {
mqtt_connection = false; mqtt.disconnect();
client_mqtt.disconnect(); connectMQTT();
MQTT_Connecting(); mqttParamsChanged = false;
} }
} }
//================================================ОБНОВЛЕНИЕ==================================================== void loopMQTT() {
void handleMQTT() { if (!isNetworkActive() || !mqtt.connected()) {
if (WiFi.status() == WL_CONNECTED) { return;
if (client_mqtt.connected()) {
client_mqtt.loop();
} }
mqtt.loop();
} }
void subscribe() {
pm.info("Subscribe");
// Для приема получения HELLOW и подтверждения связи
// Подписываемся на топики control
// Подписываемся на топики order
mqtt.subscribe(jsonReadStr(configSetupJson, "mqttPrefix").c_str());
mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId + "/+/control").c_str());
mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId + "/order").c_str());
mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId + "/update").c_str());
mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId + "/devc").c_str());
mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId + "/devs").c_str());
} }
boolean MQTT_Connecting() {
bool res = false; boolean connectMQTT() {
String mqtt_server = jsonReadStr(configSetupJson, "mqttServer"); if (!isNetworkActive()) {
if ((mqtt_server != "")) { return false;
Serial.println("[E] Lost MQTT connection, start reconnecting"); }
String addr = jsonReadStr(configSetupJson, "mqttServer");
int port = jsonReadInt(configSetupJson, "mqttPort");
String user = jsonReadStr(configSetupJson, "mqttUser");
String pass = jsonReadStr(configSetupJson, "mqttPass");
mqttPrefix = jsonReadStr(configSetupJson, "mqttPrefix");
if (!addr) {
pm.error("no broker address");
return false;
}
pm.info("broker " + addr + ":" + String(port, DEC));
setLedStatus(LED_FAST); setLedStatus(LED_FAST);
client_mqtt.setServer(mqtt_server.c_str(), jsonReadInt(configSetupJson, "mqttPort")); mqtt.setServer(addr.c_str(), port);
if (WiFi.status() == WL_CONNECTED) { bool res = false;
if (!client_mqtt.connected()) { if (!mqtt.connected()) {
Serial.println("[V] Connecting to MQTT server commenced"); if (mqtt.connect(chipId.c_str(), user.c_str(), pass.c_str())) {
if (client_mqtt.connect(chipId.c_str(), jsonReadStr(configSetupJson, "mqttUser").c_str(), jsonReadStr(configSetupJson, "mqttPass").c_str())) { pm.info("connected");
Serial.println("[VV] MQTT connected");
setLedStatus(LED_OFF); setLedStatus(LED_OFF);
client_mqtt.setCallback(callback); subscribe();
client_mqtt.subscribe(jsonReadStr(configSetupJson, "mqttPrefix").c_str()); // Для приема получения HELLOW и подтверждения связи
client_mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId + "/+/control").c_str()); // Подписываемся на топики control
client_mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId + "/order").c_str()); // Подписываемся на топики order
client_mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId + "/update").c_str());
client_mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId + "/devc").c_str());
client_mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId + "/devs").c_str());
Serial.println("[V] Callback set, subscribe done");
res = true; res = true;
} else { } else {
Serial.println("[E] try again in " + String(MQTT_RECONNECT_INTERVAL / 1000) + " sec"); pm.error("could't connect, retry in " + String(MQTT_RECONNECT_INTERVAL / 1000) + "s");
setLedStatus(LED_FAST); setLedStatus(LED_FAST);
} }
} }
}
} else {
Serial.println("[E] No date for MQTT connection");
}
return res; return res;
} }
//=====================================================ВХОДЯЩИЕ ДАННЫЕ======================================================== void handleSubscribedUpdates(char* topic, uint8_t* payload, size_t length) {
void callback(char* topic, uint8_t* payload, size_t length) { String topicStr = String(topic);
Serial.print("[MQTT] "); pm.info(topicStr);
Serial.print(topic);
String topic_str = String(topic);
String str; String payloadStr;
payloadStr.reserve(length + 1);
for (size_t i = 0; i < length; i++) { for (size_t i = 0; i < length; i++) {
str += (char)payload[i]; payloadStr += (char)payload[i];
} }
Serial.println(" => " + str); pm.info(payloadStr);
if (str == "HELLO") outcoming_date(); if (payloadStr == "HELLO") {
//данные которые отправляем при подключении или отбновлении страницы
pm.info("Send web page updates");
sendAllWigets();
sendAllData();
#ifdef LOGGING_ENABLED
choose_log_date_and_send();
#endif
} else if (topicStr.indexOf("control")) {
// название топика - команда,
// значение - параметр
//IoTmanager/800324-1458415/button99/control 1
String topic = selectFromMarkerToMarker(topicStr, "/", 3);
topic = add_set(topic);
String number = selectToMarkerLast(topic, "Set");
topic.replace(number, "");
//превращает название топика в команду, а значение в параметр команды order_loop += topic;
if (topic_str.indexOf("control") > 0) { //IoTmanager/800324-1458415/button-sw2/control 1 //IoTmanager/800324-1458415/button99/control 1 order_loop += " ";
String topic = selectFromMarkerToMarker(topic_str, "/", 3); //button1 //button99 order_loop += number;
topic = add_set(topic); //buttonSet1 //buttonSet99 order_loop += " ";
String number = selectToMarkerLast(topic, "Set"); //1 //99 order_loop += payloadStr;
topic.replace(number, ""); //buttonSet //buttonSet order_loop += ",";
String final_line = topic + " " + number + " " + str; //buttonSet 1 1 //buttonSet 99 1 } else if (topicStr.indexOf("order")) {
order_loop += final_line + ","; payloadStr.replace("_", " ");
} order_loop += payloadStr;
order_loop += ",";
if (topic_str.indexOf("order") > 0) { } else if (topicStr.indexOf("update")) {
str.replace("_", " "); if (payloadStr == "1") {
//Serial.println(str);
order_loop += str + ",";
}
if (topic_str.indexOf("update") > 0) {
if (str == "1") {
upgrade = true; upgrade = true;
} }
} } else if (topicStr.indexOf("devc")) {
if (topic_str.indexOf("devc") > 0) { writeFile("firmware.c.txt", payloadStr);
writeFile("firmware.c.txt", str);
Device_init(); Device_init();
} } else if (topicStr.indexOf("devs")) {
if (topic_str.indexOf("devs") > 0) { writeFile("firmware.s.txt", payloadStr);
writeFile("firmware.s.txt", str);
Scenario_init(); Scenario_init();
} }
} }
//данные которые отправляем при подключении или отбновлении страницы boolean publish(const String& topic, const String& data) {
void outcoming_date() { if (mqtt.beginPublish(topic.c_str(), data.length(), false)) {
sendAllWigets(); mqtt.print(data);
sendAllData(); return mqtt.endPublish();
}
#ifdef LOGGING_ENABLED return false;
choose_log_date_and_send();
#endif
Serial.println("[V] Sending all date to iot manager completed");
} }
//======================================CONFIG================================================== boolean publishData(const String& topic, const String& data) {
boolean sendMQTT(String end_of_topik, String data) { String path = mqttPrefix + "/" + chipId + "/" + topic;
String topik = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId + "/" + end_of_topik; if (!publish(path, data)) {
boolean send_status = client_mqtt.beginPublish(topik.c_str(), data.length(), false); pm.error("on publish data");
client_mqtt.print(data); return false;
client_mqtt.endPublish(); }
return send_status; return true;
} }
boolean sendCHART(String topik, String data) { boolean publishChart(const String& topic, const String& data) {
topik = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId + "/" + topik + "/" + "status"; String path = mqttPrefix + "/" + chipId + "/" + topic + "/status";
boolean send_status = client_mqtt.beginPublish(topik.c_str(), data.length(), false); if (!publish(path, data)) {
client_mqtt.print(data); pm.error("on publish chart");
client_mqtt.endPublish(); return false;
return send_status; }
return true;
} }
boolean sendCHART_test(String topik, String data) { boolean publishControl(String id, String topic, String state) {
topik = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId + "/" + topik + "/" + "status"; String path = mqttPrefix + "/" + id + "/" + topic + "/control";
boolean send_status = client_mqtt.publish(topik.c_str(), data.c_str(), false); return mqtt.publish(path.c_str(), state.c_str(), false);
return send_status;
} }
//======================================STATUS================================================== boolean sendCHART_test(String topic, String data) {
void sendSTATUS(String topik, String state) { topic = mqttPrefix + "/" + chipId + "/" + topic + "/" + "status";
topik = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId + "/" + topik + "/" + "status"; return mqtt.publish(topic.c_str(), data.c_str(), false);
}
boolean sendSTATUS(String topic, String state) {
topic = mqttPrefix + "/" + chipId + "/" + topic + "/" + "status";
String json_ = "{}"; String json_ = "{}";
jsonWriteStr(json_, "status", state); jsonWriteStr(json_, "status", state);
client_mqtt.publish(topik.c_str(), json_.c_str(), false); return mqtt.publish(topic.c_str(), json_.c_str(), false);
}
//======================================CONTROL==================================================
void sendCONTROL(String id, String topik, String state) {
String all_line = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + id + "/" + topik + "/control";
client_mqtt.publish(all_line.c_str(), state.c_str(), false);
} }
//=====================================================ОТПРАВЛЯЕМ ВИДЖЕТЫ======================================================== //=====================================================ОТПРАВЛЯЕМ ВИДЖЕТЫ========================================================
#ifdef LAYOUT_IN_RAM #ifdef LAYOUT_IN_RAM
void sendAllWigets() { void sendAllWigets() {
if (all_widgets != "") { if (all_widgets != "") {
@@ -214,8 +231,8 @@ void sendAllWigets() {
} }
while (file.position() != file.size()) { while (file.position() != file.size()) {
String payload = file.readStringUntil('\n'); String payload = file.readStringUntil('\n');
Serial.println("[V] " + payload); pm.info("publish: " + payload);
sendMQTT("config", payload); publishData("config", payload);
} }
file.close(); file.close();
} }
@@ -244,41 +261,40 @@ void sendAllData() { //берет строку json и ключи превра
} }
} }
String stateMQTT() { const String getMqttStateStr() {
int state = client_mqtt.state(); switch (mqtt.state()) {
switch (state) {
case -4: case -4:
return "the server didn't respond within the keepalive time"; return F("no respond");
break; break;
case -3: case -3:
return "the network connection was broken"; return F("connection was broken");
break; break;
case -2: case -2:
return "the network connection failed"; return F("connection failed");
break; break;
case -1: case -1:
return "the client is disconnected cleanly"; return F("client disconnected ");
break; break;
case 0: case 0:
return "the client is connected"; return F("client connected");
break; break;
case 1: case 1:
return "the server doesn't support the requested version of MQTT"; return F("doesn't support the requested version");
break; break;
case 2: case 2:
return "the server rejected the client identifier"; return F("rejected the client identifier");
break; break;
case 3: case 3:
return "the server was unable to accept the connection"; return F("unable to accept the connection");
break; break;
case 4: case 4:
return "the username/password were rejected"; return F("wrong username/password");
break; break;
case 5: case 5:
return "the client was not authorized to connect"; return F("not authorized to connect");
break; break;
default: default:
return "unspecified"; return F("unspecified");
break; break;
} }
} }

View File

@@ -1,7 +1,6 @@
#include "Global.h" #include "Global.h"
void handleScenario() { void handleScenario() {
if (jsonReadStr(configSetupJson, "scen") == "1") { if (jsonReadStr(configSetupJson, "scen") == "1") {
if ((jsonReadStr(configOptionJson, "scenario_status") != "")) { if ((jsonReadStr(configOptionJson, "scenario_status") != "")) {
int i = 0; int i = 0;

View File

@@ -351,7 +351,7 @@ void dhtP_reading() {
jsonWriteStr(configLiveJson, "dhtPerception", final_line); jsonWriteStr(configLiveJson, "dhtPerception", final_line);
eventGen("dhtPerception", ""); eventGen("dhtPerception", "");
sendSTATUS("dhtPerception", final_line); sendSTATUS("dhtPerception", final_line);
if (client_mqtt.connected()) { if (mqtt.connected()) {
Serial.println("[I] sensor 'dhtPerception' data: " + final_line); Serial.println("[I] sensor 'dhtPerception' data: " + final_line);
} }
} }

View File

@@ -54,6 +54,32 @@ String addFile(const String filename, const String str) {
return "Sucсess"; return "Sucсess";
} }
bool copyFile(const String src, const String dst, bool overwrite) {
String source = filepath(src);
String destination = filepath(dst);
if (!LittleFS.exists(source)) {
pm.error("source not exist: " + source);
return false;
}
if (LittleFS.exists(destination)) {
if (!overwrite) {
pm.error("destination already exist: " + destination);
return false;
}
LittleFS.remove(destination);
}
auto srcFile = LittleFS.open(source, "r");
auto dstFile = LittleFS.open(destination, "w");
static uint8_t buf[512];
while (srcFile.read(buf, 512)) {
dstFile.write(buf, 512);
}
srcFile.close();
dstFile.close();
return true;
}
String writeFile(const String filename, const String str) { String writeFile(const String filename, const String str) {
auto file = LittleFS.open(filepath(filename), "w"); auto file = LittleFS.open(filepath(filename), "w");
if (!file) { if (!file) {

View File

@@ -35,16 +35,23 @@ String selectToMarkerPlus(String str, String found, int plus) {
return str.substring(0, p + plus); return str.substring(0, p + plus);
} }
String selectFromMarkerToMarker(String str, String found, int number) { String selectFromMarkerToMarker(String str, String tofind, int number) {
if (str.indexOf(found) == -1) return "not found"; // если строки поиск нет сразу выход if (str.indexOf(tofind) == -1) {
str += found; // добавим для корректного поиска return "not found";
}
str += tofind; // добавим для корректного поиска
uint8_t i = 0; // Индекс перебора uint8_t i = 0; // Индекс перебора
do { do {
if (i == number) return selectToMarker(str, found); // если индекс совпал с позицией законцим вернем резултат if (i == number) {
str = deleteBeforeDelimiter(str, found); // отбросим проверенный блок до разделителя // если индекс совпал с позицией
i++; // увеличим индекс return selectToMarker(str, tofind);
} while (str.length() != 0); // повторим пока строка не пустая }
return "not found"; // Достигли пустой строки и ничего не нашли // отбросим проверенный блок до разделителя
str = deleteBeforeDelimiter(str, tofind);
i++;
} while (str.length() != 0);
return "not found";
} }
uint8_t hexStringToUint8(String hex) { uint8_t hexStringToUint8(String hex) {

View File

@@ -44,7 +44,7 @@ void startSTAMode() {
} while (keepConnecting && tries--); } while (keepConnecting && tries--);
if (WiFi.status() == WL_CONNECTED) { if (WiFi.status() == WL_CONNECTED) {
MQTT_init(); initMQTT();
setLedStatus(LED_OFF); setLedStatus(LED_OFF);
} else { } else {
startAPMode(); startAPMode();
@@ -106,3 +106,7 @@ boolean scanWiFi(String ssid) {
} }
return res; return res;
} }
boolean isNetworkActive() {
return WiFi.status() == WL_CONNECTED;
}

View File

@@ -1,103 +1,93 @@
#include "Global.h" #include "Global.h"
String stateMQTT(); static const char* MODULE = "Web";
static const uint8_t MIN_PRESET = 1;
static const uint8_t MAX_PRESET = 21;
String getMqttStateStr();
const Item_t getPresetItem(uint8_t preset);
bool parseRequestForPreset(AsyncWebServerRequest* request, uint8_t& preset) {
if (request->hasArg("preset")) {
preset = request->getParam("preset")->value().toInt();
return preset >= MIN_PRESET && preset <= MAX_PRESET;
}
return false;
}
static const char* item_names[NUM_ITEMS] = {"relay", "pwm",
"dht11", "dht22", "analog",
"bmp280", "bme280", "dallas",
"termostat", "ultrasonic",
"motion", "stepper",
"servo", "firmware"};
const char* getItemName(Item_t item) {
return item_names[item];
}
static const char* config_file_fmt = "configs/%d-%s.%s.txt";
const String getPresetFile(uint8_t preset, ConfigType_t type) {
Item_t item = getPresetItem(preset);
char buf[64];
sprintf(buf, config_file_fmt, preset, getItemName(item), type == CT_MACRO ? "c" : "s");
return String(buf);
}
const Item_t getPresetItem(uint8_t preset) {
Item_t res = NUM_ITEMS;
if (preset >= 1 && preset <= 7) {
res = RELAY;
} else if (preset == 8) {
res = PWM;
} else if (preset == 9) {
res = DHT11;
} else if (preset == 10) {
res = DHT22;
} else if (preset == 11) {
res = ANALOG;
} else if (preset == 12) {
res = BMP280;
} else if (preset == 13) {
res = BME280;
} else if (preset == 14) {
res = DALLAS;
} else if (preset == 15) {
res = TERMOSTAT;
} else if (preset == 16) {
res = ULTRASONIC;
} else if (preset >= 17 || preset <= 18) {
res = MOTION;
} else if (preset == 19) {
res = STEPPER;
} else if (preset == 20) {
res = SERVO;
} else if (preset == 21) {
res = FIRMWARE;
}
return res;
}
void web_init() { void web_init() {
server.on("/set", HTTP_GET, [](AsyncWebServerRequest* request) { server.on("/set", HTTP_GET, [](AsyncWebServerRequest* request) {
String value; uint8_t preset;
//============================device settings===================================== if (parseRequestForPreset(request, preset)) {
if (request->hasArg("preset")) { String srcMacro = preset == 21 ? "configs/firmware.c.txt" : getPresetFile(preset, CT_MACRO);
//-------------------------------------------------------------------------------- String srcScenario = preset == 21 ? "configs/firmware.s.txt" : getPresetFile(preset, CT_SCENARIO);
String value; pm.info("activate " + srcMacro);
value = request->getParam("preset")->value(); pm.info("activate " + srcScenario);
if (value == "1") { copyFile(srcMacro, "firmware.c.txt");
writeFile("firmware.c.txt", readFile("configs/1-relay.c.txt", 2048)); copyFile(srcScenario, "firmware.s.txt");
writeFile("firmware.s.txt", readFile("configs/1-relay.s.txt", 2048));
}
if (value == "2") {
writeFile("firmware.c.txt", readFile("configs/2-relay.c.txt", 2048));
writeFile("firmware.s.txt", readFile("configs/2-relay.s.txt", 2048));
}
if (value == "3") {
writeFile("firmware.c.txt", readFile("configs/3-relay.c.txt", 2048));
writeFile("firmware.s.txt", readFile("configs/3-relay.s.txt", 2048));
}
if (value == "4") {
writeFile("firmware.c.txt", readFile("configs/4-relay.c.txt", 2048));
writeFile("firmware.s.txt", readFile("configs/4-relay.s.txt", 2048));
}
if (value == "5") {
writeFile("firmware.c.txt", readFile("configs/5-relay.c.txt", 2048));
writeFile("firmware.s.txt", readFile("configs/5-relay.s.txt", 2048));
}
if (value == "6") {
writeFile("firmware.c.txt", readFile("configs/6-relay.c.txt", 2048));
writeFile("firmware.s.txt", readFile("configs/6-relay.s.txt", 2048));
}
if (value == "7") {
writeFile("firmware.c.txt", readFile("configs/7-relay.c.txt", 2048));
writeFile("firmware.s.txt", readFile("configs/7-relay.s.txt", 2048));
}
if (value == "8") {
writeFile("firmware.c.txt", readFile("configs/8-pwm.c.txt", 2048));
writeFile("firmware.s.txt", readFile("configs/8-pwm.s.txt", 2048));
}
if (value == "9") {
writeFile("firmware.c.txt", readFile("configs/9-dht11.c.txt", 2048));
writeFile("firmware.s.txt", readFile("configs/9-dht11.s.txt", 2048));
}
if (value == "10") {
writeFile("firmware.c.txt", readFile("configs/10-dht22.c.txt", 2048));
writeFile("firmware.s.txt", readFile("configs/10-dht22.s.txt", 2048));
}
if (value == "11") {
writeFile("firmware.c.txt", readFile("configs/11-analog.c.txt", 2048));
writeFile("firmware.s.txt", readFile("configs/11-analog.s.txt", 2048));
}
if (value == "12") {
writeFile("firmware.c.txt", readFile("configs/12-bmp280.c.txt", 2048));
writeFile("firmware.s.txt", readFile("configs/12-bmp280.s.txt", 2048));
}
if (value == "13") {
writeFile("firmware.c.txt", readFile("configs/13-bme280.c.txt", 2048));
writeFile("firmware.s.txt", readFile("configs/13-bme280.s.txt", 2048));
}
if (value == "14") {
writeFile("firmware.c.txt", readFile("configs/14-dallas.c.txt", 2048));
writeFile("firmware.s.txt", readFile("configs/14-dallas.s.txt", 2048));
}
if (value == "15") {
writeFile("firmware.c.txt", readFile("configs/15-termostat.c.txt", 2048));
writeFile("firmware.s.txt", readFile("configs/15-termostat.s.txt", 2048));
}
if (value == "16") {
writeFile("firmware.c.txt", readFile("configs/16-ultrasonic.c.txt", 2048));
writeFile("firmware.s.txt", readFile("configs/16-ultrasonic.s.txt", 2048));
}
if (value == "17") {
writeFile("firmware.c.txt", readFile("configs/17-moution.c.txt", 2048));
writeFile("firmware.s.txt", readFile("configs/17-moution.s.txt", 2048));
}
if (value == "18") {
writeFile("firmware.c.txt", readFile("configs/18-moution.c.txt", 2048));
writeFile("firmware.s.txt", readFile("configs/18-moution.s.txt", 2048));
}
if (value == "19") {
writeFile("firmware.c.txt", readFile("configs/19-stepper.c.txt", 2048));
writeFile("firmware.s.txt", readFile("configs/19-stepper.s.txt", 2048));
}
if (value == "20") {
writeFile("firmware.c.txt", readFile("configs/20-servo.c.txt", 2048));
writeFile("firmware.s.txt", readFile("configs/20-servo.s.txt", 2048));
}
if (value == "21") {
writeFile("firmware.c.txt", readFile("configs/firmware.c.txt", 2048));
writeFile("firmware.s.txt", readFile("configs/firmware.s.txt", 2048));
}
Device_init(); Device_init();
Scenario_init(); Scenario_init();
request->redirect("/?set.device"); request->redirect("/?set.device");
} }
//-------------------------------------------------------------------------------- //--------------------------------------------------------------------------------
if (request->hasArg("devinit")) { if (request->hasArg("devinit")) {
Device_init(); Device_init();
@@ -105,7 +95,7 @@ void web_init() {
} }
//-------------------------------------------------------------------------------- //--------------------------------------------------------------------------------
if (request->hasArg("scen")) { if (request->hasArg("scen")) {
value = request->getParam("scen")->value(); String value = request->getParam("scen")->value();
if (value == "0") { if (value == "0") {
jsonWriteStr(configSetupJson, "scen", value); jsonWriteStr(configSetupJson, "scen", value);
saveConfig(); saveConfig();
@@ -132,7 +122,7 @@ void web_init() {
#endif #endif
//==============================udp settings============================================= //==============================udp settings=============================================
if (request->hasArg("udponoff")) { if (request->hasArg("udponoff")) {
value = request->getParam("udponoff")->value(); String value = request->getParam("udponoff")->value();
if (value == "0") { if (value == "0") {
jsonWriteStr(configSetupJson, "udponoff", value); jsonWriteStr(configSetupJson, "udponoff", value);
saveConfig(); saveConfig();
@@ -214,7 +204,7 @@ void web_init() {
} }
//-------------------------------------------------------------------------------- //--------------------------------------------------------------------------------
if (request->hasArg("blink")) { if (request->hasArg("blink")) {
value = request->getParam("blink")->value(); String value = request->getParam("blink")->value();
if (value == "0") { if (value == "0") {
jsonWriteStr(configSetupJson, "blink", value); jsonWriteStr(configSetupJson, "blink", value);
saveConfig(); saveConfig();
@@ -229,32 +219,32 @@ void web_init() {
if (request->hasArg("mqttServer")) { if (request->hasArg("mqttServer")) {
jsonWriteStr(configSetupJson, "mqttServer", request->getParam("mqttServer")->value()); jsonWriteStr(configSetupJson, "mqttServer", request->getParam("mqttServer")->value());
saveConfig(); saveConfig();
mqtt_connection = true; mqttParamsChanged = true;
request->send(200, "text/text", "ok"); request->send(200, "text/text", "ok");
} }
if (request->hasArg("mqttPort")) { if (request->hasArg("mqttPort")) {
int port = (request->getParam("mqttPort")->value()).toInt(); int port = (request->getParam("mqttPort")->value()).toInt();
jsonWriteInt(configSetupJson, "mqttPort", port); jsonWriteInt(configSetupJson, "mqttPort", port);
saveConfig(); saveConfig();
mqtt_connection = true; mqttParamsChanged = true;
request->send(200, "text/text", "ok"); request->send(200, "text/text", "ok");
} }
if (request->hasArg("mqttPrefix")) { if (request->hasArg("mqttPrefix")) {
jsonWriteStr(configSetupJson, "mqttPrefix", request->getParam("mqttPrefix")->value()); jsonWriteStr(configSetupJson, "mqttPrefix", request->getParam("mqttPrefix")->value());
saveConfig(); saveConfig();
mqtt_connection = true; mqttParamsChanged = true;
request->send(200, "text/text", "ok"); request->send(200, "text/text", "ok");
} }
if (request->hasArg("mqttUser")) { if (request->hasArg("mqttUser")) {
jsonWriteStr(configSetupJson, "mqttUser", request->getParam("mqttUser")->value()); jsonWriteStr(configSetupJson, "mqttUser", request->getParam("mqttUser")->value());
saveConfig(); saveConfig();
mqtt_connection = true; mqttParamsChanged = true;
request->send(200, "text/text", "ok"); request->send(200, "text/text", "ok");
} }
if (request->hasArg("mqttPass")) { if (request->hasArg("mqttPass")) {
jsonWriteStr(configSetupJson, "mqttPass", request->getParam("mqttPass")->value()); jsonWriteStr(configSetupJson, "mqttPass", request->getParam("mqttPass")->value());
saveConfig(); saveConfig();
mqtt_connection = true; mqttParamsChanged = true;
request->send(200, "text/text", "ok"); request->send(200, "text/text", "ok");
} }
//-------------------------------------------------------------------------------- //--------------------------------------------------------------------------------
@@ -263,12 +253,16 @@ void web_init() {
request->send(200, "text/text", "ok"); request->send(200, "text/text", "ok");
} }
//-------------------------------------------------------------------------------- //--------------------------------------------------------------------------------
if (request->hasArg("mqttcheck")) { if (request->hasArg("mqttcheck")) {
String tmp = "{}"; String buf = "{}";
jsonWriteStr(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>" + stateMQTT()); String payload = "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>" + getMqttStateStr();
jsonWriteStr(tmp, "class", "pop-up"); jsonWriteStr(buf, "title", payload);
request->send(200, "text/text", tmp); jsonWriteStr(buf, "class", "pop-up");
request->send(200, "text/text", buf);
} }
//==============================push settings============================================= //==============================push settings=============================================
#ifdef PUSH_ENABLED #ifdef PUSH_ENABLED
if (request->hasArg("pushingboxid")) { if (request->hasArg("pushingboxid")) {

View File

@@ -36,7 +36,9 @@ void setup() {
pm.info("Uptime"); pm.info("Uptime");
uptime_init(); uptime_init();
pm.info("Telemery: " + !TELEMETRY_UPDATE_INTERVAL ? "Disabled" : "Enabled"); if (!TELEMETRY_UPDATE_INTERVAL) {
pm.info("Telemetry: Disabled");
}
telemetry_init(); telemetry_init();
pm.info("Updater"); pm.info("Updater");
@@ -83,7 +85,7 @@ void loop() {
not_async_actions(); not_async_actions();
handleMQTT(); loopMQTT();
handleCMD_loop(); handleCMD_loop();
handleButton(); handleButton();
handleScenario(); handleScenario();
@@ -133,9 +135,9 @@ void safeDataToFile(String data, String Folder) {
jsonWriteStr(configLiveJson, "test", fileName); jsonWriteStr(configLiveJson, "test", fileName);
} }
void sendCONFIG(String topik, String widgetConfig, String key, String date) { void sendConfig(String topic, String widgetConfig, String key, String date) {
yield(); yield();
topik = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId + "/" + topik + "/status"; topic = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId + "/" + topic + "/status";
String outer = "{\"widgetConfig\":"; String outer = "{\"widgetConfig\":";
String inner = "{\""; String inner = "{\"";
inner = inner + key; inner = inner + key;
@@ -144,8 +146,6 @@ void sendCONFIG(String topik, String widgetConfig, String key, String date) {
inner = inner + "\""; inner = inner + "\"";
inner = inner + "}}"; inner = inner + "}}";
String t = outer + inner; String t = outer + inner;
//Serial.println(t);
//client_mqtt.publish(MQTT::Publish(topik, t).set_qos(1));
yield(); yield();
} }
@@ -156,7 +156,6 @@ void setChipId() {
#ifdef ESP8266 #ifdef ESP8266
#ifdef LED_PIN #ifdef LED_PIN
void setLedStatus(LedStatus_t status) { void setLedStatus(LedStatus_t status) {
pinMode(LED_PIN, OUTPUT); pinMode(LED_PIN, OUTPUT);
switch (status) { switch (status) {

View File

@@ -114,7 +114,7 @@ void do_udp_data_parse() {
jsonWriteStr(configSetupJson, "mqttPass", jsonReadStr(received_udp_line, "mqttPass")); jsonWriteStr(configSetupJson, "mqttPass", jsonReadStr(received_udp_line, "mqttPass"));
saveConfig(); saveConfig();
Serial.println("[V] new mqtt setting received from udp and saved"); Serial.println("[V] new mqtt setting received from udp and saved");
mqtt_connection = true; mqttParamsChanged = true;
} }
if (received_udp_line.indexOf("iotm;") >= 0) { if (received_udp_line.indexOf("iotm;") >= 0) {
add_dev_in_list("dev.csv", selectFromMarkerToMarker(received_udp_line, ";", 1), selectFromMarkerToMarker(received_udp_line, ";", 2), received_ip); add_dev_in_list("dev.csv", selectFromMarkerToMarker(received_udp_line, ";", 1), selectFromMarkerToMarker(received_udp_line, ";", 2), received_ip);