Kindle Weather
By Alberto de la Torre
Ya he terminado (salvo detallitos) otro proyectico. Resulta que tenía por ahí una pantalla china de kindle muerta de risa, y me puse a pensar que podría hacer con ella. Las pantalllas de tinta electrónica tienen de bueno que no consumen casi nada, por lo que sería perfecto como «pantalla para mostrar mensajes puesta al lado de la puerta».
También llevaba un tiempo que me apetecía tener una de esas estaciones meteorológicas, así que me puse a buscar por internet y encontré un tipo que había modificado el kindle para que mostrara el pronóstico. Así que me busqué un kindle con la pantalla rota (15€ por el ebay), y le puse la pantalla china. Y después de varias semanas trasteando, ya tengo mi estación meteorológica propia.
Y para tener esto ha hecho falta:
- Un kindle con el que no te de miedo trastear
- Darme de alta en Weather Underground, una sitio que te permite descargarte las predicciones en un formato leíble (JSON)
- Un termómetro USB por 10$ (chino, claro).
- Un ordenador patata (encendido y conectado 24h, con Linux) que cada hora pida la previsión a WeatherUnd y componga la pantalla para el kindle.
Las instrucciones las he sacado de mil sitios. Entre otras cosas, porque me he tenido que poner a aprender Python, un lenguaje de programación que está ahora de moda.
En fin, vamos a la explicación:
El proyecto.
El proyecto «kindle weather» lo ideó Matthew Petroff. En su blog explica que el proyecto tiene dos partes: Un servidor que se encarga de pedir la información por internet, y construir una imagen, y por otro lado un kindle modificado que cada cierto tiempo le pide la imagen al servidor y la muestra por pantalla.
El tipo daba los scripts necesarios y unas instrucciones muy básicas, así que tuve que buscar más información: El blog de esta tipa y el de este tipo (sobre todo para la parte del kindle, ya que el resto de cosas es para Windows).
Y luego mi toque personal, claro.
De forma rápida, lo que sucede ahora mismo es:
El servidor:
- Cada hora descarga los datos en formato JSON de la página de WU.com
- Coge los datos (Temperatura exterior, fechas, pronóstico) que me interesan y los inserta en un archivo SVG, para luego convertirlo a PNG
- Mide la temperatura interior con el termómetro USB
- Hace una gráfica con la temperatura, y lo une al archivo PNG del paso 2.
- Pone la imagen en el directorio web del servidor.
El kindle:
- Esta permanentemente conectado a la red por wifi
- Cada hora ejecuta un script por el que busca la imagen en el directorio web del servidor y la muestra por pantalla.
- Tiene anulado el salvapantallas.
El servidor
Lo primero, tener instalado apache2 (servidor web, para que el kindle pueda descargarse la imagen), python, rsvg-convert (convertir svg a png) y pngcrush (para que el png sea compatible con el kindle).
Lo segundo, hacerse una cuenta de desarrollador en la página de WeatherUnderground, donde te darán una clave para poder usar su api.
Una vez tengas la clave, podrás hacer peticiones vía web de distintas cosas. P.e., la orden:
(donde xxx es la clave) te devuelve un fichero json con:
- hourly10day: Pronóstico horario de los próximos 10 días
- astronomy: Información de la fase de la luna y amanecer/atardecer
- conditions: Información del tiempo actual
- forecast: Pronóstico generalizado de los próximos cuatro días (en el estilo de «llueve», «nublado», etc
- lang:SP: En español
- q/Switzerland/Lugano del sitio donde quieras el pronóstico.
Ese fichero es complicado de ver, pero hay visores web muy cómodos. Recomiendo este.
Por otro lado, tenemos el script en Python que hace un montón de cosas (el fichero está comentado, no voy a repetir el trabajo). Lo chulo es que coge una plantilla de «SVG» (un fichero de imagen que puedes editar como texto) y sustituye los datos que quieras. Lo único pesado es que si quieres poner iconos distintos tienes que introducirlo de manera especial en esa plantilla, y me ha costado un poco.
Lo último que falta es editar el archivo cron para que ejecute el script cada hora.
Comprendo que cualquiera que sepa programar en python se ofenda por el script que he hecho. Teniendo en cuenta que no sé programar en python, tampoco se me puede pedir mucho más.
Lo que no he conseguido es que el script no casque cuando no le llega el archivo json, porque por ejemplo no haya red. A ver si pregunto en algún foro.
El termómetro USB
Este bicho me dio problemas durante un par de días. Resulta que no es inmediato de usar en linux, pero siguiendo estas instrucciones (1) y (2), sin problema. Salvo que había que correr el programa como root, lo cual no mola en un script. La solución que proponía el artículo no me valió, así que al final edité el fichero visudo para que no pidiese contraseña
sudo visudo
y añado al final:
alberto ALL=(ALL) NOPASSWD: /home/alberto/temperv14/temperv14
Juanquear el kindle.
Lo primero es hacerle un «jailbreak» al kindle. Osea, hacerte root. Me baso en estos tutoriales: (1) y (2)
En el kindle, Menú>Settings>Device Info veo que tiene firmware 3.4 y número de serie B00A, que en esta página dicen que es la versión 3g europea. Así que me tengo que descargar el archivo de jailbreak y usar la versión update_jailbreak_0.11.N_k3gb_install.bin . Ahora simplemente se conecta el kindle al pc y se pone ese archivo en el kindle. Luego, se actualiza el kindle en Menu>Update your kindle.
Una vez actualizado, hay que instalar en el kindle el programa usbnetwork de la misma manera que con el jailbreak, usando el archivo update_usbnetwork_0.52.N_k3gb_install.bin.
Una vez reiniciado, ya podremos conectarnos por ssh al kindle, siguiendo el paso Get SSH access to your Kindle (attempt 2, USBNet hack) de esta guía, teniendo en cuenta que en linux, para conectarte con el kindle tendrás que hacer
sudo ifconfig usb0 192.168.2.1
Un problema que me encontré es que la conexión se cae a los 30 segundos. Dentro de ese tiempo puedo hacer ping y ssh root@192.168.2.2 (contraseña en blanco).
Después de comprobar la conexión hay que instalar el lanzador de aplicaciones Kite, siguiendo el paso Install Kite (Kindle Application Launcher) de esta guía.
Y finalmente, copio al kindle los scripts del kindle-weather y edito el archivo cron para que se ejecute cada hora. Sigo estas instrucciones, pero cambio el script display-weather.sh. En vez de mostrar una pantalla de error cuando no tiene conexión, lo que hace es mantener la pantalla anterior.
#!/bin/sh
eips -c
eips -c
if wget http://ipservidor/weather-script-output.png; then
eips -g weather-script-output.png
cp weather-script-output.png wso-backup.png
else
eips -g wso-backup.png
fi
Por hacer: El kindle tiene el wifi permanentemente encendido, lo cual es un gasto innecesario. Pero no he sabido cómo manejar el wifi con los comandos. Buscando en foros vi el comando lipc-set-prop com.lab126.cmd wirelessEnable pero parece que no funciona en el kindle 3.