mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-27 06:32:19 +03:00
Merge branch 'stable' of https://github.com/IoTManagerProject/IoTManager into stable
This commit is contained in:
@@ -1,18 +1,23 @@
|
||||
#include "Bus/BusScanner.h"
|
||||
#include "Bus/I2CScanner.h"
|
||||
#include "Utils/PrintMessage.h"
|
||||
|
||||
#include <Wire.h>
|
||||
#include "Utils/PrintMessage.h"
|
||||
|
||||
static const char* MODULE = "I2C";
|
||||
|
||||
boolean I2CScanner::syncScan() {
|
||||
I2CScanner::I2CScanner(String& out) : BusScanner(TAG_I2C, out, 2){};
|
||||
|
||||
void I2CScanner::init() {
|
||||
Wire.begin();
|
||||
pm.info("scanning i2c...");
|
||||
}
|
||||
|
||||
boolean I2CScanner::syncScan() {
|
||||
pm.info("scanning...");
|
||||
size_t cnt = 0;
|
||||
for (uint8_t i = 8; i < 120; i++) {
|
||||
Wire.beginTransmission(i);
|
||||
if (Wire.endTransmission() == 0) {
|
||||
pm.info("found device: " + i);
|
||||
pm.info("found: " + i);
|
||||
addResult(i, i < 119);
|
||||
cnt++;
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
#include "Bus/BusScanner.h"
|
||||
|
||||
#include "Utils/PresetUtils.h"
|
||||
#include "Utils/PrintMessage.h"
|
||||
|
||||
#include <OneWire.h>
|
||||
|
||||
const char* MODULE = "1Wire";
|
||||
|
||||
bool OneWireScanner::syncScan() {
|
||||
// Connect your 1-wire device to pin 3
|
||||
OneWire ds(3);
|
||||
uint8_t addr[8];
|
||||
|
||||
pm.info("scanning 1-Wire...");
|
||||
while (ds.search(addr)) {
|
||||
for (uint8_t i = 0; i < 8; i++) {
|
||||
pm.info("found device: " + i);
|
||||
addResult(addr[i], i < 7);
|
||||
}
|
||||
}
|
||||
if (OneWire::crc8(addr, 7) != addr[7]) {
|
||||
pm.error("CRC!");
|
||||
return false;
|
||||
}
|
||||
ds.reset_search();
|
||||
return true;
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
#include "CaptiveRequestHandler.h"
|
||||
|
||||
CaptiveRequestHandler::CaptiveRequestHandler(const char *host) {
|
||||
strlcpy(_local_name, host, sizeof(_local_name));
|
||||
strcat(_local_name, ".local");
|
||||
}
|
||||
|
||||
CaptiveRequestHandler::~CaptiveRequestHandler() {
|
||||
}
|
||||
|
||||
bool CaptiveRequestHandler::isLocalIp(String address) {
|
||||
IPAddress ip;
|
||||
return !ip.fromString(address) || (ip != _local_ip);
|
||||
}
|
||||
|
||||
bool CaptiveRequestHandler::isLocalName(String host_name) {
|
||||
return host_name.equalsIgnoreCase(_local_name);
|
||||
}
|
||||
|
||||
bool CaptiveRequestHandler::canHandle(AsyncWebServerRequest *request) {
|
||||
_local_ip = request->client()->localIP();
|
||||
|
||||
return !isLocalIp(request->getHeader("HOST")->value()) && !isLocalName(request->getHeader("HOST")->value());
|
||||
}
|
||||
|
||||
void CaptiveRequestHandler::CaptiveRequestHandler::handleRequest(AsyncWebServerRequest *request) {
|
||||
char buf[64];
|
||||
sprintf(buf, "http://%s%s", _local_name, request->url().c_str());
|
||||
auto response = request->beginResponse(302, "text/html");
|
||||
response->addHeader("Location", buf);
|
||||
response->addHeader("Connection", "close");
|
||||
request->send(response);
|
||||
};
|
||||
185
src/Cmd.cpp
185
src/Cmd.cpp
@@ -1,6 +1,7 @@
|
||||
#include "Global.h"
|
||||
|
||||
#include "Module/Terminal.h"
|
||||
#include "Servo/Servos.h"
|
||||
|
||||
static const char *MODULE = "Cmd";
|
||||
|
||||
@@ -9,9 +10,11 @@ Terminal *term = nullptr;
|
||||
boolean but[NUM_BUTTONS];
|
||||
Bounce *buttons = new Bounce[NUM_BUTTONS];
|
||||
|
||||
Servo myServo1;
|
||||
Servo myServo2;
|
||||
#ifdef ESP8266
|
||||
SoftwareSerial *mySerial = nullptr;
|
||||
#else
|
||||
HardwareSerial *mySerial = nullptr;
|
||||
#endif
|
||||
|
||||
void getData();
|
||||
|
||||
@@ -105,6 +108,7 @@ void cmd_init() {
|
||||
|
||||
//==========================================================================================================
|
||||
//==========================================Модуль кнопок===================================================
|
||||
|
||||
void button() {
|
||||
pm.info("create 'button'");
|
||||
String number = sCmd.next();
|
||||
@@ -174,25 +178,23 @@ void buttonSet() {
|
||||
}
|
||||
|
||||
eventGen("button", button_number);
|
||||
|
||||
jsonWriteStr(configLiveJson, "button" + button_number, button_state);
|
||||
|
||||
MqttClient::publishStatus("button" + button_number, button_state);
|
||||
}
|
||||
|
||||
void buttonChange() {
|
||||
String button_number = sCmd.next();
|
||||
String current_state = jsonReadStr(configLiveJson, "button" + button_number);
|
||||
|
||||
if (current_state == "1") {
|
||||
current_state = "0";
|
||||
} else if (current_state == "0") {
|
||||
current_state = "1";
|
||||
if (!isDigitStr(button_number)) {
|
||||
pm.error("wrong button " + button_number);
|
||||
return;
|
||||
}
|
||||
order_loop += "buttonSet " + button_number + " " + current_state + ",";
|
||||
jsonWriteStr(configLiveJson, "button" + button_number, current_state);
|
||||
String name = "button" + button_number;
|
||||
bool current_state = !jsonReadBool(configLiveJson, name);
|
||||
String stateStr = current_state ? "1" : "0";
|
||||
|
||||
MqttClient::publishStatus("button" + button_number, current_state);
|
||||
jsonWriteStr(configLiveJson, name, stateStr);
|
||||
addCommandLoop("buttonSet " + button_number + " " + stateStr);
|
||||
MqttClient::publishStatus(name, stateStr);
|
||||
}
|
||||
|
||||
void pinSet() {
|
||||
@@ -223,9 +225,8 @@ void pwm() {
|
||||
jsonWriteStr(configOptionJson, "pwm_pin" + pwm_number, pwm_pin);
|
||||
pinMode(pwm_pin_int, INPUT);
|
||||
analogWrite(pwm_pin_int, start_state.toInt());
|
||||
//analogWriteFreq(32000);
|
||||
jsonWriteStr(configLiveJson, "pwm" + pwm_number, start_state);
|
||||
|
||||
jsonWriteStr(configLiveJson, "pwm" + pwm_number, start_state);
|
||||
createWidget(widget_name, page_name, page_number, "range", "pwm" + pwm_number);
|
||||
}
|
||||
|
||||
@@ -246,13 +247,13 @@ void pwmSet() {
|
||||
//==================================================================================================================
|
||||
//==========================================Модуль физической кнопки================================================
|
||||
void switch_() {
|
||||
String switch_number = sCmd.next();
|
||||
String switch_pin = sCmd.next();
|
||||
String switch_delay = sCmd.next();
|
||||
int number = String(sCmd.next()).toInt();
|
||||
int pin = String(sCmd.next()).toInt();
|
||||
int delay = String(sCmd.next()).toInt();
|
||||
|
||||
buttons[switch_number.toInt()].attach(switch_pin.toInt());
|
||||
buttons[switch_number.toInt()].interval(switch_delay.toInt());
|
||||
but[switch_number.toInt()] = true;
|
||||
buttons[number].attach(pin);
|
||||
buttons[number].interval(delay);
|
||||
but[number] = true;
|
||||
}
|
||||
|
||||
void loopSerial() {
|
||||
@@ -294,6 +295,7 @@ void inputDigit() {
|
||||
page_name.replace("#", " ");
|
||||
String start_state = sCmd.next();
|
||||
String page_number = sCmd.next();
|
||||
|
||||
jsonWriteStr(configLiveJson, "digit" + number, start_state);
|
||||
createWidget(widget_name, page_name, page_number, "inputNum", "digit" + number);
|
||||
}
|
||||
@@ -301,6 +303,7 @@ void inputDigit() {
|
||||
void digitSet() {
|
||||
String number = sCmd.next();
|
||||
String value = sCmd.next();
|
||||
|
||||
jsonWriteStr(configLiveJson, "digit" + number, value);
|
||||
MqttClient::publishStatus("digit" + number, value);
|
||||
}
|
||||
@@ -316,6 +319,7 @@ void inputTime() {
|
||||
page_name.replace("#", " ");
|
||||
String start_state = sCmd.next();
|
||||
String page_number = sCmd.next();
|
||||
|
||||
jsonWriteStr(configLiveJson, "time" + number, start_state);
|
||||
createWidget(widget_name, page_name, page_number, "inputTime", "time" + number);
|
||||
}
|
||||
@@ -323,6 +327,7 @@ void inputTime() {
|
||||
void timeSet() {
|
||||
String number = sCmd.next();
|
||||
String value = sCmd.next();
|
||||
|
||||
jsonWriteStr(configLiveJson, "time" + number, value);
|
||||
MqttClient::publishStatus("time" + number, value);
|
||||
}
|
||||
@@ -356,9 +361,7 @@ void textSet() {
|
||||
if (text.indexOf("-time") >= 0) {
|
||||
text.replace("-time", "");
|
||||
text.replace("#", " ");
|
||||
String time = timeNow->getTime();
|
||||
time.replace(":", ".");
|
||||
text = text + " " + timeNow->getDateDigitalFormated() + " " + time;
|
||||
text = text + " " + timeNow->getDateTimeDotFormated();
|
||||
}
|
||||
|
||||
jsonWriteStr(configLiveJson, "text" + number, text);
|
||||
@@ -431,94 +434,59 @@ void stepperSet() {
|
||||
#ifdef SERVO_ENABLED
|
||||
//servo 1 13 50 Мой#сервопривод Сервоприводы 0 100 0 180 2
|
||||
void servo_() {
|
||||
String servo_number = sCmd.next();
|
||||
String servo_pin = sCmd.next();
|
||||
String start_state = sCmd.next();
|
||||
int start_state_int = start_state.toInt();
|
||||
String widget_name = sCmd.next();
|
||||
String page_name = sCmd.next();
|
||||
String number = sCmd.next();
|
||||
uint8_t pin = String(sCmd.next()).toInt();
|
||||
int value = String(sCmd.next()).toInt();
|
||||
|
||||
String min_value = sCmd.next();
|
||||
String max_value = sCmd.next();
|
||||
String widget = sCmd.next();
|
||||
String page = sCmd.next();
|
||||
|
||||
String min_deg = sCmd.next();
|
||||
String max_deg = sCmd.next();
|
||||
int min_value = String(sCmd.next()).toInt();
|
||||
int max_value = String(sCmd.next()).toInt();
|
||||
int min_deg = String(sCmd.next()).toInt();
|
||||
int max_deg = String(sCmd.next()).toInt();
|
||||
|
||||
String page_number = sCmd.next();
|
||||
String pageNumber = sCmd.next();
|
||||
|
||||
jsonWriteStr(configOptionJson, "servo_pin" + servo_number, servo_pin);
|
||||
start_state_int = map(start_state_int, min_value.toInt(), max_value.toInt(), min_deg.toInt(), max_deg.toInt());
|
||||
jsonWriteStr(configOptionJson, "servo_pin" + number, String(pin, DEC));
|
||||
|
||||
if (servo_number == "1") {
|
||||
#ifdef ESP8266
|
||||
myServo1.attach(servo_pin.toInt());
|
||||
myServo1.write(start_state_int);
|
||||
#endif
|
||||
value = map(value, min_value, max_value, min_deg, max_deg);
|
||||
|
||||
Servo *servo = myServo.create(number.toInt(), pin);
|
||||
servo->write(value);
|
||||
#ifdef ESP32
|
||||
myServo1.attach(servo_pin.toInt(), 500, 2400);
|
||||
myServo1.write(start_state_int);
|
||||
myServo1.attach(servo_pin.toInt(), 500, 2400);
|
||||
myServo1.write(start_state_int);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (servo_number == "2") {
|
||||
#ifdef ESP8266
|
||||
myServo2.attach(servo_pin.toInt());
|
||||
myServo2.write(start_state_int);
|
||||
#endif
|
||||
#ifdef ESP32
|
||||
myServo2.attach(servo_pin.toInt(), 500, 2400);
|
||||
myServo2.write(start_state_int);
|
||||
#endif
|
||||
}
|
||||
jsonWriteInt(configOptionJson, "s_min_val" + number, min_value);
|
||||
jsonWriteInt(configOptionJson, "s_max_val" + number, max_value);
|
||||
jsonWriteInt(configOptionJson, "s_min_deg" + number, min_deg);
|
||||
jsonWriteInt(configOptionJson, "s_max_deg" + number, max_deg);
|
||||
|
||||
jsonWriteStr(configOptionJson, "s_min_val" + servo_number, min_value);
|
||||
jsonWriteStr(configOptionJson, "s_max_val" + servo_number, max_value);
|
||||
jsonWriteStr(configOptionJson, "s_min_deg" + servo_number, min_deg);
|
||||
jsonWriteStr(configOptionJson, "s_max_deg" + servo_number, max_deg);
|
||||
jsonWriteInt(configLiveJson, "servo" + number, value);
|
||||
|
||||
jsonWriteStr(configLiveJson, "servo" + servo_number, start_state);
|
||||
|
||||
createWidgetParam(widget_name, page_name, page_number, "range", "servo" + servo_number, "min", min_value, "max", max_value, "k", "1");
|
||||
createWidgetParam(widget, page, pageNumber, "range", "servo" + number, "min", String(min_value), "max", String(max_value), "k", "1");
|
||||
}
|
||||
|
||||
void servoSet() {
|
||||
String servo_number = sCmd.next();
|
||||
String servo_state = sCmd.next();
|
||||
int servo_state_int = servo_state.toInt();
|
||||
String number = sCmd.next();
|
||||
int value = String(sCmd.next()).toInt();
|
||||
|
||||
//int pin = jsonReadInt(configOptionJson, "servo_pin" + servo_number);
|
||||
value = map(value,
|
||||
jsonReadInt(configOptionJson, "s_min_val" + number),
|
||||
jsonReadInt(configOptionJson, "s_max_val" + number),
|
||||
jsonReadInt(configOptionJson, "s_min_deg" + number),
|
||||
jsonReadInt(configOptionJson, "s_max_deg" + number));
|
||||
|
||||
servo_state_int = map(servo_state_int,
|
||||
jsonReadInt(configOptionJson, "s_min_val" + servo_number),
|
||||
jsonReadInt(configOptionJson, "s_max_val" + servo_number),
|
||||
jsonReadInt(configOptionJson, "s_min_deg" + servo_number),
|
||||
jsonReadInt(configOptionJson, "s_max_deg" + servo_number));
|
||||
|
||||
if (servo_number == "1") {
|
||||
#ifdef ESP8266
|
||||
myServo1.write(servo_state_int);
|
||||
#endif
|
||||
#ifdef ESP32
|
||||
myServo1.write(servo_state_int);
|
||||
#endif
|
||||
Servo *servo = myServo.get(number.toInt());
|
||||
if (servo) {
|
||||
servo->write(value);
|
||||
}
|
||||
|
||||
if (servo_number == "2") {
|
||||
#ifdef ESP8266
|
||||
myServo2.write(servo_state_int);
|
||||
#endif
|
||||
#ifdef ESP32
|
||||
myServo2.write(servo_state_int);
|
||||
#endif
|
||||
}
|
||||
|
||||
//Serial.println(servo_state_int);
|
||||
|
||||
eventGen("servo", servo_number);
|
||||
|
||||
jsonWriteStr(configLiveJson, "servo" + servo_number, servo_state);
|
||||
|
||||
MqttClient::publishStatus("servo" + servo_number, servo_state);
|
||||
eventGen("servo", number);
|
||||
jsonWriteInt(configLiveJson, "servo" + number, value);
|
||||
MqttClient::publishStatus("servo" + number, String(value, DEC));
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -532,8 +500,13 @@ void serialBegin() {
|
||||
delete mySerial;
|
||||
}
|
||||
|
||||
#ifdef ESP8266
|
||||
mySerial = new SoftwareSerial(rxPin.toInt(), txPin.toInt());
|
||||
mySerial->begin(s_speed.toInt());
|
||||
#else
|
||||
mySerial = new HardwareSerial(2);
|
||||
mySerial->begin(rxPin.toInt(), txPin.toInt());
|
||||
#endif
|
||||
|
||||
term = new Terminal(mySerial);
|
||||
term->setEOL(LF);
|
||||
@@ -542,8 +515,6 @@ void serialBegin() {
|
||||
term->enableEcho(false);
|
||||
term->setOnReadLine([](const char *str) {
|
||||
String line = String(str);
|
||||
pm.info("serial read: " + line);
|
||||
//line.replace("#", " ");
|
||||
addCommandLoop(line);
|
||||
});
|
||||
}
|
||||
@@ -583,7 +554,7 @@ void httpOrderSend() {
|
||||
}
|
||||
|
||||
void firmwareUpdate() {
|
||||
upgrade = true;
|
||||
updateFlag = true;
|
||||
}
|
||||
|
||||
void firmwareVersion() {
|
||||
@@ -592,7 +563,6 @@ void firmwareVersion() {
|
||||
String pageNumber = sCmd.next();
|
||||
|
||||
jsonWriteStr(configLiveJson, "firmver", FIRMWARE_VERSION);
|
||||
|
||||
createWidget(widget, page, pageNumber, "anydata", "firmver");
|
||||
}
|
||||
|
||||
@@ -605,20 +575,11 @@ void addCommandLoop(const String &cmdStr) {
|
||||
|
||||
void fileExecute(const String &filename) {
|
||||
String cmdStr = readFile(filename, 2048);
|
||||
cmdStr += "\r\n";
|
||||
cmdStr.replace("\r\n", "\n");
|
||||
cmdStr.replace("\r", "\n");
|
||||
|
||||
while (cmdStr.length() != 0) {
|
||||
String buf = selectToMarker(cmdStr, "\n");
|
||||
sCmd.readStr(buf);
|
||||
cmdStr = deleteBeforeDelimiter(cmdStr, "\n");
|
||||
}
|
||||
stringExecute(cmdStr);
|
||||
}
|
||||
|
||||
void stringExecute(String &cmdStr) {
|
||||
cmdStr = cmdStr + "\r\n";
|
||||
|
||||
cmdStr += "\r\n";
|
||||
cmdStr.replace("\r\n", "\n");
|
||||
cmdStr.replace("\r", "\n");
|
||||
|
||||
@@ -632,8 +593,8 @@ void stringExecute(String &cmdStr) {
|
||||
void loopCmd() {
|
||||
if (order_loop.length()) {
|
||||
String tmp = selectToMarker(order_loop, ","); //выделяем первую команду rel 5 1,
|
||||
sCmd.readStr(tmp); //выполняем
|
||||
pm.info("do: " + order_loop);
|
||||
pm.info("do: " + tmp);
|
||||
sCmd.readStr(tmp); //выполняем
|
||||
order_loop = deleteBeforeDelimiter(order_loop, ","); //осекаем
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,8 @@ StringCommand sCmd;
|
||||
|
||||
AsyncWebServer server(80);
|
||||
|
||||
OneWire *oneWire;
|
||||
|
||||
DallasTemperature sensors;
|
||||
|
||||
/*
|
||||
@@ -41,6 +43,9 @@ String order_loop = "";
|
||||
String analog_value_names_list;
|
||||
int enter_to_analog_counter;
|
||||
|
||||
String dallas_value_name;
|
||||
int enter_to_dallas_counter;
|
||||
|
||||
String levelPr_value_name;
|
||||
String ultrasonicCm_value_name;
|
||||
|
||||
@@ -67,8 +72,8 @@ int scenario_line_status[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
String lastVersion = "";
|
||||
|
||||
// Async actions
|
||||
boolean upgrade_url = false;
|
||||
boolean upgrade = false;
|
||||
boolean checkUpdatesFlag = false;
|
||||
boolean updateFlag = false;
|
||||
|
||||
boolean mqttParamsChanged = false;
|
||||
boolean udp_data_parse = false;
|
||||
|
||||
@@ -15,8 +15,8 @@ void init() {
|
||||
String login = jsonReadStr(configSetupJson, "weblogin");
|
||||
String pass = jsonReadStr(configSetupJson, "webpass");
|
||||
#ifdef ESP32
|
||||
server.addHandler(new SPIFFSEditor(LittleFS, login, pass);
|
||||
#elif defined(ESP8266)
|
||||
server.addHandler(new SPIFFSEditor(LittleFS, login, pass));
|
||||
#else
|
||||
server.addHandler(new SPIFFSEditor(login, pass));
|
||||
#endif
|
||||
|
||||
@@ -51,7 +51,7 @@ void init() {
|
||||
server.on("/config.option.json", HTTP_GET, [](AsyncWebServerRequest *request) {
|
||||
request->send(200, "application/json", configOptionJson);
|
||||
});
|
||||
|
||||
|
||||
// для хранения постоянных данных
|
||||
server.on("/config.setup.json", HTTP_GET, [](AsyncWebServerRequest *request) {
|
||||
request->send(200, "application/json", configSetupJson);
|
||||
@@ -59,13 +59,13 @@ void init() {
|
||||
|
||||
server.on("/cmd", HTTP_GET, [](AsyncWebServerRequest *request) {
|
||||
String cmdStr = request->getParam("command")->value();
|
||||
pm.info("command: " + cmdStr);
|
||||
pm.info("do: " + cmdStr);
|
||||
addCommandLoop(cmdStr);
|
||||
request->send(200, "text/text", "OK");
|
||||
request->send(200, "text/html", "OK");
|
||||
});
|
||||
|
||||
server.begin();
|
||||
|
||||
|
||||
initOta();
|
||||
initMDNS();
|
||||
initWS();
|
||||
@@ -190,7 +190,7 @@ void initWS() {
|
||||
ws.onEvent(onWsEvent);
|
||||
server.addHandler(&ws);
|
||||
events.onConnect([](AsyncEventSourceClient *client) {
|
||||
//!!!client->send("hello!", NULL, millis(), 1000);
|
||||
client->send("", NULL, millis(), 1000);
|
||||
});
|
||||
server.addHandler(&events);
|
||||
#endif
|
||||
|
||||
@@ -30,6 +30,9 @@ void Device_init() {
|
||||
analog_value_names_list = "";
|
||||
enter_to_analog_counter = 0;
|
||||
|
||||
dallas_value_name = "";
|
||||
enter_to_dallas_counter = 0;
|
||||
|
||||
levelPr_value_name = "";
|
||||
ultrasonicCm_value_name = "";
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ void Telnet::onEnd() {
|
||||
bool Telnet::onStart() {
|
||||
_server->begin();
|
||||
_server->setNoDelay(true);
|
||||
return _server->status() != CLOSED;
|
||||
return true;
|
||||
}
|
||||
|
||||
void Telnet::onStop() {
|
||||
|
||||
@@ -45,8 +45,8 @@ void Terminal::quit() {}
|
||||
void Terminal::loop() {
|
||||
if (_stream == nullptr || !_stream->available()) return;
|
||||
|
||||
sint8_t moveX = 0;
|
||||
sint8_t moveY = 0;
|
||||
byte moveX = 0;
|
||||
byte moveY = 0;
|
||||
|
||||
char c = _stream->read();
|
||||
|
||||
|
||||
@@ -147,7 +147,7 @@ void handleSubscribedUpdates(char* topic, uint8_t* payload, size_t length) {
|
||||
order_loop += ",";
|
||||
} else if (topicStr.indexOf("update")) {
|
||||
if (payloadStr == "1") {
|
||||
upgrade = true;
|
||||
updateFlag = true;
|
||||
}
|
||||
} else if (topicStr.indexOf("devc")) {
|
||||
writeFile(String(DEVICE_CONFIG_FILE), payloadStr);
|
||||
@@ -279,7 +279,7 @@ const String getStateStr() {
|
||||
return F("connection failed");
|
||||
break;
|
||||
case -1:
|
||||
return F("client disconnected ");
|
||||
return F("client disconnected");
|
||||
break;
|
||||
case 0:
|
||||
return F("client connected");
|
||||
|
||||
@@ -22,7 +22,6 @@ void loopScenario() {
|
||||
return;
|
||||
}
|
||||
i++;
|
||||
|
||||
if (scenario_line_status[i] == 1) {
|
||||
//выделяем первую строку самого сценария button1 = 1 (условие)
|
||||
String condition = selectToMarker(block, "\n");
|
||||
@@ -30,9 +29,8 @@ void loopScenario() {
|
||||
String order = jsonReadStr(configOptionJson, "scenario_status"); //читаем весь файл событий
|
||||
String param = selectToMarker(order, ","); //читаем первое событие из файла событий
|
||||
if (param_name == param) { //если поступившее событие равно событию заданному buttonSet1 в файле начинаем его обработку
|
||||
|
||||
String sign = selectFromMarkerToMarker(condition, " ", 1); //читаем знак (=)
|
||||
String value = selectFromMarkerToMarker(condition, " ", 2); //читаем значение (1)
|
||||
String sign = selectFromMarkerToMarker(condition, " ", 1); //читаем знак (=)
|
||||
String value = selectFromMarkerToMarker(condition, " ", 2); //читаем значение (1)
|
||||
if (value.indexOf("digit") != -1) {
|
||||
// value = add_set(value);
|
||||
value = jsonReadStr(configLiveJson, value);
|
||||
@@ -41,31 +39,29 @@ void loopScenario() {
|
||||
// value = add_set(value);
|
||||
value = jsonReadStr(configLiveJson, value);
|
||||
}
|
||||
boolean flag = false; //если одно из значений совпало то только тогда начинаем выполнять комнады
|
||||
// если условие выполнилось, тогда начинаем выполнять комнады
|
||||
boolean flag = false;
|
||||
String param = jsonReadStr(configLiveJson, param_name);
|
||||
if (sign == "=") {
|
||||
if (jsonReadStr(configLiveJson, param_name) == value) flag = true;
|
||||
}
|
||||
if (sign == "!=") {
|
||||
if (jsonReadStr(configLiveJson, param_name) != value) flag = true;
|
||||
}
|
||||
if (sign == "<") {
|
||||
if (jsonReadStr(configLiveJson, param_name).toInt() < value.toInt()) flag = true;
|
||||
}
|
||||
if (sign == ">") {
|
||||
if (jsonReadStr(configLiveJson, param_name).toInt() > value.toInt()) flag = true;
|
||||
}
|
||||
if (sign == ">=") {
|
||||
if (jsonReadStr(configLiveJson, param_name).toInt() >= value.toInt()) flag = true;
|
||||
}
|
||||
if (sign == "<=") {
|
||||
if (jsonReadStr(configLiveJson, param_name).toInt() <= value.toInt()) flag = true;
|
||||
flag = param == value;
|
||||
} else if (sign == "!=") {
|
||||
flag = param != value;
|
||||
} else if (sign == "<") {
|
||||
flag = param.toInt() < value.toInt();
|
||||
} else if (sign == ">") {
|
||||
flag = param.toInt() > value.toInt();
|
||||
} else if (sign == ">=") {
|
||||
flag = param.toInt() >= value.toInt();
|
||||
} else if (sign == "<=") {
|
||||
flag = param.toInt() <= value.toInt();
|
||||
}
|
||||
|
||||
if (flag) {
|
||||
block = deleteBeforeDelimiter(block, "\n"); //удаляем строку самого сценария оставляя только команды
|
||||
stringExecute(block); //выполняем все команды
|
||||
|
||||
pm.info(condition + "'");
|
||||
// удаляем строку самого сценария оставляя только команды
|
||||
block = deleteBeforeDelimiter(block, "\n");
|
||||
pm.info("do: " + block);
|
||||
// выполняем все команды
|
||||
stringExecute(block);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#include "Global.h"
|
||||
|
||||
OneWire *oneWire;
|
||||
GMedian<10, int> medianFilter;
|
||||
DHTesp dht;
|
||||
|
||||
@@ -232,32 +231,40 @@ void analog_reading2() {
|
||||
//=========================================================================================================================================
|
||||
//=========================================Модуль температурного сенсора ds18b20===========================================================
|
||||
#ifdef DALLAS_ENABLED
|
||||
//dallas temp1 2 1 Температура Датчики anydata 1
|
||||
//dallas temp2 2 2 Температура Датчики anydata 2
|
||||
void dallas() {
|
||||
String value_name = sCmd.next();
|
||||
String pin = sCmd.next();
|
||||
String address = sCmd.next();
|
||||
jsonWriteStr(configOptionJson, value_name + "_ds", address);
|
||||
String widget_name = sCmd.next();
|
||||
String page_name = sCmd.next();
|
||||
String type = sCmd.next();
|
||||
String page_number = sCmd.next();
|
||||
oneWire = new OneWire((uint8_t)pin.toInt());
|
||||
|
||||
oneWire = new OneWire((uint8_t) pin.toInt());
|
||||
sensors.setOneWire(oneWire);
|
||||
sensors.begin();
|
||||
sensors.setResolution(12);
|
||||
|
||||
createWidgetByType(widget_name, page_name, page_number, type, "dallas");
|
||||
dallas_value_name += value_name + ";";
|
||||
createWidgetByType(widget_name, page_name, page_number, type, value_name);
|
||||
sensors_reading_map[3] = 1;
|
||||
}
|
||||
|
||||
void dallas_reading() {
|
||||
float temp = 0;
|
||||
byte num = sensors.getDS18Count();
|
||||
String dallas_value_name_tmp_buf = dallas_value_name;
|
||||
sensors.requestTemperatures();
|
||||
temp = sensors.getTempCByIndex(0);
|
||||
jsonWriteStr(configLiveJson, "dallas", String(temp));
|
||||
eventGen("dallas", "");
|
||||
MqttClient::publishStatus("dallas", String(temp));
|
||||
Serial.println("[I] sensor 'dallas' send date " + String(temp));
|
||||
for (byte i = 0; i < num; i++) {
|
||||
temp = sensors.getTempCByIndex(i);
|
||||
String buf = selectToMarker(dallas_value_name_tmp_buf, ";");
|
||||
dallas_value_name_tmp_buf = deleteBeforeDelimiter(dallas_value_name_tmp_buf, ";");
|
||||
jsonWriteStr(configLiveJson, buf, String(temp));
|
||||
eventGen(buf, "");
|
||||
MqttClient::publishStatus(buf, String(temp));
|
||||
Serial.println("[I] sensor '" + buf + "' send date " + String(temp));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
//=========================================================================================================================================
|
||||
|
||||
40
src/Servo/Servs.cpp
Normal file
40
src/Servo/Servs.cpp
Normal file
@@ -0,0 +1,40 @@
|
||||
#include "Servo/Servos.h"
|
||||
|
||||
Servos myServo;
|
||||
|
||||
Servos::Servos(){};
|
||||
|
||||
Servo *Servos::create(uint8_t num, uint8_t pin) {
|
||||
// Ищем среди ранее созданных
|
||||
for (size_t i = 0; i < _items.size(); i++) {
|
||||
auto item = _items.at(i);
|
||||
if (item.num == num) {
|
||||
if (item.pin != pin) {
|
||||
item.obj->attach(pin);
|
||||
item.pin = pin;
|
||||
};
|
||||
return item.obj;
|
||||
}
|
||||
}
|
||||
// Добавляем новый
|
||||
Servo_t newItem{num, pin};
|
||||
newItem.obj = new Servo();
|
||||
newItem.obj->attach(pin);
|
||||
_items.push_back(newItem);
|
||||
return newItem.obj;
|
||||
}
|
||||
|
||||
Servo *Servos::get(uint8_t num) {
|
||||
// Ищем среди ранее созданных
|
||||
for (size_t i = 0; i < _items.size(); i++) {
|
||||
auto item = _items.at(i);
|
||||
if (item.num == num) {
|
||||
return item.obj;
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
size_t Servos::count() {
|
||||
return _items.size();
|
||||
}
|
||||
110
src/Upgrade.cpp
110
src/Upgrade.cpp
@@ -1,30 +1,29 @@
|
||||
#include "Upgrade.h"
|
||||
|
||||
#include "Global.h"
|
||||
#include "ESP8266.h"
|
||||
|
||||
static const char* MODULE = "Upgr";
|
||||
static const char* MODULE = "Update";
|
||||
|
||||
static const char* filesystem_image_url PROGMEM = "http://91.204.228.124:1100/update/%s/fs.bin";
|
||||
static const char* available_url PROGMEM = "http://91.204.228.124:1100/update/%s/version.txt";
|
||||
static const char* check_update_url PROGMEM = "http://91.204.228.124:1100/update/%s/version.txt";
|
||||
|
||||
const String getAvailableUrl(const char* mcu) {
|
||||
char buf[128];
|
||||
sprintf_P(buf, available_url, mcu);
|
||||
sprintf_P(buf, check_update_url, mcu);
|
||||
return buf;
|
||||
}
|
||||
|
||||
void getLastVersion() {
|
||||
if (upgrade_url) {
|
||||
upgrade_url = false;
|
||||
if (checkUpdatesFlag) {
|
||||
String url;
|
||||
#ifdef ESP32
|
||||
url = getAvailableUrl("esp32");
|
||||
#endif
|
||||
#ifdef ESP8266
|
||||
url = getAvailableUrl("esp8266");
|
||||
#else
|
||||
url = getAvailableUrl("esp32");
|
||||
#endif
|
||||
lastVersion = getURL(url);
|
||||
jsonWriteStr(configSetupJson, "last_version", lastVersion);
|
||||
checkUpdatesFlag = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,76 +37,51 @@ void initUpdater() {
|
||||
}
|
||||
|
||||
void upgrade_firmware() {
|
||||
String scenario_for_update;
|
||||
String config_for_update;
|
||||
String configSetup_for_update;
|
||||
String scanerioBackup, configBackup, setupBackup;
|
||||
|
||||
scenario_for_update = readFile(String(DEVICE_SCENARIO_FILE), 4000);
|
||||
config_for_update = readFile(String(DEVICE_CONFIG_FILE), 4000);
|
||||
configSetup_for_update = configSetupJson;
|
||||
scanerioBackup = readFile(String(DEVICE_SCENARIO_FILE), 4096);
|
||||
configBackup = readFile(String(DEVICE_CONFIG_FILE), 4096);
|
||||
setupBackup = configSetupJson;
|
||||
|
||||
Serial.println("Start upgrade SPIFFS, please wait...");
|
||||
|
||||
WiFiClient client_for_upgrade;
|
||||
|
||||
#ifdef ESP32
|
||||
pm.info("update data");
|
||||
WiFiClient wifiClient;
|
||||
#ifdef ESP8266
|
||||
ESPhttpUpdate.rebootOnUpdate(false);
|
||||
t_httpUpdate_return ret = ESPhttpUpdate.updateSpiffs(wifiClient, "http://91.204.228.124:1100/update/esp8266/esp32-esp8266_iot-manager_modules_firmware.spiffs.bin");
|
||||
#else
|
||||
httpUpdate.rebootOnUpdate(false);
|
||||
t_httpUpdate_return ret = httpUpdate.updateSpiffs(client_for_upgrade, "http://91.204.228.124:1100/update/esp32/esp32-esp8266_iot-manager_modules_firmware.spiffs.bin");
|
||||
#endif
|
||||
#ifdef ESP8266
|
||||
ESPhttpUpdate.rebootOnUpdate(false);
|
||||
t_httpUpdate_return ret = ESPhttpUpdate.updateSpiffs(client_for_upgrade, "http://91.204.228.124:1100/update/esp8266/esp32-esp8266_iot-manager_modules_firmware.spiffs.bin");
|
||||
#endif
|
||||
|
||||
if (ret == HTTP_UPDATE_OK) {
|
||||
writeFile(String(DEVICE_SCENARIO_FILE), scenario_for_update);
|
||||
writeFile(String(DEVICE_CONFIG_FILE), config_for_update);
|
||||
writeFile("config.json", configSetup_for_update);
|
||||
writeFile(String(DEVICE_SCENARIO_FILE), scanerioBackup);
|
||||
writeFile(String(DEVICE_CONFIG_FILE), configBackup);
|
||||
writeFile("config.json", setupBackup);
|
||||
|
||||
saveConfig();
|
||||
|
||||
Serial.println("Upgrade done!");
|
||||
Serial.println("Start upgrade BUILD, please wait...");
|
||||
|
||||
#ifdef ESP32
|
||||
//httpUpdate.rebootOnUpdate(true);
|
||||
t_httpUpdate_return ret = httpUpdate.update(client_for_upgrade, "http://91.204.228.124:1100/update/esp32/esp32-esp8266_iot-manager_modules_firmware.ino.bin");
|
||||
#endif
|
||||
#ifdef ESP8266
|
||||
//ESPhttpUpdate.rebootOnUpdate(true);
|
||||
t_httpUpdate_return ret = ESPhttpUpdate.update(client_for_upgrade, "http://91.204.228.124:1100/update/esp8266/esp32-esp8266_iot-manager_modules_firmware.ino.bin");
|
||||
#endif
|
||||
|
||||
if (ret == HTTP_UPDATE_OK) {
|
||||
Serial.println("Upgrade done!");
|
||||
Serial.println("Restart...");
|
||||
ESP.restart();
|
||||
} else {
|
||||
Serial.println("[E] on build");
|
||||
}
|
||||
pm.info("done!");
|
||||
} else {
|
||||
Serial.println("[E] on upgrade");
|
||||
pm.error("on data");
|
||||
return;
|
||||
}
|
||||
|
||||
Serial.println("update firmware");
|
||||
#ifdef ESP8266
|
||||
ret = ESPhttpUpdate.update(wifiClient, "http://91.204.228.124:1100/update/esp8266/esp32-esp8266_iot-manager_modules_firmware.ino.bin");
|
||||
#else
|
||||
ret = httpUpdate.update(client_for_upgrade, "http://91.204.228.124:1100/update/esp32/esp32-esp8266_iot-manager_modules_firmware.ino.bin");
|
||||
#endif
|
||||
if (ret == HTTP_UPDATE_OK) {
|
||||
pm.info("done! restart...");
|
||||
ESP.restart();
|
||||
} else {
|
||||
pm.error("on firmware");
|
||||
}
|
||||
}
|
||||
|
||||
void flashUpgrade() {
|
||||
if (upgrade) {
|
||||
upgrade = false;
|
||||
void do_update() {
|
||||
if (updateFlag) {
|
||||
updateFlag = false;
|
||||
upgrade_firmware();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
void upgrade_status(t_httpUpdate_return set) {
|
||||
switch (set) {
|
||||
case HTTP_UPDATE_FAILED:
|
||||
Serial.printf("UPDATE_FAILED Error (%d): %s", httpUpdate.getLastError(), httpUpdate.getLastErrorString().c_str());
|
||||
break;
|
||||
case HTTP_UPDATE_NO_UPDATES:
|
||||
Serial.println("NO_UPDATES");
|
||||
break;
|
||||
case HTTP_UPDATE_OK:
|
||||
Serial.println("HTTP_UPDATE_OK");
|
||||
break;
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
@@ -127,3 +127,24 @@ const String getFileSize(const String filename) {
|
||||
file.close();
|
||||
return String(size);
|
||||
}
|
||||
|
||||
const String getFSSizeInfo() {
|
||||
String res;
|
||||
#ifdef ESP8266
|
||||
FSInfo info;
|
||||
if (LittleFS.info(info)) {
|
||||
res = prettyBytes(info.usedBytes) + " of " + prettyBytes(info.totalBytes);
|
||||
} else {
|
||||
res = "error";
|
||||
}
|
||||
#else
|
||||
res = prettyBytes(LittleFS.usedBytes()) + " of " + prettyBytes(LittleFS.totalBytes());
|
||||
#endif
|
||||
return res;
|
||||
}
|
||||
|
||||
const String getConfigFile(uint8_t preset, ConfigType_t type) {
|
||||
char buf[64];
|
||||
sprintf(buf, "/conf/%s%03d.txt", (type == CT_CONFIG) ? "c" : "s", preset);
|
||||
return String(buf);
|
||||
}
|
||||
@@ -29,6 +29,10 @@ String jsonWriteStr(String& json, String name, String value) {
|
||||
return json;
|
||||
}
|
||||
|
||||
String jsonWriteBool(String& json, String name, boolean value) {
|
||||
return jsonWriteStr(json, name, value ? "1" : "0");
|
||||
}
|
||||
|
||||
String jsonWriteInt(String& json, String name, int value) {
|
||||
DynamicJsonBuffer jsonBuffer;
|
||||
JsonObject& root = jsonBuffer.parseObject(json);
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
#include "Utils/PresetUtils.h"
|
||||
|
||||
static const char* config_file_fmt PROGMEM = "/conf/%s%03d.txt";
|
||||
|
||||
const String getConfigFile(uint8_t preset, ConfigType_t type) {
|
||||
char buf[64];
|
||||
sprintf_P(buf, config_file_fmt, (type == CT_CONFIG) ? "c" : "s", preset);
|
||||
return String(buf);
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
#include "Utils\StringUtils.h"
|
||||
|
||||
#include "Consts.h"
|
||||
|
||||
String selectToMarkerLast(String str, String found) {
|
||||
int p = str.lastIndexOf(found);
|
||||
return str.substring(p + found.length());
|
||||
|
||||
@@ -22,9 +22,8 @@ const String getChipId() {
|
||||
|
||||
#ifdef ESP8266
|
||||
static uint32_t total_memory = 52864;
|
||||
#endif
|
||||
#ifdef ESP32
|
||||
static uint32_t total_memory = 362868;
|
||||
#else
|
||||
static uint32_t total_memory = ESP.getHeapSize();
|
||||
#endif
|
||||
|
||||
const String printMemoryStatus() {
|
||||
@@ -49,19 +48,10 @@ const String getHeapStats() {
|
||||
buf += '%';
|
||||
return buf;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ESP32
|
||||
String getHeapStats() {
|
||||
uint32_t free;
|
||||
uint16_t max;
|
||||
uint8_t frag;
|
||||
ESP.getHeapStats(&free, &max, &frag);
|
||||
#else
|
||||
const String getHeapStats() {
|
||||
String buf;
|
||||
buf += prettyBytes(free);
|
||||
buf += " ";
|
||||
buf += frag;
|
||||
buf += '%';
|
||||
buf = prettyBytes(ESP.getFreeHeap());
|
||||
return buf;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -20,11 +20,16 @@ void startSTAMode() {
|
||||
|
||||
bool keepConnecting = true;
|
||||
uint8_t tries = 20;
|
||||
sint8_t connRes;
|
||||
do {
|
||||
sint8_t connRes = WiFi.waitForConnectResult(1000);
|
||||
#ifdef ESP8266
|
||||
connRes = WiFi.waitForConnectResult(1000);
|
||||
#else
|
||||
byte connRes = WiFi.waitForConnectResult();
|
||||
#endif
|
||||
switch (connRes) {
|
||||
case WL_NO_SSID_AVAIL: {
|
||||
pm.error("No ssid available");
|
||||
pm.error("no network");
|
||||
keepConnecting = false;
|
||||
} break;
|
||||
case WL_CONNECTED: {
|
||||
@@ -34,7 +39,7 @@ void startSTAMode() {
|
||||
keepConnecting = false;
|
||||
} break;
|
||||
case WL_CONNECT_FAILED: {
|
||||
pm.error("Check credentials");
|
||||
pm.error("check credentials");
|
||||
jsonWriteInt(configOptionJson, "pass_status", 1);
|
||||
keepConnecting = false;
|
||||
} break;
|
||||
@@ -45,9 +50,9 @@ void startSTAMode() {
|
||||
|
||||
if (isNetworkActive()) {
|
||||
MqttClient::init();
|
||||
|
||||
setLedStatus(LED_OFF);
|
||||
} else {
|
||||
pm.error("failed: " + String(connRes, DEC));
|
||||
startAPMode();
|
||||
};
|
||||
}
|
||||
|
||||
228
src/Web.cpp
228
src/Web.cpp
@@ -1,13 +1,7 @@
|
||||
#include "Global.h"
|
||||
|
||||
#include "CaptiveRequestHandler.h"
|
||||
#include "Utils/PresetUtils.h"
|
||||
|
||||
static const char* MODULE = "Web";
|
||||
|
||||
static const uint8_t MIN_PRESET = 1;
|
||||
static const uint8_t MAX_PRESET = 21;
|
||||
|
||||
bool parseRequestForPreset(AsyncWebServerRequest* request, uint8_t& preset) {
|
||||
if (request->hasArg("preset")) {
|
||||
preset = request->getParam("preset")->value().toInt();
|
||||
@@ -17,8 +11,18 @@ bool parseRequestForPreset(AsyncWebServerRequest* request, uint8_t& preset) {
|
||||
}
|
||||
|
||||
void web_init() {
|
||||
// dnsServer.start(53, "*", WiFi.softAPIP());
|
||||
// server.addHandler(new CaptiveRequestHandler(jsonReadStr(configSetupJson, "name").c_str())).setFilter(ON_AP_FILTER);
|
||||
|
||||
server.on("/restart", HTTP_GET, [](AsyncWebServerRequest* request) {
|
||||
if (request->hasArg("device")) {
|
||||
if (request->getParam("device")->value() == "ok") {
|
||||
ESP.restart();
|
||||
}
|
||||
request->send(200);
|
||||
};
|
||||
});
|
||||
|
||||
server.on("/set", HTTP_GET, [](AsyncWebServerRequest* request) {
|
||||
uint8_t preset;
|
||||
if (parseRequestForPreset(request, preset)) {
|
||||
@@ -35,49 +39,35 @@ void web_init() {
|
||||
//--------------------------------------------------------------------------------
|
||||
if (request->hasArg("devinit")) {
|
||||
Device_init();
|
||||
request->send(200, "text/text", "OK");
|
||||
request->send(200);
|
||||
}
|
||||
//--------------------------------------------------------------------------------
|
||||
if (request->hasArg("scen")) {
|
||||
String value = request->getParam("scen")->value();
|
||||
if (value == "0") {
|
||||
jsonWriteStr(configSetupJson, "scen", value);
|
||||
saveConfig();
|
||||
loadScenario();
|
||||
}
|
||||
if (value == "1") {
|
||||
jsonWriteStr(configSetupJson, "scen", value);
|
||||
saveConfig();
|
||||
loadScenario();
|
||||
}
|
||||
request->send(200, "text/text", "OK");
|
||||
bool value = request->getParam("scen")->value().toInt();
|
||||
jsonWriteBool(configSetupJson, "scen", value);
|
||||
saveConfig();
|
||||
loadScenario();
|
||||
request->send(200);
|
||||
}
|
||||
//--------------------------------------------------------------------------------
|
||||
if (request->hasArg("sceninit")) {
|
||||
loadScenario();
|
||||
request->send(200, "text/text", "OK");
|
||||
request->send(200);
|
||||
}
|
||||
//--------------------------------------------------------------------------------
|
||||
#ifdef LOGGING_ENABLED
|
||||
if (request->hasArg("cleanlog")) {
|
||||
clean_log_date();
|
||||
request->send(200, "text/text", "OK");
|
||||
request->send(200);
|
||||
}
|
||||
#endif
|
||||
//==============================udp settings=============================================
|
||||
if (request->hasArg("udponoff")) {
|
||||
String value = request->getParam("udponoff")->value();
|
||||
if (value == "0") {
|
||||
jsonWriteStr(configSetupJson, "udponoff", value);
|
||||
saveConfig();
|
||||
loadScenario();
|
||||
}
|
||||
if (value == "1") {
|
||||
jsonWriteStr(configSetupJson, "udponoff", value);
|
||||
saveConfig();
|
||||
loadScenario();
|
||||
}
|
||||
request->send(200, "text/text", "OK");
|
||||
bool value = request->getParam("udponoff")->value().toInt();
|
||||
jsonWriteBool(configSetupJson, "udponoff", value);
|
||||
saveConfig();
|
||||
loadScenario();
|
||||
request->send(200);
|
||||
}
|
||||
//--------------------------------------------------------------------------------
|
||||
if (request->hasArg("updatelist")) {
|
||||
@@ -93,18 +83,18 @@ void web_init() {
|
||||
if (request->hasArg("devname")) {
|
||||
jsonWriteStr(configSetupJson, "name", request->getParam("devname")->value());
|
||||
saveConfig();
|
||||
request->send(200, "text/text", "OK");
|
||||
request->send(200);
|
||||
}
|
||||
//==============================wifi settings=============================================
|
||||
if (request->hasArg("routerssid")) {
|
||||
jsonWriteStr(configSetupJson, "routerssid", request->getParam("routerssid")->value());
|
||||
saveConfig();
|
||||
request->send(200, "text/text", "OK");
|
||||
request->send(200);
|
||||
}
|
||||
if (request->hasArg("routerpass")) {
|
||||
jsonWriteStr(configSetupJson, "routerpass", request->getParam("routerpass")->value());
|
||||
saveConfig();
|
||||
request->send(200, "text/text", "OK");
|
||||
request->send(200);
|
||||
}
|
||||
//--------------------------------------------------------------------------------
|
||||
if (request->hasArg("apssid")) {
|
||||
@@ -115,18 +105,18 @@ void web_init() {
|
||||
if (request->hasArg("appass")) {
|
||||
jsonWriteStr(configSetupJson, "appass", request->getParam("appass")->value());
|
||||
saveConfig();
|
||||
request->send(200, "text/text", "OK");
|
||||
request->send(200);
|
||||
}
|
||||
//--------------------------------------------------------------------------------
|
||||
if (request->hasArg("weblogin")) {
|
||||
jsonWriteStr(configSetupJson, "weblogin", request->getParam("weblogin")->value());
|
||||
saveConfig();
|
||||
request->send(200, "text/text", "OK");
|
||||
request->send(200);
|
||||
}
|
||||
if (request->hasArg("webpass")) {
|
||||
jsonWriteStr(configSetupJson, "webpass", request->getParam("webpass")->value());
|
||||
saveConfig();
|
||||
request->send(200, "text/text", "OK");
|
||||
request->send(200);
|
||||
}
|
||||
//--------------------------------------------------------------------------------
|
||||
if (request->hasArg("timezone")) {
|
||||
@@ -134,79 +124,69 @@ void web_init() {
|
||||
jsonWriteStr(configSetupJson, "timezone", timezoneStr);
|
||||
saveConfig();
|
||||
timeNow->setTimezone(timezoneStr.toInt());
|
||||
request->send(200, "text/text", "OK");
|
||||
request->send(200);
|
||||
}
|
||||
if (request->hasArg("ntp")) {
|
||||
String ntpStr = request->getParam("ntp")->value();
|
||||
jsonWriteStr(configSetupJson, "ntp", ntpStr);
|
||||
saveConfig();
|
||||
timeNow->setNtpPool(ntpStr);
|
||||
request->send(200, "text/text", "OK");
|
||||
}
|
||||
//--------------------------------------------------------------------------------
|
||||
if (request->hasArg("device")) {
|
||||
if (request->getParam("device")->value() == "ok") ESP.restart();
|
||||
request->send(200, "text/text", "OK");
|
||||
request->send(200);
|
||||
}
|
||||
//--------------------------------------------------------------------------------
|
||||
if (request->hasArg("blink")) {
|
||||
String value = request->getParam("blink")->value();
|
||||
if (value == "0") {
|
||||
jsonWriteStr(configSetupJson, "blink", value);
|
||||
saveConfig();
|
||||
}
|
||||
if (value == "1") {
|
||||
jsonWriteStr(configSetupJson, "blink", value);
|
||||
saveConfig();
|
||||
}
|
||||
request->send(200, "text/text", "OK");
|
||||
bool value = request->getParam("blink")->value().toInt();
|
||||
jsonWriteBool(configSetupJson, "blink", value);
|
||||
saveConfig();
|
||||
request->send(200);
|
||||
}
|
||||
//==============================mqtt settings=============================================
|
||||
if (request->hasArg("mqttServer")) {
|
||||
jsonWriteStr(configSetupJson, "mqttServer", request->getParam("mqttServer")->value());
|
||||
saveConfig();
|
||||
mqttParamsChanged = true;
|
||||
request->send(200, "text/text", "ok");
|
||||
request->send(200);
|
||||
}
|
||||
if (request->hasArg("mqttPort")) {
|
||||
int port = (request->getParam("mqttPort")->value()).toInt();
|
||||
jsonWriteInt(configSetupJson, "mqttPort", port);
|
||||
saveConfig();
|
||||
mqttParamsChanged = true;
|
||||
request->send(200, "text/text", "ok");
|
||||
request->send(200);
|
||||
}
|
||||
if (request->hasArg("mqttPrefix")) {
|
||||
jsonWriteStr(configSetupJson, "mqttPrefix", request->getParam("mqttPrefix")->value());
|
||||
saveConfig();
|
||||
mqttParamsChanged = true;
|
||||
request->send(200, "text/text", "ok");
|
||||
request->send(200);
|
||||
}
|
||||
if (request->hasArg("mqttUser")) {
|
||||
jsonWriteStr(configSetupJson, "mqttUser", request->getParam("mqttUser")->value());
|
||||
saveConfig();
|
||||
mqttParamsChanged = true;
|
||||
request->send(200, "text/text", "ok");
|
||||
request->send(200);
|
||||
}
|
||||
if (request->hasArg("mqttPass")) {
|
||||
jsonWriteStr(configSetupJson, "mqttPass", request->getParam("mqttPass")->value());
|
||||
saveConfig();
|
||||
mqttParamsChanged = true;
|
||||
request->send(200, "text/text", "ok");
|
||||
request->send(200);
|
||||
}
|
||||
//--------------------------------------------------------------------------------
|
||||
if (request->hasArg("mqttsend")) {
|
||||
mqtt_send_settings_to_udp = true;
|
||||
request->send(200, "text/text", "ok");
|
||||
request->send(200);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------
|
||||
|
||||
if (request->hasArg("mqttcheck")) {
|
||||
String buf = "{}";
|
||||
String payload = "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>" + MqttClient::getStateStr();
|
||||
jsonWriteStr(buf, "title", payload);
|
||||
jsonWriteStr(buf, "class", "pop-up");
|
||||
String buf = "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>" + MqttClient::getStateStr();
|
||||
|
||||
request->send(200, "text/text", buf);
|
||||
String payload = "{}";
|
||||
jsonWriteStr(payload, "title", buf);
|
||||
jsonWriteStr(payload, "class", "pop-up");
|
||||
|
||||
request->send(200, "text/html", payload);
|
||||
}
|
||||
|
||||
//==============================push settings=============================================
|
||||
@@ -214,96 +194,68 @@ void web_init() {
|
||||
if (request->hasArg("pushingboxid")) {
|
||||
jsonWriteStr(configSetupJson, "pushingboxid", request->getParam("pushingboxid")->value());
|
||||
saveConfig();
|
||||
request->send(200, "text/text", "ok");
|
||||
request->send(200);
|
||||
}
|
||||
#endif
|
||||
|
||||
//==============================utilities settings=============================================
|
||||
if (request->hasArg("itoc")) {
|
||||
if (request->hasArg(TAG_I2C)) {
|
||||
busScanFlag = true;
|
||||
busToScan = BS_I2C;
|
||||
request->redirect("/?set.utilities");
|
||||
}
|
||||
|
||||
if (request->hasArg("onewire")) {
|
||||
} else if (request->hasArg(TAG_ONE_WIRE)) {
|
||||
busScanFlag = true;
|
||||
busToScan = BS_ONE_WIRE;
|
||||
if (request->hasParam(TAG_ONE_WIRE_PIN)) {
|
||||
setConfigParam(TAG_ONE_WIRE_PIN, request->getParam(TAG_ONE_WIRE_PIN)->value());
|
||||
}
|
||||
request->redirect("/?set.utilities");
|
||||
}
|
||||
|
||||
if (request->hasArg("fscheck")) {
|
||||
fsCheckFlag = true;
|
||||
request->redirect("/?set.utilities");
|
||||
} else if (request->hasArg(TAG_ONE_WIRE_PIN)) {
|
||||
setConfigParam(TAG_ONE_WIRE_PIN, request->getParam(TAG_ONE_WIRE_PIN)->value());
|
||||
request->send(200);
|
||||
}
|
||||
});
|
||||
//==============================upgrade settings=============================================
|
||||
server.on("/check", HTTP_GET, [](AsyncWebServerRequest* request) {
|
||||
upgrade_url = true;
|
||||
pm.info("firmware version: " + lastVersion);
|
||||
String tmp = "{}";
|
||||
int case_of_update;
|
||||
|
||||
if (WiFi.status() != WL_CONNECTED) {
|
||||
lastVersion = "nowifi";
|
||||
}
|
||||
/*
|
||||
* Check
|
||||
*/
|
||||
server.on("/check", HTTP_GET, [](AsyncWebServerRequest* request) {
|
||||
checkUpdatesFlag = true;
|
||||
pm.info("firmware version: " + lastVersion);
|
||||
|
||||
if (!FLASH_4MB) {
|
||||
lastVersion = "less";
|
||||
} else if (isNetworkActive()) {
|
||||
lastVersion = "nowifi";
|
||||
}
|
||||
|
||||
if (lastVersion == FIRMWARE_VERSION) case_of_update = 1;
|
||||
if (lastVersion != FIRMWARE_VERSION) case_of_update = 2;
|
||||
if (lastVersion == "error") case_of_update = 3;
|
||||
if (lastVersion == "") case_of_update = 4;
|
||||
if (lastVersion == "less") case_of_update = 5;
|
||||
if (lastVersion == "nowifi") case_of_update = 6;
|
||||
if (lastVersion == "notsupported") case_of_update = 7;
|
||||
|
||||
switch (case_of_update) {
|
||||
case 1: {
|
||||
jsonWriteStr(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Последняя версия прошивки уже установлена.");
|
||||
jsonWriteStr(tmp, "class", "pop-up");
|
||||
} break;
|
||||
|
||||
case 2: {
|
||||
jsonWriteStr(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Имеется новая версия прошивки<a href=\"#\" class=\"btn btn-block btn-danger\" onclick=\"send_request(this, '/upgrade');setTimeout(function(){ location.href='/'; }, 120000);html('my-block','<span class=loader></span>Идет обновление прошивки, после обновления страница перезагрузится автоматически...')\">Установить</a>");
|
||||
jsonWriteStr(tmp, "class", "pop-up");
|
||||
} break;
|
||||
|
||||
case 3: {
|
||||
jsonWriteStr(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Ошибка... Cервер не найден. Попробуйте позже...");
|
||||
jsonWriteStr(tmp, "class", "pop-up");
|
||||
} break;
|
||||
|
||||
case 4: {
|
||||
jsonWriteStr(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Нажмите на кнопку \"обновить прошивку\" повторно...");
|
||||
jsonWriteStr(tmp, "class", "pop-up");
|
||||
break;
|
||||
}
|
||||
|
||||
case 5: {
|
||||
jsonWriteStr(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Обновление по воздуху не поддерживается, модуль имеет меньше 4 мб памяти...");
|
||||
jsonWriteStr(tmp, "class", "pop-up");
|
||||
break;
|
||||
}
|
||||
|
||||
case 6: {
|
||||
jsonWriteStr(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Устройство не подключено к роутеру...");
|
||||
jsonWriteStr(tmp, "class", "pop-up");
|
||||
break;
|
||||
}
|
||||
|
||||
case 7: {
|
||||
jsonWriteStr(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>Обновление на новую версию возможно только через usb...");
|
||||
jsonWriteStr(tmp, "class", "pop-up");
|
||||
break;
|
||||
}
|
||||
String msg = "";
|
||||
if (lastVersion == FIRMWARE_VERSION) {
|
||||
msg = F("Актуальная версия прошивки уже установлена.");
|
||||
} else if (lastVersion != FIRMWARE_VERSION) {
|
||||
msg = F("Новая версия прошивки<a href=\"#\" class=\"btn btn-block btn-danger\" onclick=\"send_request(this, '/upgrade');setTimeout(function(){ location.href='/'; }, 120000);html('my-block','<span class=loader></span>Идет обновление прошивки, после обновления страница перезагрузится автоматически...')\">Установить</a>");
|
||||
} else if (lastVersion == "error") {
|
||||
msg = F("Cервер не найден. Попробуйте повторить позже...");
|
||||
} else if (lastVersion == "") {
|
||||
msg = F("Нажмите на кнопку \"обновить прошивку\" повторно...");
|
||||
} else if (lastVersion == "less") {
|
||||
msg = F("Обновление \"по воздуху\" не поддерживается!");
|
||||
} else if (lastVersion == "nowifi") {
|
||||
msg = F("Устройство не подключено к роутеру!");
|
||||
} else if (lastVersion == "notsupported") {
|
||||
msg = F("Обновление возможно только через usb!");
|
||||
}
|
||||
request->send(200, "text/text", tmp);
|
||||
String tmp = "{}";
|
||||
jsonWriteStr(tmp, "title", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>" + msg);
|
||||
jsonWriteStr(tmp, "class", "pop-up");
|
||||
request->send(200, "text/html", tmp);
|
||||
});
|
||||
|
||||
/*
|
||||
* Upgrade
|
||||
*/
|
||||
server.on("/upgrade", HTTP_GET, [](AsyncWebServerRequest* request) {
|
||||
upgrade = true;
|
||||
String tmp = "{}";
|
||||
request->send(200, "text/text", "ok");
|
||||
updateFlag = true;
|
||||
request->send(200, "text/html");
|
||||
});
|
||||
}
|
||||
@@ -16,7 +16,6 @@ bool loadWidget(const String& filename, String& buf) {
|
||||
void createWidget(String widget, String page, String pageNumber, String filename, String topic) {
|
||||
String buf = "{}";
|
||||
if (!loadWidget(filename, buf)) {
|
||||
pm.error("failed " + widget);
|
||||
return;
|
||||
}
|
||||
widget.replace("#", " ");
|
||||
@@ -34,7 +33,9 @@ void createWidget(String widget, String page, String pageNumber, String filename
|
||||
#endif
|
||||
}
|
||||
|
||||
void createWidgetParam(String widget, String page, String pageNumber, String filename, String topic, String name1, String param1, String name2, String param2, String name3, String param3) {
|
||||
//TODO Вот эта процедура, и несколько оберток
|
||||
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 = "";
|
||||
if (!loadWidget(filename, buf)) {
|
||||
return;
|
||||
@@ -59,7 +60,8 @@ void createWidgetParam(String widget, String page, String pageNumber, String fil
|
||||
#endif
|
||||
}
|
||||
|
||||
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 = "";
|
||||
if (!loadWidget(filename, buf)) {
|
||||
return;
|
||||
@@ -83,11 +85,9 @@ void createChart(String widget, String page, String pageNumber, String filename,
|
||||
}
|
||||
|
||||
void createWidgetByType(String widget, String page, String pageNumber, String type, String topic) {
|
||||
pm.info("create" + type);
|
||||
createWidget(widget, page, pageNumber, getWidgetFile(type), topic);
|
||||
}
|
||||
|
||||
const String getWidgetFile(const String& name) {
|
||||
pm.info("get " + name);
|
||||
return "/widgets/" + name + ".json";
|
||||
}
|
||||
|
||||
79
src/main.cpp
79
src/main.cpp
@@ -1,7 +1,7 @@
|
||||
#include "Global.h"
|
||||
|
||||
#include "HttpServer.h"
|
||||
#include "Bus/BusScanner.h"
|
||||
#include "Bus/BusScannerFactory.h"
|
||||
#include "Utils/Timings.h"
|
||||
|
||||
void not_async_actions();
|
||||
@@ -62,7 +62,7 @@ void setup() {
|
||||
|
||||
#ifdef UDP_ENABLED
|
||||
pm.info("Broadcast UDP");
|
||||
UDP_init();
|
||||
udp_init();
|
||||
#endif
|
||||
ts.add(
|
||||
TEST, 1000 * 60, [&](void*) {
|
||||
@@ -114,7 +114,7 @@ void not_async_actions() {
|
||||
|
||||
getLastVersion();
|
||||
|
||||
flashUpgrade();
|
||||
do_update();
|
||||
|
||||
#ifdef UDP_ENABLED
|
||||
do_udp_data_parse();
|
||||
@@ -122,8 +122,6 @@ void not_async_actions() {
|
||||
#endif
|
||||
|
||||
do_scan_bus();
|
||||
|
||||
do_check_fs();
|
||||
}
|
||||
|
||||
String getURL(const String& urls) {
|
||||
@@ -140,42 +138,22 @@ String getURL(const String& urls) {
|
||||
return res;
|
||||
}
|
||||
|
||||
void safeDataToFile(String data, String Folder) {
|
||||
String fileName;
|
||||
fileName.toLowerCase();
|
||||
fileName = deleteBeforeDelimiter(fileName, " ");
|
||||
fileName.replace(" ", ".");
|
||||
fileName.replace("..", ".");
|
||||
fileName = Folder + "/" + fileName + ".txt";
|
||||
|
||||
jsonWriteStr(configLiveJson, "test", fileName);
|
||||
}
|
||||
|
||||
void sendConfig(String topic, String widgetConfig, String key, String date) {
|
||||
yield();
|
||||
topic = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId + "/" + topic + "/status";
|
||||
String outer = "{\"widgetConfig\":";
|
||||
String inner = "{\"";
|
||||
inner = inner + key;
|
||||
inner = inner + "\":\"";
|
||||
inner = inner + date;
|
||||
inner = inner + "\"";
|
||||
inner = inner + "}}";
|
||||
String t = outer + inner;
|
||||
yield();
|
||||
}
|
||||
|
||||
void setChipId() {
|
||||
chipId = getChipId();
|
||||
Serial.println(chipId);
|
||||
pm.info("id: " + chipId);
|
||||
}
|
||||
|
||||
void saveConfig() {
|
||||
writeFile(String("config.json"), configSetupJson);
|
||||
}
|
||||
|
||||
void setConfigParam(const char* param, const String& value) {
|
||||
pm.info("set " + String(param) + ": " + value);
|
||||
jsonWriteStr(configSetupJson, param, value);
|
||||
saveConfig();
|
||||
}
|
||||
|
||||
#ifdef ESP8266
|
||||
#ifdef LED_PIN
|
||||
void setLedStatus(LedStatus_t status) {
|
||||
pinMode(LED_PIN, OUTPUT);
|
||||
switch (status) {
|
||||
@@ -197,12 +175,25 @@ void setLedStatus(LedStatus_t status) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
void do_fscheck(String& results) {
|
||||
// TODO Проверка наличие важных файлов, возможно версии ФС
|
||||
#else
|
||||
void setLedStatus(LedStatus_t status) {
|
||||
pinMode(LED_PIN, OUTPUT);
|
||||
switch (status) {
|
||||
case LED_OFF:
|
||||
digitalWrite(LED_PIN, HIGH);
|
||||
break;
|
||||
case LED_ON:
|
||||
digitalWrite(LED_PIN, LOW);
|
||||
break;
|
||||
case LED_SLOW:
|
||||
break;
|
||||
case LED_FAST:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void clock_init() {
|
||||
timeNow = new Clock();
|
||||
@@ -215,21 +206,13 @@ void clock_init() {
|
||||
},
|
||||
nullptr, true);
|
||||
}
|
||||
|
||||
void do_scan_bus() {
|
||||
if (busScanFlag) {
|
||||
String res = "";
|
||||
BusScanner* scanner = BusScannerFactory::get(res, busToScan);
|
||||
BusScanner* scanner = BusScannerFactory::get(configSetupJson, busToScan, res);
|
||||
scanner->scan();
|
||||
jsonWriteStr(configLiveJson, BusScannerFactory::label(busToScan), res);
|
||||
jsonWriteStr(configLiveJson, String(scanner->tag()), res);
|
||||
busScanFlag = false;
|
||||
}
|
||||
}
|
||||
|
||||
void do_check_fs() {
|
||||
if (fsCheckFlag) {
|
||||
String buf;
|
||||
do_fscheck(buf);
|
||||
jsonWriteStr(configLiveJson, "fscheck", buf);
|
||||
fsCheckFlag = false;
|
||||
}
|
||||
}
|
||||
|
||||
157
src/udp.cpp
157
src/udp.cpp
@@ -1,30 +1,33 @@
|
||||
#include "Global.h"
|
||||
|
||||
static const char* MODULE = "Udp";
|
||||
|
||||
#ifdef ESP8266
|
||||
IPAddress udp_multicastIP(255, 255, 255, 255);
|
||||
ESP8266HTTPUpdateServer httpUpdater;
|
||||
WiFiUDP Udp;
|
||||
WiFiUDP udp;
|
||||
#endif
|
||||
#ifdef ESP32
|
||||
IPAddress udp_multicastIP(239, 255, 255, 255);
|
||||
AsyncUDP udp;
|
||||
#endif
|
||||
String received_ip;
|
||||
String received_udp_line;
|
||||
String remote_ip;
|
||||
String received;
|
||||
int udp_period;
|
||||
boolean udp_busy = false;
|
||||
unsigned int udp_port = 4210;
|
||||
|
||||
//TODO Помомему тут ошибка в define'ах
|
||||
void handleUdp_esp32();
|
||||
|
||||
void add_dev_in_list(String fileName, String id, String dev_name, String ip);
|
||||
|
||||
#ifdef UDP_ENABLED
|
||||
void UDP_init() {
|
||||
void udp_init() {
|
||||
removeFile("dev.csv");
|
||||
addFile("dev.csv", "device id;device name;ip address");
|
||||
|
||||
#ifdef ESP8266
|
||||
Udp.begin(udp_port);
|
||||
udp.begin(udp_port);
|
||||
#endif
|
||||
|
||||
handleUdp_esp32();
|
||||
@@ -34,64 +37,68 @@ void UDP_init() {
|
||||
|
||||
ts.add(
|
||||
UDP, udp_period, [&](void*) {
|
||||
if (jsonReadStr(configSetupJson, "udponoff") == "1") {
|
||||
if (WiFi.status() == WL_CONNECTED) {
|
||||
if (!udp_busy) {
|
||||
String line_to_send = "iotm;" + chipId + ";" + jsonReadStr(configSetupJson, "name");
|
||||
if (jsonReadBool(configSetupJson, "udponoff") && isNetworkActive() && !udp_busy) {
|
||||
pm.info("send info");
|
||||
String payload = "iotm;";
|
||||
payload += chipId;
|
||||
payload += ";";
|
||||
payload += jsonReadStr(configSetupJson, "name");
|
||||
#ifdef ESP8266
|
||||
Udp.beginPacketMulticast(udp_multicastIP, udp_port, WiFi.localIP());
|
||||
Udp.write(line_to_send.c_str());
|
||||
Udp.endPacket();
|
||||
udp.beginPacketMulticast(udp_multicastIP, udp_port, WiFi.localIP());
|
||||
udp.write(payload.c_str());
|
||||
udp.endPacket();
|
||||
#endif
|
||||
#ifdef ESP32
|
||||
udp.broadcast(line_to_send.c_str());
|
||||
udp.broadcast(line_to_send.c_str());
|
||||
#endif
|
||||
Serial.println("[UDP<=] dev info send");
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
nullptr, false);
|
||||
}
|
||||
|
||||
bool isUdpEnabled() {
|
||||
return jsonReadBool(configSetupJson, "udponoff") && isNetworkActive();
|
||||
}
|
||||
|
||||
void loopUdp() {
|
||||
#ifdef ESP8266
|
||||
if (jsonReadStr(configSetupJson, "udponoff") == "1") {
|
||||
if (WiFi.status() == WL_CONNECTED) {
|
||||
int packetSize = Udp.parsePacket();
|
||||
if (packetSize) {
|
||||
char udp_incomingPacket[255];
|
||||
Serial.printf("[UDP=>] Received %d bytes from %s, port %d\n", packetSize, Udp.remoteIP().toString().c_str(), Udp.remotePort());
|
||||
received_ip = Udp.remoteIP().toString();
|
||||
int len = Udp.read(udp_incomingPacket, 255);
|
||||
if (len > 0) {
|
||||
udp_incomingPacket[len] = 0;
|
||||
}
|
||||
received_udp_line = String(udp_incomingPacket);
|
||||
if (!isUdpEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (received_udp_line.indexOf("iotm;") >= 0) {
|
||||
udp_data_parse = true;
|
||||
}
|
||||
if (received_udp_line.indexOf("mqttServer") >= 0) {
|
||||
udp_data_parse = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
int packetSize = udp.parsePacket();
|
||||
if (!packetSize) {
|
||||
return;
|
||||
}
|
||||
|
||||
char udp_packet[255];
|
||||
remote_ip = udp.remoteIP().toString();
|
||||
|
||||
pm.info(prettyBytes(packetSize) + " from " + remote_ip + ":" + udp.remotePort());
|
||||
|
||||
int len = udp.read(udp_packet, 255);
|
||||
if (len) {
|
||||
udp_packet[len] = '\x00';
|
||||
}
|
||||
received = String(udp_packet);
|
||||
if (received.indexOf("iotm;") >= 0 || received.indexOf("mqttServer") >= 0) {
|
||||
udp_data_parse = true;
|
||||
}
|
||||
#endif
|
||||
;
|
||||
}
|
||||
|
||||
void handleUdp_esp32() {
|
||||
#ifdef ESP32
|
||||
if (udp.listenMulticast(udp_multicastIP, udp_port)) {
|
||||
udp.onPacket([](AsyncUDPPacket packet) {
|
||||
received_udp_line = (char*)packet.data();
|
||||
received_ip = packet.remoteIP().toString();
|
||||
received = (char*)packet.data();
|
||||
remote_ip = packet.remoteIP().toString();
|
||||
if (jsonReadStr(configSetupJson, "udponoff") == "1") {
|
||||
if (received_udp_line.indexOf("iotm;") >= 0) {
|
||||
if (received.indexOf("iotm;") >= 0) {
|
||||
udp_data_parse = true;
|
||||
}
|
||||
if (received_udp_line.indexOf("mqttServer") >= 0) {
|
||||
if (received.indexOf("mqttServer") >= 0) {
|
||||
udp_data_parse = true;
|
||||
}
|
||||
}
|
||||
@@ -101,25 +108,23 @@ void handleUdp_esp32() {
|
||||
}
|
||||
|
||||
void do_udp_data_parse() {
|
||||
if (udp_data_parse) {
|
||||
udp_data_parse = false;
|
||||
Serial.print("[UDP=>] " + received_ip);
|
||||
Serial.print(" ");
|
||||
Serial.println(received_udp_line);
|
||||
if (received_udp_line.indexOf("mqttServer") >= 0) {
|
||||
jsonWriteStr(configSetupJson, "mqttServer", jsonReadStr(received_udp_line, "mqttServer"));
|
||||
jsonWriteInt(configSetupJson, "mqttPort", jsonReadInt(received_udp_line, "mqttPort"));
|
||||
jsonWriteStr(configSetupJson, "mqttPrefix", jsonReadStr(received_udp_line, "mqttPrefix"));
|
||||
jsonWriteStr(configSetupJson, "mqttUser", jsonReadStr(received_udp_line, "mqttUser"));
|
||||
jsonWriteStr(configSetupJson, "mqttPass", jsonReadStr(received_udp_line, "mqttPass"));
|
||||
saveConfig();
|
||||
Serial.println("[V] new mqtt setting received from udp and saved");
|
||||
mqttParamsChanged = true;
|
||||
}
|
||||
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);
|
||||
}
|
||||
if (!udp_data_parse) {
|
||||
return;
|
||||
}
|
||||
if (received.indexOf("mqttServer") >= 0) {
|
||||
pm.info("received setting");
|
||||
jsonWriteStr(configSetupJson, "mqttServer", jsonReadStr(received, "mqttServer"));
|
||||
jsonWriteInt(configSetupJson, "mqttPort", jsonReadInt(received, "mqttPort"));
|
||||
jsonWriteStr(configSetupJson, "mqttPrefix", jsonReadStr(received, "mqttPrefix"));
|
||||
jsonWriteStr(configSetupJson, "mqttUser", jsonReadStr(received, "mqttUser"));
|
||||
jsonWriteStr(configSetupJson, "mqttPass", jsonReadStr(received, "mqttPass"));
|
||||
saveConfig();
|
||||
mqttParamsChanged = true;
|
||||
}
|
||||
if (received.indexOf("iotm;") >= 0) {
|
||||
add_dev_in_list("dev.csv", selectFromMarkerToMarker(received, ";", 1), selectFromMarkerToMarker(received, ";", 2), received);
|
||||
}
|
||||
udp_data_parse = false;
|
||||
}
|
||||
|
||||
void add_dev_in_list(String filename, String id, String dev_name, String ip) {
|
||||
@@ -130,28 +135,26 @@ void add_dev_in_list(String filename, String id, String dev_name, String ip) {
|
||||
}
|
||||
|
||||
void send_mqtt_to_udp() {
|
||||
if (jsonReadStr(configSetupJson, "udponoff") == "1") {
|
||||
if (WiFi.status() == WL_CONNECTED) {
|
||||
udp_busy = true;
|
||||
String mqtt_data = "{}";
|
||||
jsonWriteStr(mqtt_data, "mqttServer", jsonReadStr(configSetupJson, "mqttServer"));
|
||||
jsonWriteInt(mqtt_data, "mqttPort", jsonReadInt(configSetupJson, "mqttPort"));
|
||||
jsonWriteStr(mqtt_data, "mqttPrefix", jsonReadStr(configSetupJson, "mqttPrefix"));
|
||||
jsonWriteStr(mqtt_data, "mqttUser", jsonReadStr(configSetupJson, "mqttUser"));
|
||||
jsonWriteStr(mqtt_data, "mqttPass", jsonReadStr(configSetupJson, "mqttPass"));
|
||||
Serial.println(mqtt_data);
|
||||
if (!isUdpEnabled()) {
|
||||
return;
|
||||
}
|
||||
udp_busy = true;
|
||||
String data = "{}";
|
||||
jsonWriteStr(data, "mqttServer", jsonReadStr(configSetupJson, "mqttServer"));
|
||||
jsonWriteInt(data, "mqttPort", jsonReadInt(configSetupJson, "mqttPort"));
|
||||
jsonWriteStr(data, "mqttPrefix", jsonReadStr(configSetupJson, "mqttPrefix"));
|
||||
jsonWriteStr(data, "mqttUser", jsonReadStr(configSetupJson, "mqttUser"));
|
||||
jsonWriteStr(data, "mqttPass", jsonReadStr(configSetupJson, "mqttPass"));
|
||||
#ifdef ESP8266
|
||||
Udp.beginPacketMulticast(udp_multicastIP, udp_port, WiFi.localIP());
|
||||
Udp.write(mqtt_data.c_str());
|
||||
Udp.endPacket();
|
||||
udp.beginPacketMulticast(udp_multicastIP, udp_port, WiFi.localIP());
|
||||
udp.write(data.c_str());
|
||||
udp.endPacket();
|
||||
#endif
|
||||
#ifdef ESP32
|
||||
udp.broadcast(mqtt_data.c_str());
|
||||
udp.broadcast(mqtt_data.c_str());
|
||||
#endif
|
||||
Serial.println("[UDP<=] mqtt info send");
|
||||
udp_busy = false;
|
||||
}
|
||||
}
|
||||
pm.info("sent info");
|
||||
udp_busy = false;
|
||||
}
|
||||
|
||||
void do_mqtt_send_settings_to_udp() {
|
||||
|
||||
Reference in New Issue
Block a user