05-sep: [bugfix] aiMesh no respondia (case en comando) + /seguridad estado real + nombres de alias en /limite

This commit is contained in:
juanjo
2026-09-05 19:48:17 +02:00
parent 15f19a7900
commit 1c56bbb753
2 changed files with 48 additions and 17 deletions

View File

@@ -501,7 +501,7 @@ def procesar(texto, chat_id):
except Exception as e: except Exception as e:
log(f"parental error: {e}") log(f"parental error: {e}")
enviar(f"❌ Error en control parental: {e}", chat_id) enviar(f"❌ Error en control parental: {e}", chat_id)
elif comando == "aiMesh": elif comando in ("aimesh", "aiMesh", "mesh"):
partes_mesh = argumento.split() partes_mesh = argumento.split()
accion_mesh = partes_mesh[0].lower() if partes_mesh else "estado" accion_mesh = partes_mesh[0].lower() if partes_mesh else "estado"
try: try:

View File

@@ -163,18 +163,19 @@ def _set_nvram(entradas, servicio=None):
def _nombre_por_mac(mac): def _nombre_por_mac(mac):
_devices, _by_mac = _inventario() mac = mac.upper()
for ip, m, nombre in _devices:
if m == mac.upper():
return nombre
try: try:
from asus_api_control import DEVICE_ALIASES from asus_api_control import DEVICE_ALIASES
for _alias, info in DEVICE_ALIASES.items(): for _alias, info in DEVICE_ALIASES.items():
if info["mac"].upper() == mac.upper(): if info["mac"].upper() == mac:
return info["name"] return info["name"]
except Exception: except Exception:
pass pass
return f"unknown-{mac}" _devices, _by_mac = _inventario()
for ip, m, nombre in _devices:
if m == mac and nombre != "pendiente-identificar":
return nombre
return "pendiente-identificar"
def _resolver_mac(dispositivo): def _resolver_mac(dispositivo):
@@ -334,19 +335,49 @@ def limite_quitar(dispositivo):
def seguridad_estado(): def seguridad_estado():
claves = ( import json as _json
"bwdpi_enable",
"yadns_enable_x", out = _run(
"yadns_mode", "printf '%s\\n' "
"'dnsfilter='$(nvram get dnsfilter_enable_x) "
"'keywords='$(nvram get keyword_rulelist)"
) )
lineas = [] lineas = []
for clave in claves: parental = None
lineas.append(f"{clave}={_run(f'nvram get {clave}')}") try:
keywords = _run("nvram get keyword_rulelist") or "" from asus_api_control import parental_status
palabras = [p for p in str(keywords).split("<") if p.strip()] parental = _json.loads(parental_status())
except Exception:
parental = None
if parental is not None:
estado_p = "activo" if parental.get("state") else "inactivo"
nreglas = len(parental.get("rules") or {})
lineas.append(
f"Control parental: {estado_p} · "
f"{nreglas} dispositivos con regla"
)
if parental.get("block_all"):
lineas.append("Bloqueo total de Internet: ACTIVADO")
else:
lineas.append("Control parental: no consultable")
for campo in out.splitlines():
clave, _, valor = campo.partition("=")
if clave == "dnsfilter":
if valor == "1":
lineas.append("Filtro DNS: activado")
elif valor == "0":
lineas.append("Filtro DNS: desactivado")
else:
lineas.append(f"Filtro DNS: estado {valor!r}")
elif clave == "keywords":
palabras = [p for p in str(valor).split("<") if p.strip()]
lineas.append(
"Palabras filtradas: "
+ (", ".join(palabras) if palabras else "(ninguna)")
)
lineas.append( lineas.append(
"palabras filtradas: " "AiProtection Trend Micro: no activado "
+ (", ".join(palabras) if palabras else "(ninguna)") "(requiere activacion desde la web del router)"
) )
return f"<pre>{html.escape(chr(10).join(lineas))}</pre>" return f"<pre>{html.escape(chr(10).join(lineas))}</pre>"