Плагин MegaD



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



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



  • This post is deleted!


  • всё, разобрался, для того чтобы работали физические кнопки,
    нужно было прописать скрипт.
    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();
      }
    });
    


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



  • This post is deleted!

Log in to reply