Files
rodrigonet/SHELL-INTERACTIVE-FIX.md
T
2025-08-08 10:22:27 -03:00

2.9 KiB

🔧 Implementação Shell Interativo - Reset ONU

🐛 Problema Identificado:

O método anterior usando executeCommand em sequência não mantinha o contexto dos modos de configuração. Cada comando era executado independentemente, perdendo o estado da sessão CLI.

Sintomas observados:

  • config funcionava
  • interface gpon 1/1/3 falhava com "syntax error"
  • Todos os comandos subsequentes falhavam
  • Não entrava no modo de configuração

✅ Solução Implementada:

Shell Interativo com Detecção de Prompts:

A nova implementação usa conn.connection.shell() para manter uma sessão interativa contínua e detecta os prompts específicos para enviar os comandos na sequência correta.

Fluxo de Detecção:

1. Aguarda: '#' → Envia: 'config'
2. Aguarda: '(config)#' → Envia: 'interface gpon 1/1/3'
3. Aguarda: '(config-gpon' → Envia: 'onu-reset onu 0'
4. Aguarda: 'Are you sure' ou '[no,yes]' → Envia: 'yes'
5. Aguarda: '(config-gpon' → Envia: 'exit'
6. Aguarda: '(config)#' → Envia: 'exit'
7. Aguarda: '#' (sem config) → Finaliza

Vantagens da Nova Implementação:

  • ✅ Mantém contexto: Sessão CLI contínua
  • ✅ Detecção precisa: Identifica prompts específicos
  • ✅ Sequencial: Aguarda cada prompt antes do próximo comando
  • ✅ Timeout robusto: 60 segundos de segurança
  • ✅ Logs detalhados: Mostra cada data recebido

Prompts Detectados:

DM4610-OLT-POP-DITO# ← Prompt inicial
DM4610-OLT-POP-DITO(config)# ← Modo configuração
DM4610-OLT-POP-DITO(config-gpon-1/1/3)# ← Modo interface
Are you sure you want to reset this ONU? [no,yes] ← Confirmação
DM4610-OLT-POP-DITO(config-gpon-1/1/3)# ← Após confirmação
DM4610-OLT-POP-DITO(config)# ← Após primeiro exit
DM4610-OLT-POP-DITO# ← Após segundo exit (finalizado)

🚀 Teste:

  1. Reinicie o bot (se estiver rodando)
  2. Digite: ver sinal DACM91569513
  3. Clique: 🔌 Reiniciar ONU
  4. Confirme: ✅ SIM, Reiniciar

📊 Logs Esperados:

🔄 Iniciando reset ONU - OLT: olt_dito, Slot: 1/1/3, ONU: 0
📡 Conectando na OLT: olt_dito
✅ Conectado! ConnectionId: olt_dito_xxxxx
📨 Recebido: DM4610-OLT-POP-DITO#
📝 Enviando comando 1: config
📨 Recebido: Entering configuration mode terminal
📨 Recebido: DM4610-OLT-POP-DITO(config)#
📝 Enviando comando 2: interface gpon 1/1/3
📨 Recebido: DM4610-OLT-POP-DITO(config-gpon-1/1/3)#
📝 Enviando comando 3: onu-reset onu 0
📨 Recebido: Are you sure you want to reset this ONU? [no,yes]
📝 Enviando comando 4: yes
📨 Recebido: DM4610-OLT-POP-DITO(config-gpon-1/1/3)#
📝 Enviando comando 5: exit
📨 Recebido: DM4610-OLT-POP-DITO(config)#
📝 Enviando comando 6: exit
📨 Recebido: DM4610-OLT-POP-DITO#
🔌 Desconectado da OLT

🎯 Esta implementação deve resolver completamente o problema de contexto e executar o reset da ONU com sucesso!