mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-30 11:59:12 +03:00
new NextionUpload + Telegram_v2
This commit is contained in:
@@ -74,6 +74,9 @@ class IoTItem {
|
|||||||
virtual void onModuleOrder(String& key, String& value);
|
virtual void onModuleOrder(String& key, String& value);
|
||||||
virtual void onTrackingValue(IoTItem* item); // момент, когда ядро заметило изменение отслеживаемого значения
|
virtual void onTrackingValue(IoTItem* item); // момент, когда ядро заметило изменение отслеживаемого значения
|
||||||
|
|
||||||
|
// для обновления экрана Nextion из телеграм
|
||||||
|
virtual void uploadNextionTlgrm(String &url);
|
||||||
|
|
||||||
// методы для графиков (будет упрощено)
|
// методы для графиков (будет упрощено)
|
||||||
virtual void publishValue();
|
virtual void publishValue();
|
||||||
virtual void clearValue();
|
virtual void clearValue();
|
||||||
|
|||||||
@@ -206,6 +206,9 @@ bool IoTItem::isTracking(IoTItem* item) {
|
|||||||
void IoTItem::sendTelegramMsg(bool often, String msg) {}
|
void IoTItem::sendTelegramMsg(bool often, String msg) {}
|
||||||
void IoTItem::sendFoto(uint8_t *buf, uint32_t length, const String &name) {}
|
void IoTItem::sendFoto(uint8_t *buf, uint32_t length, const String &name) {}
|
||||||
void IoTItem::editFoto(uint8_t *buf, uint32_t length, const String &name) {}
|
void IoTItem::editFoto(uint8_t *buf, uint32_t length, const String &name) {}
|
||||||
|
// для обновления экрана Nextion из телеграм
|
||||||
|
void IoTItem::uploadNextionTlgrm(String &url) {}
|
||||||
|
|
||||||
// методы для графиков (будет упрощено)
|
// методы для графиков (будет упрощено)
|
||||||
void IoTItem::publishValue() {}
|
void IoTItem::publishValue() {}
|
||||||
void IoTItem::clearValue() {}
|
void IoTItem::clearValue() {}
|
||||||
|
|||||||
160
src/modules/display/NextionUpload/NextionUpload.cpp
Normal file
160
src/modules/display/NextionUpload/NextionUpload.cpp
Normal file
@@ -0,0 +1,160 @@
|
|||||||
|
|
||||||
|
#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
|
||||||
|
if (!http.begin(_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: " + (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 ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void flashNextion(HTTPClient &http)
|
||||||
|
{
|
||||||
|
int contentLength = http.getSize();
|
||||||
|
SerialPrint("I", F("NextionUpdate"), "File received. Update Nextion... ");
|
||||||
|
bool result;
|
||||||
|
ESPNexUpload nextion(115200);
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
63
src/modules/display/NextionUpload/modinfo.json
Normal file
63
src/modules/display/NextionUpload/modinfo.json
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
{
|
||||||
|
"menuSection": "screens",
|
||||||
|
"configItem": [
|
||||||
|
{
|
||||||
|
"global": 0,
|
||||||
|
"name": "Nextion Uploud",
|
||||||
|
"type": "Reading",
|
||||||
|
"subtype": "NextionUpload",
|
||||||
|
"id": "Nextion",
|
||||||
|
"widget": "",
|
||||||
|
"page": "",
|
||||||
|
"descr": "",
|
||||||
|
"host": "192.168.1.10",
|
||||||
|
"url": "nextion.tft",
|
||||||
|
"NEXT_TX": 16,
|
||||||
|
"NEXT_RX": 17,
|
||||||
|
"UpTelegram": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"about": {
|
||||||
|
"authorName": "AVAKS",
|
||||||
|
"authorContact": "https://t.me/@avaks_dev",
|
||||||
|
"authorGit": "https://github.com/avaksru",
|
||||||
|
"specialThanks": "",
|
||||||
|
"moduleName": "NextionUpload",
|
||||||
|
"moduleVersion": "1.1",
|
||||||
|
"usedRam": {
|
||||||
|
"esp32_4mb": 15,
|
||||||
|
"esp8266_4mb": 15
|
||||||
|
},
|
||||||
|
"title": "Nextion Upload",
|
||||||
|
"moduleDesc": "загрузка прошивки в дисплей Nextion. Команда для запуска обновления дисплея: Nextion.Update(); ",
|
||||||
|
"propInfo": {
|
||||||
|
"host": "Сервер обновления. Можно использовать LiveServer из VisualCode, указывать ip адрес",
|
||||||
|
"url": "файл прошивки экрана, указывать с расширением, например nextion.tft или iotm/test.tft",
|
||||||
|
"UpTelegram": "1 - разрешает прошивать экран через модуль Telegram_v2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"defActive": false,
|
||||||
|
"usedLibs": {
|
||||||
|
"esp32_4mb": [
|
||||||
|
"https://github.com/Nredor/ESPNexUpload.git"
|
||||||
|
],
|
||||||
|
"esp32_4mb3f": [
|
||||||
|
"https://github.com/Nredor/ESPNexUpload.git"
|
||||||
|
],
|
||||||
|
"esp8266_4mb": [
|
||||||
|
"https://github.com/Nredor/ESPNexUpload.git"
|
||||||
|
],
|
||||||
|
"esp8266_1mb": [
|
||||||
|
"https://github.com/Nredor/ESPNexUpload.git"
|
||||||
|
],
|
||||||
|
"esp8266_1mb_ota": [
|
||||||
|
"https://github.com/Nredor/ESPNexUpload.git"
|
||||||
|
],
|
||||||
|
"esp8285_1mb": [
|
||||||
|
"https://github.com/Nredor/ESPNexUpload.git"
|
||||||
|
],
|
||||||
|
"esp8285_1mb_ota": [
|
||||||
|
"https://github.com/Nredor/ESPNexUpload.git"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -240,9 +240,10 @@ public:
|
|||||||
}
|
}
|
||||||
else if (msg.text.indexOf("nextion") != -1 && msg.chatID == _chatID)
|
else if (msg.text.indexOf("nextion") != -1 && msg.chatID == _chatID)
|
||||||
{
|
{
|
||||||
if (downloadFile(msg))
|
for (std::list<IoTItem *>::iterator it = IoTItems.begin(); it != IoTItems.end(); ++it) {
|
||||||
{
|
if ((*it)->getSubtype() == "NextionUpload") {
|
||||||
// flashNextion();
|
(*it)->uploadNextionTlgrm(msg.fileUrl);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user