From 4fb6698de66c49428f72300cf0ad8927b0080a13 Mon Sep 17 00:00:00 2001 From: Ilya Belyakov Date: Sat, 28 Oct 2023 21:19:46 +0300 Subject: [PATCH] =?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=B2=20RTC=20=D1=83=D1=81=D1=82=D0=B0=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=BA=D1=83=20=D0=B8=20=D1=87=D1=82=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B2=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=B8=20?= =?UTF-8?q?=D0=B8=D0=B7=20=D1=81=D1=86=D0=B5=D0=BD=D0=B0=D1=80=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=B2=20=D1=87=D0=B8=D1=81=D0=BB=D0=B0=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/sensors/RTC/RTC.cpp | 36 ++++++++++++++++++++++++++++ src/modules/sensors/RTC/modinfo.json | 21 ++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/src/modules/sensors/RTC/RTC.cpp b/src/modules/sensors/RTC/RTC.cpp index b9994c5c..ea1dee8b 100644 --- a/src/modules/sensors/RTC/RTC.cpp +++ b/src/modules/sensors/RTC/RTC.cpp @@ -63,6 +63,42 @@ class RTC : public IoTItem { valTmp.valS = _watch->gettime(param[0].valS + " "); return valTmp; } + } else if (command == "setUnixTime") { + if (param.size() == 1) { + long ut = strtoul(param[0].valS.c_str(), nullptr, 10); + _watch->settimeUnix(ut); + return {}; + } + } else if (command == "setTime") { + if (param.size() == 6) { + _watch->settime(param[0].valD, param[1].valD, param[2].valD, param[3].valD, param[4].valD, param[5].valD); //сек, мин, час, день, мес, год + return {}; + } + } else if (command == "getTimeFloat") { + if (param.size() == 1) { + IoTValue valTmp; + _watch->gettime(); + valTmp.isDecimal = true; + String type = param[0].valS; + if (type == "H") { + valTmp.valD = static_cast(_watch->Hours); + } else if (type == "i") { + valTmp.valD = static_cast(_watch->minutes); + } else if (type == "s") { + valTmp.valD = static_cast(_watch->seconds); + } else if (type == "w") { + valTmp.valD = static_cast(_watch->weekday); + } else if (type == "d") { + valTmp.valD = static_cast(_watch->day); + } else if (type == "m") { + valTmp.valD = static_cast(_watch->month); + } else if (type == "Y") { + valTmp.valD = static_cast(_watch->year); + } else { + return {}; // Если переданный тип не поддерживается + } + return valTmp; + } } return {}; diff --git a/src/modules/sensors/RTC/modinfo.json b/src/modules/sensors/RTC/modinfo.json index 9e053b2d..f22250a1 100644 --- a/src/modules/sensors/RTC/modinfo.json +++ b/src/modules/sensors/RTC/modinfo.json @@ -54,6 +54,27 @@ "params": [ "Формат как у функции date() в PHP" ] + }, + { + "name": "setTime", + "descr": "Установить время через сценарии в формате сек, мин, час, день, мес, год.", + "params": [ + "сек", "мин", "час", "день", "мес", "год" + ] + }, + { + "name": "setUnixTime", + "descr": "Установить время через сценарий в формате юникстайм", + "params": [ + "rtc.setUnixTime('46489234') - параметр в виде строки" + ] + }, + { + "name": "getTimeFloat", + "descr": "Получить числовое значение времени по указанному формату", + "params": [ + "s - Вернуть секунды, i - Вернуть минуты, H - Вернуть часы в 24-часовом формате, d - Вернуть день месяца, w - Вернуть день недели, m - Вернуть месяц, Y - Вернуть год(4 знака)" + ] } ] },