Пользовательский обработчик.
-
Подскажите как в такой обработчик ввести переменные с других устройств.
Имеем такой обработчикmodule.exports = function(device) { const sum = device.P1+device.P2+device.P3; device.log('P1='+device.P1+' P2='+device.P2+' P3='+device.P3+ 'SUM='+sum) return sum; }
То есть складывая P1 P2 P3 получаем сумму в P0 в данном конкретном устройстве.
Так вот у меня такой вопрос, как в этот обработчик внести переменную не с этого устройства.
Например так:
const sum = device.P1+device.P2+другой device.P2
К примеру есть 2 счётчика, в каждом из них мы получаем P0 как сумму.
Потом я создаю 3 счётчик, но в нём я хочу в обработчике вывести сумму двух предыдущих счётчиков.
Примерно так constsum = счётчик1.P0+счётчик2.P0
Вот как мне это сделать?
Заранее благодарен за подсказку.
-
Добрый день. Обработчики устройства работают в рамках одного устройства, не имеют доступ к другим устройствам.
Кроме обработчиков устройства, в системе есть другие виды скриптов:
Общие концепции - > СкриптыВ данном случае нужно использовать сценарий
"Сценарии запускаются по событиям устройств, по расписанию. Могут работать с несколькими (многими) устройствами и слушать их события."/** * @desc * @version 5 */ const m1 = Device("Meter_001"); const m2 = Device("Meter_002"); const m3 = Device("Meter_003"); const script = { start() { m3.assign('P0', m1.P0+m2.P0); // В счетчике Meter_003.P0 будет сумма значений } };
Немаловажный вопрос - в какой момент нужно пересчитывать значение.
Можно запустить этот сценарий по расписанию (циклически - каждые 30 сек, или на границе минуты...)
Если же нужно, чтобы при любом изменении значений m1 или m2 - в декларативную часть сценария нужно добавить startOnChange.
Можно вызывать сценарий при любом изменении значений m1, m2: startOnChange([m1,m2]);
Можно указать конкретные свойства: startOnChange([m1.P0,m2.P0])const m1 = Device("Meter_001"); const m2 = Device("Meter_002"); const m3 = Device("Meter_003"); startOnChange([m1.P0,m2.P0]); const script = { start() { m3.assign('P0', m1.P0+m2.P0); // В счетчике Meter_003.P0 будет сумма значений } };