0
Under review

Задержка между PUSH уведомлениями

Денис Кузин 3 years ago in Tips and Tricks updated by Vladimir Ovchinnikov (expert) 3 years ago 3

Добрый день!
Как осуществить задержку перед отправкой второго PUSH уведомления?

Например: при понижении температуры ниже 16 градусов отправляется PUSH уведомление - Холодно.


Используем стандартный скрипт из учебника:

//********** send push when Feedback of driver changes **********

var driver = IR.GetDevice("KNX IP Router"); // driver name

IR.AddListener(IR.EVENT_TAG_CHANGE, driver, function(name,value)

{

if (name == "2/0/3 Actual Room Temperature" && value <= 16) // if the KNX feedback "Address 1" changed to 1

{

IR.SendPush("В офисе холодно!", "Data", 1); // text of notification, hiden data, group of panels

}

});

Но если не создавать никаких дополнительных условий, то будет постоянный спам данным уведомлением. Хотелось бы его отправлять, например, раз в 15 минут, если такое возможно. При этом не создавать задержку первому уведомлению.

Спасибо!

Under review

Добрый день.

Добавьте в проект виртуальный фидбэк, который будет хранить время с момента крайней отправки PUSH. При старте проекта запишите в фидбэк 0. При вызове PUSH получайте время и сравнивайте с сохранённым в виртуальном фидбэк. Если разница менее 15 минут - ничего не делать. Если 15 и более - отправлять PUSH и записать новое значение времени.  

IR.AddListener(IR.EVENT_TAG_CHANGE, driverr, function(name,value)

{

var tempbarbbarb = IR.GetVariable("Server.Tags.Температура Барбекю барбекю");

if (name == "Температура текущая климат барб" && value <= 10 && tempbarbbarb == 0)

{

IR.SendPush("Температура в барбекю меньше 10 градусов!", "info", 1)

IR.GetServer().Set("Температура Барбекю барбекю", 1);

}

else if (name == "Температура текущая климат барб" && value > 10 && tempbarbbarb == 1)

{

IR.GetServer().Set("Температура Барбекю барбекю", 0);

}

});

так отправляет 1 раз и всё, пока температура не вырастет выше установленной повторного пуша не будет

Добрый день.

Сделайте так:

IR.AddListener(IR.EVENT_TAG_CHANGE, driverr, function(name, value)
{
var tempbarbbarb = IR.GetVariable("Server.Tags.Температура Барбекю барбекю");
if ((name == "Температура текущая климат барб") && (value <= 10) && (tempbarbbarb == 0))
{
IR.SendPush("Температура в барбекю меньше 10 градусов!", "info", 1);
IR.GetServer().Set("Температура Барбекю барбекю", 1);
}
if ((name == "Температура текущая климат барб") && (value > 10) && (tempbarbbarb == 1))
{
IR.GetServer().Set("Температура Барбекю барбекю", 0);
}
});

Пуш уйдёт при соблюдении одновременно 3 условий:

1) Изменился тэг в driverr (пришло значение, отличное от предыдущего).

2) В тэге "Температура текущая климат барб" будет 10 или меньше.

3) В тэге "Server.Tags.Температура Барбекю барбекю" будет 0.