mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-26 22:22:16 +03:00
168 lines
5.0 KiB
C++
168 lines
5.0 KiB
C++
|
|
#define DEBUG_SERIAL_ENABLE
|
|
#include "Global.h"
|
|
#include "classes/IoTItem.h"
|
|
#include "ESPNexUpload.h"
|
|
bool updated = false;
|
|
|
|
class NextionUpload : public IoTItem
|
|
{
|
|
private:
|
|
String _url;
|
|
String _host;
|
|
int _NEXT_RX;
|
|
int _NEXT_TX;
|
|
bool _UpTelegram;
|
|
|
|
public:
|
|
NextionUpload(String parameters) : IoTItem(parameters)
|
|
{
|
|
_url = jsonReadStr(parameters, "url");
|
|
_url = "/" + _url;
|
|
_host = jsonReadStr(parameters, "host");
|
|
|
|
_NEXT_RX = jsonReadInt(parameters, "NEXT_RX");
|
|
_NEXT_TX = jsonReadInt(parameters, "NEXT_TX");
|
|
jsonRead(parameters, "UpTelegram", _UpTelegram);
|
|
|
|
//#define NEXT_RX _NEXT_RX // Nextion RX pin | Default 16
|
|
//#define NEXT_TX _NEXT_TX // Nextion TX pin | Default 17
|
|
}
|
|
|
|
IoTValue execute(String command, std::vector<IoTValue> ¶m)
|
|
{
|
|
|
|
if (command == "Update")
|
|
{
|
|
SerialPrint("I", F("NextionUpdate"), "Update .... ");
|
|
|
|
if (!updated)
|
|
{
|
|
SerialPrint("I", F("NextionUpdate"), "connecting to " + (String)_host);
|
|
HTTPClient http;
|
|
|
|
#if defined ESP8266
|
|
WiFiClient client;
|
|
if (!http.begin(client, _host, 80, _url))
|
|
{
|
|
// Serial.println("connection failed");
|
|
SerialPrint("I", F("NextionUpdate"), "connection failed ");
|
|
}
|
|
#elif defined ESP32
|
|
if (!http.begin(String("http://") + _host + _url))
|
|
{
|
|
// Serial.println("connection failed");
|
|
SerialPrint("I", F("NextionUpdate"), "connection failed ");
|
|
}
|
|
#endif
|
|
|
|
SerialPrint("I", F("NextionUpdate"), "Requesting file: " + (String)_url);
|
|
int code = http.GET();
|
|
// Update the nextion display
|
|
if (code == 200)
|
|
{
|
|
flashNextion(http);
|
|
}
|
|
else
|
|
{
|
|
SerialPrint("I", F("NextionUpdate"), "HTTP error: " + (String)http.errorToString(code).c_str());
|
|
}
|
|
|
|
http.end();
|
|
SerialPrint("I", F("NextionUpdate"), "Closing connection ");
|
|
}
|
|
}
|
|
|
|
return {};
|
|
}
|
|
|
|
void uploadNextionTlgrm(String &url)
|
|
{
|
|
if (!_UpTelegram)
|
|
return;
|
|
if (!updated)
|
|
{
|
|
SerialPrint("I", F("NextionUpdate"), "connecting to " + url);
|
|
|
|
HTTPClient http;
|
|
|
|
#ifdef ESP8266 // esp8266 требует SSl
|
|
return;
|
|
// BearSSL::WiFiClientSecure client;
|
|
// client.setInsecure();
|
|
// http.begin(client, url); // пингуем файл
|
|
#else // esp32 сама умеет SSL
|
|
if (!http.begin(url)) // пингуем файл
|
|
{
|
|
SerialPrint("I", F("NextionUpdate"), "connection failed ");
|
|
}
|
|
#endif
|
|
SerialPrint("I", F("NextionUpdate"), "Requesting file: OK" );
|
|
int code = http.GET();
|
|
// Update the nextion display
|
|
if (code == 200)
|
|
{ // файл доступен
|
|
flashNextion(http);
|
|
}
|
|
else
|
|
{
|
|
SerialPrint("I", F("NextionUpdate"), "HTTP error: " + (String)http.errorToString(code).c_str());
|
|
}
|
|
|
|
http.end();
|
|
SerialPrint("I", F("NextionUpdate"), "Closing connection ");
|
|
}
|
|
}
|
|
|
|
void flashNextion(HTTPClient &http)
|
|
{
|
|
int contentLength = http.getSize();
|
|
SerialPrint("I", F("NextionUpdate"), "File received. Update Nextion... ");
|
|
bool result;
|
|
#ifdef ESP8266
|
|
ESPNexUpload nextion(115200, -1, _NEXT_RX, _NEXT_TX);
|
|
#elif defined(esp32c3m_4mb) || defined(esp32s2_4mb)
|
|
ESPNexUpload nextion(115200, 1, _NEXT_RX, _NEXT_TX);
|
|
#else
|
|
ESPNexUpload nextion(115200, 2, _NEXT_RX, _NEXT_TX);
|
|
#endif
|
|
nextion.setUpdateProgressCallback([]()
|
|
{ SerialPrint("I", F("NextionUpdate"), "... "); });
|
|
|
|
result = nextion.prepareUpload(contentLength);
|
|
if (!result)
|
|
{
|
|
SerialPrint("I", F("NextionUpdate"), "Error: " + (String)nextion.statusMessage);
|
|
}
|
|
else
|
|
{
|
|
SerialPrint("I", F("NextionUpdate"), "Start upload. File size is: " + (String)contentLength);
|
|
result = nextion.upload(*http.getStreamPtr());
|
|
if (result)
|
|
{
|
|
updated = true;
|
|
SerialPrint("I", F("NextionUpdate"), "Succesfully updated Nextion! ");
|
|
}
|
|
else
|
|
{
|
|
SerialPrint("I", F("NextionUpdate"), "Error updating Nextion: " + (String)nextion.statusMessage);
|
|
}
|
|
nextion.end();
|
|
}
|
|
}
|
|
|
|
~NextionUpload(){};
|
|
};
|
|
|
|
void *getAPI_NextionUpload(String subtype, String param)
|
|
{
|
|
if (subtype == F("NextionUpload"))
|
|
{
|
|
return new NextionUpload(param);
|
|
}
|
|
else
|
|
{
|
|
return nullptr;
|
|
}
|
|
}
|