Skip to main content

aiopjlink

A modern Python asyncio PJLink library (Class I and Class II).

PyPI PyPI - License PyPI - Python Version

PyPI - Downloads GitHub repo size

Most projectors that have RJ45 ports on the back can be controlled via PJLink.

PJLink is a communication protocol and unified standard for operating and controlling data projectors via TCP/IP, regardless of manufacturer.

PJLink consists of Class 1 commands and queries, as well as Class 2 notifications and extensions.

  • Class 1 is the most common type of PJLink, and is used for basic commands such as power on/off, input selection, and adjusting volume.
  • Class 2 is an extended version of the protocol that supports additional commands such as opening and closing the projector's lens cover, and is typically used by more sophisticated devices.

A Python library that uses asyncio to talk to one or more projectors connected to a network using the PJLink protocol.

It has these advantages:

  • ✅ Clean modern asyncio API
  • ✅ High level API abstraction (eg. lamp.hours)
  • ✅ Pure Python 3 implementation (no dependencies)
  • ✅ Full suite of test cases
  • ✅ Context managers for keeping track of connections and resources
  • ✅ High quality error handling

Usage

Each "connection" to a projector is managed through a PJLink context manager. Once this is connected, you access the different functions through a high level API (e.g. conn.power.turn_off(), conn.lamps.hours(), conn.errors.query(), etc).

For example, create a PJLink connection to the projector and issue commands:

async with PJLink(address="192.168.1.120", password="secretpassword") as link:

    # Turn on the projector.
    await link.power.turn_on()

    # Wait a few seconds, then print out all the error information.
    await asyncio.sleep(5)
    print("errors = ", await link.errors.query())

    # Then wait a few seconds, then turn the projector off.
    await asyncio.sleep(5)
    await link.power.turn_off()

Development

We use the PDM package manager.

pdm install --dev  # install all deps required to run and test the code

pdm run lint  # check code quality
pdm run test  # check all test cases run OK

pdm publish  # Publish the project to PyPI

Other notes:

  • There are more "pdm scripts" in the .toml file.
  • Set the env variable AIOPJLINK_PRINT_DEBUG_COMMS to print debug comms to the console.

Roadmap

Pull requests with test cases are welcome. There are still some things to finish, including:

  • Search Protocol (§3.2)
  • Status Notification Prototol (§3.3)

Release files for aiopjlink 1.0.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for aiopjlink 1.0.5
File Size Uploaded
aiopjlink-1.0.5.tar.gz 21.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for aiopjlink 1.0.5
File Interpreter ABI Platform
aiopjlink-1.0.5-py3-none-any.whl Python 3 none any Details

Total release size: 42.7 kB

Release history Release notifications | RSS feed

This release

1.0.5 This release

2 release files

1.0.3

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page