Viewifi Host para Linux

Documentación

Convierte una Raspberry Pi, un servidor o cualquier PC con Linux en un sensor de movimiento por WiFi. Es un único ejecutable sin dependencias: no instala Python, no toca el sistema y se configura entero desde un panel web en el navegador.

1. Requisitos

El host necesita muy poco. Si el equipo está conectado a tu WiFi y enciende, sirve.

  • Sistema de 64 bits: Debian, Ubuntu, Raspberry Pi OS o derivados. Otras distribuciones funcionan, pero las probadas son estas.
  • Arquitectura x86_64 (PC, portátil, mini-PC, NAS) o ARM64 (Raspberry Pi 3, 4 o 5 con sistema de 64 bits).
  • Adaptador WiFi conectado a una red. El sensor mide la calidad de esa conexión, así que el equipo debe estar asociado a tu router por WiFi, no por cable.
  • Una cuenta de Telegram para recibir las alertas.
  • Opcional: webcam USB y micrófono si quieres evidencia con foto y audio.
¿Por qué WiFi y no cable?

Viewifi detecta movimiento midiendo cómo un cuerpo humano perturba las ondas de radio entre el equipo y el router. Si el host está conectado por Ethernet no hay señal que medir. Un dongle USB-WiFi barato basta.

Dónde colocarlo

Ponlo de forma que la persona que entre pase entre el equipo y el router: ahí es donde más se altera la señal. Un pasillo, un recibidor o la línea que va de la puerta al salón son buenos sitios. Evita pegarlo al router, porque una señal demasiado fuerte apenas varía y el sensor pierde sensibilidad.

2. Instalación

Tres comandos y está funcionando. El binario ya trae todo dentro, así que no hay apt install, ni entornos virtuales, ni pip.

PC o servidor

Intel o AMD de 64 bits.

Descargar x86_64

Raspberry Pi

Pi 3, 4 y 5 con sistema de 64 bits.

Descargar ARM64

O directamente desde la terminal del equipo. Sustituye x86_64 por arm64 si es una Raspberry Pi:

# 1. Descargar
curl -L -o viewifi-host \
  https://github.com/pipe9494/viewifi-releases/releases/latest/download/viewifi-host-linux-x86_64

# 2. Dar permisos de ejecución
chmod +x viewifi-host

# 3. Arrancar
./viewifi-host

En el primer arranque el host crea su carpeta de configuración, mide la señal WiFi durante unos segundos para establecer la línea base y levanta el panel web. Verás algo así:

Viewifi Host v1.0.0
Interfaz WiFi: wlan0  ·  SSID: MiCasa  ·  RSSI: -48 dBm
Calibrando línea base... listo
Panel web: http://192.168.1.42:8080

¿No sabes si tu Pi es de 64 bits?

Ejecuta uname -m en el equipo. Si responde aarch64 necesitas el binario ARM64; si responde x86_64, el otro. Si responde armv7l, tu Raspberry Pi OS es de 32 bits y tendrás que reinstalar el sistema en su versión de 64 bits.

Probarlo sin hardware

Para ver cómo se comporta antes de montarlo en su sitio, arráncalo con señal simulada:

./viewifi-host --sim

Genera lecturas falsas con eventos periódicos, así puedes recorrer el panel y las alertas sin mover un dedo delante del router.

3. El panel web

Todo se configura desde el navegador. Abre http://IP-DEL-EQUIPO:8080 desde cualquier dispositivo de la misma red: el móvil, el portátil, lo que tengas a mano. Si estás en el propio equipo, http://localhost:8080.

El panel muestra:

  • Gráfica de señal en vivo, con la línea base y el umbral de disparo dibujados encima. Es la forma más rápida de entender por qué salta o por qué no salta.
  • Estado: armado o desarmado, interfaz WiFi, SSID, RSSI actual y hora de la última detección.
  • Botones de armar, desarmar y recalibrar.
  • Prueba de Telegram, que envía un mensaje de ejemplo para confirmar que el bot está bien puesto.
  • Historial de eventos registrados por ese host.
  • Configuración completa: umbrales, horario protegido, evidencia, resumen diario y cuenta.
Protege el panel con contraseña

