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

Prerequisiti

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/#

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 e ir-keytable

Massimiliano Casini (Coordinatore tecnico Service Assurance presso www.kenamobile.it)
Sono cresciuto nel modo IT di aziende ad alto contenuto tecnologico e da sempre ho acquisto esperienze nel settore della domotica e sicurezza residenziale. Negli ultimi dieci anni ho acquisito competenze specifiche nel campo delle TLC in particolare sulla rete GSM e sui protocolli ad essa collegati.