Навигация

    Forum

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

    VictorT

    @VictorT

    0
    Репутация
    2
    Сообщения
    1
    Просмотры профиля
    0
    Подписчики
    0
    Подписки
    Регистрация Последнее посещение

    VictorT Подписаться

    Лучшие сообщения VictorT

    Этот пользователь ещё ничего не написал.

    Недавние сообщения VictorT

    • RE: Плагин MegaD

      @aleks-zonov извиняюсь, не заглядывал давно, думал вообще не живая ветка.
      Вот мой рабочий вариант. Иногда проверяю работу через вызов плагина, но там без изменений, может я чего то упускаю, но раскопать не получилось и разрабы не комментируют. А судя по коду в плагине Megad, в моем скрипте делается так же, как и через плагин.

      // переменные должны совпадать с id на устройстве
      const voltage  = Device("Mercury_200");
      const current  = Device("Mercury_200"); 
      const power    = Device("Mercury_200"); 
      const rawError = Device("Mercury_200"); 
      
      script({
        boot() {  
          return true; // Сценарий будет запускаться на старте и всегда будет активным
        },
      
        start() {
          //this.startTimer('T2', 5, 'getMercury');
          this.getMercury();
          //this.startTimer('T2', 5, 'onTimeout');
        },
      
        getMercury() {
          require('http').get('http://192.168.2.14/sec/?uart_tx=000816F063&mode=rs485', res => {  //C38D - посчитанный CRC16 для клнкретного счетчика
          if (res.statusCode == 200 ) {
            //this.log('Start sleep 100ms'); для проверки создаваемой задержки
            const date = Date.now();
            let currentDate = null;
            do {
               currentDate = Date.now();
            } while (currentDate - date < 100); // ждем XXX ms
            //this.log('End sleep 100ms');  // проверка созданной задержки
            let rawData ='';
            require('http').get('http://192.168.2.14/sec/?uart_rx=1&mode=rs485', res => {
              res.on("data", chunk => {
              rawData += chunk;
            });
              res.on('end', () => {
              const arr = rawData.split("|");
              //res.resume();
               if (rawData.includes('CRC Error')) {  
                   this.log('rawData error= '+rawData);
                   rawError.assign("rawError", rawData);
                   return;
               } else {
                  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]);
                  const volts = String(arr[5]+arr[6])/10;
            
                  voltage.assign("volt", volt);
                  //require('http').get('http://192.168.2.14/sec/?pt=29&disp_cmd=1&row=1');  // вывод показаний на OLED
                  //require('http').get('http://192.168.2.14/sec/?pt=29&disp_cmd=1&row=2');
                  //require('http').get('http://192.168.2.14/sec/?pt=29&disp_cmd=1&row=3');
                  //require('http').get('http://192.168.2.14/sec/?pt=29&text=String((arr[5]+arr[6])/10)');
                  current.assign("current", tok);
                  power.assign("power", watt);
                  this.log('getResponse body= '+rawData+ ' Volt='+(arr[5]+arr[6])/10 );
                  //this.exit();
               }
              });
            });
          } else {
              res.resume();
              this.log('Return code: '+res.statusCode);
              rawError("rawError", res.statusCode);
              voltage.assign("volt", 0);
              current.assign("current", 0);
              power.assign("power", 0);
              //return;
             }
          });
           // Запрос следующего цикла через 3 сек
          this.startTimer('T1', 3, 'getMercury');
        },
          onTimeout() {
            this.log('Истек таймаут, ответ от megad не получен');
            voltage.assign("volt", 0);
            current.assign("current", 0);
            power.assign("power", 0);
          }
      });
      
      написал в Плагины
      V
      VictorT
    • RE: Плагин MegaD

      @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');
        },
      
      написал в Плагины
      V
      VictorT