Por defecto el panel es accesible para cualquiera en tu red local. Activa web_password en la configuración y te pedirá contraseña al entrar. Hazlo siempre si la red la comparte más gente: un local, una oficina o un piso compartido.

Cambiar el puerto

Si el 8080 ya está ocupado por otro servicio, arranca el host con otro:

./viewifi-host --port 8099
No lo abras a internet

El panel está pensado para la red local. No hagas port forwarding hacia el 8080 en tu router. Si necesitas verlo desde fuera de casa, usa una VPN como WireGuard o Tailscale — y recuerda que para el uso diario no hace falta: las alertas y los comandos van por Telegram, que ya funciona desde cualquier parte del mundo.

4. Conectar Telegram

Las alertas llegan a tu bot, creado por ti, con tu token. Ni nosotros ni nadie más las ve pasar.

Paso 1: crear el bot

  1. Abre Telegram y busca @BotFather.
  2. Envía /newbot y sigue las instrucciones: te pedirá un nombre y un usuario que termine en bot.
  3. Al terminar te da un token con esta forma: 7123456789:AAE.... Cópialo.

Paso 2: obtener tu chat ID

  1. Busca @userinfobot en Telegram y envíale cualquier mensaje.
  2. Te responde con tu Id, un número como 123456789. Ese es tu chat ID.
  3. Envía un primer mensaje a tu propio bot (un simple /start). Telegram no permite que un bot escriba a quien nunca le ha hablado.

Paso 3: pegarlo en el panel

En la sección de Telegram del panel, pega el token y el chat ID, guarda y pulsa Enviar prueba. Si te llega el mensaje, ya está.

Avisar a varias personas

Crea un grupo en Telegram, añade tu bot y usa el ID del grupo (empieza por -100) como chat ID. Todos los miembros reciben las alertas, y cualquiera con permiso puede armar o desarmar desde ahí.

5. Enlazar tu cuenta

Este paso es opcional, pero es lo que hace que el host de Linux y la app de Android sean el mismo sistema y no dos cosas sueltas.

Si escribes en el panel el correo y la contraseña de tu cuenta de Viewifi, el host:

  • Aparece en la lista de hosts de la app, junto a los demás sensores que tengas.
  • Obedece al geofence: cuando sales de casa con el móvil, se arma solo; cuando vuelves, se desarma.
  • Recibe los comandos que envíes desde la app a un host concreto o a todos a la vez.

La contraseña se guarda solo en ese equipo, en un archivo con permisos 600 que únicamente puede leer tu usuario.

Sin cuenta también funciona

Si prefieres no crear cuenta, el host detecta y alerta por Telegram igual. Lo que pierdes es el geofence y la vista conjunta de varios sensores en la app.

6. Calibración y sensibilidad

Cada casa tiene una huella de radio distinta, así que el host se calibra solo al arrancar: escucha la señal durante unos segundos sin nadie moviéndose y toma esa medida como línea base. Todo lo que se desvíe de ahí por encima del umbral cuenta como movimiento.

Cuándo recalibrar

Pulsa Recalibrar en el panel cuando:

  • Muevas el equipo o el router de sitio.
  • Cambies de red WiFi o de banda.
  • Reorganices muebles grandes, metálicos o electrodomésticos en medio.

Hazlo siempre con la casa vacía o al menos con nadie pasando por la zona vigilada.

Ajustar el umbral

La gráfica del panel es tu mejor guía: camina por la zona y mira cuánto se separa la línea de su base.

SíntomaQué hacer
Alertas cuando no hay nadieSube el umbral, o sube el número de lecturas seguidas que hacen falta para disparar.
Pasas por delante y no saltaBaja el umbral. Si aun así no detecta, acerca el host al router o cambia su orientación.
La señal oscila sola todo el ratoSuele ser un vecino en el mismo canal WiFi o un microondas. Cambia el canal del router y recalibra.
RSSI muy débil, por debajo de −75 dBmDemasiado lejos del router: el ruido se come la señal. Acerca el equipo o usa un dongle WiFi con antena.
Deja que aprenda

Cuando llegue una alerta que era falsa, márcala como tal respondiendo al bot. El host baja la sensibilidad para ese tipo de perturbación y las falsas alarmas se reducen solas en unos días.

