Page 1 of 2

Помогите разобраться с настройкой правил отложенной активации

Posted: 07 Nov 2012 17:46
by klirichek
Пытаюсь заставить работать пару правил, но почему-то никак не "взлетает".

Правила такие:
1. При включении света в туалете он выключается автоматически через 5 минут.
2. При принудительном выключении света в туалете (НЕ по таймеру) включается на 1 минуту свет в ванной.

Сформулировал их так:

Правило "включение света в туалете на 5 минут"
И
активная сцена "туалет - свет выключен"
отчёт от актуатора "свет в туалете"
актуатор.SwitchBinary.data.level.value==255
Активировать "туалет - свет включен"
Через 300 сек. активировать "туалет - свет выключить"
Активировать "туалет - свет выключен"



Правило "выключить свет в туалете и помыть руки"
И
активная сцена "туалет - свет включен"
отчет от актуатора "свет в туалете"
актуатор.SwitchBinary.data.level.value==0
Активировать "туалет - свет выключен"
Активировать "ванная - свет включить"
Через 60 сек. активировать "ванная - свет выключить"
Активировать "ванная - свет выключен"


Чуть поясню про сцены "свет включить" и "свет включен": первая - фактически меняет состояние (сцена-действие) и активирует вторую. Вторая ничего не переключает, а лишь отражает текущее состояние (отображается цветом на карте).

Почему-то эта связка работать никак не желает.
Если я включаю свет в туалете - да, через 5 мин. он сам выключается.
Но! Если я выключаю его раньше досрочно - по идее как раз должно сработать условие второго правила (состояние "свет включен" + отчет о том, что он был выключен), и должен включиться свет в ванной. Но этого почему-то не происходит.

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

Создаётся ощущение, что правило "активировать сцену с задержкой" не даёт себя прервать и выполнить какие-либо другие правила, которые проверяют ту же сцену.

Т.е. выключив свет выключателем досрочно - система, тем не менее, всё ещё ждёт условленные 5 минут и до тех пор больше ничего не активирует.

Это ошибка, или такая архитектурная особенность?
Как можно это обойти? Есть ли какая-нибудь возможность сбросить текущее "правило с задержкой"?

Начнём с комментариев

Posted: 07 Nov 2012 17:46
by PoltoS
Задерка исполнения сцены удалется при смене сцены на зоне, к которой принадлежит сцена (которую мы включаем с задержкой).

На зоне может быть только одна сцена. Т.е. если вы хотите активировать обе сразу, разнесите их на разные зоны

Убедитесь, что здесь первая и последняя на разных зонах:
Активировать "туалет - свет включен"
Через 300 сек. активировать "туалет - свет выключить"
Активировать "туалет - свет выключен"

Собственно, зачем последняя? Собственно она и мешает второму правилу сработать.

Аналогично, зачем последняя активируемая сцена во втором правиле?

Зачем в первом правиле проверять
активная сцена "туалет - свет выключен" ?
Тут надо понимать, что некоторые устройства не посылают отчёт, если состояние не изменилось. Т.е. если стало 255, то было 0.

Да, на зоне действительно одна сцена.

Posted: 07 Nov 2012 17:46
by klirichek
Я уже писал - я специально завёл две разные сцены "свет выключить" - действие, "свет выключен" - состояние.
При активации сцены "свет выключить" выключателю посылается команда, и после этого активируется сцена "свет выключен". Т.е. длительное время активными бывают только сцены-состояния, а сцены-действия - только выполняют действие и переходят в состояние. Разумеется, они не могут быть активны одновременно. Я ожидаю видеть активными лишь сцены-состояния (и именно они раскрашивают карту цветом).

(в одной сцене делать включение и отображать цвет - не совсем оптимально. Если свет включен не котроллером, а выключателем на устройстве - получится, что чтобы сменить цвет на карте, нужно будет активировать эту сцену, а она снова пошлёт сигнал на включение (уже со стороны контроллера). Устройству хуже от этого не будет, но зачем гонять лишние данные?)

Проблема в том, что если я при описании сцены-действия дописываю в конце переход в сцену-состояние - то это не всегда происходит. Т.е. если я активирую сцену "свет включить" - я ожидаю, что свет включится и после этого активируется сцена "свет включен". Однако по факту получается, что свет включается, а вот финальная сцена "свет включен" активируется нестабильно. _поэтому_ пришлось дописать последние сцены в правилах.

Активную сцену я проверяю, покуда устройства посылают отчёт не только по факту смены состояния, но и по ежеминутному опросу.
Т.е. если не проверять факт "свет выключен", а просто проверять отчёт на "включенность" - то через минуту прилетит такой же отчёт - правило снова сработает и т.д.

Всё же не понял логику работы.

Posted: 07 Nov 2012 17:46
by klirichek
> Задерка исполнения сцены удалется при смене сцены на зоне, к которой принадлежит сцена (которую мы включаем с задержкой).

Т.е. удаляется только задержка - а само действие выполняется уже без задержки? Или при смене сцены во время задержки все действия, что были запланированы на время после задержки, отбрасываются?

