diagnosticar: fix TX/RX Fiberhome

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