From aad28b04bcfc3fa9c3cf9c99df79a8652dd4e0c0 Mon Sep 17 00:00:00 2001 From: biver Date: Tue, 14 Feb 2023 22:27:32 +0300 Subject: [PATCH 1/4] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D0=B5=D0=BC=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA?= =?UTF-8?q?=D1=83=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82=D0=B0=20{"status"?= =?UTF-8?q?:"0"}=20=D0=B2=20MQTT=20control=20=D0=B4=D0=BB=D1=8F=20=D0=B2?= =?UTF-8?q?=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=D1=81=D1=82=D0=B8=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B0=D1=82=D1=8C=20=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D1=82=D1=83=D1=81=20=D0=B8=20=D0=B7=D0=BD=D0=B0=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B2=20=D0=BE=D0=B4=D0=BD=D0=BE?= =?UTF-8?q?=D0=BC=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82=D0=B5,=20=D1=8D?= =?UTF-8?q?=D1=82=D0=BE=20=D0=BD=D1=83=D0=B6=D0=BD=D0=BE=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=BA=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82=D0=BD=D0=BE?= =?UTF-8?q?=D0=B9=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D0=BF=D0=B0?= =?UTF-8?q?=D0=BD=D0=B5=D0=BB=D0=B8=20=D1=83=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F,=20=D0=BD=D0=B0=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D0=BC=D0=B5=D1=80,=20=D0=90=D0=BB=D0=B8=D1=81=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MqttClient.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/MqttClient.cpp b/src/MqttClient.cpp index 8ec11fe8..c2480941 100644 --- a/src/MqttClient.cpp +++ b/src/MqttClient.cpp @@ -160,9 +160,14 @@ void mqttCallback(char* topic, uint8_t* payload, size_t length) { #endif } - else if (topicStr.indexOf("control") != -1) { + else if (topicStr.indexOf(F("control")) != -1) { String key = selectFromMarkerToMarker(topicStr, "/", 3); - generateOrder(key, payloadStr); + + String valueIfJson = ""; // проверяем формат, если json то берем статус, иначе - как есть + if (!jsonRead(payloadStr, F("status"), valueIfJson, false)) + generateOrder(key, payloadStr); + else generateOrder(key, valueIfJson); + SerialPrint("i", F("=>MQTT"), "Msg from iotmanager app: " + key + " " + payloadStr); } From 08116d84c71e1d5b8fa10f7360a752e2ec04e6d7 Mon Sep 17 00:00:00 2001 From: biver Date: Wed, 15 Feb 2023 00:20:08 +0300 Subject: [PATCH 2/4] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D0=B5=D0=BC=20=D1=81=D0=BA=D1=80=D0=B8=D0=BF=D1=82=20PrepareSe?= =?UTF-8?q?rver.py=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D0=BE=D0=B4=D0=B3=D0=BE?= =?UTF-8?q?=D1=82=D0=BE=D0=B2=D0=BA=D0=B8=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20"=D0=BF=D0=BE=20=D0=B2=D0=BE?= =?UTF-8?q?=D0=B7=D0=B4=D1=83=D1=85=D1=83"=20=D0=9A=D0=BE=D0=BC=D0=BF?= =?UTF-8?q?=D0=B8=D0=BB=D0=B8=D1=80=D1=83=D0=B5=D1=82=D1=81=D1=8F=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D1=88=D0=B8=D0=B2=D0=BA=D0=B0=20=D0=B8=20=D1=84?= =?UTF-8?q?=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2=D0=B0=D1=8F=20=D1=81=D0=B8=D1=81?= =?UTF-8?q?=D1=82=D0=B5=D0=BC=D0=B0.=20=D0=A0=D0=B5=D0=BA=D0=BE=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=B4=D1=83=D0=B5=D1=82=D1=81=D1=8F=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B5=D0=B4=D0=B2=D0=B0=D1=80=D0=B8=D1=82=D0=B5=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=BF=D0=BE=D0=B4=D0=B3=D0=BE=D1=82=D0=BE=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=20?= =?UTF-8?q?=D1=81=20=D0=BF=D0=BE=D0=BC=D0=BE=D1=89=D1=8C=D1=8E=20PreparePr?= =?UTF-8?q?oject.py=20=D0=90=D0=B2=D1=82=D0=BE=D0=BC=D0=B0=D1=82=D0=B8?= =?UTF-8?q?=D1=87=D0=B5=D1=81=D0=BA=D0=B8=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0?= =?UTF-8?q?=D0=B5=D1=82=D1=81=D1=8F=20=D0=BF=D0=B0=D0=BF=D0=BA=D0=B0=20iot?= =?UTF-8?q?m=20=D1=81=20=D0=B1=D0=B8=D0=BD=D0=B0=D1=80=D0=BD=D1=8B=D0=BC?= =?UTF-8?q?=D0=B8=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0=D0=BC=D0=B8=20=D0=B8=20?= =?UTF-8?q?=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83=D1=80=D0=BE=D0=B9=20?= =?UTF-8?q?=D0=B4=D0=BE=D1=81=D1=82=D0=B0=D1=82=D0=BE=D1=87=D0=BD=D0=BE?= =?UTF-8?q?=D0=B9=20=D0=B4=D0=BB=D1=8F=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20"=D0=BF=D0=BE=20=D0=B2=D0=BE?= =?UTF-8?q?=D0=B7=D0=B4=D1=83=D1=85=D1=83".=20=D0=92=D1=80=D0=B5=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=BD=D0=BE=20=D0=BF=D1=80=D0=B5=D0=B4=D0=BB=D0=B0?= =?UTF-8?q?=D0=B3=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20=D0=B2=D0=BE=D1=81=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=D1=81?= =?UTF-8?q?=D1=8F=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B9=20999,=20=D0=BD?= =?UTF-8?q?=D0=BE=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D1=88=D0=B8=D0=B2=D0=BA=D0=B8=20=D0=B1=D1=83=D0=B4=D0=B5=D1=82?= =?UTF-8?q?=20=D1=83=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B0=20=D1=82=D0=B0,=20=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D0=BE?= =?UTF-8?q?=D0=B9=20=D1=81=D0=BE=D0=BE=D1=82=D0=B2=D0=B5=D1=82=D1=81=D1=82?= =?UTF-8?q?=D0=B2=D1=83=D0=B5=D1=82=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B0?= =?UTF-8?q?.=20=D0=94=D0=BB=D1=8F=20=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=B2=D0=B5=D0=B1-=D1=81=D0=B5=D1=80=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=B0=20=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=20=D0=B8=D1=81?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20?= =?UTF-8?q?=D1=80=D0=B0=D1=81=D1=88=D0=B8=D1=80=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?vscode:=20Live=20Server.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PrepareServer.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 PrepareServer.py diff --git a/PrepareServer.py b/PrepareServer.py new file mode 100644 index 00000000..e436d345 --- /dev/null +++ b/PrepareServer.py @@ -0,0 +1,43 @@ +# подготавливаем папку для локального сервера обновлений +# для этого компилируем проект и получаем бинарные файлы: +# firmware.bin, littlefs.bin и ver.json + +import shutil +import configparser +import os, json, sys, getopt +from pathlib import Path + +config = configparser.ConfigParser() # создаём объекта парсера INI +config.read("platformio.ini") +deviceName = config["platformio"]["default_envs"] + +homeDir = os.path.expanduser('~') +os.system(homeDir + "\.platformio\penv\Scripts\pio run") +os.system(homeDir + "\.platformio\penv\Scripts\pio run -t buildfs") + +firmwareSrcPath = ".pio/build/" + deviceName + "/firmware.bin" +littlefsSrcPath = ".pio/build/" + deviceName + "/littlefs.bin" + +if Path(firmwareSrcPath).is_file(): + print("Ok...... \"" + firmwareSrcPath + "\" Exist!") + firmwareDstPath = "iotm/" + deviceName + "/999/firmware.bin" + Path(firmwareDstPath).parent.mkdir(parents=True, exist_ok=True) + shutil.copy(firmwareSrcPath, firmwareDstPath) + + if Path(littlefsSrcPath).is_file(): + print("Ok...... \"" + littlefsSrcPath + "\" Exist!") + littlefsDstPath = "iotm/" + deviceName + "/999/littlefs.bin" + Path(littlefsDstPath).parent.mkdir(parents=True, exist_ok=True) + shutil.copy(littlefsSrcPath, littlefsDstPath) + + versionsJson = json.loads('{"' + deviceName + '": {"0": "999"}}') + with open("iotm/ver.json", "w", encoding='utf-8') as write_file: + json.dump(versionsJson, write_file, ensure_ascii=False, indent=4, sort_keys=False) + + print(f"\x1b[1;31;42m Сервер для обновления 'по воздуху' для " + deviceName + " подготовлен. Не забудьте установить расширение Live Server, запустить его и прописать в ESP IP вашего компьютера. Подробнее смотрите в WIKI: https://iotmanager.org/wiki.\x1b[0m") + + else: + print("Error...... \"" + littlefsSrcPath + "\" Not exist!") + +else: + print("Error...... \"" + firmwareSrcPath + "\" Not exist!") \ No newline at end of file From 399060b5d43d900bd612ea332f8e3288c05dd31c Mon Sep 17 00:00:00 2001 From: biver Date: Wed, 15 Feb 2023 09:40:57 +0300 Subject: [PATCH 3/4] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D0=BC=20=D0=BA=D0=BE=D0=B4=20=D1=83=D0=BD=D0=B8?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D1=81=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B9=20?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B8=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PrepareServer.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/PrepareServer.py b/PrepareServer.py index e436d345..ab5187dc 100644 --- a/PrepareServer.py +++ b/PrepareServer.py @@ -20,17 +20,17 @@ littlefsSrcPath = ".pio/build/" + deviceName + "/littlefs.bin" if Path(firmwareSrcPath).is_file(): print("Ok...... \"" + firmwareSrcPath + "\" Exist!") - firmwareDstPath = "iotm/" + deviceName + "/999/firmware.bin" + firmwareDstPath = "iotm/" + deviceName + "/400/firmware.bin" Path(firmwareDstPath).parent.mkdir(parents=True, exist_ok=True) shutil.copy(firmwareSrcPath, firmwareDstPath) if Path(littlefsSrcPath).is_file(): print("Ok...... \"" + littlefsSrcPath + "\" Exist!") - littlefsDstPath = "iotm/" + deviceName + "/999/littlefs.bin" + littlefsDstPath = "iotm/" + deviceName + "/400/littlefs.bin" Path(littlefsDstPath).parent.mkdir(parents=True, exist_ok=True) shutil.copy(littlefsSrcPath, littlefsDstPath) - versionsJson = json.loads('{"' + deviceName + '": {"0": "999"}}') + versionsJson = json.loads('{"' + deviceName + '": {"0": "400"}}') with open("iotm/ver.json", "w", encoding='utf-8') as write_file: json.dump(versionsJson, write_file, ensure_ascii=False, indent=4, sort_keys=False) From d242268bb25085165b5ee1bfab5d62b102588d5e Mon Sep 17 00:00:00 2001 From: biver Date: Thu, 16 Feb 2023 14:35:07 +0300 Subject: [PATCH 4/4] =?UTF-8?q?=D0=9E=D0=BF=D1=82=D0=B8=D0=BC=D0=B8=D0=B7?= =?UTF-8?q?=D0=B8=D1=80=D1=83=D0=B5=D0=BC=20=D0=BA=D0=BE=D0=B4,=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F=D0=B5=D0=BC=20partitions.b?= =?UTF-8?q?in=20=D0=B8=20=D0=B7=D0=B0=D1=81=D1=82=D0=B0=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D0=B5=D0=BC=20pio=20=D0=BD=D0=B5=20=D1=83=D0=B4=D0=B0=D0=BB?= =?UTF-8?q?=D1=8F=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PrepareServer.py | 49 +++++++++++++++++++++--------------------------- 1 file changed, 21 insertions(+), 28 deletions(-) diff --git a/PrepareServer.py b/PrepareServer.py index ab5187dc..6ab6d57a 100644 --- a/PrepareServer.py +++ b/PrepareServer.py @@ -1,43 +1,36 @@ # подготавливаем папку для локального сервера обновлений # для этого компилируем проект и получаем бинарные файлы: -# firmware.bin, littlefs.bin и ver.json +# firmware.bin, littlefs.bin, partitions.bin и ver.json import shutil import configparser import os, json, sys, getopt from pathlib import Path + +def copyFileIfExist(fileName, deviceName): + srcFilePath = ".pio/build/" + deviceName + "/" + fileName + dstFilePath = "iotm/" + deviceName + "/400/" + fileName + if Path(srcFilePath).is_file(): + print("Ok...... \"" + srcFilePath + "\" на месте!") + Path(dstFilePath).parent.mkdir(parents=True, exist_ok=True) + shutil.copy(srcFilePath, dstFilePath) + return True + else: + print("Error...... \"" + srcFilePath + "\" НЕ существует!") + return False + + config = configparser.ConfigParser() # создаём объекта парсера INI config.read("platformio.ini") deviceName = config["platformio"]["default_envs"] homeDir = os.path.expanduser('~') os.system(homeDir + "\.platformio\penv\Scripts\pio run") -os.system(homeDir + "\.platformio\penv\Scripts\pio run -t buildfs") +os.system(homeDir + "\.platformio\penv\Scripts\pio run -t buildfs --disable-auto-clean") -firmwareSrcPath = ".pio/build/" + deviceName + "/firmware.bin" -littlefsSrcPath = ".pio/build/" + deviceName + "/littlefs.bin" - -if Path(firmwareSrcPath).is_file(): - print("Ok...... \"" + firmwareSrcPath + "\" Exist!") - firmwareDstPath = "iotm/" + deviceName + "/400/firmware.bin" - Path(firmwareDstPath).parent.mkdir(parents=True, exist_ok=True) - shutil.copy(firmwareSrcPath, firmwareDstPath) - - if Path(littlefsSrcPath).is_file(): - print("Ok...... \"" + littlefsSrcPath + "\" Exist!") - littlefsDstPath = "iotm/" + deviceName + "/400/littlefs.bin" - Path(littlefsDstPath).parent.mkdir(parents=True, exist_ok=True) - shutil.copy(littlefsSrcPath, littlefsDstPath) - - versionsJson = json.loads('{"' + deviceName + '": {"0": "400"}}') - with open("iotm/ver.json", "w", encoding='utf-8') as write_file: - json.dump(versionsJson, write_file, ensure_ascii=False, indent=4, sort_keys=False) - - print(f"\x1b[1;31;42m Сервер для обновления 'по воздуху' для " + deviceName + " подготовлен. Не забудьте установить расширение Live Server, запустить его и прописать в ESP IP вашего компьютера. Подробнее смотрите в WIKI: https://iotmanager.org/wiki.\x1b[0m") - - else: - print("Error...... \"" + littlefsSrcPath + "\" Not exist!") - -else: - print("Error...... \"" + firmwareSrcPath + "\" Not exist!") \ No newline at end of file +if copyFileIfExist("firmware.bin", deviceName) and copyFileIfExist("littlefs.bin", deviceName) and copyFileIfExist("partitions.bin", deviceName): + versionsJson = json.loads('{"' + deviceName + '": {"0": "400"}}') + with open("iotm/ver.json", "w", encoding='utf-8') as write_file: + json.dump(versionsJson, write_file, ensure_ascii=False, indent=4, sort_keys=False) + print(f"\x1b[1;31;42m Сервер для обновления 'по воздуху' для " + deviceName + " подготовлен. Не забудьте установить расширение Live Server, запустить его и прописать в ESP IP вашего компьютера. Подробнее смотрите в WIKI: https://iotmanager.org/wiki.\x1b[0m") \ No newline at end of file