Правило на групповое управление светом


#1

Неужели никто не хочет подзаработать?))) Ну да ладно. Тогда буду писать проблемные вопросы конкретно:

  1. Имеется набор правил дискретного управления групп реле по изменению счетчика входов:
defineRule("во51_2", { //во51_2 = о52+о53+о54+о55
whenChanged: "wb-mr6c_25/Input 4 counter", //модуль DL.2
      then: function() {
      dev["wb-mr6c_21"]["K4"] = !dev["wb-mr6c_21"]["K4"]; //подвесы ванная
      dev["wb-mr6c_25"]["K3"] = !dev["wb-mr6c_25"]["K3"]; //полки правые ванная
      dev["wb-mr6c_25"]["K4"] = !dev["wb-mr6c_25"]["K4"]; //зеркало ванная 
      dev["wb-mr6c_25"]["K5"] = !dev["wb-mr6c_25"]["K5"]; //полки левые ванная
      }
  });

данные реле также управляются через другие счетчики входов. И возникает странное явление. При перезагрузке контроллера часть реле включаются самопроизвольно, и тем самым сбивается групповое управление (вместо группового вкл/выкл получается поочередное включение выключение некоторых групп света). Как это исправить? может я применяю неверный оператор для данной функции?

Также непоняино как включенить в такой сценарий вклчюение выключение диммера. Здесь уже неподойдет инвентирование состояния.

Очень прошу помочь разобраться - не могу сдать объект заказчику. Готов оплатить консультации!!!


Движок правил: примеры кода
#2

так вроде сам производитель не против взять плату за кастомные доработки, вы к ним обращались?


#3

Я полагаю Затраты за кастомные доработки от производителя несоизмеримы с бюджетом наладки на 70 метровую квартиру)))). Поэтому обращаюсь к любителям


#4

так это у вас на 70-ти метровую квартиру десять пунктов правил? фиасе!
мне вот на 100метровую хватает двух ног и одной руки :slight_smile:


#5

Перезагрузка по питанию? С модулей mr6c тоже снимается питание в момент перезагрузки?


#6

а вот кстати да, попробуйте инициализировать модуль начальными параметрами.
Тут написано как:

https://wirenboard.com/wiki/index.php/RS-485:Настройка_через_веб-интерфейс


#7

Да, именно при перезагрузке по питанию, а также иногда при перезапуске сервиса mqtt-serial. При перезапуске сервиса парвил такого не происходит.
Я так полагаю что при запуске сервиса несколько раз срабатывают правила whenchanged на одних и тех же реле (т.к. в структуре много проходных выключателей), и какое то реле не успевает отработать.

Пока эту проблему решил, заложив в схему правило “выкл. все” на клавишу выключателя холла. после этого правила отрабатывают как положено.
Осталась понять как сценарно включать/выключать диммер.


#8

Я бы все же посоветовал разобраться с начальным состоянием, прежде чем ставить костыли. Попробуйте закомментировать все правила, перезагрузить по питанию. Если все будет нормально, то проблема у вас в коде.


#9

надо смотреть полную схему и все правила. Я уже один раз обжегся (чуть ли не в буквальном смысле) не осознав, что во время нагревания котла мое правило вызывается много десятков раз подряд и в результате получилась каша из значений внутренних переменных.


#10

Если вы приводите скрипт, то к нему нужно описать задачу, которую пытаетесь им решить. А так, восстановить задачу по возможно неверному коду и решить ее - это минимум двойная работа.

Насколько я понимаю, вы хотите в ванной включить/выключить по одной кнопке 4 группы света, и периодически, при перезагрузке, у вас происходит рассинхрон.
При перезагрузке всегда возникают переходные процессы, и как они отражены в движке - даже программисты движка не всегда понимают до конца, поэтому давайте от них уйдем. То есть, в скрипт надо вставить задержку определения правила после загрузки контроллера, например секунд на десять. То есть, setTimeout (fn(){},10000) а внутри fn уже прописать определение правила.
Далее, код управления реле надо изменить, так как привязывать состояние реле к противоположности старому - путь к рассинхрону в многорелейной системе. Я называю это - Велкам то рил ворлд.

Первый вариант, сложный:
Я бы менял по кнопке только одно реле, выбрав основную группу света, а все остальные привязывал к значению этого реле. Минус - отдельно от других тогда не включить только эту основную группу с другой кнопки , если это требуется. Чтобы уйти от этого минуса, надо создать массив флагов для других реле. По умолчанию, флаг запрещает смену состояния реле, а именно по этой кнопке флаг меняется, тем самым разрешая смену состояния. После смены флаг сбрасывается в состояние по умолчанию.

Второй способ - привязаться к значению, а не к изменению счетчика входов. Если значение четное - включать все реле. Если нечетное - выключать все реле.


#11

Во второй способ легко интегрировать диммер.
Минус решения - может быть иногда, после перезагрузки, придется два раза подряд кликнуть, чтобы включить свет. Но это будет очень редко