lunes, 31 de octubre de 2016

Controlar Domoticz con cualquier mando a distancia

Antes de nada perdonad el tamaño de letra. Por mas que selecciono y cambio el tamaño luego se sigue viendo mal en el blog... pufffff

Desde hace tiempo tenía la idea de poder controlar cualquier cosa de las que tengo configuradas en Domoticz desde el mando a distancia que uso para la TV.Os explico básicamente en que consite el proyecto. Lo primero es tener un sensor de infrarojos conectado a nuestra Rasberry. Vereis por la red que recomiendan poner un consensador de 4,7 micro faradios para filtrar ruido, yo no tenía y le he puesto uno de 47 microfradios y parece que no me da problemas(cuando pueda probaré con el de 4,7 para ver si hay alguna diferencia en la respuesta). La verdad es que en la mayoría de tutoriales no ponen ese condensador, yo he seguido el datasheed de mi sensor
conexion sensor ir
Para hacer que Raspberry entienda y haga cosas con la señal de un mando a distancia instalé "Lirc". 
Los pasos son sencillos:
os recomiendo antes de instalar hacer esto:
_____________________
sudo apt-get update
sudo apt-get upgrade
sudo rpi-update
sudo reboot
______________________

Yo lo instalé sin esta actualización y tuve algún problema. Después de esto si que instalamos el paquete:
_______________________
sudo apt-get install lirc
_______________________

Una vez instalado, hay que hacer una serie de modificaciones en ciertos ficheros:
Editamos /etc/modules:
_________________________
sudo nano /etc/modules
______________________

y añadimos estas lineas:

lirc-dev
lirc-rpi gpio-in-pin=22 

En este caso el pin 22 es el que conectaré la pata 1 del sensor. Cuando instale el emisor de IR lo conectaré al pin 23 y tendré que añadir tb ese pin (.... ,gpio-out-pin=23). De momento todavía no he instalado la parte de emisión. Cuando lo haga lo comentaré en otra entrada del blog.

Seguimos editando ficheros, en este caso el /boot/config.txt

___________________________
sudo nano /boot/config.txt
___________________________

añadimos esta linea:
dtoverlay=lirc-rpi,gpio_in_pin=22 

También he añadido la informacion de estos pines en Domoticz.sh, aunque no tengo muy claro que de momento fuese necesario, para el uso que le estoy dando hasta ahora. No obstante  lo que he modificado es /etc/init.d/domoticz.sh

como siempre:
____________________________
sudo nano /etc/init.d/domocticz.sh
____________________________ 

añadiendo estas lineas al final del script:

#Run export Gpio Raspberry
/usr/local/bin/gpio mode 23 out
/usr/local/bin/gpio mode 22 in

Cambiamos tambien datos del fichero /etc/lirc/hardware.conf

___________________________________
sudo nano /etc/lirc/hardware.conf
___________________________________

Hay que dejar esta información:


DRIVER="default"
DEVICE="/dev/lirc0"
MODULES="lirc_rpi"

Bueno llegados a este punto reinciamos el sistema con 
_______________
sudo reboot
_______________

Ya ahora probamos que estÉ funcionando todo correctamente:

___________________________
sudo /etc/init.d/lirc stop 
___________________________
con esto paramos el servicio de lirc

___________________________
mode2 -d /dev/lirc0
___________________________
con esto iniciamos el programa para leer las señales de IR
Deberíamos ver en el terminal una serie de datos del tipo
pulse xxxx
space xxxx
pulse xxxx
space xxxx
...

Si no veis esto.. chungo , algo ha fallado. Pero seguro que no os pasa y todo va como la seda ;)

Ahora llega el momento de leer vuestro mando a distancia. Es posible que no sea necesario porque se pueden encontrar configuración de multitud de mandos aquí : http://lirc.sourceforge.net/remotes/ 

Tanto si procedemos a grabar un mando como a copiar una configuracion que encontremos en este enlace, lo que hay que hacer es incluirlo en el archivo de configuracion /etc/lirc/lirccd.conf

Para leer y grabar un mando, primero hay que tener en cuenta que solo se puede poner a cada botón del mando uno de los nombres que podeis ver ejecutando:


______________________________

irrecord --list-namespace
______________________________

Os recomiendo copiarlo e imprimirlo en una hoja y pensar que nombre de los que figuran ahí le pondreis a cada botón de vuestro mando.
Luego solo hay que ejecutar  

