Плагин MegaD



  • @rodik А почему тип порта у вас Analog OUT? Для реле должен быть Digital Output.



  • @Lost результат тот же, и поле с командами где можно было вписать тут нет
    команда 5.jpg



  • @rodik Я сам с 5 версией еще толком не разбирался. Мутновато по сравнению с 4-кой. Попробуйте поставить четверку и попробовать с ней. А как разберетесь так и пятерку можно попробовать освоить.



  • @rodik А так нормальное описание по плагину MEGAD вот здесь https://intrahouse.ru/product/plugin-megad/



  • @Lost Спасибо!
    Буду ждать подсказки или какой то инструкции от админов.



  • Просьба к разработчиках дать хоть какую ту маломальскую инструкцию для MegaD в 5-й версии.



  • @rodik В настоящее время занимаемся движком плагинов. В том числе для Меги.
    Как закончим, опубликуем и сообщим.



  • Подскажите как правильно настроить выключатели, для MegaD-328 + реле.

    1. Установил плагин и запустил
    2. Создал устройства розетки
    3. Создал каналы для розеток
    4. Сделал экран, мнемосхему и привязал выходные каналы.

    Всё работает с планшета как положено, но не работают физические кнопки по управлению выходными каналами, если отключаю Мегу от интернета, тогда работают.

    1. Создал устройства выключатели
    2. Добавил новые каналы как входы.

    Кнопки также не работают

    1. Добавил в расширениях с разными вариантами команд

    Кнопки не работают.
    Какие действия неправильные?
    328_0.jpg 328_1.jpg 328_2.jpg 328_3.jpg



  • В вебе меги прописан сервер и порт?



  • @thunder_d 328_4.jpg
    дело в том что с планшета всё работает
    328_5.jpg



  • Это сообщение удалено!


  • всё, разобрался, для того чтобы работали физические кнопки,
    нужно было прописать скрипт.
    328_6.jpg



  • Хочу одной кнопкой выключать одновременно выключать несколько нагрузок, создал на мнемосхеме кнопку, в этой ветке нашёл команду которая будет запускаться через кнопку, но пока не удаётся,
    настройки такие
    328_7.jpg
    в отладчике вот это, что можно увидеть где ошибка?

    16.07 22:34:18.951 megad4: 
    16.07 22:34:18.952 megad4: localhost => 192.168.1.34 HTTP GET /sec/?pt=8&cmd=get
    16.07 22:34:18.956 megad4: localhost <= 192.168.1.34  response: statusCode=200 contentType = text/html
    16.07 22:34:18.956 megad4:  body: ON
    16.07 22:34:18.956 IH: get [ { id: '8', value: '1' } ]
    set { Roz_328_8: { dval: 1, err: 0 } }
    16.07 22:34:19.041 IH: plugin command { unit: 'megad4',
      clid: 'EHomCfealNm5NKWvB2Zm3Q==',
      command: 'this.pluginCommand({unit:\'megad4\', command:{url:\'/sec/?cmd=11:2;12:2\', onResponse:[{id:"11",value:2},{id:"12",value:"TOGGLE"}]});',
      arg: 
       { parentId: '2',
         parentType: 'WIDGET_MNEMOSCHEMES',
         targetId: '10',
         targetType: 'button',
         targetValue: null,
         layoutId: [ '7' ],
         inputs: {},
         arg: 'this.pluginCommand({unit:\'megad4\', command:{url:\'/sec/?cmd=11:2;12:2\', onResponse:[{id:"11",value:2},{id:"12",value:"TOGGLE"}]});' },
      type: 'command' }
    16.07 22:34:19.042 megad4: command: 'this.pluginCommand({unit:\'megad4\', command:{url:\'/sec/?cmd=11:2;12:2\', onResponse:[{id:"11",value:2},{id:"12",value:"TOGGLE"}]});'
    16.07 22:34:19.151 megad4: 
    16.07 22:34:19.151 megad4: localhost => 192.168.1.34 HTTP GET this.pluginCommand({unit:'megad4', command:{url:'/sec/?cmd=11:2;12:2', onResponse:[{id:"11",value:2},{id:"12",value:"TOGGLE"}]});
    16.07 22:34:19.151 megad4: Http request error: Request path contains unescaped characters
    16.07 22:34:19.352 megad4: 
    


  • Вопрос отпал. Не достаток информации, приходится много искать на форуме, достаточно было команды

    /sec/?cmd=a:0
    

    чтобы выключить все выходы, подсмотрел в ответе от Alex_Jet, спасибо.



  • Всем привет!
    Разбираюсь сейчас с плагином системой Интрахаус и привязкой к МегаД.
    У меня к МегаД подключен частотник, по протоколу ModBus.
    Управлять в принципе им получаеться, отправляя команду плагину из сценария. ```
    this.pluginCommand({unit:'megad1', command:'/sec/?uart_tx=010601100000&mode=rs485'})

    Но хотелось бы получать от частотника и обратную связь.
    Для этого создал канал с произвольным именем, тип Аналоговый вход, и прописал в строку запроса состояния нужный запрос: 
    

    /sec/?uart_rx=1&mode=rs485&cmd=get

    Далее планировал его обработать с помощью обработки данных на плагине, чтобы из ответа контроллера выделить цифру.
    Однако, не могу получит данные в канал.
    Интрахауз дает запрос, получает ответ:
    

    13.11 21:29:41.239 megad1: localhost => 192.168.0.14 HTTP GET /sec/?uart_rx=1&mode=rs485&cmd=get
    13.11 21:29:41.248 megad1: localhost <= 192.168.0.14 response: statusCode=200 contentType = text/html
    13.11 21:29:41.249 megad1: body: 01|06|01|10|11|30

    одако этих данных ( 01|06|01|10|11|30 ) на канале не появляеться. 
    Подскажите, может я где то не так делаю?


  • @AlexMer, добрый день
    Канал МегаД принимает только результат в виде числа, body нужно предварительно обработать с помощью формулы обработки, сниппета или сценария.
    Чтение данных с uart разбиралось здесь:
    Там несколько вариантов предлагается, но смысл в том, что нужно сырые данные распарсить, а результат уже передать в устройство

    Один из вариантов - сценарий чтения данных со счетчика.

    const power = Device("SensorA", "Power"); 
    script({
      start() {
        this.pluginCommand({unit:'megad1', command:{url:'/sec/?uart_tx=010400030002&mode=rs485'}});
    
        // Следующий запрос через 100 мсек
        this.startTimer('T1', 0.1, 'getNext');
        // Взвести таймер на случай, если ответа от контроллера нет
        this.startTimer('T2', 2, 'onTimeout');
      },
    
      getNext() {
        // Передать запрос на megad1, ответ без обработки придет в сценарий (onResponse:'raw')
        this.pluginCommand({unit:'megad1', command:{url:'/sec/?pt=7&cmd=get', onResponse:'raw'}}, 'getResponse');
      },
    
      getResponse(body) {
        this.log('getResponse body= '+body);
       
        if (body.includes('CRC Error')) {
          this.log('CRC Error'); // Контроллер вернул ошибку CRC
          this.exit();
        }
    
        // 01|03|02|08|a1 - в таком виде ожидается ответ
        const arr = body.split("|");
        if (arr && arr.length > 4) {
          const val = parseInt(arr[3]+arr[4], 16);
          this.assign(power,"value",val/10000 );
        } else {
          this.log('Не удалось извлечь значение из строки: '+ body); // Данные получены, но парсинг неудачен
        }
        this.exit();
     },
    
      onTimeout() {
        this.log('Истек таймаут, ответ от megad не получен');
        this.exit();
      }
    });
    


  • Спасибо за подсказку, принцип понял, подправил код под себя, все работает.



  • Это сообщение удалено!


  • Добрый вечер!
    Что то с командами плагина MegaD похоже не все в порядке. Вот сценарий:
    c83f3bb4-b298-4231-b9b9-129ecf371123-image.png
    Вот результат в отладчике:
    9cbd6e93-d8bb-43f3-a219-fd713af68e63-image.png
    Сценарий работу не заканчивает, зависает. Что тут не так?

    И еще вопрос. Как задать интервал таймера например 0,1 секунды? Или можно только кратно 1 секунде?
    Интервал таймера пробовал меньше секунды. Получается если задать меньше 0.5 сек то по факту таймер не работает (интервал типа 0). Если задать 0.5 и более то интервал отрабатывает 1 сек. В 4 версии все нормально. Проблемы видимо в 5-ке.



  • @Lost, Добрый день!
    Недавно стал разбираться с IntraHouse и пришлось потрать время пока не наткнулся на ваше сообщение в этой ветке и еще в соседней. Оба случая подтверждаю, все тоже самое.
    Из ситуации вышел сценарием, который состряпал из разных примеров. В моей задаче нужно получать данные со счетчика Mercury 200.02 через шлюз MegaD.
    Вот что получилось и работает стабильно несколько дней (запросы удаленные, через VPN):

    getMercury() {
       require('http').get('http://192.168.2.14/sec/?uart_tx=000816F063&mode=rs485', res => {  //C38D - CRC16 Modbus
        if (res.statusCode != 200) {
          res.resume();
          this.log('Error code: ' +res.statusCode);
          rawError("rawError", res.statusCode);
          voltage.assign("volt", 0);
          current.assign("current", 0);
          power.assign("power", 0);
          return;
        } else {
               //this.log('Start sleep 100ms');
               const date = Date.now();
                let currentDate = null;
                do {
                   currentDate = Date.now();
                } while (currentDate - date < 100);
               //this.log('End sleep 100ms');
                  require('http').get('http://192.168.2.14/sec/?uart_rx=1&mode=rs485', res => {
                    let rawData = '';
                    res.on('data', chunk => {
                    rawData += chunk;
                    rawData1 = rawData;
                  });
                    if (rawData1.includes('CRC Error')) {  
                      this.log('rawData= '+rawData1);
                      rawError.assign("rawError", rawData1);
                    } else {
                      res.on('end', () => {
                      const arr = rawData.split("|");
                      res.resume();
                      const volt = Number(arr[5]+arr[6])/10;
                      const tok  = Number(arr[7]+arr[8])/100;
                      const watt = Number(arr[9]+arr[10]+arr[11]);
                      
                      voltage.assign("volt", volt);
                      current.assign("current", tok);
                      power.assign("power", watt);
                      this.log('getResponse body= '+rawData+ ' Volt='+volt );
                      });  
                    }
                  });
          }
       });
      
       // Запрос следующего цикла через 5 сек
       this.startTimer('T2', 5, 'getMercury');
      },
    

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