Controlando la Raspberry PI desde Twitter
Esta entrada la escribí originalmente en inglés para la comunidad de Raspberry PI en Google+. Sin embargo se hacía necesario que escribiera la correspondiente versión en español, así que aquí les dejo para que se entretengan un rato.
La idea principal
El día de ayer, estaba intentando escribir un pequeño script en Python para llevar el registro del tráfico aquí en mi país, estaba pensado que podría ser realmente interesante si pudiera controlar la Raspberry PI usando mi estado en Twitter.
Despues de googlear por un rato, me encontré con las Herramientas para Twitter en Python, este es un pequeño script que se conecta a la API REST de Twitter y te provee de un par de herramientas para seguir las publicaciones en Twitter.
Lo que resulta más interesante es que estas herramientas incluyen una pequeña API que te permite escribir programas personalizados. Creanme, pueden crear cosas interesantes en menos de 10 líneas de código.
Así que me dije a mi mísmo... ¿Por qué no programar algo?
¿Cómo trabaja?
Luego de trabajar en la noche, terminé de programar un pequeño cliente (estado alfa con un montón de bugs) para la línea de comandos que hace algo muy simple:
Si publicas un tweet que inicie con el hashtag #rpitwit seguido de un comando, este programa revisará si existe un script de shell o un script de python en el directorio "rpitwit_commands" bajo tu directorio de usuario y lo ejecuta.
Por ejemplo si tienes un script que toma una foto de la webcam y la sube a un website podrías colocar algo como esto en tu status:
Por ejemplo si tienes un script que toma una foto de la webcam y la sube a un website podrías colocar algo como esto en tu status:
#rpitwit tomarfoto
Esto revisará si un script llamado "tomarfoto" o "tomarfoto.py" existe en el directorio de comandos y lo va a ajecutar.
Es posible enviar parámetros al comando. Por ejemplo podemos imaginar que podemos cambiar el tamaño de la imagen y enviar algo como esto:
Es posible enviar parámetros al comando. Por ejemplo podemos imaginar que podemos cambiar el tamaño de la imagen y enviar algo como esto:
#rpitwit tomarfoto 800x600
¡Y eso es todo! ¡Esa es la forma que funciona!
¿Por qué no simplemente permitir que ejecute cualquier comando?
Bueno... Eso hubiera sido demasiado fácil. Pero la razón principal es que, en general, no es una muy buena idea dejar cualquier forma de ejecutar comandos remotos sobre un canal "inseguro" (Sí, Twitter es una forma pública y realmente muy insegura para enviar comandos a tu RasPI). Así que limitar la ejecución de los scripts bajo el directorio de usuario ayuda a mantener las cosas "bajo tu control".
Tienes que crear un script y colocarlo en el directorio de comandos antes de poder ejecutarlo remotamente desde Twitter.
Tienes que crear un script y colocarlo en el directorio de comandos antes de poder ejecutarlo remotamente desde Twitter.
Adicionalmente puedes modificar el código fuente y permitir al programa ejecutar CUALQUIER comando, pero realmente no te recomiendo que lo hagas.
¿Cómo Instalarlo?
Prerequisitos
- Primero, vas a necesitar Python 2.7.x, descargalo e instalalo.
- Luego, necesitas tener las "setuptools". En la mayoría de casos ya las tendrás instaladas. Si no, ve a la siguiente dirección y sigue las instrucciones para instalarlas:
Instalando "La forma fácil"
Como root, ejecuta el siguiente comando:
easy_install rpitwit
Instalando "La forma difícil"
Descarga el paquete de las herramientas de Twitter para Python desde la siguiente dirección:
Descarga RPiTwit de la siguiente dirección:
Para instalar ejecuta los siguientes comandos:
tar -xzf twitter*.gz cd twitter-1.9.0
Luego como root:
python setup.py install
Luego:
tar -xzf rpitwit-0.1.0.tar.gz cd rpitwit-0.1.0
Y nuevamente como root:
python setup.py install
Ejecutando el cliente la primera vez
Nota: Nunca ejecutar este comando como "root".
Ejecuta en la consola el siguiente comando:
rpitwit
Se abrirá una ventana del navegador pidiendote autorizar la aplicación "RPiTwitt" para acceder tu información pública.
En la página de Twitter recibirás un "PIN" que debes escribir en la consola como lo siguiente:
Please enter the PIN:
Si el script no puede abrir una ventana del anvegador, copia la dirección y abrela en un navegador.
Luego de ello, el script te preguntará por los usuarios que podrán ejecutar comandos, no coloques la @ al inicio del nombre de usuario.
Luego de ello, el script te preguntará por los usuarios que podrán ejecutar comandos, no coloques la @ al inicio del nombre de usuario.
Por ejemplo si quieres permitirme ejecutar comandos en tu RasPI, solo coloca mi nombre de usuario:
Please write the username(s) which do you want to< authorize to send commands (separated by commas): mxgxw_alpha
Un mensaje de confirmación te informará si el usuario fue agregado a la lista de autorizaciones:
Trying to get userid for mxgxw_alpha >User @mxgxw_alpha added to the list.
Luego el script va a crear el directorio de "comandos", este direcorio se llama "rpitwit_commands" bajo tu directorio de usuario. En la Raspberry PI si estás corriendo "raspian" este será /home/pi/rpitwit_commands
Creating script directory on /home/pi/rpitwit_commands Copy your shell or python scripts to the script directory and execute them using: #rpitwit <command> [args]
Un mensaje final te confirmará que el script esta "siguiendo" los usuarios.
Nota: Este mensaje muestra los IDs de los usuarios en vez de los nombres.
Following to 257243704
Este programa corre en primer plano e imprime mensajes de "depuración" que son útiles para monitorear si está funcionando de manera adecuada.
POR HACER: Tal vez en una próxima versión incluyo un script para instalarlo como servicio.
Creando comandos personalizados
Scripts de Python
Esta es la parte interesante y la más fácil. Solo crea un script de python y colocalo dentro del directorio de comandos. Hagamos un "¡Hola Mundo!".
Crea un archivo con el texto:
print "¡Hola Mundo!"
Y guardalo bajo /home/pi/rpitwit_commands utilizando el nombre "hola.py"
Verifica que rpitwit está corriendo.
Ahora entra a tu cuenta de Twitter y publica
#rpitwit hola
Verifica en la consola que obtienes algo como:
Running python script hola.py Arguments ¡Hola Mundo!
Scrips de Bash
Crea un archivo con el texto:
#!/bin/sh echo "¡Hola Mundo!"
Y guardalo en /home/pi/rpitwit_commands utilizando el nombre "holash"
Cambia los permisos del archivo para convertilo en ejecutable:
chmod 755 holash
Verifica que rpitwit está corriendo.
Ahora ve a tu cuenta de twitter y publica lo siguiente:
#rpitwit holash
Verifica en la consola que tienes algo como lo siguiente:
Running command hellosh Arguments [u'/home/pi/rpitwit_commands/holash'] ¡Hola Mundo!
¿Hay algo más que deba saber?
Sí.
El archivo de configuración
Este script crea un archivo de configuración llamado .rpitwit_config bajo tu directorio de usuario, hay varias cosas que podríasn cambiar pero trata de no cambiar nada además de las siguientes dos llíneas.
magicword=#rpitwit
Esta es la palabra utilizada para instruir a rpitwit que ejecute un comando. Puedes cambiarla por lo que quieras, no necesariamente tiene que ser un #hashtag
follow=<some_numbers>
Estos son los IDs de usuarios que rpitwit permite que ejecuten comandos utilizando la palabra mágica. Puedes buscar los ids de los usuarios utilizando la siguiente dirección:
https://api.twitter.com/1/users/show.xml?screen_name=<write here the user name>
En la respuesta busca "id", ese es el número que tienes que colocar en "follow".
Unas notas finales
Este script no solo funciona en la "Raspberry PI", lo acabo de probar en mi Linux Slackware, así que en teoría debería funcionar en cualquier distribución de Linux con Python y setuptools.
He escrito el programa con el objeto de que sea útil y fácil de usar, usenlo con cuidado, no coloquen "comandos peligrosos" en el directorio de comandos o scripts de fuentes desconocidas.
Tambien puedes usar tus claves de aplicación propias de Twitter, tristemente no hay una forma sencilla de cambiarlas, lee la documentación para más información.
El código está bajo licencia GNU GPL v3, puedes modificar y redistribuirlo manteniendo los copyrights originales.
No habiendo nada más que escribir... ¡¡Hasta la próxima!!
He escrito el programa con el objeto de que sea útil y fácil de usar, usenlo con cuidado, no coloquen "comandos peligrosos" en el directorio de comandos o scripts de fuentes desconocidas.
Tambien puedes usar tus claves de aplicación propias de Twitter, tristemente no hay una forma sencilla de cambiarlas, lee la documentación para más información.
El código está bajo licencia GNU GPL v3, puedes modificar y redistribuirlo manteniendo los copyrights originales.
No habiendo nada más que escribir... ¡¡Hasta la próxima!!
Comentarios
Se necesita hacer un paso previo? que podría hacer? muchas gracias
Más info https://dev.twitter.com/discussions/24239
gracias por la información ;)
Gracias
Gracias