diff --git a/vigilancia/pi_bot.py b/vigilancia/pi_bot.py index 81e76f8..1f0f710 100644 --- a/vigilancia/pi_bot.py +++ b/vigilancia/pi_bot.py @@ -501,7 +501,7 @@ def procesar(texto, chat_id): except Exception as e: log(f"parental error: {e}") enviar(f"❌ Error en control parental: {e}", chat_id) - elif comando == "aiMesh": + elif comando in ("aimesh", "aiMesh", "mesh"): partes_mesh = argumento.split() accion_mesh = partes_mesh[0].lower() if partes_mesh else "estado" try: diff --git a/vigilancia/router_control.py b/vigilancia/router_control.py index 7385614..f0a10b3 100644 --- a/vigilancia/router_control.py +++ b/vigilancia/router_control.py @@ -163,18 +163,19 @@ def _set_nvram(entradas, servicio=None): def _nombre_por_mac(mac): - _devices, _by_mac = _inventario() - for ip, m, nombre in _devices: - if m == mac.upper(): - return nombre + mac = mac.upper() try: from asus_api_control import DEVICE_ALIASES for _alias, info in DEVICE_ALIASES.items(): - if info["mac"].upper() == mac.upper(): + if info["mac"].upper() == mac: return info["name"] except Exception: 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): @@ -334,19 +335,49 @@ def limite_quitar(dispositivo): def seguridad_estado(): - claves = ( - "bwdpi_enable", - "yadns_enable_x", - "yadns_mode", + import json as _json + + out = _run( + "printf '%s\\n' " + "'dnsfilter='$(nvram get dnsfilter_enable_x) " + "'keywords='$(nvram get keyword_rulelist)" ) lineas = [] - for clave in claves: - lineas.append(f"{clave}={_run(f'nvram get {clave}')}") - keywords = _run("nvram get keyword_rulelist") or "" - palabras = [p for p in str(keywords).split("<") if p.strip()] + parental = None + try: + from asus_api_control import parental_status + 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( - "palabras filtradas: " - + (", ".join(palabras) if palabras else "(ninguna)") + "AiProtection Trend Micro: no activado " + "(requiere activacion desde la web del router)" ) return f"
{html.escape(chr(10).join(lineas))}
"