82 lines
2.9 KiB
Markdown
82 lines
2.9 KiB
Markdown
# 🔧 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:**
|
|
|
|
```bash
|
|
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!**
|