Здравствуйте. Изучаю wb-rules , не понимаю как работает when. Читал несколько раз на GitHub про when и про просмотр правил, все равно не понял.
Вот код:
defineRule({
whenChanged: "wb-mr6cv3_246/Input 3 Single Press Counter",
then: function () {
dev["wb-led_163/Channel 2"] = !dev["wb-led_163/Channel 2"]
}
});
defineRule({
whenChanged: "wb-mr6cv3_246/Input 1 Single Press Counter",
then: function () {
dev["wb-mr6cv3_246/K1"] = !dev["wb-mr6cv3_246/K1"]
}
})
defineRule({
when: function(){
var a = dev["wb-mr6cv3_246/K1"]
return (a)} ,
then: function () {
dev["wb-led_163/Channel 2"] = false
}
})
Включаю wb-led_163/Channel 2 светодиодная лента работает.
Включаю wb-mr6cv3_246/K1 => выключается wb-led_163/Channel 2 тут все понятно.
Но если повторно включить wb-led_163/Channel 2, он включится не смотря на то что wb-mr6cv3_246/K1 включен и вро де как функция в when должна возвращать true. Если выключить и затем включить wb-mr6cv3_246/K1 то wb-led_163/Channel 2 выключается.
Объясните пожалуйста что я не понимаю.
whenChanged: срабатывает только при изменении значения указанного устройства или переменной.
when: проверяет указанное условие каждый раз, когда любое значение в системе изменяется.
Ваша проблема связана с использованием триггера when:
Работа when (level-triggered):
Проверка условий в when происходит только при изменении любого параметра в системе или по таймеру (если он используется).
Если wb-mr6cv3_246/K1 не изменялось, а wb-led_163/Channel 2 менялось вручную, правило не выполнится, поскольку wb-led_163/Channel 2 не указано в when.
Ручное управление wb-led_163/Channel 2:
Изменение wb-led_163/Channel 2 вручную не вызывает срабатывания третьего правила, так как это устройство не упомянуто в триггере.
Изменение wb-mr6cv3_246/K1:
При изменении значения параметра wb-mr6cv3_246/K1 происходит проверка всех правил. Если условия выполняются, срабатывает действие, например, отключение wb-led_163/Channel 2.
Чтобы третье правило работало корректно при ручных изменениях wb-led_163/Channel 2:
Используйте whenChanged для отслеживания изменений этого параметра.
" каждый раз, когда любое значение в системе изменяется должно проверятся условие в when, так? А при включении wb-led_163/Channel 2 меняется его значение в системе с false на true, и как я предполагал должно проверятся условие в when и отключать wb-led_163/Channel 2. Или when следит только за теми событиями которые прописаны в его функции?