добавление pretty времени в gate mysensors

This commit is contained in:
Dmitry Borisenko
2022-12-09 03:14:52 +01:00
parent 00780b998b
commit fc6d159f5d
9 changed files with 109 additions and 48 deletions

View File

@@ -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));

View File

@@ -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;

View File

@@ -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"));

View File

@@ -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,

View File

@@ -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);
}