Плагин MegaD



  • @intrapro, приветствую! Походу дела в cherry никто не пользуется отправкой команд на контроллер MegaD кнопкой). Хотел реализовать одну задачу, но не работает... в отладчике плагина вот такой лог!

    08.11 02:22:52.630 IH: plugin command { unit: 'megad10',
      clid: 'h/lwwEfrY7xK1iJkLSsKUA==',
      command: 'http://192.168.11.41/sec/?cmd=26:0',
      type: 'command' }
    08.11 02:22:52.633 megad10: command: 'http://192.168.11.41/sec/?cmd=26:0'
    08.11 02:22:52.776 megad10: 
    08.11 02:22:52.777 megad10: localhost => 192.168.11.41 HTTP GET http://192.168.11.41/sec/?cmd=26:0
    08.11 02:22:52.809 megad10: localhost <= 192.168.11.41  response: statusCode=401
    

    Если это же делать через плагин http, то в ответе будет Done. То же если набрать url в браузере)



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

    @intrapro, приветствую! Походу дела в cherry никто не пользуется отправкой команд на контроллер MegaD кнопкой).

    Я пользуюсь. Отлично работает.

    alt text

    Это ресет розетки, к которому подключено коммуникационное оборудование.
    Если не послать команду на мегу целиком, то при выключении розетки мега потеряет сеть, и розетку будет уже не включить.
    А так работает отлично. Мега берет команду, выключает розетку, теряет сеть, включает розетку, снова регистрируется в сети, продолжает работать.



  • @Alex_Jet, добрый день!
    Странно, конечно. Судя по логу команда доходит, мега отвечает. Но происходит ошибка авторизации (401)? Может, символ какой вставился непечатный?



  • @intrapro, проверил. Так себя ведет MegaD если в "Команда/Дополнительный параметр" вставляешь полный url (http://192.168.11.41/sec/?cmd=26:0) или только команды и произвольные (cmd=26:0). Поэтому нужно использовать следующий формат - /sec/?cmd=26:0



  • Там все логично.
    На каждую мегу свой экземпляр плагина.
    В настройках кнопки ссылка на конкретный плагин, и IP адрес нужной меги есть в его свойствах.



  • @Erik, не очень логично. В настройках плагина есть и пароль (по умолчанию sec). Поэтому было бы логично плагину передавать только саму команду - cmd=26:0;p10;26:1...



  • @Alex_Jet Да. Тут согласен.



  • @intrapro
    Добрый день.
    Отказался от pzem, подключился к счетчику меркурий 200.02, получаю сейчас данные в десятичном виде (|02|41|74|58|00|84|45|92|00|00|00|00|00|00|00|00).
    Помогите пожалуйста переделать сниппет. Формат запроса и ответа остался прежний. Вероятно надо поменять
    // 01|03|02|08|a1 - в таком виде ожидается ответ
    const arr = data.split("|");
    if (arr && arr.length > 4) {
    const val = parseInt(arr[3]+arr[4], 16);
    callback(null, val/10000);

    Сниппет такой

    module.exports = callback => {
      const http = require('http');
    
      http.get('http://192.168.1.151/sec/?uart_tx=010400030002&mode=rs485');
      setTimeout(nextReq, 100); // 100 ms
    
      function nextReq() {
        http.get('http://192.168.1.151/sec/?uart_rx=1&mode=rs485', res => {
    
          let rawData = '';
          res.on('data', chunk => {
            rawData += chunk;
          });
    
          res.on('end', () => {
            const data = rawData;
            if (data.includes('CRC Error')) {
              callback('CRC Error'); // Контроллер вернул ошибку CRC
              return;
            }
    
            // 01|03|02|08|a1 - в таком виде ожидается ответ
             const arr = data.split("|");
            if (arr && arr.length > 4) {
              const val = parseInt(arr[3]+arr[4], 16);
              callback(null, val/10000);  
            } else {
              callback('Не удалось извлечь значение из строки: '+ data); // Данные получены, но парсинг неудачен
            }
          });
        });
      }
    };
    
    


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


  • @sergeyygr, добрый день!
    А какое показание должно получиться в результате?

    (|02|41|74|58|00|84|45|92|00|00|00|00|00|00|00|00 => ??

    В прежнем варианте брали четвертый и пятый байты



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

    @sergeyygr, добрый день!
    А какое показание должно получиться в результате?

    (|02|41|74|58|00|84|45|92|00|00|00|00|00|00|00|00 => ??

    В прежнем варианте брали четвертый и пятый байты

    Полностью ответ выглядит так
    00|02|4c|f3|27|02|41|74|58|00|84|45|92|00|00|00|00|00|00|00|00
    1 байт стартовый
    234 - адрес счетчика
    5 - код запроса , это все hex
    Далее показания по тарифам как есть. Т1 - 024174,58. Т2 - 008445,92. Т3 - 000000,00. Т4 - 000000,00



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

    Полностью ответ выглядит так
    00|02|4c|f3|27|02|41|74|58|00|84|45|92|00|00|00|00|00|00|00|00
    1 байт стартовый
    234 - адрес счетчика
    5 - код запроса , это все hex
    Далее показания по тарифам как есть. Т1 - 024174,58. Т2 - 008445,92. Т3 - 000000,00. Т4 - 000000,00

    Для варианта 00|02|4c|f3|27|02|41|74|58|00|84|45|92|00|00|00|00|00|00|00|00 так:
    Но каждый тариф нужно будет отдельно запрашивать 😞

    const arr = data.split("|");
    if (arr && arr.length > 8) {
      const t1=  parseInt(arr[5]+arr[6]+arr[7]+arr[8], 10);  //2417458
      callback(null,  t1/100);
    
      // const t2=  parseInt(arr[9]+arr[10]+arr[11]+arr[12], 10);  //844592
      // callback(null,  t2/100);
    }
    

    Если же в начале тоже есть |, приходит |00|02|4c|f3|27|02|41|74|58|00|84|45|92|00|00|00|00|00|00|00|00, то индекс сдвигается на 1:

    const t1=  parseInt(arr[6]+arr[7]+arr[8]+arr[9], 10);  //2417458
    


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

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

    Полностью ответ выглядит так
    00|02|4c|f3|27|02|41|74|58|00|84|45|92|00|00|00|00|00|00|00|00
    1 байт стартовый
    234 - адрес счетчика
    5 - код запроса , это все hex
    Далее показания по тарифам как есть. Т1 - 024174,58. Т2 - 008445,92. Т3 - 000000,00. Т4 - 000000,00

    Для варианта 00|02|4c|f3|27|02|41|74|58|00|84|45|92|00|00|00|00|00|00|00|00 так:
    Но каждый тариф нужно будет отдельно запрашивать 😞

    const arr = data.split("|");
    if (arr && arr.length > 8) {
      const t1=  parseInt(arr[5]+arr[6]+arr[7]+arr[8], 10);  //2417458
      callback(null,  t1/100);
    
      // const t2=  parseInt(arr[9]+arr[10]+arr[11]+arr[12], 10);  //844592
      // callback(null,  t2/100);
    }
    

    Если же в начале тоже есть |, приходит |00|02|4c|f3|27|02|41|74|58|00|84|45|92|00|00|00|00|00|00|00|00, то индекс сдвигается на 1:

    const t1=  parseInt(arr[6]+arr[7]+arr[8]+arr[9], 10);  //2417458
    

    Спасибо большое, все работает!!!



  • Подскажите почему с MegaD не приходит состояния с канала при перезагрузке MegaD. Даже после ручного включения лампочки состояния не миняется, визуализирует.
    alt text



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

    Подскажите почему с MegaD не приходит состояния с канала при перезагрузке MegaD. Даже после ручного включения лампочки состояния не миняется, визуализирует.
    alt text

    Мне кажется надо выставить период опроса порта не ноль а скажем раз в 10 сек.



  • @aleks-zonov IH мочемуто не считывает с MegaD состояния устройства



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

    @aleks-zonov IH мочемуто не считывает с MegaD состояния устройства

    А остальные порты с megaD плагин опрашивает нормально? Просто на сколько я понимаю если сами порт не опросите при настройке плагина или канала, ни кто за вас это не сделает.



  • @amgstone, разработчики писали, что эта страничка не интерактивная. Чтобы значения обновились нужно сверху этого окна нажать кнопку "обновить". Хотя у меня вроде обновляются не нулевые значения и без этого. А вот вместо 0 всегда пишет "-".



  • @Alex_Jet так я знаю ща кнопку обновления, но после ручного включения и выключения то состояние не меняется, дальше пробел даже после обновления странички



  • @aleks-zonov на каждой меге по пару таких каналов с пробелами


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