____________________________________
irrecord -d /dev/lirc0 ~/lircd.conf
____________________________________

Siguiendo las instrucciones que se van poniendo en el terminal. Con esto tendremos en el directorio raiz de nuestro sistema , en mi caso /home/pi un fichero lircd.conf 
Este fichero tiene que trasladarse hasta "su sitio" en /etc/lirc
para esto lo movemos

_________________________________________
sudo mv ~/lircd.conf /etc/lirc/lircd.conf
_________________________________________

Es recomendable editar este fichero y poner un nombre a vuestro mando que sea más "recordable", vereis algo así y en lugar de name SHARP (que es el nombre que he puesto yo) tendreis algo asi como name /home/pi/lircd.conf
.....
# Please make this file available to others
# by sending it to <lirc@bartelmus.de>
#
# this config file was automatically generated
# using lirc-0.9.0-pre1(default) on Fri Oct 28 17:50:55 2016
#
# contributed by
#
# brand:                       /home/pi/lircd.conf
# model no. of remote control:
# devices being controlled by this remote:
#

begin remote
  name SHARP
.......


Llegados a este punto es interesante ver si realmente está todo funcionando como esperamos.
iniciamos el servicio
________________________________
sudo /etc/init.d/lirc start
________________________________
 y ejecutamos una orden para "escuchar" nuestro mando

_______________ 
irw
_______________

Si todo está bien irá saliendo en el terminal la información de la tecla que estais presionando.¡¡¡¡Enhorabuena!!! lo habeis conseguido, es como mágico.

Pero no nos relajemos, con esto no conseguimos encender ninguna luz de nuestra casa. Para eso tenemos que configurar mas cositas. En este caso un fichero que tendremos en /etc/lirc/ y que se llamará lircrc. Al parecer tambien podemos ponerlo en la raiz del sistema /home/pi pero en ese caso con el nombre de .lircrc
Yo lo he dejado donde os comento /etc/lirc/ ,bueno realmente antes de que me funcionara lo he probado en estos dos sitios y en muchos otros. Ya sabeis que todo parece fácil hasta que empiezas y se complica. 

No os cuento todas las opciones de configuración de este fichero, podéis verlas en la página del desarrollador muchísimo más completas y mejor explicadas. Lircrc

Yo en este inicio de proyecto lo único que he configurado son dos acciones asociadas a dos botones de mi mando SHARP , KEY_SCROLLDOWN Y KEY_SCROLLUP
Al pulsar la tecla que bauticé como KEY_SCROLLDOWN enviamos una orden json. En la wiki de domoticz podeis ver muchas opciones de configuracion para controlar distintos dispositivos. API/JSON_URL's
En mi caso me fije en el idx del interruptor que quería controlar con el mando 


en este caso el número 52.

La orden que tengo que ejecutar será:
http://192.168.1.29:8080/json.htm?type=command&param=switchlight&idx=52&switchcmd=On

http://192.168.1.29:8080/json.htm?type=command&param=switchlight&idx=52&switchcmd=Off

Según quiera encender o apagar esta luz.
El fichero de configuracion /etc/lirc/lircrc quedaría en mis caso así:
__________________________________________________________
begin
   prog= irexec
   remote = SHARP    #nom de votre telecommande dans le fichier lircd.conf
   button = KEY_SCROLLUP    #nom du bouton appuyé
   config = curl -s "http://192.168.1.29:8080/json.htm?type=command&param=switchlight&idx=52&switchcmd=On" #Commande à exécuter
   repeat=0
end
begin
   prog = irexec
   remote = SHARP    #nom de votre telecommande dans le fichier lircd.conf
   button = KEY_SCROLLDOWN    #nom du bouton appuyé
   config = curl -s "http://192.168.1.29:8080/json.htm?type=command&param=switchlight&idx=52&switchcmd=Off" #Commande à$
   repeat = 0
end

____________________________________________________________



He puesto repeat=0 para que no se tenga en cuenta si se pulsan varias veces el botón.


Espero que si alguien se anima lo pruebe. La verdad es que las posibilidades como siempre son enormes. Solo depende de la imaginación de cada uno. 
Cuando configure la emision de IR para controlar aire acondicionado, TV y  equipo música lo publicaré. 
Si teneis algun problema comentádmelo a ver si puede solucionarlo ;)