Плагин MegaD



  • Доброй ночи, придумал подключить к Megad пульт от электрических ворот чтобы не искать по карманах пульты, идея такая: button делаю на мнемосхеме, создаю сценарий в котором прописываю отправку на мегу click эмулируя нажатие кнопки, в меге настраиваю IN на клик.
    Вопрос: как написать сценарий чтобы отправлялся скрипт на мегу (клик) и блокировался button на время открытия или закрытия ворот (в секундах).



  • @amgstone, извините, но Вы иногда несете какой-то сумбур...
    MegaD не может принимать команды, которые она сама генерирует в адрес сервера при действиях на ее входах. Поэтому ни о какой эмуляции нажатия кнопки нет и речи! Ваша Button должна генерировать http-команду непосредственно на MegaD, чтобы замкнулся нужный ее выход. Однако в разрезе решения данной задачи нужно делать не button, а полноценное устройство (актюатор универсальный дискретный), по сработке которого будет запускаться сценарий:

    1. Включить выход
    2. Отсчитать время, необходимое для закрытия/открытия ворот
    3. Выключить выход

    Другое дело если приемная часть от вашего пульта может подключаться непосредственно ко входу MegaD (такие есть - см. сат ab-log). Но опять же - для правильного управления воротами не обойтись без сценария!



  • @Alex_Jet создал сценарий, пудьт подключил к out на меге и передаю короткий импульс на реле, этого достаточно чтобы кнопка идеально работала.
    alt text
    создал устройство
    alt text
    добавил на мнемосхему button
    alt text

    все работает но добавил галочку, устройство может быть заблокировано но визуально не блокирует устройство в приложении не появляется block
    alt text
    у меня на ролетах работает
    alt text



  • Здравствуйте. Подскажите пожалуйста, для использования megaD 16 XT в настройках, необходимо выбрать вход цифровой и актуатор универсальный аналоговый?



  • Добрый день. 3 контроллера работают без сервера стабильно. Как только подключаю IH, вылетает первая (всегда она) Мега. Ни под каким IP ее нет в сети. Приходиться делать полный ee reset и по новой настраивать. При этом
    две другие Меги продолжают дружить c IH. Где искать причину? спасибо.



  • @nikycoral поменяйте ip адрес меги



  • @amgstone менял



  • Пользователь @nikycoral написал в Плагин MegaD:

    Добрый день. 3 контроллера работают без сервера стабильно. Как только подключаю IH, вылетает первая (всегда она) Мега. Ни под каким IP ее нет в сети. Приходиться делать полный ee reset и по новой настраивать. При этом
    две другие Меги продолжают дружить c IH. Где искать причину? спасибо.

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

    1. В IH остановить плагин, связанный с вылетающей Мегой
    2. Привести контроллер в боевую готовность, убедиться, что он доступен через свой web-интерфейс
    3. В IH перейти в отладчик остановленного плагина и запустить плагин. В окне отладчика будет выведен полный лог обмена данными с контроллером. Нужно понять, на каком этапе возникают проблемы - при подключении или после какого-то запроса


  • @intrapro добрый день. Вчера запускал отладчик. 29.05 19:37:50.581 megad1:
    29.05 19:37:50.585 megad1: localhost => 192.168.0.14 HTTP GET /sec/?pt=7&cmd=get
    29.05 19:37:51.085 megad1:
    29.05 19:37:51.086 megad1: localhost => 192.168.0.14 HTTP GET /sec/?pt=35&cmd=get
    29.05 19:37:51.587 megad1:
    29.05 19:37:51.589 megad1: localhost => 192.168.0.14 HTTP GET /sec/?pt=30&cmd=get
    29.05 19:37:52.090 megad1:
    29.05 19:37:52.091 megad1: localhost => 192.168.0.14 HTTP GET /sec/?pt=30&cmd=get
    29.05 19:37:52.592 megad1:
    29.05 19:37:52.594 megad1: localhost => 192.168.0.14 HTTP GET /sec/?pt=30&cmd=get
    29.05 19:37:53.095 megad1:
    29.05 19:37:53.096 megad1: localhost => 192.168.0.14 HTTP GET /sec/?pt=34&cmd=get
    29.05 19:37:53.597 megad1:
    29.05 19:37:53.599 megad1: localhost => 192.168.0.14 HTTP GET /sec/?pt=11&cmd=get
    29.05 19:38:20.084 megad1: localhost <=> 192.168.0.14 Socket timed out - abort!
    29.05 19:38:20.088 megad1: localhost <= 192.168.0.14 Error ECONNRESET. Stopped.
    29.05 19:38:20.111 IH: Plugin exit with code 3
    29.05 19:38:20.118 IH: restart timer 5

    сегодня сделал эксперимент. Присвоил новый IP этой Меге. В IH прописал ее под новым ID. Вроде как несколько часов все работало и ни одна из мег больше не вылетала. Более того я их всех обновил до последней версии прошивки и все шло хорошо. Я решил перегрузить сервер(малинка) и... больше
    сервера я не вижу. Такое ощущение что не грузится boot IH. Вечером буду переустанавливать.спасибо. буду наблюдать.



  • Здравствуйте. Может кто нибудь помочь с настройкой датчика ACS758LCB. Сложность возникает как с megad2561, входа АЦП иметь значения на сервере intrahouse. Как можно настроить этот датчик, подскажите пожалуйста.



  • Здравствуйте. Разбираюсь с системой и возникает множество вопросов))

    1. Как настраивается в плагине в канале"Функция обработки значения"?
      в каком виде можно писать?
      Например датчик температуры, если он показывает меньше -40, либо ровно 0, либо больше 100 значит он неисправен, как это записать?
    2. Где вообще можно посмотреть хорошее описание API по intraHouse? Например по работе с БД?
      В https://ih-systems.com/ru/command_list/ лишь часть.
    3. Как проверять работу сложного скрипта? Как посмотреть результаты работы consol.log('') или использовать какие либо аналоги ?


  • Пользователь @regabriel написал в Плагин MegaD:

    Здравствуйте. Разбираюсь с системой и возникает множество вопросов))

    1. Как настраивается в плагине в канале"Функция обработки значения"?
      в каком виде можно писать?
      Например датчик температуры, если он показывает меньше -40, либо ровно 0, либо больше 100 значит он неисправен, как это записать?

    Добрый день.
    Настройку интервала допустимых значений можно настроить прямо на устройстве (min-max) . Там же можно определить, что делать, если произошел выход из диапазона:

    • "Не принимать значение вне диапазона" - значение не будет присвоено
    • "Установить ошибку при выходе из диапазона"

    Можно эти флаги устанавливать независимо. Также можно контролировать поступление данных - "Установить ошибку если нет данных в течение (сек)"

    device_setting.png

    Функция обработки в канале используется, если нужна сложная предварительная обработка. Например, от контроллера получаем 5 значений, сортируем, откидываем минимальное и максимальное и вычисляем среднее. И именно вычисленное значение отдаем ядру системы.
    Пример такой функции для плагина MegaD приведен в описании плагина (в конце страницы):
    https://ih-systems.com/ru/product/plugin-megad/

    1. Где вообще можно посмотреть хорошее описание API по intraHouse? Например по работе с БД?

    Пользовательские SQL запросы к БД на уровне ядра в версии 4 не поддерживаются. Можно писать и читать из сценария с помощью функций this.dbread(), this.dbwrite().
    Если нужно напрямую работать с БД, есть возможность написать отдельный плагин. Документации на эту тему нет 😞 , но есть примеры реализации.

    1. Как проверять работу сложного скрипта? Как посмотреть результаты работы consol.log('') или использовать какие либо аналоги ?

    Для отладки скрипта есть "Отладчик" в нижнем окне сценария. Там выводится трассировка при выполнении команд, таймеров, проверки условий.
    Вместо console.log в скрипте используйте. this.log(''), сообщение будет выведено в этом же окне



  • Здравствуйте. Вопросы, вопросы по работе системы))) Мануальчика поописательней не хватает))

    Пытаюсь настроить нормально счетчики. Т.к. импульсы(пакеты) иногда теряются, да и реагировать на каждый импульс это немного бредово(можем получать по 10-40 импульсов в сек...)). Поэтому гораздо логичнее периодически считывать значение cnt и разницу записывать. И тут возникает вопросы:

    По идее на запрос
    /%pwd%/?pt=%adr%&cmd=get
    мега даст ответ
    OFF/61
    Можно было бы в функции обработки записать

    function (val, depo) {
    if (!depo.oldcnt) depo.oldcnt = 0;
    if (val.substr(0,2) =='OF'){
    cnt = val.substr(4));
    }else{
    cnt = val.substr(3));
    }
    //дальше обрабатываем cnt, был ли переход через 65535  и т.д.
         } 
    

    Но

    1. как понять какую ошибку выдает обработка скрипта? Где логи?
    2. Во вторых this.log(); сдесь не работает. Как понять в каком виде сейчас val ???

    Можно было бы пойти обходным путем, написать скрипт для опроса всех счетчиков в виде:

    let te = this.pluginCommand({unit:'megad3', command:'/sec/?pt=0&cmd=get'});
    //дальше уже обработаем ответ, но
            this.log('te = ' + te);
    

    но te в данном случае выдает = undefined , т.е. pluginCommand не выдает ответ от меги.

    Писать ради такого случая require('http').get('http://192.168.1.202/' ) и т.п. считаю крайне некрасивым вариантом.



  • @regabriel, лучше сделайте по такому принципу:

    У режима Mute есть одна важная особенность. Даже если он включен, контроллер отправит на сервер информацию при достижении счетчика порта максимального значения 65535.
    Это позволит серверу не пропустить факт обнуления счетчика. Но кроме того, эта особенность позволяет серверу в некоторых случаях отказаться от циклического опроса и получать информацию более оперативно.
    Например, программному обеспечению сервера необходимо знать о каждых 100 импульсах на входе.
    Сервер может задать начальное значение счетчика с помощью параметра "cnt": http://192.168.0.14/sec/?pt=0&cnt=65435.
    Когда счетчик порта достигнет 65535 (+100 относительно начального значения), контроллер отправит на сервер соответствующий GET-запрос, а сервер в ответ снова может установить нужное ему значение счетчика порта.
    

    В расширениях прописываем откликаться на событие pt=0 и при этом запускать сценарий. В сценарии первым делом "обнуляем" счетчик (http://192.168.0.14/sec/?pt=0&cnt=65435), ну и прибавляем значение у счетчика. При этом счетчиком может быть датчик аналоговый универсальный.

    В функции обработки лог только в виде return можно использовать (возвращать какое-то число, которое вы можете сами просчитать).



  • Пользователь @Alex_Jet написал в Плагин MegaD:

    лучше сделайте по такому принципу

    Моя задача сделать максимально точные показания. Поэтому такой подход считаю неправильным, т.к. между получением Get от меги и получением мегой команды " http://192.168.0.14/sec/?pt=0&cnt=65435" пройдет некоторая дельта времени, что в свою очередь дает вероятность пропуска импульсов. Mute понятно и так использую.

    1. Вопрос в другом, как получить CNT по запросу, а не обработкой входящих?

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

    2 Вообще "формула расчета входного значения работает "? Такое ощущение, что нет.



  • @regabriel, get-запрос улетает за считанные МИЛЛИСЕКУНДЫ! О чем вы говорите? У вас за 25 мс только один счет пролетает! Поставьте очередь запросов в плагине 1 мс, сделайте скрипт и попробуйте выявить ошибку. Думаю, ее просто не будет! И да - у вас промышленное производство по дозированию компонентов для изготовления каких-то продуктов?

    Формула расчета конечно работает. Правда при вычислении разности или сложении нужно записывать в виде - "Number(value)-0.69"

    Чтобы устройству записывать значение в cnt, то нужно применять "Функцию обработки значения" - в ней парсить значение в ключе cnt и возвращать его в систему. Правда у меня это сделать сходу не получилось. Может @intrapro поможет?



  • @Alex_Jet

    У меня даже банальная функция не работает (Либо я дурак, либо лижи не едут)))

    function (val, depo) {
       	let result = 34;
      	return result; 
         } 
    

    канал - 0
    Тип порта - AI Analog Input(ADC,Dsen)
    Устройство - аналоговый универсальный датчик. (number_223_cnt_mega_electro)
    Период опроса 2 сек
    Строка запроса /%pwd%/?pt=%adr%&cmd=get

    В самой меге настроен порт IN
    Отладчик показывает:

    30.07 11:59:18.007 megad3: localhost => 192.168.1.213 HTTP GET /gos/?pt=0&cmd=get
    30.07 11:59:18.014 megad3: localhost <= 192.168.1.213  response: statusCode=200 contentType = text/html
    30.07 11:59:18.015 megad3:  body: OFF/5242
    30.07 11:59:18.016 IH: get [ { id: '0', value: '0' } ]
    set { number_223_cnt_mega_electro: { aval: 0, err: 0 } }
    

    В исходниках модуля попытался разобраться, но быстро понять хитросплетения не получилось, времени жалко на полный разбор))



  • @regabriel, если вы название канала указываете как 0 - 37, то они плагином парсятся в стандартном режиме - различаются состояния OFF=0 и ON=1.
    Если название канала задать типа "QWERTY", то стандартный парсинг не будет использоваться и по идее все что есть в body мы можем разбирать. Однако у меня сходу не получилось разобрать split-ом на Val и Cnt (OFF/1)...



  • @Alex_Jet
    Ставлю канал - 223 (тоже и если поставить qweds)
    строку запроса /%pwd%/?pt=0&cmd=get

    функцию "function (val, depo) {
    let result = 34;
    return result;
    } "

    Лижи все равно не едут. Результат не изменился вообще ни по логам ни где.

    В плагине(v 1.1.16) Нет цифр 36-37-38 обычным поиском по содержимому файлов это легко проверяется.
    Т.е. я очень сомневаюсь "название канала указываете как 0 - 37" в истинности этой версии



  • @regabriel, в исходниках как минимум в двух местах прописано преобразование "по умолчанию"...еще с cnt никто не работал в iH! Нужно поправить где-то здесь, но как именно, наверное, только @intrapro знает)))

    if (isNaN(str)) {
          if (str.substr(0, 2) == 'OF') {
            val = 0;
          } else if (str.substr(0, 2) == 'ON') {
            val = 1;
          } else {
            res = tryReadSome(str, adrx);
          }
        } else {
          if (channelId) adrx = channelId;
          val = getResultValue(Number(str), adrx);
    

    По мне так - преобразование не нужно делать при if(isNaN(channelid))..


Log in to reply