This is a plugin for JVC Projectors that are controlled either directly over IP or over a serial connection by a Global Cache IP2SL.
While I was waiting to receive my new projector, @LJR had already gotten his and I offered some assistance as he put together another JVC Projector Plugin. Once my projector finally arrived, I installed that plugin and was able to get it to work with my old GC IP2SL. However, I could never get the direct IP control working (which was my preferred configuration). Diving into that plugin, I wasn’t able to figure out what the problem was, so I started from scratch and built this one. I’m certainly not trying to create a dueling plugins situation–they seem to offer different command support and feedbacks, so I think it’s really a case of picking the one that suits your use case the best.
My primary reference was this manual, helpfully linked by @LJR here. I wasn’t able to find the original elsewhere on the internet, but hopefully it will live in github forever.
This plugin has 6 Settings that can be configured:
-
Host
- the hostname or IP address to connect to (either the projector itself or a GC IP2SL) -
Port
- likely either20554
if connecting to the projector or4999
if connecting to the GC IP2SL -
IPControl
-TRUE
orFALSE
depending on whether you want to connect to the projector for direct IP control -
ProjectorPassword
- for NZ and later projectors, an 8-10 digit password is needed (must also be configured on the projector) -
CommandDelayInterval_MS
- how long to wait (in milliseconds) for a response after sending a command -
CommandTimeoutInterval_S
- how long to wait (in seconds) before treating a command as timed-out/ignored by the projector
Ideally, you shouldn’t have to change the CommandDelayInterval_MS
or CommandTimeoutInterval_S
values, but I’m still experimenting with them myself. Unfortunately, the projector’s command protocol is pretty brain-dead and has a lot of potential traps, where it won’t respond to commands depending on timing and how they are sequenced. This plugin jumps through a lot of hoops to make sure that there are no overlapping commands while still maintaining some responsiveness. Be aware that changing lense memories takes a long time (40+ seconds) and it is not clear the projector ever properly/usefully sends an acknowledgement. These are the commands I most frequently encounter timeouts on.
The supported MediaCommands
are:
-
PowerOn
/PowerOff
Menu
- The standard navigation commands:
DirectionUp
,DirectionLeft
,DirectionDown
,DirectionRight
,Select
, andBack
-
HideToggle
- toggles the hide (screen blanking) mode -
LowLatencyOn
/LowLatencyOff
- turns on/off low latency mode (note, this may be problematic based on some things I’ve read elsewhere, in that other settings may also need to be changed before this will do what you want) -
LampPowerLow
/LampPowerMid
/LampPowerHigh
-
EShiftOff
/EShiftOn
-
MaskOn
/MaskOff
-
Memory1
throughMemory10
- selects respective lense memory
In addition, InputSource
supports HDM1
and HDM2
to select the respective projector input.
Please let me know if there are other commands that would be useful to add.
One thing this plugin provides is a lot of feedbacks, including:
-
ProjectorModel
- projector model name -
PowerState
- detailed power state (beyond theOn
/Off
provided by theSwitch
Attribute) -
SourceSignal
- whether source signal is available -
LowLatencyMode
- current low latency mode -
LampPowerMode
- current lamp power mode -
EShiftMode
- current e-shift mode -
MaskMode
- current mask mode -
CurrentMemoryMode
- currently selected lens memory -
SourceDisplayMode
- source signal resolution and frame rate
I may add a few more feedbacks in the future and designed this plugin to be pretty easily extended in that regard. I’m definitely open to requests on feedbacks, as well.
Please let me know if you encounter any problems. I only have one projector (an NZ8) but have gotten things working pretty well for my setup. One additional note–usually in my plugins, I strip out the Advanced Plugin Logging capabilities to keep them “clean”. However, I run all of my plugins with that code, so I’m going to leave it in because it makes debugging so much easier when running in the app. If you don’t want it, it is pretty easy to strip out.
Change Log:
- 2023-01-25 - original version
- 2023-01-26 - added a workaround for a dumb behavior of the projector: if it is already on, it will ignore a command to power on, resulting in a timeout in the plugin for lack of acknowledgement
- 2023-12-10 - added support for
MaskMode
feedback andMaskOn
/MaskOff
commands
Last updated: 2023-12-10
Here is the plugin code:
JVCProjector-2023-12-10.plugin (36.3 KB)
The plugin code itself exceeds the post character limit, so I have not repeated it here.