Mando a distancia con infrarrojo en Openwrt

Hace algunos años, Junior,  un alumno al que aprecio un montón, hacía gamberradas en el aula a los compañeros con un cacharrito como este. Hace poco adquirí un par de estos mandos infrarrojos y vamos a ver como integrarlos con Openwrt.Se me ocurren infinidad de funcionalidades para el uso de este dispositivo:

  • Activar o desactivar el acceso a Internet a un golpe de botón.
  • Activar o desactivar la señal Wifi.
  • Enviar un mensaje por Telegram o por email de una nueva contraseña Wifi.
  • Que el router nos diga cuantos ordenadores se han quedado encendidos en el aula.
  • Cualquier otro dispositivo que quiera controlar desde Internet pulsando un botón desde remoto usando MQTT u otros protocolos.

Buscando por Internet utilizan lirc pero desgraciadamente esta aplicación hay que compilarla para hacerla funcionar con Openwrt.

Como sustituto usaremos Triggerhappy y veremos lo fácil que es ponerlo en marcha.

Paso 1 – Instalamos los paquetes necesarios para que reconozca el dispositivo.

El dispositivo es reconocido como un teclado normal y corriente por lo que solo tenemos que instalar lo siguiente:

opkg update ; opkg install kmod-usb-hid triggerhappy nano

Aprovechamos también para instalar triggerhappy y nano (editor de textos).

A continuación reiniciamos el router y conectamos el dispositivo.

Paso 2 – Comprobando que funciona lo ha reconocido.

Una vez hayamos reiniciado el dispositivo y conectado el dispositivo en un puerto usb del router, comprobamos que lo ha reconocido con el siguiente comando:

dmesg

Al final encontraremos algo como:

[11057.413332] usb 1-1.2: new low-speed USB device number 4 using ehci-platform
[11057.580971] input: HID 1d57:ad02 as /devices/platform/ehci-platform/usb1/1-1/1-1.2/1-1.2:1.0/0003:1D57:AD02.0003/input/input2
[11057.594718] hid-generic 0003:1D57:AD02.0003: input,hiddev0,hidraw0: USB HID v1.10 Keyboard [HID 1d57:ad02] on usb-ehci-platform-1.2/input0
[11057.733386] input: HID 1d57:ad02 as /devices/platform/ehci-platform/usb1/1-1/1-1.2/1-1.2:1.1/0003:1D57:AD02.0004/input/input3
[11057.746698] hid-generic 0003:1D57:AD02.0004: input,hiddev0,hidraw1: USB HID v1.10 Mouse [HID 1d57:ad02] on usb-ehci-platform-1.2/input1

Esto quiere decir que lo ha reconocido.

Una señal de que lo hemos hecho bien

ls /dev/input

nos debe devolver lo siguiente:

event0 event1

Por event0 recibiremos las teclas pulsadas.

Por event1 recibiremos la señal del ratón.( triggerhappy solo gestiona los clics de ratón, no el movimiento que en este mando se realiza con el botón circular)

Paso 3 – Usando Triggerhappy – Reconociendo las teclas.

Ahora toca comprobar como ve las teclas pulsadas y qué nombre le asigna el triggerhappy.

Con la siguiente orden apuntaremos verificaremos y apuntaremos en un papel el nombre de las techas que ha reconocido triggerhappy.

