Mi tarea ahora es aprender cómo enviar comandos a los aires acondicionados y otros dispositivos de la casa. Inicialmente, estos dispositivos solo tienen control remoto IR. Para resolver este problema, tengo un protector de transceptor IR y Raspberry Pi. En el artículo puedes encontrar configuraciones, equipos, consejos y un poco de teoría. Del software será LIRC (Control Remoto Infrarrojo de Linux) y Python.
Encontré LIRC con la ayuda de Google. En el proceso de investigación, descubrí que LIRC funciona con transmisores y receptores de señales IR, puede decodificar la señal recibida y realizar algunas acciones en relación con esto. Ahora no necesito recibir señales, pero en el futuro puede ser útil. Si usted mismo se mete con LIRC, se recomienda leer la Guía de configuración de LIRC .
Configuracion
apt-get update apt-get install lirc
# /etc/modules ( ) lirc_dev lirc_rpi gpio_in_pin=18 gpio_out_pin=17
# /etc/lirc/hardware.conf ( , ) LIRCD_ARGS="--uinput --listen" LOAD_MODULES=true DRIVER="default" DEVICE="/dev/lirc0" MODULES="lirc_rpi"
# /boot/config.txt ( lirc, ) dtoverlay=lirc-rpi,gpio_in_pin=18,gpio_out_pin=17
# /etc/lirc/lirc_options.conf ( ) driver = default device = /dev/lirc0
reboot sudo /etc/init.d/lircd status
Registro
Primero debe crear un archivo de configuración con secuencias de datos para todos los comandos necesarios. Sigo llamando a este archivo lircd.conf
, pero en cada dispositivo crea su propio archivo my_device_name.lircd.conf
en el directorio /etc/lirc/lircd.conf.d
.
El formato del archivo se describe aquí . Si tiene un control remoto, puede escribir las señales transmitidas por él en un archivo utilizando la utilidad irrecord .
/etc/init.d/lircd stop irrecord -d /dev/lirc0 ~/my_device.lircd.conf mv ~/my_device.lircd.conf /etc/lirc/lircd.conf.d/
irrecord
analiza las secuencias e intenta determinar el protocolo y los parámetros de tiempo. En algunos casos, irrecord
falla en el análisis, por lo que es posible guardar la secuencia como fue aceptada en forma cruda, hay un interruptor de --force
para esto.
Pero incluso con --force
irrecord
intenta analizar algo y también puede fallar. Luego puede grabar las secuencias usando mode2
y crear el archivo usted mismo.
mode2
imprime secuencialmente la duración de la presencia y ausencia de una señal, a partir de la cual se componen los datos transmitidos. La duración se mide en microsegundos (1e-6 segundos). En el formato sin procesar, las mismas duraciones se indican en lircd.conf, comenzando con 'pulse' (no se necesita el 'espacio' inicial). En consecuencia, siempre debe haber un número impar de números (comienza y termina con la presencia de una señal: 'pulso').
Para la automatización, hice un script para la grabación que pide el nombre del comando, ejecuta mode2
durante 5 segundos, recuerda y finalmente imprime el resultado en el formato listo para lircd.conf (ver debajo del spoiler).
irrecord --analyse
archivo, puede intentar "reconocerlo" nuevamente utilizando irrecord --analyse
. Esto no siempre es exitoso, no se apresure a tirar el viejo archivo. Mis estadísticas son las siguientes: el control remoto del televisor LG era fácil de entender, todos los acondicionadores de aire y una aspiradora requerían creación manual, la aspiradora fue procesada por --analyse
.
Solo como ejemplo: así es como se ve el archivo para mi aspiradora .
Nombres de equipo estándar
Para su propósito previsto, el LIRC debe convertir la señal IR recibida y reconocida en un evento de entrada de Linux . Por lo tanto, de manera predeterminada, debemos tener los nombres de comando en lircd.conf de la lista estándar. Puede ver una lista de nombres válidos:
irrecord --list-namespace
Los acondicionadores de aire no entran en este patrón. El requisito de nombre se puede desactivar agregando un parámetro al escribir:
irrecord --disable-namespace ....
Depuración
Compruebe que el receptor ayuda a la utilidad mode2
, que imprime todas las señales visibles.
/etc/init.d/lircd stop mode2 -d /dev/lirc0
Es más fácil verificar la transmisión si hay otro receptor y mode2
ejecutándose en él. En casos particularmente desesperados, puede cambiar el valor en la salida del GPIO y verificar con un probador u osciloscopio dónde va la señal. El equipo de gpio
es parte del paquete cableado .
while sleep 1; do gpio -g toggle 17 done
Puede mirar los registros utilizando journalctl
, en particular, esto le permite ver errores en el archivo de configuración:
journalctl -b 0 /usr/sbin/lircd
Enviar comandos
Hay una utilidad irsend
para transmitir comandos grabados. También puede mostrar una lista de dispositivos conocidos y una lista de comandos conocidos para cada dispositivo. Preste atención a los "argumentos vacíos" en el ejemplo a continuación, se necesitan allí.
irsend
es un cliente para lircd
, por lo que si algo salió mal, busque en los registros (ver arriba).
Teóricamente, existe otra posibilidad: enviar comandos a lircd a través de su socket. No entendí
Llamar desde Python
Casi todas las bibliotecas son solo un kit de irsend
. La única biblioteca que encontré que compila el cliente para la API a través del socket no funciona en Raspberry (se necesita otra versión de lircd). Por lo tanto, tiene poco sentido en ellos; puedo llamar al comando yo mismo:
import subprocess subprocess.call(["irsend", "send_once", "BEDROOM_AC", "OFF"])
Hardware

Utilizo un tablero ya hecho, hay muchos en Amazon y AliExpress . Puedes buscarlo en Google como "Frambuesa infrarroja sheild". Utiliza GPIO 17 para la salida y GPIO 18 para la entrada, como se puede ver en las configuraciones anteriores.
Hay un lugar en el tablero para el segundo LED (adicional) D2, que no está instalado de manera predeterminada. Cuando se usan dos LED, están conectados en serie . Por lo tanto, en ausencia del LED D2, debe cerrar el puente SJ1. Me sorprendió descubrir que en todos mis tableros el puente estaba inicialmente abierto. Tuve que modificar el soldador.
Foto más grande para aquellos que deseen echar un vistazo. Resumen
Funciona: la señal se transmite, los dispositivos la ven y reaccionan correctamente.
Mucho depende de la posición del emisor de diodo, debe dirigirse con precisión al receptor. Un transmisor fijo no puede controlar todos los dispositivos en la habitación. La clonación de una solución basada en Raspberry Pi para cada dispositivo es costosa, necesita modificar el emisor para "cubrir un área más grande" o encontrar una plataforma más barata.
LIRC fue creado originalmente para convertir señales IR en eventos Linux estándar de dispositivos de entrada. Por lo tanto, es natural para él que un botón sea un código. Para algunos dispositivos (la mayoría de los acondicionadores de aire) esto no es así: cuando hace clic en cualquier botón, el control remoto transmite un paquete de datos que contiene el estado completo del dispositivo (encendido, modo de funcionamiento, temperatura, modos de funcionamiento del ventilador, tiempo, temporizador, etc.). No hay forma de construir un paquete de componentes múltiples basado en varios parámetros en LIRC, por lo tanto, es una herramienta rápida e inmediata, pero luego tendrá que buscar otra cosa. Aunque para la mayoría de los casos, los datos grabados con la configuración habitual del ventilador y sin modos exóticos son suficientes.