данные реле также управляются через другие счетчики входов. И возникает странное явление. При перезагрузке контроллера часть реле включаются самопроизвольно, и тем самым сбивается групповое управление (вместо группового вкл/выкл получается поочередное включение выключение некоторых групп света). Как это исправить? может я применяю неверный оператор для данной функции?
Также непоняино как включенить в такой сценарий вклчюение выключение диммера. Здесь уже неподойдет инвентирование состояния.
Очень прошу помочь разобраться - не могу сдать объект заказчику. Готов оплатить консультации!!!
Да, именно при перезагрузке по питанию, а также иногда при перезапуске сервиса mqtt-serial. При перезапуске сервиса парвил такого не происходит.
Я так полагаю что при запуске сервиса несколько раз срабатывают правила whenchanged на одних и тех же реле (т.к. в структуре много проходных выключателей), и какое то реле не успевает отработать.
Пока эту проблему решил, заложив в схему правило “выкл. все” на клавишу выключателя холла. после этого правила отрабатывают как положено.
Осталась понять как сценарно включать/выключать диммер.
Я бы все же посоветовал разобраться с начальным состоянием, прежде чем ставить костыли. Попробуйте закомментировать все правила, перезагрузить по питанию. Если все будет нормально, то проблема у вас в коде.
надо смотреть полную схему и все правила. Я уже один раз обжегся (чуть ли не в буквальном смысле) не осознав, что во время нагревания котла мое правило вызывается много десятков раз подряд и в результате получилась каша из значений внутренних переменных.
Если вы приводите скрипт, то к нему нужно описать задачу, которую пытаетесь им решить. А так, восстановить задачу по возможно неверному коду и решить ее - это минимум двойная работа.
Насколько я понимаю, вы хотите в ванной включить/выключить по одной кнопке 4 группы света, и периодически, при перезагрузке, у вас происходит рассинхрон.
При перезагрузке всегда возникают переходные процессы, и как они отражены в движке - даже программисты движка не всегда понимают до конца, поэтому давайте от них уйдем. То есть, в скрипт надо вставить задержку определения правила после загрузки контроллера, например секунд на десять. То есть, setTimeout (fn(){},10000) а внутри fn уже прописать определение правила.
Далее, код управления реле надо изменить, так как привязывать состояние реле к противоположности старому - путь к рассинхрону в многорелейной системе. Я называю это - Велкам то рил ворлд.
Первый вариант, сложный:
Я бы менял по кнопке только одно реле, выбрав основную группу света, а все остальные привязывал к значению этого реле. Минус - отдельно от других тогда не включить только эту основную группу с другой кнопки , если это требуется. Чтобы уйти от этого минуса, надо создать массив флагов для других реле. По умолчанию, флаг запрещает смену состояния реле, а именно по этой кнопке флаг меняется, тем самым разрешая смену состояния. После смены флаг сбрасывается в состояние по умолчанию.
Второй способ - привязаться к значению, а не к изменению счетчика входов. Если значение четное - включать все реле. Если нечетное - выключать все реле.
Во второй способ легко интегрировать диммер.
Минус решения - может быть иногда, после перезагрузки, придется два раза подряд кликнуть, чтобы включить свет. Но это будет очень редко