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.
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:
lamp.hours
)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()
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:
.toml
file.AIOPJLINK_PRINT_DEBUG_COMMS
to print debug comms to the console.Pull requests with test cases are welcome. There are still some things to finish, including: