Fa uns anys se’m va acudir la idea de fer-me el meu propi termostat. Semblava un projecte asequible doncs només s’ha hauria de controlar la temperatura de la calefacció. Sí… La cosa es va complicar.
El termostat que tenia per encendre la caldera era molt bàsic, i vaig pensar que no podria ser gaire difícil millorar aquell tros de plastic enmerdat. Em vaig posar mans a l’obra i vaig començar a investigar com podria fer el projecte.
Just tenia un nou asistent Alexa, cosa que va despertar en mi una obsessió molt boja per tot el que es pugués automatitzar i controlar per beu o internet. Em vaig fer amb tots els gadgets compatibles amb Alexa que vaig trobar: perquè m’enceguéssin els llums, la tv, l’aire acondicionat, el robot aspirador, la rentadora… i esclar, faltava la calefacció.
Les motivacions inicials eren tenir un termostat a l’estil NEST que en aquell moment em feia mandra comprar, i crear alguna cosa funcional amb una Raspberry-pi 3, doncs m’havien regalat una i també tenía per casa una pantalla tàctil compatible molt bàsica..
Algunes preguntes bàsiques:
Quin es el SO idoni per al projecte?
Com es configura la pantalla?
Quin llenguatge utilitzaré per a crear l’aplicació?
Quins components electrònics necessito?
Com faig que inicï la meva aplicació
Al final vaig trobar les respostes a aquestes preguntes. Vaig basar la solució en desenvolupament Python i components bàsics de compatibles amb Raspberry i el resultat va ser prou bo:
Components Bàsics:
Els components de hardware i sofware els trobareu al projecte de git:
Es posible que al accedir remotament no trobi la pantalla. Es per això que previament s’ha de definir la variable DISPLAY
export DISPLAY=:0 #o el que corresongui en el vostre cas
Apareixerà quelcom 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
Teclegem:
$ xset -dpms
$ xset s noblank
$ xset s off
I ja tindrem la pantalla configurada perquè no es posi en mode repòs.
Permisos d’execució remots
L’aplicació Python s’executarà amb el gestor gràfic startX. Per a poder executar remotament (desde el terminal mitjançant ssh) l’aplicació i per tant inciar startX es necessari modificar el fitxer:
/etc/X11/Xwrapper.config
i afegir la linea:
allowed_users = anybody
En cas contrari aparareixería el missatge:
/usr/lib/xorg/Xorg.wrap: Only console users are allowed to run the X server
Instal·lar llibreries Python necessaries per al projecte
El projecte inclou fons especials necessaries per a la correcta visualització. Simplment s’han d’instal·lar al repositori de fonts de raspbian. Un cop descarregat el projecte de github on trovareu les fons:
Instalar fontconfig:
$ sudo apt-get install fontconfig
Després podrem veure les fonts instal·lades en un idioma (Ex:Tamil):
$ fc-list :lang=ta
Situarse al diretoru thermostat i teclejar el següent comendament: