0
Отвечен
IR.EVENT_TAG_CHANGE - как заблокировать повторное срабатывание
Oleg Starikov 6 лет назад
в Tips and Tricks
•
обновлен Vladimir Ovchinnikov (expert) 6 лет назад •
3
Добрый день!
на базе примера в указанной статье https://dev.iridi.com/CloudMQTT
делаю связку между драйвером HDL и MQTT
все работает, но смущает следующий момент в данной схеме:
- отправляю изменения в драйвер1
- слушатель видит это и делает запись в драйвер 2
- но т.к. драйвер2 тоже изменился, происходит запись в драйвер 1
- после этого схема успокоилась
задача вроде для школьника, но не могу сообразить, что добавить в скрипт, что бы не допустить повторного изменения драйвера, от которого было инициировано изменение?
//начало скрипта
var driver2 = IR.GetDevice("HDL"); // name of a driver 2
var gatemap = {
"2-2 левый реле:котельная" : "MQTT_Kotelnaya",
"MQTT_Kotelnaya" : "2-2 левый реле:котельная",
};
IR.AddListener(IR.EVENT_TAG_CHANGE, driver1, function(name, value) {
if (gatemap[name]) {
driver2.Set(gatemap[name], value);
IR.Log("изменение в драйвере 1"+name+" Значение"+value);
}
});
IR.AddListener(IR.EVENT_TAG_CHANGE, driver2, function(name, value) {
if (gatemap[name]) {
driver1.Set(gatemap[name], value);
IR.Log("изменения в драйвере 2"+name+" Значение"+value)
}
});
// конец скрипта
Заранее спасибо
Сервис поддержки клиентов работает на платформе UserEcho
Добрый день.
Если в проекте нет глобального слушателя, то можете использовать IR.EVENT_GLOBAL_TAG_CHANGE. Он реагирует только на изменение и не сработает, если пришло значение, равное текущему.
Другой вариант: объявить переменную, в которую записывать значение перед отправкой во второй драйвер. Для второго драйвера через условный оператор проверяйте значение - если оно совпадает с тем, что в переменной, то не отправлять его.
Добрый день, Владимир!
все вроде бы получилось, работает
добавил в скрип, что то похожее, что Вы порекомендовали
if ((IR.GetVariable("Drivers.HDL.Tags."+name))!=(IR.GetVariable("Drivers.MQTT-OPENHAB.Tags."+gatemap[name])))
{
driver1.Set(gatemap[name], value);
}
можно закрывать мой вопрос
спасибо
Рады помочь.