Janitor es una herramienta para LANs escrita en Python y controlable tanto desde terminal como mediante un bot de Telegram. Su funci贸n principal consiste en saludar cuando llega alguien y despedirle cuando se marcha. Es decir, este empleado cumple con la primera norma de educaci贸n que cabe esperar en cualquier 谩mbito de la vida (incluida una red IP): hacer ping 馃檭

Una vez iniciado el programa en cualquier m谩quina con Python 3 y conectada a una red local, nuestro conserje comprueba la comunicaci贸n con los equipos de la red, enviando mensajes ICMP de forma continua a las IPs que el usuario haya pedido.

De esta manera, tenemos un host en la red que est谩 al corriente de si un dispositivo est谩 en casa, revisando cada pocos segundos si est谩 conectado al router. Ante una nueva conexi贸n/desconexi贸n de las IPs configuradas, el usuario recibe un mensaje de Telegram (est茅 o no conectado en ese momento a la red local) inform谩ndole del evento.

Adem谩s, permite asociar recordatorios a cada IP. El objetivo de esta funci贸n es recibir un mensaje de Telegram con el texto deseado cuando el dispositivo en cuesti贸n llegue a casa.

Janitor: un conserje 24h para tu red WiFi dom茅stica o la red de tu oficina.

Para descargar Janitor basta con guardar este script.

/铆ndice:

Configurar

Entre las opciones que se nos ofrecen al ejecutar python3 janitor.py, la primera (despu茅s de -h para mostrar la ayuda) es -c o --config, con la que configuraremos nuestro nuevo bot. En Telegram los bots se crean a trav茅s de @BotFather, siguiendo las instrucciones de la web oficial. Este bot nos proporcionar谩 el token que se nos pide. A continuaci贸n, iniciando una conversaci贸n con @get_id_bot nos devolver谩 el chat_id que necesitamos para terminar la configuraci贸n. Estos valores que hemos introducido se guardan en un archivo JSON, en la ruta ~/.config/janitor/janitor.conf Demostraci贸n (en un v铆deo asciinema) de c贸mo llevar a cabo la configuraci贸n en 4 segundos:

Funcionalidades

Estos comandos permiten controlar el bot. La gesti贸n de las IPs act煤a sobre otro JSON, ips.json, en la misma ruta que el anterior. Gracias a este fichero cada IP guardada se identifica con la etiqueta que el usuario elija, para evitar memorizar direcciones IP.

start

Arranca el programa. python3 janitor.py --start Combinado con nohup python3 janitor.py --start & se env铆a a segundo plano y en caso de emplear una conexi贸n ssh se evita que se interrumpa la ejecuci贸n al cerrarla.

/add_ip

Asigna una etiqueta a una IP local. python3 janitor.py --add_ip 192.168.1.10 juan

Imprime las IPs guardadas con sus respectivas etiquetas. python3 janitor.py --print_ips

/delete_ip

Elimina una IP, dada su etiqueta. python3 janitor.py --delete_ip juan

/reminder:

A帽ade un mensaje de recordatorio a una IP (identificada por su etiqueta), de forma que cuando esta IP llegue a casa (es decir, cuando el ping a esa IP obtenga respuesta) recibir谩 el recordatorio v铆a Telegram. python3 janitor.py --reminder juan lavadora

Todas las acciones (menos arrancar) se pueden realizar como comandos de Telegram:

captura del men煤 en telegram

Acerca de

La 煤nica manera de aprender a programar es programando, as铆 que busqu茅 una excusa para enfrentarme a un proyecto nuevo, conjugando la sencillez de Python y la comodidad de usar un bot desde el m贸vil como interfaz. En Python, adem谩s de funciones b谩sicas como tratar con fechas o ficheros JSON, aprend铆 sobre ejecuci贸n de procesos desde Python y sobre multihilos. Por otro lado, para manejar la API de Telegram eleg铆 el wrapper python-telegram-bot, con documentaci贸n y ejemplos suficientes para poner r谩pidamente en marcha la comunicaci贸n con Telegram.

Codename

Pienso que un buen nombre para un proyecto ayuda a afrontar su desarrollo con m谩s ganas. D谩ndole un contexto dotamos al producto de un atractivo mayor, y ya con un logo conseguimos que cobre identidad suficiente para poder presentarlo. The Janitor (鈥淓l Conserje鈥 en castellano) es un personaje de la serie Scrubs. Lo eleg铆 cuando buscaba un nombre que sugiriese en qu茅 consiste este programa y que no fuera nada t茅cnico. Un conserje de un edificio saludando constantemente a quien pasa por la puerta me pareci贸 una met谩fora acertada del mecanismo que aqu铆 se emplea de detecci贸n de hosts en una LAN. Personificar este rol en un individuo que conociera fue un paso obvio, y con una b煤squeda en Deviant Art encontr茅 una imagen para mi proyecto.

Despliegue

En mi caso, una Raspberry Pi siempre encendida y conectada a nuestro router dom茅stico era una forma ideal de mantener el script continuamente en ejecuci贸n, independientemente de d贸nde estuviera yo. A trav茅s de ssh y con git actualizaba el script seg煤n lo escrib铆a, comprobaba su funcionamiento y descubr铆a problemas o posibles mejoras. La app de Android RasPi Check fue todo un hallazgo. Permite conocer el estado de la Raspberry Pi, enviar comandos (incluso guardar los m谩s frecuentes) y revisar los procesos activos de manera muy simple y desde el m贸vil. Adem谩s en Github est谩 disponible su c贸digo fuente, y ante una duda que plante茅 recib铆 respuesta enseguida.

Mejoras futuras

La versi贸n actual de Janitor ha cumplido con el objetivo inicial para el que se concibi贸, pero durante el desarrollo han ido surgiendo muchas ideas nuevas (suelo dejarlas apuntadas en el c贸digo con un comentario del tipo //TODO: new idea). De cara a seguir mejorando la herramienta, podr铆an a帽adirse caracter铆sticas como comprobar la validez de las IPs, mejorar los recordatorios (actualmente no permiten espacios, y tambi茅n ser铆a mejor enviar un mensaje por cada uno), guardar logs y otras funcionalidades nuevas: /stats, para mostrar estad铆sticas relacionadas con las IPs guardadas, /at_home y /outside, para imprimir las IPs activas y las ausentes, o la posibilidad de a帽adir el bot a un grupo de Telegram y controlar el mismo bot desde varios usuarios. Todo depender谩 del tiempo del que disponga y de cu谩ntos nuevos proyectos me lo quiten 馃槈