Markdown source

# Utilizzare l'IR interno di CM3-Home con un telecomando

## Prerequisiti

Hardware utilizzato TSOP48xx, nel mio caso 4838, collegato in questo modo:

<img src="TSOP4838b.jpg"  width="512px" height="auto">

Avere funzionate il server mosquitto per la gestione delle code MQTT in localhost

E' interessante pubblicare tutti gli eventi provenienti da openhab configurando le direttive "eventbus" nel file /etc/openhab2/services/mqtt-eventbus.cfg:

	broker=broker1
	statePublishTopic=openhab/out/${item}/state
	commandPublishTopic=openhab/out/${item}/command
	
	stateSubscribeTopic=openhab/in/${item}/state
	commandSubscribeTopic=openhab/in/${item}/command

Configurare anche il file /etc/openhab2/services/mqtt.conf:

	broker1.url=tcp://localhost:1883
	broker1.clientId=openhab2 


Verificare con il programma mqtt-spy l'arrivo degli eventi sottoscrivendo le varie code, in questo caso 
	
	openhab/in/# 
	openhab/out/#


## Configurazione

Installare il seguente pacchetto:


	sudo apt-get install lirc


Inserire la seguente riga nel path /etc/modules

	lirc_dev

	
Inserire la seguente direttiva in /boot/config.txt

	dtoverlay=lirc-rpi,gpio_in_pin=23
	
Modificare il file /etc/lirc/hardware.conf

	# # Arguments which will be used when launching lircd
	LIRCD_ARGS="--uinput"
	#  # Don't start lircmd even if there seems to be a good config file
	#  # START_LIRCMD=false
	#   
	#   # Don't start irexec, even if a good config file seems to exist.
	#   # START_IREXEC=false
	#    
	#    # Try to load appropriate kernel modules
	LOAD_MODULES=true
	#     
	#     # Run "lircd --driver=help" for a list of supported drivers.
	DRIVER="default"
	#     # usually /dev/lirc0 is the correct setting for systems using udev
	DEVICE="/dev/lirc0"
	MODULES="lirc_rpi"
	#      
	#      # Default configuration files for your hardware if any
	LIRCD_CONF=""
	LIRCMD_CONF=""

Effettuare un reboot

Al riavvio effettuare un test:

	sudo /etc/init.d/lirc stop
	mode2 -d /dev/lirc0
	
Premendo un tasto del telecomando si dovrebbero vedere un output tipo:

	space 16777215
	pulse 877
	space 800
	pulse 873
	space 797
	pulse 879
	space 798
	pulse 1713
	space 1636

Se non si vedono caratteri vuol dire che il telecomando non è della frequenza corretta, quindi cambiare telecomando.

Ora dobbiamo registrare i codici corrispondenti del telecomando che stiamo usando, quindi lanciamo il seguente comando per "registrare" il file di configurazine corrispondente:

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

Seguire le istruzioni e alla fine verrà creato un file del tipo:

	begin remote
	
	  name  /home/openhabian/lircd.conf
	  bits            5
	  flags RC5|CONST_LENGTH
	  eps            30
	  aeps          100
	
	  one           887   786
	  zero          887   786
	  plead         899
	  pre_data_bits   8
	  pre_data       0xAA
	  gap          107200
	  toggle_bit_mask 0x800
	
	      begin codes
	          KEY_1                    0x03
	          KEY_2                    0x04
	          KEY_3                    0x05
	          KEY_4                    0x06
	          KEY_5                    0x07
	          KEY_6                    0x08
	          KEY_7                    0x09
	          KEY_8                    0x0A
	          KEY_9                    0x0B
	          KEY_0                    0x0C
	          KEY_UP                   0x0D
	          KEY_DOWN                 0x11
	          KEY_RIGHT                0x10
	          KEY_LEFT                 0x0E
	          KEY_POWER                0x01
	      end codes
	
	end remote
	
Adesso andiamo a copiare il file nella path corretta:

	sudo cp ~/lircd.conf /etc/lirc/lircd.conf
	
Effettuamo un restart di lirc:

	sudo /etc/init.d/lirc restart

Adesso se lanciamo il comando

	irw

dobbiamo vedere la decodifica dei tasti che premiamo sul telecomando

	0000000000001543 00 KEY_1 /home/openhabian/lircd.conf
	0000000000001543 01 KEY_1 /home/openhabian/lircd.conf
	0000000000001544 00 KEY_2 /home/openhabian/lircd.conf
	0000000000001544 01 KEY_2 /home/openhabian/lircd.conf
	
Andremo ad utilizzare il programma lircrc per ricevere i tasti del telecomando e compiere delle azioni in particolare eseguire un comando ovvero pubblicare su una coda MQTT l'evento.
Per fare questo dobbiamo creare e configurare il file nella path:

	sudo vim /etc/lirc/lircrc

completandolo secondo il seguente schema (esempio per i primi due tasti):

	begin
    	button = KEY_1
    	prog = irexec
    	config = /usr/bin/mosquitto_pub -h localhost -t openhab/out/ir/command -m key_1
    	repeat = 0
	end
	begin
    	button = KEY_2
    	prog = irexec
    	config = /usr/bin/mosquitto_pub -h localhost -t openhab/out/ir/command -m key_2
    	repeat = 0
	end

Inserire le seguenti righe nel file /etc/rc.local (da verificare se esiste un path migliore) per permettere l'esecuzione automatica del demone alla partenza del sistema:

	#Lancio la lettura del telecomando IR
	/usr/bin/irexec -d &

A questo punto quando premiamo il tasto 1 del telecomando verrà pubblicato l'evento key_1 nella coda openhab/out/ir/command del broker in localhost

Basta aggiungere la seguente direttiva all'item di openhab che deve reagire alla pressione del tasto1 e del tasto2 (nel mio caso una presa Zwave):

	Switch WallPlug1_PT_Presa	"Wall Plug presa"	<poweroutlet>	(avgPresa, gPTBagno)	{channel="zwave:device:controller:node2:switch_binary", mqtt= "<[broker1:openhab/out/ir/command:command:ON:key_1], <[broker1:openhab/out/ir/command:command:OFF:key_2]", autoupdate="false"}

## Ringraziamenti

Un ringraziamento ad Andrea Montefusco per lo studio preliminare su  [LIRC](http://www.tanzolab.it/openhab_lirc) e [ir-keytable](http://www.tanzolab.it/ir-keytable) 
 
 
@include='bio_massimiliano_casini'