обновил прошивку командой
apt update && apt dist-upgrade
появился русский язык и ушли проблемы с вкладкой правила
Вот теперь более понятно. Реализовать можно, но тут уже алгоритм должен быть посложнее. То есть нужно создавать очередь запросов на включение клапанов и обработку этих запросов с заданным периодом, если очередь не пустая. Пока не готов навскидку дать пример.
Есть возможность исправить вкладку правила?
После моих экспериментов с JS у меня опять
Ошибка записи файла: MQTT RPC request timed out MqttTimeoutError
Спасибо за уделенное время, буду ждать пример.
обновил прошивку командой
apt update && apt dist-upgrade
Если на контроллере было старое ПО до системы релизов, то нужно 2 раза выполнять команду
apt update && apt dist-upgrade
Если не уверены, то выполните ее еще раз.
Попробуйте использовать браузер Chrome (если еще не используете), обновите страницу со сбросом кеша (Ctrl+F5), удалите (сделайте копию, если нужно) все свои правила из директории
/mnt/data/etc/wb-rules
, проверьте статус работы сервиса wb-rules командой:
systemctl status wb-rules
Должен быть active (running). Попробуйте перезапустить сервис командой:
systemctl restart wb-rules
Добрый вечер, провожу эксперименты с реле WB-MR6
не подскажите почему в моем JS - скрипте не корректно работает интервал в 4 секунды?
setInterval(function() {
dev[“wb-mr6c_21”][“K1”] = false;
}, 4000);
setInterval(function() {
dev[“wb-mr6c_21”][“K1”] = true;
}, 4000);
Функция setInterval выполняет через заданные промежутки времени действия, указанные в качестве ее аргумента. В данном случае вы используете две такие функции. То есть раз в 4 секунды значению канала реле будет присваиваться 0 и сразу же 1.
А какое действие хотите реализовать? Например, если нужно периодически включать и отключать реле раз в 2 секунды, то нужно сделать так:
var impulse_duration = 2000;
setInterval(function () {
dev["wb-mr6c_78"]["K1"] = true;
setTimeout(function () {
dev["wb-mr6c_78"]["K1"] = false;
}, impulse_duration);
}, impulse_duration * 2);
Добрый вечер!
Возможно существование функции
setTimeout(function () {
dev[“wb-mr6c_78”][“K1”] = false;
отдельно от
setInterval(function () {
извиняюсь если вопрос задан не корректно.
Я хочу
- мониторить состояние счетчиков срабатывания
- отключать реле сразу после срабатывания
- включать реле с интервалом в 1 секунду на основе счетчика срабатывания.
на основе нашей переписке только привлечь в программу счетчик, мне кажется так будет легче.
наша переписка от 03.03.2022
Пример
Замкнулись 1,2,6 контакты на 1 реле
и 3,4 контакты на 2 реле
Производить дальше мониторинг открытия, закрытия реле
закрыть 1 соленоид на 1 реле
через 5 секунд закрыть 2 соленоид на 1 реле
через 5 секунд закрыть 6 соленоид на 1 реле
через 5 секунд закрыть 3 соленоид на 2 реле
через 5 секунд закрыть 4 соленоид на 2 реле
на основе мониторинга закрывать соленоиды далее
открывать с интервалом в 1 секунду.
Да, конечно. Это описано в документации:
Добрый вечер, подскажите как прочитать канал
Input 1 counter на моём реле и сравнить его с числом
Это можно сделать, например, так:
if (dev["wb-mr6c_78/input_1 Counter"] > 0) {
log("Input 1 Counter is bigger than 10");
}
Спасибо за примеры.
Имеется ли возможность использую JS отключить режим управления входами реле K1-6 и сделать возможность управления данным режимом через виртуальные переключатели?
Режим работы входа 1
Управление отключено
Режим работы входа 2
Управление отключено
Режим работы входа 3
Управление отключено
Режим работы входа 4
Управление отключено
Режим работы входа 5
Управление отключено
Режим работы входа 6
Управление отключено
Параметры обычно меняются один раз при конфигурировании модуля в веб-интерфейсе контроллера. Так это сделать проще и понятнее. Также параметры можно изменять, используя в командной строке контроллера утилиту modbus_client при остановленном драйвере wb-mqtt-serial.
Вы хотите изменять режим работы входа, когда модуль уже сконфигурирован и опрашивается? Какая у вас задача?
Без дополнительных ухищрений это сделать нельзя, так как порт занят драйвером. Можно, конечно, из правил сначала остановить драйвер, вызвать утилиту modbus_client с нужными параметрами, затем опять запустить драйвер. Но это будет очень коряво и неудобно.
var impulse_duration = 3000;
setInterval(function() {
setTimeout(function () {
if (dev["wb-mr6c_21/Input 1"] == 1)
// если было выполнено первое условие “первый if” жди 5 секунд и не выполняй код дальше
// после паузы 5 секунд выполняй код дальше
// если не было выполнено первое условие “первый IF” выполняй код дальше
{dev["wb-mr6c_21"]["K1"] = true;}
else {dev["wb-mr6c_21"]["K1"] = false;}
}, impulse_duration * 1);
setTimeout(function () {
if (dev["wb-mr6c_21/Input 2"] == 1)
{dev["wb-mr6c_21"]["K2"] = true;}
else {dev["wb-mr6c_21"]["K2"] = false;}
}, impulse_duration * 2);
}, impulse_duration * 1);
Добрый вечер, подскажите как вставить паузу в код
Добрый день, подскажите куда “сыпятся логи” при создании строки
log(“off counter” + i);
в Rules JS
Вот здесь описано:
Также эти логи можно просматривать из веб-интерфейса либо на странице системного журнала:
либо (что удобнее) из вспомогательного окна, которое вызывается по нажатию на кнопку с гаечным ключом:
В JavaScript нет возможности непосредственно остановить выполнение кода. Можно только задать отложенное событие с помощью, например, функции setTimeout, при активации которого будет выполнен указанный код.
Довольно сложно написать код по описанию. Алгоритмически это будет примерно так:
- если было выполнено первое условие “первый if”, то запусти функцию setTimeout с аргументом 5000. В теле передаваемой функции-аргумента указать нужные действия для этого варианта событий.
- иначе выполняй другие действия