Навигация

    Forum

    • Зарегистрироваться
    • Войти
    • Поиск
    • Категории
    • Последние
    • Метки
    • Популярные
    • intraHouse Site
    1. Главная
    2. intrapro
    3. Сообщения
    I
    • Профиль
    • Подписки
    • Подписчики
    • Темы
    • Сообщения
    • Лучшие сообщения
    • Группы

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

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

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

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

      написал в Плагины
      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
      
      написал в Плагины
      I
      intrapro
    • RE: Установка значений каналов через REST API

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

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

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

      const dev = holder.getDevice('VENT1');             
      dev.setValue('setpoint', 22);        
      dev.on();          
      
      
      написал в 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 запрос с множеством значений

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

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

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

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

      написал в 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

      написал в intraHouse V5
      I
      intrapro
    • RE: Релиз IntraHouse V5

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

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

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

      написал в intraHouse V5
      I
      intrapro
    • RE: Релиз IntraHouse V5

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

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

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

      написал в intraHouse V5
      I
      intrapro
    • RE: Релиз IntraHouse V5

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

      написал в 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?

      написал в intraHouse V5
      I
      intrapro
    • RE: Релиз IntraHouse V5

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

      написал в intraHouse V5
      I
      intrapro
    • RE: Релиз IntraHouse V5

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

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

      написал в 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. По срокам сказать не могу.

      написал в intraHouse V5
      I
      intrapro
    • RE: Релиз IntraHouse V5

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

      написал в intraHouse V5
      I
      intrapro
    • RE: Плагин MQTT

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

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

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

      написал в intraHouse V5
      I
      intrapro
    • RE: Релиз IntraHouse V5

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

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

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

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

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

      написал в 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];
        }
      }
      

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

      написал в intraHouse V5
      I
      intrapro
    • RE: Релиз IntraHouse V5

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

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