Всем привет!
Не могу понять, что я делаю не так, помогите разобраться.
Есть виртуальное устройство и у него есть контрол типа text, на него подписана пара правил. Примерно так:
log('File loaded');
defineVirtualDevice('someVirtualDevice', {
title: 'Some virtual device',
cells: {
someValue: {
type: 'text',
value: '',
forceDefault: true
}
}
});
defineRule('Foo', {
whenChanged: ['someVirtualDevice/someValue'],
then: function() {
log('Foo rule body');
}
});
defineRule('Bar', {
when: function() {
log('Bar rule condition');
return dev['someVirtualDevice']['someValue'] != '';
},
then: function() {
log('Bar rule body');
}
});
Когда я сохраняю файл с таким содержимым, я получаю в консоли со включенной отладкой такие сообщения:
2019-12-04 23:32:14 File loaded
2019-12-04 23:32:14 defineRule: Foo
2019-12-04 23:32:14 defineRule: Bar
2019-12-04 23:32:14 Bar rule condition
Логично. Также я вижу новый девайс в разделе Devices веб-интерфейса. И вижу дерево девайса в MQTT Explorer, мета присутствует, всё как положено.
Теперь я извне отправляю в MQTT непустое сообщение в топик /devices/someVirtualDevice/controls/someValue
По задумке должны сработать оба правила, но нет. В консоли тишина.
Значение контрола someValue устройства в веб-интерфейсе при этом изменяется на отправленное значение.
Пробую изменять значение контрола в самом движке правил:
defineRule('Random', {
when: cron('0 * * * * *'),
then: function() {
var randomNumber = Math.floor(Math.random() * 100);
log('Random number: {}', randomNumber);
dev['someVirtualDevice']['someValue'] = randomNumber;
}
});
А вот так работает. Каждую минуту я получаю в консоли сообщения типа:
2019-12-05 00:34:58 Random number: 36
2019-12-05 00:34:58 Foo rule body
2019-12-05 00:34:58 Bar rule condition
2019-12-05 00:34:58 Bar rule body
То есть оба правила реагируют корректно. Движок правил перезапускал, даже сам контроллер перезапускал - ничего не меняется.
Почему так? Где я согрешил?
Мой вопрос казалось бы очень похож на этот, но мне перезагрузка никак не помогает.
Версия wb-rules 1.7.1, контроллер WB6.