Skip to main content

lirc python extension for asyncio

Project description


Asynchronous messaging using python’s new facility(async-await syntax), introduced in version 3.5 is so fun!

So, I decided to provide an asynchronous context manager and iterator wrapper for Linux Infra-Red Remote Control(LIRC).

Happily, the Cython is working well with asyncio. So the lirc_client C extension has been made by cython’s extenstion type.

In addition, an IRCDispatcher type and a listen_for decorator have been provided.

Quick Start

The simplest way to use this library is the famous very_quickstart function as follows:

from aiolirc import very_quickstart, listen_for

async def do_play(loop):
    # Do play stuff

very_quickstart('my-prog')  # my-prog is configured in your lircrc file.

Another coroutine function named quickstart is also available.This lets you have control over the event loop life-cycle:

import asyncio
from aiolirc import quickstart

main_loop = asyncio.get_event_loop()
except KeyboardInterrupt:
    print('CTRL+C detected. terminating...')
    return 1
    if not main_loop.is_closed():

The IRCDispatcher


def __init__(self, source: LIRCClient, loop: asyncio.BaseEventLoop=None):

Example of usage

import asyncio

from aiolirc.lirc_client import LIRCClient
from aiolirc.dispatcher import IRCDispatcher, listen_for

@listen_for('amp power', repeat=5)
async def amp_power(loop):
    # Do your stuff

@listen_for('amp source')
async def amp_source(loop):
    # Do your stuff

async with LIRCClient('my-prog') as client:
    dispatcher = IRCDispatcher(client)
    await dispatcher.listen()

The LIRCClient


def __cinit__(self, lircrc_prog, *, lircrc_file='~/.config/lircrc', loop=None, check_interval=.05, verbose=False,

To advance control over the messages received from lirc, asychronously iter over an instance of the LIRCClient after calling LIRCClient.lirc_init(). And make sure the LIRCClient.lirc_deinit() has been called after finishing your work with LIRCClient:

from aiolirc.lirc_client import LIRCClient

client = LIRCClient('my-prog')
    async for cmd in client:

You may use the LIRCClient as an asynchronous context manager as described as follows, to automatically call the LIRCClient.lirc_init() and LIRCClient.lirc_deinit() functions, and also acquiring a lock to prevent multiple instances of the LIRCClient from reading messages from lirc_client wrapper:

from aiolirc.lirc_client import LIRCClient

async with LIRCClient('my-prog') as client:
    async for cmd in client:

Change Log


  • README.rst

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for aiolirc, version 0.1.0
Filename, size File type Python version Upload date Hashes
Filename, size aiolirc-0.1.0.tar.gz (58.8 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page