Skip to main content

Paquete de Integración OLT Huawei MA56XXT con Python

Project description

README - jmq_olt_huawei

Paquete de integración con OLTs Huawei MA56XXT (como MA5603T) vía Telnet, diseñado para automatizar la recolección de información GPON desde Python.

🛰️ ¿Qué hace este paquete?

Permite conectarse a una OLT Huawei MA56XXT y ejecutar operaciones como:

  • Listar slots activos (display board 0)
  • Consultar puertos GPON por slot
  • Obtener ONTs conectadas a cada puerto
  • Realizar un escaneo completo (slots → puertos → ONTs)
  • Manejar paginación, prompts dinámicos y errores comunes de sesión

📦 Instalación

pip install jmq_olt_huawei

ó

pip install git+https://github.com/juaquicar/jmq_olt_huawei.git

Instalar proyecto en modo editable

pip3 install -e .

Requiere Python >= 3.6.

🧪 Ejemplo de uso

from jmq_olt_huawei.ma56xxt import APIMA56XXT, UserBusyError
from pprint import pprint

api = APIMA56XXT(
    host='192.168.88.25',
    user='root',
    password='admin',
    prompt='MA5603T',
    debug=True
)

try:
    api.connect()
    result = api.scan_all()
    pprint(result)
except UserBusyError as e:
    print(f"ERROR: {e}")
finally:
    api.close()

Manual de uso de los métodos de APIMA56XXT

1. __init__(host, user, password, prompt, timeout=2.0, debug=False)

Constructor: inicializa la conexión Telnet y el patrón de prompt.

  • Parámetros:

    • host (str): Dirección IP o hostname de la OLT.
    • user (str): Nombre de usuario para login.
    • password (str): Contraseña de usuario.
    • prompt (str): Prefijo dinámico del prompt (ej. MA5603T).
    • timeout (float): Tiempo máximo (segundos) para lecturas Telnet (default 2.0).
    • debug (bool): Si True, imprime logs de depuración.

2. connect()

Establece la conexión Telnet, realiza login, entra en modo enable y modo config.

api = APIMA56XXT(...)
api.connect()
# Salida esperada (con debug=True):
# [DEBUG] Conectando a 192.168.88.25
# Conectado en modo config
  • No devuelve valor.
  • Lanza excepción (EOFError, socket.error) si falla la conexión.

3. disconnect()

Sale de los modos CLI (config, enable) y cierra la sesión Telnet.

api.disconnect()
# Si debug=True, imprime:
# [DEBUG] Desconectado
  • No devuelve valor.
  • Protege contra llamadas dobles comprobando self.tn.

4. get_slots() -> List[Tuple[str, str]]

Obtiene los slots instalados (display board 0) y devuelve una lista de tuplas (slot_id, tipo).

slots = api.get_slots()
# Ejemplo:
# [('0', 'GPBD'), ('6', 'SCUN'), ('7', 'SCUN'), ('9', 'GICF')]
  • Invoca internamente _send('display board 0') y parsea la respuesta.
  • No requiere argumentos.

5. get_ports(slot: str) -> List[dict]

Retorna información de los puertos GPON en un slot dado.

ports = api.get_ports('0')
# Cada dict contiene:
# {
#   'id': 0,
#   'schema_fsp': '0/0/0',
#   'optical_state': 'Online',
#   'port_state': 'Offline',
#   'laser_state': 'Normal',
#   'bw': '1239040',
#   'temperature': '35',
#   'tx_bias': '12',
#   'voltage': '3.22',
#   'tx_power': '3.72',
#   'illegal_rogue_ont': 'Inexistent',
#   'max_distance': '40',
#   'wave_length': '1490',
#   'fiber_type': 'Single Mode',
#   'length': '-'
# }
  • Llama a:

    1. _send('interface gpon 0/{slot}')
    2. _read_until_prompt()
    3. _send('display port state all')
    4. _read_until_prompt()
    5. Parsea cada bloque con _parse_port_block.