7. Dejarlo encendido 24/7

Lanzarlo a mano sirve para probar, pero un sensor de verdad tiene que arrancar con el equipo y levantarse solo si algo falla. Para eso está la unidad de systemd.

Copia el binario a una ruta del sistema y crea el servicio:

# Instalar el ejecutable
sudo cp viewifi-host /usr/local/bin/
sudo chmod +x /usr/local/bin/viewifi-host

# Crear el servicio para tu usuario
sudo tee /etc/systemd/system/viewifi-host@.service > /dev/null <<'EOF'
[Unit]
Description=Viewifi Host
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=%i
ExecStart=/usr/local/bin/viewifi-host
Restart=always
RestartSec=5
MemoryMax=256M
Nice=-5

[Install]
WantedBy=multi-user.target
EOF

# Activar y arrancar (cambia "pi" por tu usuario)
sudo systemctl daemon-reload
sudo systemctl enable --now viewifi-host@pi

Comprobar que va bien y leer los registros:

systemctl status viewifi-host@pi
journalctl -u viewifi-host@pi -f
Qué hace cada línea

Restart=always lo revive ante cualquier caída o corte de luz. MemoryMax=256M impide que se coma la RAM de una Pi pequeña. Nice=-5 le da algo de prioridad para que las lecturas de señal no se retrasen si el equipo está ocupado. Y @%i hace que corra con tu usuario, de modo que la configuración vive en tu carpeta personal y no como root.

8. Comandos del bot

Escribe estos comandos a tu bot desde cualquier lugar. No hace falta estar en la red de casa.

ComandoQué hace
/statusEstado actual: armado o no, señal, SSID, tiempo encendido y última detección.
/armArma el sensor. A partir de ahí, cada detección genera alerta.
/disarmDesarma. Sigue midiendo y registrando, pero no te molesta.
/photoPide una foto al instante, si hay cámara configurada.
/helpLista de comandos disponibles.

Qué trae cada alerta

Una alerta incluye siempre la hora, el nivel (normal o alta) y una imagen con la onda de la señal en el momento del evento, donde se ve el pico que la disparó. Si has activado la evidencia, añade también la foto y el clip de audio.

Alarma por caída de WiFi

Si el host está armado y pierde la conexión WiFi más de diez segundos, envía una alerta de nivel alto. Un corte de red mientras vigilas no es un detalle menor: puede ser un apagón, pero también alguien desenchufando el router.

9. Foto y audio

La captura de imagen y sonido viene desactivada de fábrica. Se enciende a mano, en el panel, y solo si tú quieres.

Foto

Hace falta una webcam USB y una de estas dos herramientas:

sudo apt install fswebcam     # ligera, la recomendada
# o bien
sudo apt install ffmpeg       # si ya la usas para otra cosa

Comprueba que el sistema ve la cámara con ls /dev/video*. Si aparece /dev/video0, ya está.

Audio

El clip se graba con arecord, que viene incluido en alsa-utils:

sudo apt install alsa-utils
arecord -l                    # lista los micrófonos detectados
Antes de activarlo

Grabar imagen o sonido de un espacio donde hay otras personas tiene implicaciones legales que cambian según dónde vivas, y más aún en un entorno de trabajo. Infórmate y avisa a quien corresponda. La detección por WiFi por sí sola no graba nada de nadie: esa es justamente su ventaja.

10. Horarios y rutina

Horario protegido

Define la franja en la que el espacio debería estar vacío — de 23:00 a 7:00, o de lunes a viernes de 9:00 a 18:00 en una oficina. Dentro de esa franja cualquier detección se eleva a nivel alto. Fuera de ella el movimiento normal se registra sin avisarte, así que no acabas silenciando el bot por saturación.

Resumen diario

A la hora que elijas, el bot te manda un resumen del día: cuántos eventos hubo, a qué horas se concentraron y si el sensor estuvo caído en algún momento. Es la forma de enterarte de que todo funciona sin tener que mirar nada.

Vigilancia de rutina

