Правило не видит функцию из другого файла скриптов

В скрипте light.js создал правило в котором проверяю текущее время time_now(), но появляется ошибка. Где искать ответ?

#light.js

defineRule("STAIRS_Light_Detector_1_2_detector", {
	asSoonAs: function() {
		return  !stairs1_2_relay && !stairs1_2_detector && time_now() > 7 && outdoor_illuminance < illuminance_lev_2;
	},
	then: function (newValue, devName, cellName) {

		stairs1_2_relay = 1 ; // включаем подсветку ступеней 1-2 эт
		log("[STAIRS 1-2]: MOVING DETECTOR ACTIVATED... Light is ON");

	}
});

#_rules.js

function time_now(a)  {
var date = new Date();
switch (a) {
	case 'H': return date.getHours();
	case 'M': return date.getMinutes();
	default:  return date.getHours();
}

}

Ошибка:

ECMAScript error: ReferenceError: identifier 'time_now' undefined
duk_js_var.c:1232
anon /etc/wb-rules/light.js:76 preventsyield
apply native strict preventsyield
anon /usr/share/wb-rules-system/scripts/lib.js:119 preventsyield

Начная с 2.x wb-rules пространства имен каждого скрипта свое.

у меня w5.8 rules: 1.7.x

Тогда да. Но - файлы подгружаются по очереди, надо файлу в котором есить ресурсы, испольщзуемые другим дать болле верхнее по сортировке имя, то есть начать с цифры либо с буквы “a”.

Подчеркивание вроде работало ведь раньше. Хм… Попробую перезагрузить правила.

После перезагрузки функции доступны?

К сожалению, нет. Функцию не видит правило. До всех обновлений у меня не было таких вопросов.

как увидеть последовательность загружаемых скриптов? может так станет понятнее что за чем подгружается?

Я когда разбирался - просто в начало каждого файла добавлял log.info(“Имя скрипта”);

Подскажите, пожалуйста, как сделать общий файл с “утилитами” для использования во всех скриптах?

Например, есть у нас функция создания правил на одинарное, двойное и долгое нажатие кнопок, я бы хотел ее вытащить в файл _0common.js (дабы он первым обрабатывался) и дальше использовать во всех скриптах функции, объявленные в нём

Можно в глобальном объекте, подробней:
https://wirenboard.com/wiki/Движок_правил_wb-rules_2.0#.D0.9F.D1.80.D0.BE.D1.82.D0.BE.D1.82.D0.B8.D0.BF_.D0.B3.D0.BB.D0.BE.D0.B1.D0.B0.D0.BB.D1.8C.D0.BD.D0.BE.D0.B3.D0.BE_.D0.BE.D0.B1.D1.8A.D0.B5.D0.BA.D1.82.D0.B0

ну, это выглядит как костыль. Я пока решил задачу так:

-пишу все скрипты на TypeScript
-создал отдельные файлы с общими функциями и полифилами
-создал отдельные файлы с логикой по помещениям и функционалу
-компилятору TypeScript указал сборку всех скриптов в один объединенный файл.

В итоге, на выходе имею один большой объединенный скрипт в котором все, что надо “видится” и работает.

1 Like