thd --dump /dev/input/*

Veremos los diferentes eventos al pulsar una tecla:

Al pulsar la tecla “Enter” en el mando me sale lo siguiente:

EV_KEY KEY_ENTER 1 /dev/input/event0
# KEY_ENTER 1 command
EV_KEY KEY_ENTER 2 /dev/input/event0
# KEY_ENTER 2 command
EV_KEY KEY_ENTER 2 /dev/input/event0
# KEY_ENTER 2 command
EV_KEY KEY_ENTER 2 /dev/input/event0
# KEY_ENTER 2 command
EV_KEY KEY_ENTER 2 /dev/input/event0
# KEY_ENTER 2 command
EV_KEY KEY_ENTER 0 /dev/input/event0
# KEY_ENTER 0 command

Entenderlo es fácil. Es la lista de eventos:

Lo que he puesto en rojo indica que ha reconocido la tecla que le da como nombre KEY_ENTER. El 1 indica que lo he pulsado.

A continuación me dice que he seguido presionando la tecla KEY_ENTER. Lo indica con el 2.

Al final en azul es cuando me indica que he soltado el KEY_ENTER. Lo indica con un 0.

Por lo tanto podré controlar y ejecutar un comando o script en el momento que pulso la tecla, la mantengo pulsada o la suelto.

Paso 4 – Haciendo que ejecute algo con triggerhappy.

Una vez hemos decidido e identificado la tecla que vamos a usar vamos a configurar triggerhappy.

Utilizaremos el archivo de ejemplo que trae al instalarse:

nano /etc/triggerhappy/triggers.d/example.conf

En él añadiremos lo siguiente:

# Al pulsar la tecla "ENTER"
KEY_ENTER 1 echo "Has PULSADO la tecla ENTER">>/tmp/test.txt
# Al MANTENER la tecla "ENTER"
KEY_ENTER 2 echo "Has MANTENIDO PULSADA la tecla ENTER">>/tmp/test.txt
# Al pulsar la tecla "ENTER"
KEY_ENTER 0 echo "Has SOLTADO la tecla ENTER">>/tmp/test.txt

Esto añade al archivo /tmp/test.txt líneas dependiendo del evento realizado.

para comprobar que funciona reiniciamos triggerhappy para que pille la nueva configuración:

/etc/init.d/triggerhappy restart

y vemos lo que se ha pulsado con:

cat /tmp/text.txt

Podríamos tumbar la conexión al router y por tanto quitar la conexión a Internet si añadimos lo siguiente a la configuración:

BTN_LEFT 1 ifconfig br-lan down
BTN_RIGHT 1 ifconfig br-lan up

En este caso lo hacemos con la tecla de ratón L y R (Teclas azules bajo el botón circular)

Una manera más elegante que la anterior es haciendo un script que bloquee un rango de ips origen utilizando el firewall del sistema. Con comandos uci podemos crear la regla y activarla o desactivarla.

uci add firewall rule
uci set firewall.@rule[-1].proto='tcp udp'
uci set firewall.@rule[-1].name='Denegar_red_192.168.1.0'
uci set firewall.@rule[-1].src='lan'
uci set firewall.@rule[-1].src_ip='192.168.1.0/24'
uci set firewall.@rule[-1].target='REJECT'
uci set firewall.@rule[-1].dest='wan'
uci commit firewall
/etc/init.d/firewall reload

Final – Método alternativo (Adelanto que a mi  no me funciona).

Un método alternativo es realizarlo con otra aplicación llamada cmdpad. Por alguna razón no va la aplicación ya que no es capaz de reconocerme los comandos configurados.

Se instalaría con:

 opkg install cmdpad

Se ejecuta con lo mismo:

cmdpad

cmdpad - version 0.0.3 - Copyright (C) 2002-2003 Alessandro Fausto
Build with code optimization at Dec 24 2017 07:31:03
This is free software, comes with ABSOLUTELY NO WARRANTY, and
and you are welcome to redistribute it under certain conditions.
To view the licence use cmdpad --copying|more 
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x1d57 product 0xad02 version 0x110
Input device name: HID 1d57:ad02
no command found for key 106, event PRESS
no command found for key 106, event RELEASE
no command found for key 108, event PRESS
no command found for key 108, event RELEASE
no command found for key 34, event PRESS
no command found for key 34, event REPEAT
no command found for key 34, event REPEAT
no command found for key 34, event RELEASE

Podemos ver los eventos pero esta vez las teclas pulsadas son códigos.

Se configura en /etc/cmdpad.conf

nano /etc/cmdpad.conf

La primera línea indica el evento que debe atender

A continuación se añaden líneas el router se reiniciará al pulsar la tecla Enter del mando.

device=/dev/input/event0
command=036,P  ,shutdown

Es en este momento veo que no hace nada. Frustrado me quedo ya que siempre dice que no encuentra el comando. No sé si esta noche dormiré bien. 🙂

Saludos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *