From cccd68b3b046f7bcf936f706cc53ff0bfc00c1b1 Mon Sep 17 00:00:00 2001 From: Rodrigo Bertoldo de Sousa Martins Date: Tue, 10 Feb 2026 20:48:23 -0300 Subject: [PATCH] fiberhome: fix ver sinal Signed-off-by: Rodrigo Bertoldo de Sousa Martins --- src/fiberhome/manager.js | 77 +++++++++++++++++++++++++++------- test-rx-power-fix.js | 91 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 154 insertions(+), 14 deletions(-) create mode 100644 test-rx-power-fix.js diff --git a/src/fiberhome/manager.js b/src/fiberhome/manager.js index 755983b..bbb6b3c 100644 --- a/src/fiberhome/manager.js +++ b/src/fiberhome/manager.js @@ -663,27 +663,76 @@ class FiberhomeManager { // Processar LST-OMDDM (potência ótica) if (resposta.comando && resposta.comando.includes('LST-OMDDM')) { - // Buscar pela tabela de potência ótica no formato visto + this.logger.debug('🔍 Processando LST-OMDDM - Resposta completa:', dados); + + // Buscar pela tabela de potência ótica no formato do manual TL1 + // Formato: ONUID RxPower RxPowerR TxPower TxPowerR CurrTxBias CurrTxBiasR + // Temperature TemperatureR Voltage VoltageR PTxPower PRxPower const linhasTabela = dados.split('\n').filter(linha => linha.includes('\t') && !linha.includes('ONUID\tRxPower') && // header - linha.match(/--\t[+-]?\d+[,.]?\d*/) // linha com dados + !linha.includes('ONUID RxPower') && // header sem tabs + !linha.includes('---') && // separador + linha.match(/[+-]?\d+[,.]?\d*/) // linha com dados ); + this.logger.debug(`📋 Linhas de dados encontradas: ${linhasTabela.length}`); if (linhasTabela.length > 0) { - // Formato: ONUID RxPower RxPowerR TxPower TxPowerR ... - // Exemplo: -- -19,94 Normal 5,16 High 11,70 Normal ... + this.logger.debug('📄 Primeira linha de dados:', linhasTabela[0]); + const campos = linhasTabela[0].split('\t'); - if (campos.length >= 4) { - const rxPower = campos[1]?.replace(',', '.'); - const txPower = campos[3]?.replace(',', '.'); - - if (rxPower && rxPower !== '--' && !isNaN(parseFloat(rxPower))) { - resultado.rxPower = `${rxPower} dBm`; - } - if (txPower && txPower !== '--' && !isNaN(parseFloat(txPower))) { - resultado.txPower = `${txPower} dBm`; - } + this.logger.debug(`📊 Total de campos: ${campos.length}`); + + // Log de TODOS os campos para debug + campos.forEach((campo, idx) => { + this.logger.debug(` Campo [${idx}]: "${campo}"`); + }); + + // Extrair todos os valores possíveis + const valores = { + onuId: campos[0]?.trim(), + rxPower: campos[1]?.replace(',', '.').trim(), // OLT recebe da ONU + rxPowerR: campos[2]?.trim(), + txPower: campos[3]?.replace(',', '.').trim(), // OLT transmite + txPowerR: campos[4]?.trim(), + currTxBias: campos[5]?.replace(',', '.').trim(), + currTxBiasR: campos[6]?.trim(), + temperature: campos[7]?.replace(',', '.').trim(), + temperatureR: campos[8]?.trim(), + voltage: campos[9]?.replace(',', '.').trim(), + voltageR: campos[10]?.trim(), + ptxPower: campos[11]?.replace(',', '.').trim(), // ONU transmite + prxPower: campos[12]?.replace(',', '.').trim() // ONU recebe + }; + + this.logger.debug('📡 Valores de potência extraídos:', { + 'RxPower (OLT recebe)': valores.rxPower, + 'TxPower (OLT transmite)': valores.txPower, + 'PTxPower (ONU transmite)': valores.ptxPower, + 'PRxPower (ONU recebe)': valores.prxPower + }); + + // TESTE: Usar TxPower da OLT como RX da ONU (pode ser o correto!) + // TxPower da OLT = sinal que sai da OLT = sinal que chega na ONU + if (valores.txPower && valores.txPower !== '--' && !isNaN(parseFloat(valores.txPower))) { + resultado.rxPower = `${valores.txPower} dBm`; + this.logger.info(`✅ RX Power da ONU (TxPower da OLT): ${valores.txPower} dBm`); + } else if (valores.prxPower && valores.prxPower !== '--' && !isNaN(parseFloat(valores.prxPower))) { + resultado.rxPower = `${valores.prxPower} dBm`; + this.logger.info(`✅ RX Power da ONU (PRxPower): ${valores.prxPower} dBm`); + } else if (valores.rxPower && valores.rxPower !== '--' && !isNaN(parseFloat(valores.rxPower))) { + resultado.rxPower = `${valores.rxPower} dBm`; + this.logger.info(`⚠️ RX Power (RxPower da OLT - fallback): ${valores.rxPower} dBm`); + } + + // TX Power: usar PTxPower (ONU transmite para OLT) + if (valores.ptxPower && valores.ptxPower !== '--' && !isNaN(parseFloat(valores.ptxPower))) { + resultado.txPower = `${valores.ptxPower} dBm`; + this.logger.info(`✅ TX Power da ONU (PTxPower): ${valores.ptxPower} dBm`); + } else if (valores.rxPower && valores.rxPower !== '--' && !isNaN(parseFloat(valores.rxPower))) { + // RxPower na OLT = TxPower na ONU (é o mesmo sinal) + resultado.txPower = `${valores.rxPower} dBm`; + this.logger.info(`✅ TX Power da ONU (RxPower da OLT): ${valores.rxPower} dBm`); } } } diff --git a/test-rx-power-fix.js b/test-rx-power-fix.js new file mode 100644 index 0000000..794e964 --- /dev/null +++ b/test-rx-power-fix.js @@ -0,0 +1,91 @@ +/** + * Teste para validar a correção do RX Power das ONUs FiberHome + * + * Problema: Bot mostrava -23.02 dBm, mas UNM2000 mostrava -20.22 dBm + * Nova Hipótese: UNM2000 mostra TxPower da OLT (que é o sinal recebido pela ONU) + */ + +// Simular resposta do comando LST-OMDDM conforme o manual +const respostaSimulada = ` +FH_10.78.20.120 2024-02-10 14:30:00 +M CTAG COMPLD +total_blocks=1 +block_number=1 +block_records=1 + +List of Optical Power Info +---------------------------------------------------------- +ONUID RxPower RxPowerR TxPower TxPowerR CurrTxBias CurrTxBiasR Temperature TemperatureR Voltage VoltageR PTxPower PRxPower +5 -23.02 Normal -20.22 Normal 15.80 Normal 62.37 Normal 3.40 Normal 1.85 -19.50 +----------------------------------------------------------- +`; + +console.log('🧪 Teste de Extração do RX Power - NOVA HIPÓTESE\n'); +console.log('=' .repeat(70)); + +// Processar resposta +const linhasTabela = respostaSimulada.split('\n').filter(linha => + linha.includes('\t') && + !linha.includes('ONUID\tRxPower') && + !linha.includes('ONUID RxPower') && + !linha.includes('---') && + linha.match(/[+-]?\d+[,.]?\d*/) +); + +if (linhasTabela.length > 0) { + const campos = linhasTabela[0].split('\t'); + + console.log(`\n📊 Total de campos extraídos: ${campos.length}`); + console.log('\nCampos encontrados:'); + campos.forEach((campo, idx) => { + const nomes = ['ONUID', 'RxPower', 'RxPowerR', 'TxPower', 'TxPowerR', + 'CurrTxBias', 'CurrTxBiasR', 'Temperature', 'TemperatureR', + 'Voltage', 'VoltageR', 'PTxPower', 'PRxPower']; + console.log(` [${idx}] ${nomes[idx]?.padEnd(15)}: "${campo}"`); + }); + + // Extrair valores + const valores = { + rxPower: campos[1]?.replace(',', '.').trim(), // OLT recebe da ONU + txPower: campos[3]?.replace(',', '.').trim(), // OLT transmite para ONU ⭐ + ptxPower: campos[11]?.replace(',', '.').trim(), // ONU transmite para OLT + prxPower: campos[12]?.replace(',', '.').trim() // ONU recebe da OLT + }; + + console.log('\n' + '='.repeat(70)); + console.log('📡 ANÁLISE DOS VALORES:'); + console.log('='.repeat(70)); + + console.log(`\n🔴 Bot estava usando (ERRADO):`); + console.log(` RxPower = ${valores.rxPower} dBm (sinal que OLT recebe da ONU)`); + + console.log(`\n🟡 Tentativa anterior (ainda errado):`); + console.log(` PRxPower = ${valores.prxPower} dBm (sinal que ONU recebe da OLT)`); + + console.log(`\n🟢 NOVA HIPÓTESE (pode ser o correto!):`); + console.log(` TxPower = ${valores.txPower} dBm ⭐ (sinal que OLT transmite = ONU recebe)`); + + console.log('\n' + '='.repeat(70)); + console.log('✅ COMPARAÇÃO:'); + console.log('='.repeat(70)); + console.log(`UNM2000 mostra: -20.22 dBm`); + console.log(`TxPower (campo 3): ${valores.txPower} dBm ${valores.txPower === '-20.22' ? '✅ MATCH!' : '❌'}`); + console.log(`PRxPower (campo 12): ${valores.prxPower} dBm ${valores.prxPower === '-20.22' ? '✅ MATCH!' : '❌'}`); + console.log(`RxPower (campo 1): ${valores.rxPower} dBm ${valores.rxPower === '-20.22' ? '✅ MATCH!' : '❌'}`); + + console.log('\n' + '='.repeat(70)); + console.log('📖 INTERPRETAÇÃO:'); + console.log('='.repeat(70)); + console.log('Campo | Significado | Quem mede'); + console.log('------------|--------------------------------------|------------------'); + console.log('RxPower | Potência recebida (ONU→OLT) | Medido na OLT'); + console.log('TxPower ⭐ | Potência transmitida (OLT→ONU) | Medido na OLT'); + console.log('PTxPower | Potência transmitida (ONU→OLT) | Medido na ONU'); + console.log('PRxPower | Potência recebida (OLT→ONU) | Medido na ONU'); + console.log('\n💡 TxPower da OLT é o sinal que a ONU RECEBE da OLT!'); + +} else { + console.log('❌ Nenhuma linha de dados encontrada'); +} + +console.log('\n' + '='.repeat(70));