El host aprende en qué franjas horarias suele haber actividad y avisa cuando el patrón se rompe. Lo interesante es que funciona en los dos sentidos: te avisa si hay movimiento donde nunca lo hay, y también si no lo hay donde siempre lo hubo. Esa segunda mitad es la que convierte a Viewifi en una forma discreta de saber que una persona mayor que vive sola ha empezado el día con normalidad.

Latido

El host avisa periódicamente de que sigue vivo. Si dejas de recibir el latido, sabes que ese sensor está apagado o sin red — mucho mejor que descubrirlo el día que hacía falta.

11. Archivos y rutas

Todo lo que el host crea vive en tu carpeta personal. No escribe nada fuera de ahí.

RutaContenido
~/.viewifi/config.jsonConfiguración completa: token de Telegram, umbrales, horarios y cuenta. Permisos 600, solo tu usuario puede leerlo.
~/.viewifi/events.dbBase SQLite con el historial de eventos de este host.
/usr/local/bin/viewifi-hostEl ejecutable, si seguiste el paso de systemd.
/etc/systemd/system/viewifi-host@.serviceLa unidad del servicio.

Copia de seguridad

Guardar ~/.viewifi/ es guardar todo. Para mover el sensor a otro equipo, copia esa carpeta y arranca el binario allí: recupera la configuración tal cual, aunque conviene recalibrar porque la huella de radio del sitio nuevo será distinta.

Cuidado al compartir

config.json contiene el token de tu bot y, si la enlazaste, la contraseña de tu cuenta. No lo subas a ningún repositorio ni lo pegues en un chat de soporte sin borrar esos campos antes.

Espacio en disco

El historial local no se purga solo: crece con el tiempo, aunque muy despacio, porque cada evento ocupa unos pocos cientos de bytes. Aun con detecciones constantes tardaría años en ser un problema en la tarjeta de una Pi. Si aun así quieres limpiarlo, para el servicio y borra events.db; se crea de nuevo vacío al arrancar.

12. Solución de problemas

«No WiFi interface found»

El host busca la interfaz por tres vías: iw dev link, luego /proc/net/wireless y por último iwconfig. Si ninguna devuelve nada, el equipo no está conectado por WiFi. Comprueba con iw dev que existe una interfaz inalámbrica y con iwconfig que está asociada a tu red. Recuerda: conectado por cable no vale.

El panel no abre desde otro dispositivo

Confirma la IP del equipo con hostname -I y que ambos estáis en la misma red — un móvil conectado a la red de invitados no ve al resto. Si tienes cortafuegos, abre el puerto:

sudo ufw allow 8080/tcp

No llegan las alertas de Telegram

  • ¿Le enviaste un /start a tu bot? Sin ese primer mensaje tuyo, Telegram bloquea al bot.
  • Revisa que el token esté completo, con los dos puntos incluidos.
  • El chat ID es un número; si es de grupo, empieza por -100 y el signo menos también va.
  • Usa el botón de prueba del panel: dice exactamente qué responde la API de Telegram.

Demasiadas falsas alarmas

Lo habitual es un umbral demasiado bajo o un vecino saturando el canal. Sube el umbral, recalibra con la casa vacía y, si persiste, cambia el canal WiFi del router. Un ventilador o una cortina movida por el aire acondicionado también generan variaciones reales de señal.

El servicio se reinicia solo todo el rato

Mira los registros con journalctl -u viewifi-host@TUUSUARIO -n 50. La causa más común es que el servicio arranca antes de que la red esté lista; el After=network-online.target de la unidad lo evita, así que revisa que esa línea esté puesta.

Comprobar que el motor de detección funciona

Arranca el host con --sim: si con señal simulada detecta y alerta correctamente, el problema está en la lectura del WiFi o en la colocación, no en el programa.

13. Desinstalar

Deja el equipo como estaba, sin restos:

# Parar y quitar el servicio
sudo systemctl disable --now viewifi-host@$USER
sudo rm /etc/systemd/system/viewifi-host@.service
sudo systemctl daemon-reload

# Quitar el ejecutable
sudo rm /usr/local/bin/viewifi-host

# Quitar configuración e historial
rm -rf ~/.viewifi

Si enlazaste la cuenta, entra en la app y elimina ese host de la lista para que deje de aparecer.