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