Navigation

    Forum

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • intraHouse Site
    1. Home
    2. intrapro
    3. Posts
    I
    • Profile
    • Following
    • Followers
    • Topics
    • Posts
    • Best
    • Groups

    Posts made by intrapro

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

      Добрый день. Обработчики устройства работают в рамках одного устройства, не имеют доступ к другим устройствам.

      Кроме обработчиков устройства, в системе есть другие виды скриптов:
      Общие концепции - > Скрипты

      В данном случае нужно использовать сценарий
      "Сценарии запускаются по событиям устройств, по расписанию. Могут работать с несколькими (многими) устройствами и слушать их события."

      /**
       * @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 будет сумма значений
        }
      };
      
      posted in intraHouse V5
      I
      intrapro
    • RE: MQTT данные в массиве парсятся неверно? (v5)

      Пользователь @AV написал

      Но всё равно - не работает. Значение в виде текста или словаря приходят нормально, а если делаешь массив - в канал ничего не приходит.

      Упс, вы правы. В плагине MQTT поступление массива всегда интерпретируется как архив.
      Подумаем, как это исправить. Скорее всего, придется добавить параметр на уровне плагина.

      posted in Плагины
      I
      intrapro
    • RE: MQTT данные в массиве парсятся неверно? (v5)

      @AV, попробуйте в Формуле входного значения для канала 'aaa' прописать

      JSON.parse(value).find(item => item.n == "aaa").v
      

      соответственно для 'bbb'

      JSON.parse(value).find(item => item.n == "bbb").v
      
      posted in Плагины
      I
      intrapro
    • RE: Установка значений каналов через REST API

      Добрый день, Александр! Очень изобретательно 🙂
      Но теперь понимаю, что задача у вас - организовать через API управление (запись на железо).
      Конечно, система должна предоставить для этого прямой способ.

      В версии 5.9 это к сожалению не работает, сейчас выполняем унификацию API для разных скриптов системы (скрипты визуализации, сценарии, REST API).

      В 5.10 (релиз выйдет в начале следующей недели) можно будет выполнять команды устройства напрямую:

      const dev = holder.getDevice('VENT1');             
      dev.setValue('setpoint', 22);        
      dev.on();          
      
      
      posted in IntraSCADA V5
      I
      intrapro
    • RE: Установка значений каналов через REST API

      Добрый день! В канал плагина установить данные через REST API не получится. Можно записать значение в свойство устройства минуя канал. Для этого нужно сгенерировать событие 'received:device:data'. Такое же событие генерируется при получении данных с плагина для привязанных к каналам устройств.
      Объект события: {<device1 ID>:{<prop1>:val1,...}, <device2 ID>:{<prop2>:val2,...} }
      Пример 1. Передается ID устройства, имя свойства и значение

      /**
       * Обработчик запроса REST API
       * /restapi/device/set?did=d0021&prop=setpoint&value=42
       *    => {d0021:{setpoint:42}}
       */
      module.exports = async (req, res, holder, debug) => { 
        try {
          const did =  req.query.did;
          const prop =  req.query.prop;
          const val =  req.query.value || 0;
          holder.emit('received:device:data', {[did]: {[prop]: val} });
          res.json({ res: 1});
        } catch (e) {
          res.json({ res: 0, message: e.message });
          debug(e.message)
        }
      };
      

      Пример 2. Передается dn (device name) устройства, по нему сначала нужно определить device ID

      /**
       * Обработчик запроса REST API
       * /restapi/device/set?dn=DT101&prop=setpoint&value=42
       *    => {d0021:{setpoint:42}}
       */
      module.exports = async (req, res, holder, debug) => { 
        try {
          const dn =  req.query.dn;
          const prop =  req.query.prop;
          const val =  req.query.value || 0;
          const dobj = holder.dnSet[dn];
          if (!dobj) throw {message:'Not found device '+dn};
          
          const did = dobj._id;
          holder.emit('received:device:data', {[did]: {[prop]: val} });
          res.json({ res: 1});
        } catch (e) {
          res.json({ res: 0, message: e.message });
          debug(e.message)
        }
      };
      

      Конечно, аналогично можно передать POST запрос с множеством значений

      posted in IntraSCADA V5
      I
      intrapro
    • RE: Запись в журналы.

      Пользователь @aleks-zonov написал в Запись в журналы.:

      Разобрался как сделать запись в журнал аварий, но не могу понять как сделать запись из сценария, может кто подскажет?

      В версии Cherry журнал аварий можно настроить только на уровне устройства. События добавляются и удаляются автоматически при изменении состояний.

      posted in intraHouse V4 Cherry
      I
      intrapro
    • RE: Сценарий отопления

      Пользователь @zahar69 написал в Сценарий отопления:

      (/assets/uploads/files/1646117183718-3.jpg) 4.JPG

      У вас косая перед "?" лишняя во входящем сообщении:
      /megad.php/?pt=3&v=0

      С меги приходит /megad.php?pt=3&v=0

      posted in intraHouse V5
      I
      intrapro
    • RE: Релиз IntraHouse V5

      Пользователь @Lost написал в Релиз IntraHouse V5:

      Все вроде работает....
      По факту сценарий активен, а тут показано, что он остановился.

      Да, это вы верно заметили, здесь информация не совсем верно представлена.
      Показывает, сколько длится синхронная часть (последняя выполненная функция, грубо говоря). Контроль зацикливания

      posted in intraHouse V5
      I
      intrapro
    • RE: Релиз IntraHouse V5

      Пользователь @Lost написал в Релиз IntraHouse V5:

      И функция boot() похоже не работает. По крайней мере этот сценарий не запускается при перезагрузке сервера. Пока закоментарил.

      Вышла версия 5.8.12-beta. В ней работает функция boot(), синтаксис как в V4.
      Проблемы с таймерами также исправлены. Еще раз спасибо за баг-репорт 🙂

      posted in intraHouse V5
      I
      intrapro
    • RE: Релиз IntraHouse V5

      @Lost, спасибо за подробный анализ проблемы!
      Будем разбираться

      posted in intraHouse V5
      I
      intrapro
    • RE: Релиз IntraHouse V5

      Пользователь @Lost написал в Релиз IntraHouse V5:

      Похоже не работает. Ваш пример сценария виртуального датчика темноты после запуска на вкладке "Описание" имеет состояние "Активен", а в окне на вкладке "Редактор" состояние Not active. Если же в таймерах этого сценария вместо временных точек указать интервал то сценарий нормально отрабатывает. На вкладке "Редактор" отображаются сообщения, например Active timer "sunrise" on 10.02 07:47:14 Active timer "sunset" on 10.02 17:20:43

      Проверили, такая конструкция отрабатывает штатно:

      this.startTimer('sunrise', this.getSysTime('sunrise','tomorrow'), 'onSunrise');
      

      Результат в отладчике:

      10.02 10:38:20.544 ---Started 
      10.02 10:38:20.555 getSysTime sunrise tomorrow = 11.02 07:27:55.983 (1644553675983)
      10.02 10:38:20.555 Start timer sunrise on time 11.02 07:27:55 (1644553675983)
      

      Какой код вы используете, из V4?

      posted in intraHouse V5
      I
      intrapro
    • RE: Релиз IntraHouse V5

      @Lost, да. должно работать

      posted in intraHouse V5
      I
      intrapro
    • RE: Релиз IntraHouse V5

      @Lost, попробуйте использовать cmd=list

      /%pwd%/?pt=43&cmd=list

      posted in intraHouse V5
      I
      intrapro
    • RE: Релиз IntraHouse V5

      Пользователь @Lost написал в Релиз IntraHouse V5:

      Господа разработчики, как все таки выбрать сценарий для запуска в расширениях плагина MegaD?

      Выпущена версия плагина megad v5.0.10, список сценариев берется (мультисценарии не включаются).
      Для сработки сценария нужно также обновить систему. Сейчас доступна v5.8.11-beta, стабильный релиз выпустим на следующей неделе.
      В beta версию в тестовом режиме включен новый метод сценария showDialog для вызова диалога на экран конкретного пользователя (группы):

      Диалоговое окно будет выведено на все терминалы, на которых в данный момент запущен пользовательский интерфейс с логином 'admin'. Первый аргумент 'di0012' - ID диалога:

       this.showDialog('di0012','admin');  
      

      Если диалог создан для использования с "Любым устройством", нужно передать в качестве контекста внутренний идентификатор устройства:

       this.showDialog('di0013','admin', {contextId: 'd0095'});  
      

      А то, что при изменении параметров в расширениях плагина MegaD они после сохранения не применяются поправите? Сейчас нужно перезапускать плагин MegaD.

      Это пока к сожалению не сделано. Плагин MegaD был выпущен одним из первых и не использует новое API плагинов. Планируется разработать новый плагин MegaD с механизмом сканирования и всеми возможностями нового API. По срокам сказать не могу.

      posted in intraHouse V5
      I
      intrapro
    • RE: Релиз IntraHouse V5

      @Lost, Вы правы, не работает эта функция. Выпустим на неделе обновление системы и плагина MegaD.

      posted in intraHouse V5
      I
      intrapro
    • RE: Плагин MQTT

      @konia74, добрый день.
      Ваша формула не работает из-за знака "-" в названии свойства
      Такой вариант должен работать:

      JSON.parse(value)["DHT11-04"].Temperature
      
      posted in Плагины
      I
      intrapro
    • RE: Релиз IntraHouse V5

      @Lost, смысл есть только в том случае, если реле может переключиться не через команду от сервера

      posted in intraHouse V5
      I
      intrapro
    • RE: Релиз IntraHouse V5

      Пользователь @Lost написал в Релиз IntraHouse V5:

      Да, все заработало как вы и писали. Плагин надо бы теперь обновить.

      Хорошо, что заработало. Завтра выпустим обновление

      А период опроса какой лучше поставить для релейных модулей?

      Опыта работы с этими модулями у меня нет. Но чаще 30 сек 1-Wire опрашивать, думаю, не стоит.

      posted in intraHouse V5
      I
      intrapro
    • RE: Релиз IntraHouse V5

      @Lost, в исходниках, почему-то адрес порта для таких операций ограничен < 40
      Попробуйте отредактировать код плагина
      Для этого на папке MEGAD перейдите на вкладку Редактор.
      Выберите файл lib/plugin.js
      В строке 332 начинается функция tryAB_ReleCommand

      В строке 340 замените 40 на 50: xarr[0] < 40 => xarr[0] < 50

      function tryAB_ReleCommand(id, value) {
        // 32_ffaa7892678_A - DS2413
        let xarr = id.split('_');
      
        if (
          xarr.length == 3 &&
          (xarr[2] == 'A' || xarr[2] == 'B') &&
          xarr[1].length > 10 &&
          !isNaN(xarr[0]) && xarr[0] < 50 && xarr[0] > 0
        ) {
          // 32A:1&adr=ffaa7892678
          return xarr[0] + xarr[2] + ':' + value + '&addr=' + xarr[1];
        }
      }
      

      Сохраните изменение и перезапустите плагин

      posted in intraHouse V5
      I
      intrapro
    • RE: Релиз IntraHouse V5

      @Lost, команда почему-то неверно формируется:

      • /sec/?cmd=43_225758000000_A:1
        должно быть так?
      • /sec/?cmd=43A:1&addr=225758000000
        А чтение сейчас у вас должно выполняться правильно. Попробуйте переключить реле не через систему
      posted in intraHouse V5
      I
      intrapro