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.
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 either
20554if connecting to the projector or
4999if connecting to the GC IP2SL
FALSEdepending 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
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 standard navigation commands:
HideToggle- toggles the hide (screen blanking) mode
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)
Memory10- selects respective lense memory
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 the
Offprovided by the
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.
- 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
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.