Разве этих изменений нет в текущей 1.7.* версии? По-моему уже есть…
Здравствуйте!
Подскажите, пожалуйста, как побороть выполнение сценария Отключение электричества и других подобных при любой перезагрузке движка правил?
var timer_no_electricity = 10 * 1000;
var timer_no_electricity_id = null;
var electricity = 1;
defineRule("electricity_control", {
whenChanged: "milur105_255/Voltage",
then: function (newValue, devName, cellName) {
if (newValue) {
if (!(electricity)) {
var time = Time.toString(Time.now(), true);
Notify.sendEmail(EMAIL, "Включение электричества: " + time, "Включение электричества: " + time);
log("Включение электричества: " + time);
electricity = 1;
}
if (timer_no_electricity_id) {
clearTimeout(timer_no_electricity_id);
}
timer_no_electricity_id = setTimeout(function () {
var time = Time.toString(Time.now(), true);
Notify.sendEmail(EMAIL, "Отключение электричества: " + time, "Отключение электричества: " + time);
log("Отключение электричества: " + time);
electricity = null;
timer_no_electricity_id = null;
}, timer_no_electricity);
}
}
});
Сейчас при каждом изменении правил в логе и у меня на почте появляется сообщение Отключение электричества…
А мне нужно, чтобы это правило срабатывало только тогда, когда какое-то время действительно не приходят показания от счетчика.
Мне на первый взгляд кажется, что проблема в том, что движок правил после перезагрузки получает retained-сообщение о значении последнего напряжения, потом он еще долго получает оставшиеся retained-значения, прежде чем начинают поступать актуальные mqtt-сообщения с напряжением от счетчика. Попробуйте увеличить таймаут с десяти секунд до минуты, и посмотреть, будет ли отправляться сообщения.
Создал новый js
В котором разместил только такое правило
// время в течение которого ожидается отклик от электрического счетчика
var timer_no_electricity = 60000;
// айди таймера для электрического счетчика
var timer_no_electricity_id = null;
// наличие электричества
var electricity = 1;
defineRule("electricity_control", {
whenChanged: "milur105_255/Voltage",
then: function (newValue, devName, cellName) {
if (newValue) {
log("New value: " + newValue);
if (!(electricity)) {
var time = Time.toString(Time.now(), true);
//Notify.sendEmail(EMAIL, "Включение электричества: " + time, "Включение электричества: " + time);
log("Включение электричества: " + time);
electricity = 1;
}
if (timer_no_electricity_id) {
clearTimeout(timer_no_electricity_id);
}
timer_no_electricity_id = setTimeout(function () {
// действия при срабатывании таймера
var time = Time.toString(Time.now(), true);
//Notify.sendEmail(EMAIL, "Отключение электричества: " + time, "Отключение электричества: " + time);
log("Отключение электричества: " + time);
electricity = null;
timer_no_electricity_id = null;
}, timer_no_electricity);
}
}
});
В 12:56:00 сохранил его.
Вот что в логе:
2019-05-07 12:55:58New value: 222.172
2019-05-07 12:55:59New value: 222.172
2019-05-07 12:56:01New value: 221.797
2019-05-07 12:56:01New value: 221.797
2019-05-07 12:56:02New value: 222.001
2019-05-07 12:56:03New value: 222.001
2019-05-07 12:56:05New value: 222.46
2019-05-07 12:56:05New value: 222.46
2019-05-07 12:56:07New value: 221.666
2019-05-07 12:56:07New value: 221.666
2019-05-07 12:56:08New value: 222.226
2019-05-07 12:56:09New value: 222.226
2019-05-07 12:56:10New value: 223.098
2019-05-07 12:56:11New value: 223.098
2019-05-07 12:56:12New value: 223.472
2019-05-07 12:56:13New value: 223.472
2019-05-07 12:56:15New value: 223.662
2019-05-07 12:56:15New value: 223.662
2019-05-07 12:56:17New value: 223.537
2019-05-07 12:56:17New value: 223.537
2019-05-07 12:56:19New value: 223.059
2019-05-07 12:56:19New value: 223.059
2019-05-07 12:56:21New value: 222.952
2019-05-07 12:56:21New value: 222.952
2019-05-07 12:56:22New value: 222.957
2019-05-07 12:56:23New value: 222.957
2019-05-07 12:56:24New value: 222.41
2019-05-07 12:56:25New value: 222.41
2019-05-07 12:56:26New value: 221.862
2019-05-07 12:56:27New value: 221.862
2019-05-07 12:56:29New value: 222.002
2019-05-07 12:56:29New value: 222.002
2019-05-07 12:56:31New value: 222.377
2019-05-07 12:56:31New value: 222.377
2019-05-07 12:56:32New value: 222.108
2019-05-07 12:56:33New value: 222.108
2019-05-07 12:56:35New value: 222.254
2019-05-07 12:56:35New value: 222.254
2019-05-07 12:56:36New value: 221.973
2019-05-07 12:56:37New value: 221.973
2019-05-07 12:56:38New value: 221.793
2019-05-07 12:56:39New value: 221.793
2019-05-07 12:56:40New value: 221.756
2019-05-07 12:56:41New value: 221.756
2019-05-07 12:56:42New value: 221.893
2019-05-07 12:56:43New value: 221.893
2019-05-07 12:56:44New value: 222.096
2019-05-07 12:56:45New value: 222.096
2019-05-07 12:56:46New value: 222.377
2019-05-07 12:56:47New value: 222.377
2019-05-07 12:56:48New value: 222.297
2019-05-07 12:56:49New value: 222.297
2019-05-07 12:56:50New value: 221.946
2019-05-07 12:56:51New value: 221.946
2019-05-07 12:56:52New value: 221.952
2019-05-07 12:56:53New value: 221.952
2019-05-07 12:56:54New value: 222.02
2019-05-07 12:56:55New value: 222.02
2019-05-07 12:56:56New value: 222.188
2019-05-07 12:56:57New value: 222.188
2019-05-07 12:56:58New value: 222.638
2019-05-07 12:56:59New value: 222.638
2019-05-07 12:57:00Отключение электричества: 2019-05-07 12:56:58
2019-05-07 12:57:00New value: 222.296
2019-05-07 12:57:01Отключение электричества: 2019-05-07 12:56:58
2019-05-07 12:57:01New value: 222.296
2019-05-07 12:57:02New value: 222.407
2019-05-07 12:57:03New value: 222.407
2019-05-07 12:57:04New value: 222.521
2019-05-07 12:57:05New value: 222.521
2019-05-07 12:57:07New value: 222.541
2019-05-07 12:57:07New value: 222.541
2019-05-07 12:57:08New value: 223.622
2019-05-07 12:57:09New value: 223.622
2019-05-07 12:57:11New value: 223.675
2019-05-07 12:57:11New value: 223.675
2019-05-07 12:57:12New value: 223.599
2019-05-07 12:57:13New value: 223.599
2019-05-07 12:57:15New value: 223.978
2019-05-07 12:57:15New value: 223.978
2019-05-07 12:57:17New value: 224.17
2019-05-07 12:57:17New value: 224.17
2019-05-07 12:57:18New value: 223.902
2019-05-07 12:57:19New value: 223.902
2019-05-07 12:57:21New value: 223.303
2019-05-07 12:57:21New value: 223.303
2019-05-07 12:57:23New value: 223.117
2019-05-07 12:57:23New value: 223.117
2019-05-07 12:57:25New value: 222.797
2019-05-07 12:57:25New value: 222.797
2019-05-07 12:57:27New value: 223.084
2019-05-07 12:57:27New value: 223.084
2019-05-07 12:57:28New value: 224.263
2019-05-07 12:57:29New value: 224.263
2019-05-07 12:57:30New value: 224.006
2019-05-07 12:57:31New value: 224.006
2019-05-07 12:57:33New value: 223.83
2019-05-07 12:57:33New value: 223.83
2019-05-07 12:57:35New value: 224.315
2019-05-07 12:57:35New value: 224.315
2019-05-07 12:57:37New value: 223.618
2019-05-07 12:57:37New value: 223.618
2019-05-07 12:57:39New value: 223.697
2019-05-07 12:57:39New value: 223.697
2019-05-07 12:57:41New value: 223.179
2019-05-07 12:57:41New value: 223.179
2019-05-07 12:57:43New value: 223.732
2019-05-07 12:57:43New value: 223.732
2019-05-07 12:57:45New value: 223.762
2019-05-07 12:57:45New value: 223.762
2019-05-07 12:57:47New value: 223.793
2019-05-07 12:57:47New value: 223.793
2019-05-07 12:57:49New value: 223.632
2019-05-07 12:57:49New value: 223.632
2019-05-07 12:57:50New value: 223.516
2019-05-07 12:57:51New value: 223.516
2019-05-07 12:57:53New value: 223.543
2019-05-07 12:57:53New value: 223.543
2019-05-07 12:57:54New value: 223.314
2019-05-07 12:57:55New value: 223.314
2019-05-07 12:57:57New value: 223.039
2019-05-07 12:57:57New value: 223.039
2019-05-07 12:57:59New value: 223.688
2019-05-07 12:57:59New value: 223.688
2019-05-07 12:58:01New value: 224.549
2019-05-07 12:58:01New value: 224.549
2019-05-07 12:58:03New value: 224.331
2019-05-07 12:58:03New value: 224.331
2019-05-07 12:58:05New value: 224.619
2019-05-07 12:58:05New value: 224.619
2019-05-07 12:58:07New value: 224.283
2019-05-07 12:58:07New value: 224.283
2019-05-07 12:58:09New value: 224.357
2019-05-07 12:58:09New value: 224.357
2019-05-07 12:58:11New value: 224.11
2019-05-07 12:58:11New value: 224.11
2019-05-07 12:58:13New value: 224.48
2019-05-07 12:58:13New value: 224.48
2019-05-07 12:58:15New value: 224.343
2019-05-07 12:58:15New value: 224.343
2019-05-07 12:58:17New value: 224.578
2019-05-07 12:58:17New value: 224.578
2019-05-07 12:58:19New value: 224.584
2019-05-07 12:58:19New value: 224.584
2019-05-07 12:58:21New value: 224.535
2019-05-07 12:58:21New value: 224.535
2019-05-07 12:58:23New value: 224.606
2019-05-07 12:58:23New value: 224.606
2019-05-07 12:58:25New value: 224.524
2019-05-07 12:58:25New value: 224.524
Обращаю внимание, что в логе все почему-то повторяется по 2 раза.
Такое ощущение, что у вас 2 правила работают. А вообще, зачем вам для таких уведомлений правило писать? Используйте лучше алерты.
Что такое алерт?
В случае пропадания электропитания на контроллер просто перестают поступать сигналы. Нужно отслеживать задержку с момента поступления последних данных. Насколько я понимаю, данным модулем такую задачу не решить.
Смотрите, задвоение сообщений в логе происходит, похоже, действительно от работы двух экземпляров правил. Проверьте, что в движке правил правило только одно и перезапустите движок правил.
Сообщения о пропадении напряжения, похоже, генерировались старым экземпляром.
Правило такое 100% только одно.
Задвоение происходит по всей видимости со всеми правилами.
Движок правил перезапустили?
Да, конечно
2019-05-07 14:31:01add your rules to /etc/wb-rules/
2019-05-07 14:31:01add your rules to /etc/wb-rules/
2019-05-07 14:31:05New value: 223.624
2019-05-07 14:31:05New value: 223.624
2019-05-07 14:31:05New value: 223.611
2019-05-07 14:31:05New value: 223.611
2019-05-07 14:31:06New value: 224.188
2019-05-07 14:31:06New value: 224.188
2019-05-07 14:31:08New value: 224.205
2019-05-07 14:31:08New value: 224.205
2019-05-07 14:31:10New value: 223.847
2019-05-07 14:31:10New value: 223.847
2019-05-07 14:31:12New value: 223.661
2019-05-07 14:31:12New value: 223.661
2019-05-07 14:31:13New value: 222.983
2019-05-07 14:31:14New value: 222.983
2019-05-07 14:31:16New value: 223.68
2019-05-07 14:31:16New value: 223.68
2019-05-07 14:31:18New value: 223.522
2019-05-07 14:31:18New value: 223.522
Забыл уточнить, это лог из браузера.
Сейчас зашел в /var/log/messages.
Там без дублей
Попробуйте так, без таймеров:
- в вашем правиле сохраняете текущее время в переменной
- создаете новое правило, которое выполняется по функции “текущее время - сохраненное время > таймаута”, в нем отсылаете уведомление + ставите флаг что уведомление отослано и больше отсылать не надо (флаг этот должен сбрасываться в вашем первом правиле)
Спасибо.
Переписал следующим образом, вроде бы срабатывает.
Думаю, на странице документации wb-rules стоит подобный пример отобразить, раз использованный там пример не работает.
var no_electricity_threshold = (3*1000);
var message_electricity_sent=1;
var message_no_electricity_sent=null;
var last_time_electricity_exist=Time.now();
defineRule("last_time_electricity_exist", {
whenChanged: "milur105_255/Voltage",
then: function (newValue, devName, cellName) {
if (newValue) {
last_time_electricity_exist=Time.now();
}
}
});
defineRule("electricity_control", {
asSoonAs: function () {
return (Time.now()-last_time_electricity_exist<no_electricity_threshold)
},
then: function() {
if (!message_electricity_sent) {
var time=Time.toString(Time.now(), true);
Notify.sendEmail(EMAIL, "Включение электричества: " + time, "Включение электричества: " + time);
log("Включение электричества: " + time);
message_electricity_sent=1;
message_no_electricity_sent=null;
}
}
});
defineRule("no_electricity_control", {
asSoonAs: function () {
return (Time.now()-last_time_electricity_exist>no_electricity_threshold)
},
then: function() {
if (!message_no_electricity_sent) {
var time=Time.toString(Time.now(), true);
Notify.sendEmail(EMAIL, "Отключение электричества: " + time, "Отключение электричества: " + time);
log("Отключение электричества: " + time);
message_electricity_sent=null;
message_no_electricity_sent=1;
}
}
});
Добрый день! Скажите пожалуйста, какой конкретно пример из нашей документации не срабатывает?
Добрый!
Правило, которое обсуждали выше
Спасибо! Посмотрим, поправим.