diagnosticar: fix TX/RX Fiberhome
Signed-off-by: Rodrigo Bertoldo de Sousa Martins <rodrigo.sousa.577@gmail.com>
This commit is contained in:
1 parent
04076fd1b9
commit
c50167bd45
1 file changed
+26
-13
+26
-13
@@ -688,31 +688,44 @@ class FiberhomeManager {
|
||||
const txIdx = colIdx('TxPower');
|
||||
|
||||
// Fallback: se header parse falhou, usar posição fixa (ONUID=0, RxPower=1, TxPower=3)
|
||||
const rxRaw = (rxIdx >= 0 ? valores[rxIdx] : valores[1])?.replace(',', '.');
|
||||
const txRaw = (txIdx >= 0 ? valores[txIdx] : valores[3])?.replace(',', '.');
|
||||
// Nota: no TL1 da FiberHome, RxPower = sinal recebido pela OLT (= TX da ONU),
|
||||
// TxPower = sinal transmitido pela OLT (= RX da ONU). Por isso invertemos.
|
||||
const oltRxRaw = (rxIdx >= 0 ? valores[rxIdx] : valores[1])?.replace(',', '.');
|
||||
const oltTxRaw = (txIdx >= 0 ? valores[txIdx] : valores[3])?.replace(',', '.');
|
||||
|
||||
const COMP_RX = 2.7;
|
||||
const COMP_TX = -2.7;
|
||||
|
||||
if (rxRaw && rxRaw !== '--' && !isNaN(parseFloat(rxRaw))) {
|
||||
resultado.rxPower = `${(parseFloat(rxRaw) + COMP_RX).toFixed(2)} dBm`;
|
||||
this.logger.info(`✅ RxPower bruto=${rxRaw} → ${resultado.rxPower}`);
|
||||
// OLT RxPower → potência de TX da ONU (o que a ONU envia)
|
||||
if (oltRxRaw && oltRxRaw !== '--' && !isNaN(parseFloat(oltRxRaw))) {
|
||||
resultado.txPower = `${(parseFloat(oltRxRaw) + COMP_RX).toFixed(2)} dBm`;
|
||||
this.logger.info(`✅ TxPower ONU (OLT RxPower bruto=${oltRxRaw}) → ${resultado.txPower}`);
|
||||
}
|
||||
if (txRaw && txRaw !== '--' && !isNaN(parseFloat(txRaw))) {
|
||||
resultado.txPower = `${(parseFloat(txRaw) + COMP_TX).toFixed(2)} dBm`;
|
||||
// OLT TxPower → potência de RX da ONU (o que a ONU recebe)
|
||||
if (oltTxRaw && oltTxRaw !== '--' && !isNaN(parseFloat(oltTxRaw))) {
|
||||
resultado.rxPower = `${(parseFloat(oltTxRaw) + COMP_TX).toFixed(2)} dBm`;
|
||||
this.logger.info(`✅ RxPower ONU (OLT TxPower bruto=${oltTxRaw}) → ${resultado.rxPower}`);
|
||||
}
|
||||
} else {
|
||||
this.logger.warn('⚠️ LST-OMDDM: header encontrado mas sem linha de dados numéricos');
|
||||
}
|
||||
} else {
|
||||
// Header não encontrado — tentar regex direto no buffer
|
||||
const rxMatch = dados.match(/RxPower[=\s:]+([+-]?\d+[,.]\d+)/i);
|
||||
if (rxMatch) {
|
||||
const v = parseFloat(rxMatch[1].replace(',', '.')) + 2.7;
|
||||
// OLT RxPower = TX da ONU; OLT TxPower = RX da ONU
|
||||
const oltRxMatch = dados.match(/RxPower[\s\t]+([+-]?\d+[,.]\d+)/i);
|
||||
const oltTxMatch = dados.match(/TxPower[\s\t]+([+-]?\d+[,.]\d+)/i);
|
||||
if (oltRxMatch) {
|
||||
const v = parseFloat(oltRxMatch[1].replace(',', '.')) + 2.7;
|
||||
resultado.txPower = `${v.toFixed(2)} dBm`;
|
||||
this.logger.info(`✅ TxPower ONU via regex fallback → ${resultado.txPower}`);
|
||||
}
|
||||
if (oltTxMatch) {
|
||||
const v = parseFloat(oltTxMatch[1].replace(',', '.')) - 2.7;
|
||||
resultado.rxPower = `${v.toFixed(2)} dBm`;
|
||||
this.logger.info(`✅ RxPower via regex fallback → ${resultado.rxPower}`);
|
||||
} else {
|
||||
this.logger.warn('⚠️ LST-OMDDM: não foi possível extrair RxPower da resposta');
|
||||
this.logger.info(`✅ RxPower ONU via regex fallback → ${resultado.rxPower}`);
|
||||
}
|
||||
if (!oltRxMatch && !oltTxMatch) {
|
||||
this.logger.warn('⚠️ LST-OMDDM: não foi possível extrair RxPower/TxPower da resposta');
|
||||
this.logger.debug('LST-OMDDM resposta completa:', dados);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user