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');
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user