За идею спасибо, но реализация на троечку уж простите меня
. Та же проблема с датчиками протечки (потопа).
После вашей идеи сделал проще - добавил в объект новое свойство -
StatusLast, в коде
SLeak_statusUpdated.php добавил проверку на совпадение с предыдущим состоянием
StatusLast и новым состоянием
Status если совпадают - отправку игнорим.
Продолжаючи читать форум, заметил что есть параметр как
$params['OLD_VALUE'] и это то что нужно! сравниваем его с
$params['NEW_VALUE'] можно понять в каком состоянии был датчик. И если был
"0" и так и остался
"0" отправку сообщения "Значение датчика вернулось к норме" игнорим. Новое свойство добавлять не нужно, дописать всего одну строку: if (($params['OLD_VALUE']) <> ($params['NEW_VALUE']))
Вот полный код для датчика протечки SLeak_statusUpdated.php
Код: Выделить всё
<?php
$ot = $this->object_title;
$tm = time();
$this->callMethodSafe('keepAlive');
$this->setProperty('updated', $tm);
$this->setProperty('updatedText', date('H:i Y.m.d', $tm));
$this->callMethod('keepAlive');
$is_blocked=(int)$this->getProperty('blocked');
if ($is_blocked) {
return;
}
$alert_timer_title = $ot.'_alert';
if (isset($params['NEW_VALUE']) ) # Определяет, была ли установлена переменная значением отличным от NULL
{
if ($params['NEW_VALUE']) # Включаем тревогу, если $params =1
{ $this->callMethod('alert');
}
else
{ clearTimeOut($alert_timer_title); # хз что это
### Добавил для исключения повторного срабатывания в нормальном состоянии
if (($params['OLD_VALUE']) <> ($params['NEW_VALUE'])) # сравниваем предыдущее значение с новым,
{
say(LANG_DEVICES_NOTIFY_BACKTONORMAL.': '.$this->description,100); # выполняем если значения отличаются (не равны)
}
}
}
$this->callMethodSafe('logicAction'); # там пусто 2020.06.29
include_once(DIR_MODULES . 'devices/devices.class.php');
$dv = new devices();
$dv->checkLinkedDevicesAction($ot, $this->getProperty('status'));
ps
сори за не привычное расположение фигурных скобок, я программист от Бога