diff --git a/data_svelte/items.json b/data_svelte/items.json index 4a94fc4d..78b0e596 100644 --- a/data_svelte/items.json +++ b/data_svelte/items.json @@ -613,7 +613,33 @@ }, { "global": 0, - "name": "42. Расширитель портов Pcf8574", + "name": "42. MySensorsGate", + "type": "Reading", + "subtype": "MySensorsGate", + "id": "gt", + "widget": "nil", + "page": "", + "descr": "", + "num": 42 + }, + { + "global": 0, + "name": "43. MySensorsNode", + "type": "Reading", + "subtype": "MySensorsNode", + "id": "n", + "widget": "anydataTmp", + "page": "MySensors", + "descr": "Температура", + "orange": 60, + "red": 120, + "offline": 180, + "round": 1, + "num": 43 + }, + { + "global": 0, + "name": "44. Расширитель портов Pcf8574", "type": "Reading", "subtype": "Pcf8574", "id": "Pcf", @@ -623,27 +649,29 @@ "int": "0", "addr": "0x20", "index": 1, - "num": 42 + "num": 44 }, { "global": 0, - "name": "43. PWM ESP8266", + "name": "45. PWM ESP32", "type": "Writing", - "subtype": "Pwm8266", + "subtype": "Pwm32", "id": "pwm", "widget": "range", "page": "Кнопки", "descr": "PWM", "int": 0, - "pin": 15, + "pin": 2, "freq": 5000, + "ledChannel": 2, + "PWM_resolution": 10, "val": 0, "apin": -1, - "num": 43 + "num": 45 }, { "global": 0, - "name": "44. Телеграм-Лайт", + "name": "46. Телеграм-Лайт", "type": "Writing", "subtype": "TelegramLT", "id": "tg", @@ -652,14 +680,14 @@ "descr": "", "token": "", "chatID": "", - "num": 44 + "num": 46 }, { "header": "Экраны" }, { "global": 0, - "name": "45. LCD экран 2004", + "name": "47. LCD экран 2004", "type": "Reading", "subtype": "Lcd2004", "id": "Lcd", @@ -671,10 +699,10 @@ "size": "20,4", "coord": "0,0", "id2show": "id датчика", - "num": 45 + "num": 47 }, { - "name": "46. LCD экран 1602", + "name": "48. LCD экран 1602", "type": "Reading", "subtype": "Lcd2004", "id": "Lcd", @@ -686,6 +714,6 @@ "size": "16,2", "coord": "0,0", "id2show": "id датчика", - "num": 46 + "num": 48 } ] \ No newline at end of file diff --git a/include/utils/TimeUtils.h b/include/utils/TimeUtils.h index 7d3f3a0e..2246729c 100644 --- a/include/utils/TimeUtils.h +++ b/include/utils/TimeUtils.h @@ -2,4 +2,5 @@ #include extern const String prettySeconds(unsigned long time_s); -extern const String prettyMillis(unsigned long time_ms); \ No newline at end of file +extern const String prettyMillis(unsigned long time_ms); +extern const String prettyMinutsTimeout(unsigned long time_m); \ No newline at end of file diff --git a/myProfile.json b/myProfile.json index 1c55765c..571c36dc 100644 --- a/myProfile.json +++ b/myProfile.json @@ -24,7 +24,7 @@ }, "projectProp": { "platformio": { - "default_envs": "esp8266_4mb", + "default_envs": "esp32_4mb", "comments_default_envs": "choose from: esp8266_4mb or esp32_4mb or esp8266_1mb or esp8266_1mb_ota or esp8285_1mb or esp8285_1mb_ota" } }, diff --git a/platformio.ini b/platformio.ini index 117bb9e5..4399047e 100644 --- a/platformio.ini +++ b/platformio.ini @@ -1,5 +1,5 @@ [platformio] -default_envs = esp8266_4mb +default_envs = esp32_4mb data_dir = data_svelte [common_env_data] diff --git a/src/Main.cpp b/src/Main.cpp index 94ae3e25..ea73e295 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -16,10 +16,10 @@ void setup() { Serial.println(); Serial.println(F("--------------started----------------")); - //создание экземпляров классов - // myNotAsyncActions = new NotAsync(do_LAST); + // создание экземпляров классов + // myNotAsyncActions = new NotAsync(do_LAST); - //инициализация файловой системы + // инициализация файловой системы fileSystemInit(); Serial.println(F("------------------------")); Serial.println("FIRMWARE NAME " + String(FIRMWARE_NAME)); @@ -27,16 +27,16 @@ void setup() { Serial.println("WEB VERSION " + getWebVersion()); Serial.println(F("------------------------")); - //получение chip id + // получение chip id setChipId(); - //синхронизация глобальных переменных с flash + // синхронизация глобальных переменных с flash globalVarsSync(); - //подключаемся к роутеру + // подключаемся к роутеру routerConnect(); -//инициализация асинхронного веб сервера и веб сокетов +// инициализация асинхронного веб сервера и веб сокетов #ifdef ASYNC_WEB_SERVER asyncWebServerInit(); #endif @@ -44,7 +44,7 @@ void setup() { asyncWebSocketsInit(); #endif -//инициализация стандартного веб сервера и веб сокетов +// инициализация стандартного веб сервера и веб сокетов #ifdef STANDARD_WEB_SERVER standWebServerInit(); #endif @@ -55,7 +55,7 @@ void setup() { // NTP ntpInit(); - //инициализация mqtt + // инициализация mqtt mqttInit(); // настраиваем i2c шину @@ -75,19 +75,19 @@ void setup() { SerialPrint("i", "i2c", F("i2c pins overriding done")); } - //настраиваем микроконтроллер + // настраиваем микроконтроллер configure("/config.json"); - //инициализация задач переодического выполнения + // инициализация задач переодического выполнения periodicTasksInit(); - //синхронизация списка устройств + // синхронизация списка устройств addThisDeviceToList(); - //запуск работы udp + // запуск работы udp asyncUdpInit(); - //подготавливаем сценарии + // подготавливаем сценарии iotScen.loadScenario("/scenario.txt"); // создаем событие завершения конфигурирования для возможности выполнения блока кода при загрузке @@ -122,9 +122,9 @@ void setup() { // IoTItems.push_back((IoTItem*)new externalVariable("{\"id\":\"rel4\",\"val\":34,\"int\":30}")); // пример получения JSON всех Items // Serial.println(getParamsJson()); - //чтение одного параметра + // чтение одного параметра // Serial.println(findIoTItem("t1")->getValue()); - //тест перебора пинов из расширения + // тест перебора пинов из расширения // for (int i = 109; i < 112; i++) { // IoTgpio.pinMode(i, OUTPUT); // IoTgpio.digitalWrite(i, !IoTgpio.digitalRead(i)); @@ -172,10 +172,10 @@ void loop() { // #endif } -//отправка json -//#ifdef QUEUE_FROM_STR -// if (sendJsonFiles) sendJsonFiles->loop(); -//#endif +// отправка json +// #ifdef QUEUE_FROM_STR +// if (sendJsonFiles) sendJsonFiles->loop(); +// #endif // if(millis()%2000==0){ // //watch->settimeUnix(time(&iotTimeNow)); diff --git a/src/modules/API.cpp b/src/modules/API.cpp index 12df2c22..e088171b 100644 --- a/src/modules/API.cpp +++ b/src/modules/API.cpp @@ -24,8 +24,9 @@ void* getAPI_IoTServo(String subtype, String params); void* getAPI_Mcp23017(String subtype, String params); void* getAPI_Mp3(String subtype, String params); void* getAPI_Multitouch(String subtype, String params); +void* getAPI_MySensorsGate(String subtype, String params); void* getAPI_Pcf8574(String subtype, String params); -void* getAPI_Pwm8266(String subtype, String params); +void* getAPI_Pwm32(String subtype, String params); void* getAPI_TelegramLT(String subtype, String params); void* getAPI_Lcd2004(String subtype, String params); @@ -55,8 +56,9 @@ if ((tmpAPI = getAPI_IoTServo(subtype, params)) != nullptr) return tmpAPI; if ((tmpAPI = getAPI_Mcp23017(subtype, params)) != nullptr) return tmpAPI; if ((tmpAPI = getAPI_Mp3(subtype, params)) != nullptr) return tmpAPI; if ((tmpAPI = getAPI_Multitouch(subtype, params)) != nullptr) return tmpAPI; +if ((tmpAPI = getAPI_MySensorsGate(subtype, params)) != nullptr) return tmpAPI; if ((tmpAPI = getAPI_Pcf8574(subtype, params)) != nullptr) return tmpAPI; -if ((tmpAPI = getAPI_Pwm8266(subtype, params)) != nullptr) return tmpAPI; +if ((tmpAPI = getAPI_Pwm32(subtype, params)) != nullptr) return tmpAPI; if ((tmpAPI = getAPI_TelegramLT(subtype, params)) != nullptr) return tmpAPI; if ((tmpAPI = getAPI_Lcd2004(subtype, params)) != nullptr) return tmpAPI; return nullptr; diff --git a/src/modules/exec/MySensors/MySensorsGate.cpp b/src/modules/exec/MySensors/MySensorsGate.cpp index 234a0706..717c0954 100644 --- a/src/modules/exec/MySensors/MySensorsGate.cpp +++ b/src/modules/exec/MySensors/MySensorsGate.cpp @@ -82,16 +82,16 @@ class MySensorsGate : public IoTItem { static String infoJson = "{}"; if (childSensorId == "255") { - if (command == "3") { //это особое внутреннее сообщение - if (type == "11") { //название ноды + if (command == "3") { // это особое внутреннее сообщение + if (type == "11") { // название ноды SerialPrint("i", "MySensors", "===================== " + value + " ====================="); } - if (type == "12") { //версия ноды + if (type == "12") { // версия ноды SerialPrint("i", "MySensors", "Node version: " + value); } } } else { - if (command == "0") { //это презентация + if (command == "0") { // это презентация presentBeenStarted = true; int num; String widget; @@ -101,7 +101,7 @@ class MySensorsGate : public IoTItem { descr.replace("#", " "); SerialPrint("i", "MySensors", "Presentation: " + ID + ": " + descr); } - if (command == "1") { //это данные + if (command == "1") { // это данные if (value != "") { if (presentBeenStarted) { presentBeenStarted = false; @@ -120,7 +120,7 @@ class MySensorsGate : public IoTItem { SerialPrint("i", "MySensors", "node: " + nodeId + ", sensor: " + childSensorId + ", command: " + command + ", type: " + type + ", val: " + value + ", found: " + String(found)); } } - if (command == "2") { //это запрос значения переменной + if (command == "2") { // это запрос значения переменной SerialPrint("i", "MySensors", "Request a variable value"); } } @@ -387,23 +387,23 @@ class MySensorsNode : public IoTItem { } } - //событие когда пользователь подключается приложением или веб интерфейсом к усройству + // событие когда пользователь подключается приложением или веб интерфейсом к усройству void onMqttWsAppConnectEvent() { setNewWidgetAttributes(); } void setNewWidgetAttributes() { if (dataFromNode) { - jsonWriteStr(json, F("info"), String(_minutesPassed) + " min"); + jsonWriteStr(json, F("info"), prettyMinutsTimeout(_minutesPassed)); if (orange != 0 && red != 0 && offline != 0) { if (_minutesPassed < orange) { jsonWriteStr(json, F("color"), ""); } if (_minutesPassed >= orange && _minutesPassed < red) { - jsonWriteStr(json, F("color"), F("orange")); //сделаем виджет оранжевым + jsonWriteStr(json, F("color"), F("orange")); // сделаем виджет оранжевым } if (_minutesPassed >= red && _minutesPassed < offline) { - jsonWriteStr(json, F("color"), F("red")); //сделаем виджет красным + jsonWriteStr(json, F("color"), F("red")); // сделаем виджет красным } if (_minutesPassed >= offline) { jsonWriteStr(json, F("info"), F("offline")); diff --git a/src/modules/exec/MySensors/modinfo.json b/src/modules/exec/MySensors/modinfo.json index fbad41d6..b611a1d7 100644 --- a/src/modules/exec/MySensors/modinfo.json +++ b/src/modules/exec/MySensors/modinfo.json @@ -41,7 +41,10 @@ "moduleDesc": "Устройство состоит из esp32 и подключенному к нему радиомодулю NRF24L01. Вместе в связке они образуют гейт, способный принимать данные датчиков. Датчики способны работать до нескольких лет на батарейках. Датчики делаются на базе nrf52832 от holyiot. Батарейки подключаются напрямик к nrf52832", "retInfo": "", "propInfo": { - "id": "Для настройки следует выбрать один раз MySensorsGate и выбрать сколько необходимо раз MySensorsNode. Вместо ID нужно указать например - n100s1. Это значит что мы будем получать данные с ноды 100 и с сенсора этой ноды под номером 1" + "id": "Для настройки следует выбрать один раз MySensorsGate и выбрать сколько необходимо раз MySensorsNode. Вместо ID нужно указать например - n100s1. Это значит что мы будем получать данные с ноды 100 и с сенсора этой ноды под номером 1", + "orange": "количество минут после которого окрасить виджет в оранжевый цвет", + "red": "количество минут после которого окрасить виджет в красный цвет", + "offline": "количество минут после которого отобразить что устройство offline, если все три orange red и offline поставить в ноль - то функция окраски выключится" } }, "defActive": false, diff --git a/src/utils/TimeUtils.cpp b/src/utils/TimeUtils.cpp index d82467a8..ef850250 100644 --- a/src/utils/TimeUtils.cpp +++ b/src/utils/TimeUtils.cpp @@ -32,4 +32,31 @@ const String prettySeconds(unsigned long time_s) { const String prettyMillis(unsigned long time_ms) { return prettySeconds(time_ms / 1000); +} + +const String prettyMinutsTimeout(unsigned long time_m) { + unsigned long tmp = time_m * 60; + unsigned long seconds; + unsigned long minutes; + unsigned long hours; + unsigned long days; + seconds = tmp % 60; + tmp = tmp / 60; + + minutes = tmp % 60; + tmp = tmp / 60; + + hours = tmp % 24; + days = tmp / 24; + + char buf[32]; + + if (days) { + sprintf_P(buf, "%d day %d hr %d min", days, hours, minutes, seconds); + } else if (hours && !days) { + sprintf_P(buf, "%d hr %d min", hours, minutes); + } else { + sprintf_P(buf, "%d min", minutes); + } + return String(buf); } \ No newline at end of file