I recently got a JVC DLA-NZ500 and found that existing JVC integrations weren’t working correctly with it. In my case, I could setup the projector and turn it on, but it would become unavailable due the integration sending unsupported commands after it was powered on. The newer NZ-series projectors use an updated API spec, so I built this integration using the update spec.
This is my first Home Assistant integration, and a v0.1.0 is the initial release. If you have one of these projectors, I’d love to hear your feedback or bug reports!
Hello Matt!
Thank you for this integration!
I have the same NZ500 but cannot get it work. Sw version on pj 1.02.
Pulled your latest version, HASS is in docker container.
I have direct cable to switch, pj gets IP address via dhcp, ping works fine, but pj refuses connection, like I would have wrong password or something. I set simple “12345678”, padded with JVCKWPJ, using hash string for password. Did not work with or without SDDP enabled.
PJ and HASS in the same subnet.
Logs from HA:
hass | 2026-01-10 20:44:43.983 WARNING (MainThread) [custom_components.jvc_projector_ha.jvcprojector.device] Retrying refused connection
hass | 2026-01-10 20:44:53.000 ERROR (MainThread) [custom_components.jvc_projector_ha.config_flow] Error getting MAC address from jvcpj.b41:20554 - Retries exceeded
hass | Traceback (most recent call last):
hass | File "/config/custom_components/jvc_projector_ha/config_flow.py", line 177, in get_mac_address
hass | await asyncio.wait_for(device.connect(True), timeout=CONNECTION_TIMEOUT)
hass | File "/usr/local/lib/python3.13/asyncio/tasks.py", line 507, in wait_for
hass | return await fut
hass | ^^^^^^^^^
hass | File "/config/custom_components/jvc_projector_ha/jvcprojector/projector.py", line 90, in connect
hass | if not await self.test():
hass | ^^^^^^^^^^^^^^^^^
hass | File "/config/custom_components/jvc_projector_ha/jvcprojector/projector.py", line 152, in test
hass | await self._send([cmd])
hass | File "/config/custom_components/jvc_projector_ha/jvcprojector/projector.py", line 190, in _send
hass | await self._device.send(cmds)
hass | File "/config/custom_components/jvc_projector_ha/jvcprojector/device.py", line 81, in send
hass | await self._connect()
hass | File "/config/custom_components/jvc_projector_ha/jvcprojector/device.py", line 146, in _connect
hass | raise JvcProjectorConnectError("Retries exceeded")
hass | custom_components.jvc_projector_ha.jvcprojector.error.JvcProjectorConnectError: Retries exceeded
hass | 2026-01-10 20:44:53.002 ERROR (MainThread) [custom_components.jvc_projector_ha.config_flow] Failed to connect to jvcpj.b41:20554 - Retries exceeded
Tried with hostname and IP address, same thing.
Seems I’m missing something. May be some idea?
Thanks for giving it a try! Sorry you’re having trouble. Happy to try and help. Based on the error, it looks it’s not the password causing this, but the projector never getting the authentication request. I ran a test on mine to see what the logs would show with a wrong password. This is what I got:
This error originated from a custom integration.
Logger: custom_components.jvc_projector_ha.config_flow
Source: custom_components/jvc_projector_ha/config_flow.py:60
integration: JVC Projector (documentation, issues)
First occurred: 3:16:16 PM (1 occurrence)
Last logged: 3:16:16 PM
Authentication failed for 192.168.1.193:20554
You got a ping response so the projector is connected to your network. That leads me to think the docker container running HASS doesn’t have a network path to your projector.
Try installing the Ping integration and see if you get a Connected sensor to your projector’s IP address. That should tell you if Home Assistant has a network path to your projector. Let me know what you find…
What the… As you advised, I added ping integration for both ip address and hostname, it was showing success as I thought and suspected it should, but after that also JVC integration started to work. Total mystery!
I was even trying before to ping pj from container itself, by attaching to it, ping from inside of container. It worked fine before. But not pj integration. Now all good.
But ping integration kinda blew hole from container to pj.
Huge thanks for idea!
Thanks Reggie! Good catch. The valid parameters for the LD Power command are 0,1,2 so I just assumed it was low, med, high. I actually did notice that when I tested it, but forgot to fix it before I did the last release. I pushed 0.1.3 to fix it.
I mostly use it for just power on/off and to see the resolution and HDR settings of the source content. If there’s any commands you use let me know. I’d be interested in expanding it, but no clue what people would actually need.
I’m having a similar problem with my NZ500 not connecting. The error message is “Authentication failed.” I tried the ping suggestion and found and added the IP address and hostname. Unfortunately, the error persists. I also created the password using a hash, as per the instructions.
Oh, the projector is connected to my switch via LAN.
That looks like a connection error not a password/auth error. Meaning the integration is trying to establish a connection to your projector and timing out. When you setup the ping sensor, did it show it as connected?
Hmm, OK that rules out connectivity. The projector is rejecting the password. Are you sure you have the right password? I messed up generating the hash on my first try by leaving a trailing space after the JVCKWPJ
If you can enable debugging and send the raw logs that will give me more info to help troubleshoot.
I’ve now removed the JVC from my router and tried everything again. I’ve also changed the password several times and tried again each time, but I keep getting the same error. I made sure there were no spaces in the password.
The ping also established a connection. I was also able to ping the JVC from a Windows PC.
Unfortunately, I can’t find a way to debug this because the integration hasn’t been completed yet. I’m also a newbie with Home Assistant and don’t know much about it yet.
That’s great it’s working! Thanks for sharing the info about the non-hashed password. I’ll try that on my side and see if it works. Funny that it worked with the hashed password for me but not for you. I know the earlier version of the python library required a pre-hashed password. Upon looking closer it seems the updated library tries both. If that’s the case, I remove the pre-hash requirement and let the library hash it before logging in. Much simpler.
I should be able to add the hide function to the next release. Looks like it’s just sending the IR code for the hide button. Thanks for the suggestion!
Hi Manu - I pushed an update that adds the IR remote buttons including Hide. It also lets you set the laser power between 1-100 instead of high, med, low.
Here’s some yaml you can drop into a dashboard that creates a virtual remote. Not very pretty, but shows the functionality.