6. get_onts(slot: str, port_id: int) -> List[dict]

Devuelve la lista de ONTs conectadas a un puerto GPON específico.

onts = api.get_onts('0', 0)
# Ejemplo resultado:
# [
#   {'id': 0, 'schema_fsp': '0/0/0', 'sn': '485754431CC32E32',
#    'control_flag': 'active', 'run_state': 'offline',
#    'config_state': 'initial', 'match_state': 'initial',
#    'protect_side': 'no', 'description': 'aGIS:'},
#   ...
# ]
  • Ejecuta _send(f'display ont info {port_id} all') y _read_until_prompt().
  • Procesa tabla principal (F/S/P ONT SN ...) y sección de descripciones.

7. scan_all() -> List[dict]

Realiza un escaneo completo de la OLT:

  1. Obtiene todos los slots (get_slots).
  2. Para cada slot de tipo GPBD, obtiene puertos (get_ports).
  3. Para cada puerto Online, obtiene ONTs (get_onts).
full = api.scan_all()
pprint(full)
  • Devuelve una lista de diccionarios con la jerarquía: { 'id': slot, 'tipo': tipo, 'ports': [ {port}, ... ] }

Nota: Todos los métodos manejan paginación (More, ---- More) y bloqueos de usuario (UserBusyError). Para más detalles, revisa los métodos privados _read_until_prompt, _parse_port_block y _parse_onts.

📁 Estructura del paquete

jmq_olt_huawei/
│
├── ma56xxt.py          # Lógica principal de conexión y parsing
├── __init__.py         # Archivo de inicialización del paquete
├── Examples/           # Scripts de ejemplo (opcional)
├── tests/              # Pruebas automatizadas (pendiente)
├── requirements.txt    # Requisitos opcionales para desarrollo
├── pyproject.toml      # Configuración de build con setuptools
├── LICENSE             # Licencia MIT
└── README.md           # Este archivo

Tests

pytest -s tests/test_ma56xxt.py

🧩 Funcionalidades destacadas

  • Prompt dinámico configurable
  • Manejador de errores comunes como bloqueo de usuario
  • Soporte para múltiples niveles de lectura (slots → puertos → ONTs)
  • Debug opcional para inspeccionar línea a línea

Contribuyendo

  1. Haz un fork del repositorio.
  2. Crea una rama (git checkout -b feature/nueva-funcionalidad).
  3. Realiza tus cambios y añade tests, modifica README.md si estimas oportuno.
  4. Abre un Pull Request al main describiendo tu propuesta.

⚖️ Licencia

MIT © Juanma Quijada

Enlaces

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jmq_olt_huawei-0.1.2.tar.gz (9.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

jmq_olt_huawei-0.1.2-py3-none-any.whl (8.2 kB view details)

Uploaded Python 3

File details

Details for the file jmq_olt_huawei-0.1.2.tar.gz.

File metadata

  • Download URL: jmq_olt_huawei-0.1.2.tar.gz
  • Upload date:
  • Size: 9.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for jmq_olt_huawei-0.1.2.tar.gz
Algorithm Hash digest
SHA256 45c7d037e5c1cb0345edcc2febace567fdc749523231207c35d25869121bd50f
MD5 b86ecf4d7995675be21355c64c896020
BLAKE2b-256 cd28820fd9a5557972b1c9993ce6364295ddb04401430af3cc2fb96e20ea8fb9

See more details on using hashes here.

File details

Details for the file jmq_olt_huawei-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: jmq_olt_huawei-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 8.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for jmq_olt_huawei-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c3688dbe541fecbaefcb4837cf57232b35e1136ce73ae3662da36652b7a717a0
MD5 abf8d4196cf05f0f5688a067c25a5e54
BLAKE2b-256 1fd590eb6ed004807b99cea5fab67d2e92041922ecc519897353a3dffe6e48d0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page