Пользовательский обработчик.



  • Подскажите как в такой обработчик ввести переменные с других устройств.
    Имеем такой обработчик

    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 в данном конкретном устройстве.

    2023-03-22_20-55-23.png

    Так вот у меня такой вопрос, как в этот обработчик внести переменную не с этого устройства.

    Например так:

    const sum = device.P1+device.P2+другой device.P2
    

    К примеру есть 2 счётчика, в каждом из них мы получаем P0 как сумму.
    Потом я создаю 3 счётчик, но в нём я хочу в обработчике вывести сумму двух предыдущих счётчиков.
    Примерно так const

    sum = счётчик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 будет сумма значений
      }
    };
    

Авторизуйтесь, чтобы ответить