@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');
},