then: function (newValue, devName, cellName) в обработчик предается новое значение, часто требуется старое значение, конечно можно прихранить, но не очень красивый код выходит, лучше передавать и старое значение. Например, нужно понять, что влажность увеличивается. Какой паттерн посоветуете?
var HimiditySensorMqttTopic = “device/control”
var oldValue = dev[HimiditySensorMqttTopic]; //При загрузке правила, в oldValue передаем данные с датчика влажности
defineRule(“newValue oldValue”, {
whenChanged: HimiditySensorMqttTopic,
then: function (newValue, devName, cellName) {
if(newValue > oldValue){
log.info(“Влажность растет”)
}
else{
log.info(“Влажность падает”)
}
oldValue = newValue; //После прохождения всех проверок, передаем новое значение, в старое.
}
});
Нарушен принцип инкапсуляции логики, так можно, но лучше подать отдельным параметром в whenChanged.
И вообще, вопрос ребятам из WB. А не пора ли перейти на ECMAScript 6+?
Добрый день.
“старое” - оно ведь не хранится нигде в брокере. Это только выделять место в движке и хранить их там, но сразу виден очевидный недостаток: Если используется не имя топика а подстановочный символ, например “#” - то надо сохранять значения всех топиков?
Если нужно старое значение как правило сохраняю его в переменной, так же как @Vlad_Volchkov
Да, планируется капитальный рефакторинг движка правил.
Ясно, Жду ООП.
Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.