Hace unos años se me ocurrió la idea de hacerme mi propio termostato. Parecía un proyecto asequible pues sólo debería controlarse la temperatura de la calefacción. Sí… La cosa se complicó.
El termostato que tenía para encender la caldera era muy básico, y pensé que no podría ser muy difícil mejorar ese trozo de plástico com porquería incustado . Me puse manos a la obra y empecé a investigar cómo podría hacer el proyecto.
Justo tenía un nuevo asistente Alexa, lo que despertó en mí una obsesión muy loca por todo lo que se pudiera automatizar y controlar por bebe o internet. Me hice con todos los gadgets compatibles con Alexa que encontré: para que me cegaran las luces, la tv, el aire acondicionado, el robot aspirador, la lavadora… y claro, faltaba la calefacción.
Las motivaciones iniciales eran tener un termostato al estilo NEST que en ese momento me daba pereza comprar, y crear algo funcional con una Raspberry-pi 3, pues me habían regalado una y también tenía por casa una pantalla táctil compatible muy básica ..
Algunas preguntas básicas:
¿Cuál es el SO idóneo para el proyecto?
¿Cómo se configura la pantalla?
¿Qué lenguaje utilizaré para crear la aplicación?
¿Qué componentes electrónicos necesito?
Cómo hago que inicie mi aplicación
Al final encontré las respuestas a estas preguntas. Basé la solución en desarrollo Python y componentes básicos de compatibles con Raspberry y el resultado fue lo suficientemente bueno:
Componentes Básicos:
Los componentes de hardware y sofware los encontrará en el proyecto de git:
Evitar que se active el modo reposo de la pantalla
Prerionemos la orden de terminal:
$ xset q
Es posible que al acceder remotamente no encuentre la pantalla. Es por eso que previamente debe definirse la variable DISPLAY
export DISPLAY=:0 #o el que corresongui en el vostre cas
Aparecerá algo similar a:
keyboard Control:
auto repeat: on key click percent: 0 LED mask: 00000000
XKB indicators:
00: Caps Lock: off 01: Num Lock: off 02: Scroll Lock: off
03: Compose: off 04: Kana: off 05: Sleep: off
06: Suspend: off 07: Mute: off 08: Misc: off
09: Mail: off 10: Charging: off 11: Shift Lock: off
12: Group 2: off 13: Mouse Keys: off
auto repeat delay: 660 repeat rate: 25
auto repeating keys: 00ffffffdffffbbf
fadfffefffedffff
9fffffffffffffff
fff7ffffffffffff
bell percent: 50 bell pitch: 400 bell duration: 100
Pointer Control:
acceleration: 2/1 threshold: dddd 4
Screen Saver:
prefer blanking: yes allow exposures: yes
timeout: 600 cycle: 600
Colors:
default colormap: 0x20 BlackPixel: 0x0 WhitePixel: 0xffff
Font Path:
/usr/share/fonts/X11/misc,/usr/share/fonts/X11/100dpi/:unscaled,/usr/share/fonts/X11/75dpi/:unscaled,/usr/share/fonts/X11/Type1,/usr/share/fonts/X11/100dpi,/usr/share/fonts/X11/75dpi,built-ins
DPMS (Energy Star):
Standby: 600 Suspend: 600 Off: 600
DPMS is Enabled
Monitor is On
Tecleamos:
$ xset -dpms
$ xset s noblank
$ xset s off
Y ya tendremos la pantalla configurada para que no se ponga en modo reposo.
Permisos de ejecución remotos
La aplicación Python se ejecuta con el gestor gráfico startX. Para poder ejecutar remotamente (desde el terminal mediante ssh) la aplicación y por tanto iniciar startX es necesario modificar el archivo:
/etc/X11/Xwrapper.config
y añadir la linea:
allowed_users = anybody
De lo contrario aparecería el mensaje:
/usr/lib/xorg/Xorg.wrap: Only console users are allowed to run the X server
Instal·lar llibreries Python necessaries per al projecte
El proyecto incluye fondos especiales necesarios para su correcta visualización. Simplemente deben instalarse en el repositorio de fuentes de raspbian. Una vez descargado el proyecto de github donde encontrará los fondos:
Instalar fontconfig:
$ sudo apt-get install fontconfig
Luego podremos ver las fuentes instaladas en un idioma (Ex:Tamil):
$ fc-list :lang=ta
Situarse en el directorio thermostat y teclear el siguiente comando:
En el archivo rc.local añadimos el arranque del mismo:
sudo nano /etc/rc.local
#/etc/rc.local
/etc/init.d/thermoPi.sh start &
Paralelamente al arranque de la aplicación termostato debemos arrancar el gestor de ventanas start. Encontrará los scripts de arranque en el propio proyecto: