Не сработало правило после перезагрузки контроллера


#1

После перезагрузки контроллера увидел, что правило не работает, в логе нашел следующее:
WARNING: couldn’t load /etc/wb-rules/heating.js: Error: invalid cell alias in whenChanged: floor1_temperature transformWhenChangedItem /usr/share/wb-rules-system/scripts/lib.js:138 preventsyield map native strict pre

Но открыл скрипт и сохранил без изменений, то заработало. В чем нюанс?

Вот правило в heating.js:

defineRule('Update_Floors_temp', {
    whenChanged: ['floor1_temperature','floor2_temperature','floor3_temperature'],
    then: function () {//обновляем значение виртуального контрола
        dev.HOME_Temperature['Floor 1'] = floor1_temperature.toFixed(1);
        dev.HOME_Temperature['Floor 2'] = floor2_temperature.toFixed(1);
		dev.HOME_Temperature['Floor 3'] = floor3_temperature.toFixed(1); 		
    }
});

а вот алиас в rules.js:

defineAlias("floor1_temperature", "wb-w1/10-000802bbd9d5");
defineAlias("floor2_temperature", "wb-w1/10-000802bc9fab");
defineAlias("floor3_temperature", "wb-w1/10-000802bb9742");

#2

Добрый день, Starck!

Движок правил сначала просматривает код heating.js, а затем только rules.js, поэтому в начале об алиасах ничего не известно. Потом алиасы уже подгружены движком, и повторное определение правила в heating.js при сохранении срабатывает.

Имена файлов просматриваются в лексикографическом порядке. Переименуйте rules.js в 1_rules.js или в a_rules.js и все должно заработать.

Для проверки перезагружать контроллер не надо, достаточно в командной строке перезагрузить wb-rules:
service wb-rules restart