Hardware utilizzato TSOP48xx, nel mio caso 4838, collegato in questo modo:
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/#
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"}
Un ringraziamento ad Andrea Montefusco per lo studio preliminare su LIRC e ir-keytable
2018 Ⓒ TanzoLab