Проблема вот в чём (чуть переформулирую)
Включили свет. Первое правило отработало - поставило сцену "свет включен" и ушло в спячку на 300 секунд. (чтобы потом выключить свет и выставить сцену "свет выключен).

Т.е. в течение 5 минут мы имеем состояние-сцену "свет включен".
И тут я беру и выключаю свет (выключателем).
Выключатель посылает отчёт о своём нулевом состоянии - и тут как раз должно сработать второе правило (есть отчёт, в нём нуль, есть активная сцена "свет включен"). Только при обнаружении этого условия второе правило меняет активную сцену на "свет выключен" (что в принципе, как вы говорите, может повлиять на ход "спячки" отложенных действий в первом правиле).

Что имеем по факту:
"чистый" запуск - свет в туалете включен, активна сцена "свет включен"
- выключаем свет (имеем: свет выключен; активна сцена всё ещё "свет включен").
Срабатывает 2-е правило. Всё ок.

Другой вариант:
- свет в туалете выключен, активна сцена "свет выключен"
- включаем свет - срабатывает первое правило, и на 5 минут замирает в состоянии:
свет в туалете включен, активна сцена "свет включен".
- выключаем свет (имеем: свет выключен, сцена всё ещё "свет включен")
И вот тут второе правило почему-то не срабатывает!

Ещё раз выделю странное место

Posted: 07 Nov 2012 17:46
by PoltoS
Ещё раз выделю странное место в вашей настройке:Активировать "туалет - свет включен" Через 300 сек. активировать "туалет - свет выключить" Активировать "туалет - свет выключен"Видимо, здесь где-то опечатка, т.к. после срабатывания правила активной должна быть сцена "свет вЫключен" и второе правило не должно сработать.Теперь о том, как это работает в движке:При удовлетворении правила идёт (внутри каждой категории действия в порядке упоминания):активируются все сценыустанавливаются таймеры отложенных сценустанавливаются таймеры отложенных событийПри активации сцены (внутри каждой категории действия в порядке упоминания):установка текущей сцены на зоне на "неопределена" (на случай ошибки выполнения последующих действий)удаление ВСЕХ ранее установленных таймеров отложенной активации сцен для данной зоныактивируются сцены, вызываемые из даннойприменяются климатиеские расписанияотправляются команды устройствамсмена текущей сцены на зоне на текущуюИменно из-за порядка выполнения пунктов 2 и 6 у вас не выставлялась нужная сцена в варианте вложенного запуска. Но действия на ней выполнились бы в любом случае (если бы таковые были).Возможно, после исправления с учётом приведённых здесь замечаний всё заработает. Если нет, то лучше выложить скриншот - он поможет разобраться. 

То есть из одной сцены нельзя автоматически перейти в другую?

Posted: 07 Nov 2012 17:46
by klirichek
Если при активации сперва действует п.3 (у меня из сцены "включить/выключить" активируется сцена "включен/выключен" в той же зоне) - а потом по итогу п.6 снова выставит как текущую сцену "свет включен" - то, выходит, такой хак изначально не работает?

Ещё раз поясню:
зона "туалет", сцена "свет включен" : цвет жёлтый
(действий нет)
зона "туалет" сцена "свет включить" : цвет прозрачный
- включить свет (отправить команду актуатору)
- активировать сцену "свет включен" на зоне "туалет"

Предполагаемый результат:
- активируем сцену "свет включить". Имеем включеный свет (действие) + активную сцену на зоне "свет включен".
Иными словами - активируем одну, а в результате активной получаем другую.

Я правильно понял, что из-за пункта 6 это невозможно?
(т.е. по п.3 - активируется сцена "свет включен" - потом по п. 5 отправляется команда, и наконец по п. 6 сцена сменится на "свет включить". Всё верно?)

Если так - то каким правильным образом тогда добиться нужного поведения?
Сейчас у меня стоит правило-страховка: оно по отчёту устройства выставляет "свет включен" или "свет выключен" в том случае, если активная сцена не определена, либо "свет включить/выключить".

Да, активация вложенных сцен

Posted: 07 Nov 2012 17:46
by PoltoS
Да, активация вложенных сцен будет работать только для разных зон. Что логчино - странно переводить подряд в несколько состояний зону за один раз. Создайте вложенную зону "Действия" на зоне туалета. Тогда вложенная автичация будет работать.

Снова проблема с отложенной активацией.

Posted: 07 Nov 2012 17:46
by klirichek
Решил осуществить сценарий "раздеться и лечь спать".
Смысл в том, чтобы при активации этой сцены через 2 минуты в комнате гас свет.
Итак, добавил к "действиям" комнаты нужную сцену.
Добавил правило - если активна сцена "раздеться и лечь спать" - активировать сцену "выключить свет" с задержкой 120сек.
Вроде просто. Лаконично.
Но! Не работает!

Я так понял, что из-за опроса устройств каждую минуту правило тоже перезапускается заново.
Если я ставлю задержку, скажем, в 40 секунд - да, оно срабатывает (может через 40, может через 1.40). Но больше 1 минуты поставить нельзя в принципе.
Как быть? Возможно ли вообще настроить такое?

Каждый раз при запуске сцены

Posted: 07 Nov 2012 17:46
by PoltoS
Каждый раз при запуске сцены на зоне удаляются все таймеры отложенных запусков сцен.

Так как Ваше правило выполняется при каждом опросе устройства, таймеры удаляются. Самый простой способ избежать этого - это в условие правила добавить, что сцена (та, что сейчас) ещё не активна.

Т.е. правило активирует сцену "Скоро спать" и ставит таймер на 2 минуты "Выключить свет". При повторном опросе правило не будет выполнено, т.к. сцена "Скоро спать" активна. Это избавит от сброса таймера.

Ещё обратите внимание, что событие проходит ВСЕ привала. Т.е. составное действие на правиле можно разбить на несколько отдельный действий, запускаемых разными правилами с одним условием. Далее можно одно из условий править, не трогая другие.

Спасибо, помогло

Posted: 07 Nov 2012 17:46
by klirichek
Я почему-то думал, что покуда "Каждый раз при запуске сцены на зоне удаляются все таймеры отложенных запусков сцен" - то и при активации из правила сцены "скоро спать" (пришлось задать для неё отдельную зону), таймер правила, которое от него зависит, тоже сбросится. Оказалось не так.