Binding Request: JVC Projector

Mate that’s further than I would have gotten with it.

I don’t really have any other ideas except

[INFO ] [org.openhab.model.script.JVC: ] - PJ_OK PJACK !?PW0

What is the !?PW0 section at the end, I assume the response from the PJ after the off command. If so reading the pdf the response is usually a hex code back so that might be a clue.

The only other thing is maybe try the ASCII key for remote control emulation instead of direct control. Maybe eliminate the possible hex issues.

Josh

I’m not sure what you mean with the ascii key? Doesn’t it have to be the machine code?

the !?PW0 is openhab reading back the ascii translation from the hex code I’m sending in sendCommand.
21 89 01 50 57 30 0A
50 57 = PW
30 = 0
some of these don’t translate, so there is a ?.

I’m only stabbing in the dark here, but does openhab read back the sendCommand?
It’s showing PJ_OK PJACK which are the responses (no PJREQ) why show the send command all of a sudden. Is it because there is an error or is the send.Command just bouncing back?
If the JVC is receiving the command response code which should be:
06 89 01 50 57 0A Or just PW

Not sure if it would work but would changing this
JVC_Projector.sendCommand(’\u0021\u0089\u0001\u0050\u0057\u0030\u000A’)
to this work?
JVC_Projector.sendCommand(’!PW0’)

With the ascii part not sure if the infra-red emulation codes on page 12 (for on) or page 23 would work? It’s a different command…

Honestly I’m just running around in the dark here.

I found part of the problem. The system is not sending the hex command as I’ve formatted it. Apparently it has trouble above a certain number, 63. So, rather than 89 it is sending 3F. Hopefully I can get this worked out somehow.

@tlanfer, do you have any time to get a binding skeleton together? Now that I know a bit more about this projector interface maybe I can help get it working. The TCP binding is feeling like a dead end :confused:

I have it working finally. Here is my code:

Items:

String JVC_Projector “JVC Projector [%s]” {tcp=">[192.168.1.105:20554:‘REGEX(*)’]"}
Switch JVC_Update “Force JVC Update” (Prog)
Switch JVC_Power “Projector” (Prog)
Number JVC_Projector_State “JVC State [%d]” (Proj)
Number jvc_power_check_running (Proj)

Rules:
Checks and updates toggle switch…

rule "JVC Power State Check"
when
Item JVC_Update changed
or Time cron “0 0/5 * * * ?” // check every 5 minutes
then
jvc_power_check_running.sendCommand(1)
createTimer(now.plusSeconds(8))[|
JVC_Projector.sendCommand(“PJREQ”)
createTimer(now.plusMillis(800))[|
JVC_Projector.sendCommand(’\u003F\u0089\u0001\u0050\u0057\u000A’) //request power state
createTimer(now.plusMillis(800))[|
if (JVC_Projector.state.toString() == “\u0006\u0089\u0001\u0050\u0057\u000A\u0040\u0089\u0001\u0050\u0057\u0030\u000A”){ //30 means off
JVC_Projector_State.postUpdate(0)
JVC_Power.postUpdate(OFF)
} else if (JVC_Projector.state.toString() == “\u0006\u0089\u0001\u0050\u0057\u000A\u0040\u0089\u0001\u0050\u0057\u0031\u000A”){ //31 means on
JVC_Projector_State.postUpdate(1)
JVC_Power.postUpdate(ON)
} else if (JVC_Projector.state.toString() == “\u0006\u0089\u0001\u0050\u0057\u000A\u0040\u0089\u0001\u0050\u0057\u0032\u000A”){ //32 means cooling
JVC_Projector_State.postUpdate(2)
JVC_Power.postUpdate(OFF)
}else if (JVC_Projector.state.toString() == “\u0006\u0089\u0001\u0050\u0057\u000A\u0040\u0089\u0001\u0050\u0057\u0034\u000A”){ //34 means emergency
JVC_Projector_State.postUpdate(4)
JVC_Power.postUpdate(OFF)
}
createTimer(now.plusSeconds(5)) [|
jvc_power_check_running.sendCommand(0)
]//jvc_power_check_running
] //waitJVC3
] //waitJVC2
] //waitJVC
end

Turns off and on…

rule “JVC Power”
//http://support.jvc.com/consumer/support/documents/DILAremoteControlGuide.pdf
when
Item JVC_Power changed
then
while (jvc_power_check_running.state == 1){
Thread::sleep(5000)
}
if (JVC_Power.state == OFF){
JVC_Projector.sendCommand(“PJREQ”)
createTimer(now.plusMillis(800))[|
JVC_Projector.sendCommand(’\u0021\u0089\u0001\u0050\u0057\u0030\u000A’) //Power off
JVC_Projector_State.postUpdate(0)
]
} else if (JVC_Power.state == ON){//power off
JVC_Projector.sendCommand(“PJREQ”)
createTimer(now.plusMillis(800))[|
JVC_Projector.sendCommand(’\u0021\u0089\u0001\u0050\u0057\u0031\u000A’) //Power on
JVC_Projector_State.postUpdate(1)
]
}//power on off
end

Is there anything more you configured?

I changed “updatewithresponse” in tcp.cfg to “true” and changed “transformation” in addons.cfg to “regex”, but still it seems not to work for me.

I see that when the connection to JVC X7900 is established, the JVC replies with PJ_OK. After sending PJREQ it acknowledges with PJACK. But when sending:

jvc_x7900.sendCommand(’\u003F\u0089\u0001\u0050\u0057\u000A’) // request power state

…it just replies with the same String, meaning ASCII “?PW”.

What am I doing wrong?

Continuing the discussion from Binding Request: JVC Projector:

Not sure if this is still of interest but I have a NX7 JVC Projector and decided to write a binding for JVC that works fine for my projector. Right now it handles Power state, Input selection, refresh of the power state and the JVC Projector thing. I was going to add “Picture Mode”, “Color Profile”, a discovery service, and update some configuration properties for make/model/serial.

If there is an interest, I can post the binding to help test/try.

-Brian

1 Like

Yes please!

Excellent… Here is a test binding. I have an NX7 projector and it works fine… I’ve coded power on/off, inputs, and picture mode. There is a model detection that updates the global thing properties if you have an NX5, NX7 or NX9. Otherwise it sets it to generic to allow the command library to be reused. There is a an IP and refresh interval that is configured with the thing to target the JVC projector (I recommend 60 for the refresh which is 60 seconds and a discovery can be added at a later time… i.e. Not coded in this release.) I’ve also coded a lamp hours collection for a string property in case you’d like to
know the lamp hours usage.

I used the JVC API guide at the following URL for the binding.

It will identify as a generic projector and query the model information. If there are better ways to grab model, that can be added to the binding if the codes sent don’t match the JVC API guide here…

Feel free to provide feedback and I would treat this in testing mode…

JAR file: https://drive.google.com/file/d/1FylaNiwrH4WNLVGdalMHbyMiK0jlQ9W2/view?usp=sharing
I’m assuming you know where to put the JAR file… i.e. /usr/share/openhab2/addons folder…

The sitemap file is quite simple… Here is a sample to get you going…
Switch item=JVCProjector_Power label=“JVC NX7 Power”
Selection item=JVCProjector_InputHDMI label=“Input” mappings=[HDMI1=“HDMI1”,HDMI2=“HDMI2”] visibility=[JVCProjector_Power==ON] icon=“projector”
Selection item=JVCProjector_PictureMode label=“PictureMode” mappings=[Film=“Film”,Cinema=“Cinema”,Natural=“Natural”,HDR10=“HDR10”,THX=“THX”,User1=“User1”,User2=“User2”,User3=“User3”,User4=“User4”,User5=“User5”,User6=“User6”,HLG=“HLG”] visibility=[JVCProjector_Power==ON] icon=“projector”
Text item=JVCProjector_LampHours label=“Lamp Hours” visibility=[JVCProjector_Power==ON] icon=“projector”

I downloaded a new firmware this AM, v3.10 and found a new picture mode setting was included in the firmware “Frame Adapt HDR”. The JVC API documentation didn’t include this picture mode but I did some trial an error and found the command to send to the JVC projector. The setting for “PictureMode=Frame Adapt HDR” is 0x30 0x42 for anyone that is using a rules or other configuration.

Here is the updated binding JAR file link…
https://drive.google.com/file/d/1FylaNiwrH4WNLVGdalMHbyMiK0jlQ9W2/view?usp=sharing

Updated sitemap line is:
Selection item=JVCProjector_PictureMode label=“PictureMode” mappings=[Film=“Film”,Cinema=“Cinema”,Natural=“Natural”,HDR10Adapt=“HDR10Adapt”,HDR10=“HDR10”,THX=“THX”,User1=“User1”,User2=“User2”,User3=“User3”,User4=“User4”,User5=“User5”,User6=“User6”,HLG=“HLG”] visibility=[JVCProjector_Power==ON] icon=“projector”

Hi @BHigg! Thank you so much for putting this together!
I have installed the 2.5.5 SNAPSHOT on my OHAB 2.5.8 release build. It does not automatically discover a device on my network, which doesn’t matter all that much to me.

image

So, I manually added a JVC device. I attempt to enter the IP address, refresh interval, and subnet mask. But it will not save. I’ve tried through PaperUI and Habmin. The following error is logged:

2020-09-24 05:49:23.174 [ERROR] [st.core.internal.thing.ThingResource] - Exception during HTTP PUT request for update config at 'things/jvcprojector:jvc-projector-generic:174bf6c5ce8/config'
java.lang.NullPointerException: null
	at org.openhab.binding.jvcprojector.internal.JVCProjectorHandler.dispose(JVCProjectorHandler.java:60) ~[?:?]
	at org.eclipse.smarthome.core.thing.binding.BaseThingHandler.handleConfigurationUpdate(BaseThingHandler.java:104) ~[?:?]
	at org.eclipse.smarthome.core.thing.internal.ThingRegistryImpl.updateConfiguration(ThingRegistryImpl.java:93) ~[?:?]
	at org.eclipse.smarthome.io.rest.core.internal.thing.ThingResource.updateConfiguration(ThingResource.java:438) [bundleFile:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_265]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_265]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_265]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_265]
	at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81) [bundleFile:?]
	at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:144) [bundleFile:?]
	at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:161) [bundleFile:?]
	at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:160) [bundleFile:?]
	at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:99) [bundleFile:?]
	at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:389) [bundleFile:?]
	at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:347) [bundleFile:?]
	at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:102) [bundleFile:?]
	at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:326) [bundleFile:?]
	at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) [bundleFile:?]
	at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) [bundleFile:?]
	at org.glassfish.jersey.internal.Errors.process(Errors.java:315) [bundleFile:?]
	at org.glassfish.jersey.internal.Errors.process(Errors.java:297) [bundleFile:?]
	at org.glassfish.jersey.internal.Errors.process(Errors.java:267) [bundleFile:?]
	at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) [bundleFile:?]
	at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) [bundleFile:?]
	at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) [bundleFile:?]
	at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:473) [bundleFile:?]
	at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427) [bundleFile:?]
	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388) [bundleFile:?]
	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341) [bundleFile:?]
	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228) [bundleFile:?]
	at com.eclipsesource.jaxrs.publisher.internal.ServletContainerBridge.service(ServletContainerBridge.java:76) [bundleFile:?]
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:852) [bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:544) [bundleFile:9.4.20.v20190813]
	at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:71) [bundleFile:?]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) [bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:536) [bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) [bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) [bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1581) [bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) [bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1307) [bundleFile:9.4.20.v20190813]
	at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:293) [bundleFile:?]
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) [bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:482) [bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1549) [bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) [bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1204) [bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) [bundleFile:9.4.20.v20190813]
	at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:80) [bundleFile:?]
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) [bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.server.Server.handle(Server.java:494) [bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:374) [bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:268) [bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) [bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103) [bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117) [bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336) [bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313) [bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171) [bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129) [bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:367) [bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:782) [bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:918) [bundleFile:9.4.20.v20190813]
	at java.lang.Thread.run(Thread.java:748) [?:1.8.0_265]

I would like to manually configure the device in the Things file. If you have a moment, could you provide an example so I can input all of the variable? This might also address the above error.

Thank you again!!

Hey there… Very weird on the error because it sounds like there was a problem writing to the internal configuration database for the JVCProjector thing… Not sure if this is a framework issue or binding. I am not having the same issue via habadmin or paperui.

I did not add a discovery service to this binding yet. So the property for putting a subnet in place is not required right now and really doesn’t do anything…

You can also configure a things file like this:
jvcprojector:jvc-projector-generic:ac1d3b2e “JVC Projector” [IPAddress=“192.168.X.Y”, Refresh=60]

Note: The above thing is formatted "BindingID:TypeID:ThingID where ThingID is random. i.e. ac1d32b2e is what mine showed up but from your logs, you had 174bf6c5ce8. You may want to use “openhab-cli console” and do a “thing list”. Locate jvcprojector and get your “BindingID:TypeID:ThingID” for the things file.

I would like to make sure there isn’t a binding issue with setting the properties… LMK if the things file works for you and I’d appreciate if you could try again on PaperUI or Habadmin to add the JVCProjector

The way that I’ve configured is through PaperUI’s “Inbox” -> click ‘+’ -> select “JVCProjector”->select “Add Manual”->Select “JVCProjector”->Fill out only “IP Address” and “Refresh”. I put Refresh at 60.

-Brian

Success!

I used the manual thing configuration, which is my preferred method in my setup.

Thing jvcprojector:jvc-projector-generic:jvcfamily [ IPAddress=“192.168.1.50”, Refresh=60 ]

I suppose the subnet info is not needed?

Here is the log:

2020-09-26 04:25:11.138 [INFO ] [ojector.internal.JVCProjectorHandler] - refreshChannels process a timer for Updating thing Channels for:jvcprojector:jvc-projector-generic:jvcfamily
2020-09-26 04:25:11.141 [INFO ] [ojector.internal.JVCProjectorHandler] - getProjectorStatus reporting the Projector THING is ONLINE
2020-09-26 04:25:12.150 [INFO ] [ojector.internal.JVCProjectorHandler] - CheckPowerStatus returning that the Projector power is currently OFF
2020-09-26 04:25:15.262 [INFO ] [ojector.internal.JVCProjectorHandler] - jvcprojector:jvc-projector-generic:jvcfamily reporting a jvc-projector-nx7 model inventory
2020-09-26 04:25:16.265 [INFO ] [ojector.internal.JVCProjectorHandler] - CheckPowerStatus returning that the Projector power is currently OFF
2020-09-26 04:26:38.762 [INFO ] [ojector.internal.JVCProjectorHandler] - jvcprojector:jvc-projector-generic:jvcfamily turned the Power ON..
2020-09-26 04:27:27.852 [INFO ] [ojector.internal.JVCProjectorHandler] - jvcprojector:jvc-projector-generic:jvcfamily reporting a Firmware Version vr1.211
2020-09-26 04:27:29.011 [INFO ] [ojector.internal.JVCProjectorHandler] - jvcprojector:jvc-projector-generic:jvcfamily reporting Lamp Hours at 2372h
2020-09-26 04:34:32.161 [INFO ] [ojector.internal.JVCProjectorHandler] - jvcprojector:jvc-projector-generic:jvcfamily successfully turned the Power OFF..

I get the same error as my last post with HABmin. I tried again through paperUI and it worked this time when I added it manually:

2020-09-26 04:41:41.207 [INFO ] [ojector.internal.JVCProjectorHandler] - refreshChannels process a timer for Updating thing Channels for:jvcprojector:jvc-projector-generic:bd75149e
2020-09-26 04:41:41.209 [INFO ] [ojector.internal.JVCProjectorHandler] - getProjectorStatus reporting the Projector THING is ONLINE
2020-09-26 04:41:42.311 [INFO ] [ojector.internal.JVCProjectorHandler] - jvcprojector:jvc-projector-generic:bd75149e reporting a jvc-projector-nx7 model inventory
2020-09-26 04:41:43.216 [INFO ] [ojector.internal.JVCProjectorHandler] - getProjectorStatus reporting the Projector THING is ONLINE
2020-09-26 04:41:44.218 [INFO ] [ojector.internal.JVCProjectorHandler] - CheckPowerStatus returning that the Projector power is currently OFF
2020-09-26 04:41:45.321 [INFO ] [ojector.internal.JVCProjectorHandler] - CheckPowerStatus returning that the Projector power is currently OFF

Awesome! It looks like functionality is working for you. No, the IP Subnet field is not required and is unused right now. I was going to add a discovery feature to the binding and put that field as a place holder… Still a todo… I did add a new version on the google drive that removes the IP Subnet field for now if that helps.

https://drive.google.com/file/d/1FylaNiwrH4WNLVGdalMHbyMiK0jlQ9W2/view?usp=sharing

How was input and picture mode switching? I see the inventory, power on/off, lamp hour retrieval and firmware version are pulling information good. I do have a question on the firmware version, can you confirm what was reported in the log is what you have currently? My concern is whether the version number is correct… I see v’r’1.211 and it looks like I may have included an additional character byte. i.e. The ‘r’. It looks like we have the same model and I’ve updated to 3.10 which includes HDR Adapt capabilities (My version shows as v03.10. I thought the leading zero was normal and a formatting issues in the firmware return.) If the ‘r’ is not expected or seen from your “menu” on the JVC projector, let me know and I’ll shoot over a debug logged version showing the byte code that is returned for troubleshooting (You can pull the JVC firmware from the JVC remote -> Menu->Info section…)

It is also great to hear that the PaperUI and things setting file are working. If you are able to post the steps for habadmin that you were going through and experienced the error, I’ll see if I can reproduce on my side and debug the error.

Technically this binding should work with any JVC DILA style projector per JVCs API guide. Are there any other features you think should be added to the binding? If not, see how it operates and let me know the stability for you. I can release the binding code and version to the Openhab community then. Thanks for helping test the binding and provide feedback.

-Brian

I’ve added a couple more items and debugged a few issues…

Issues:
Null exception error in dispose when null variable was being accessed… resolved
Included InputHDMI status refreshing to show what input is currently in used and set the selection.

New Adds:
Added to more string channels for Model and Firmware (Instead of listing them under the thing properties, I’m setting them both here…)

New sitemap file updates:
Text item=JVCProjector_Model label=“Model” visibility=[JVCProjector_Power==ON] icon=“projector”
Text item=JVCProjector_Firmware label=“Firmware” visibility=[JVCProjector_Power==ON] icon=“projector”

Model string allows you to filter picturemode options that aren’t valid for other projectors (i.e. NX9 only does THX picture mode.)

Example:Sitemap update
Selection item=JVCProjector_PictureMode label=“PictureMode” mappings=[Film=“Film”,Cinema=“Cinema”,Natural=“Natural”,HDR10Adapt=“HDR10Adapt”,HDR10=“HDR10”,User1=“User1”,User2=“User2”,User3=“User3”,User4=“User4”,User5=“User5”,User6=“User6”,HLG=“HLG”] visibility=[JVCProjector_Power==ON, JVCProjector_Model==“JVC DLA-NX7”] icon=“projector”

https://drive.google.com/file/d/1FylaNiwrH4WNLVGdalMHbyMiK0jlQ9W2/view?usp=sharing

-Brian

1 Like

That’s awesome! Last time I checked, there was no binding available. I have an X-30 and at least rudimentary commands (power off/on) seem to work. Firmware readout and similar is a having some issues. Java coding is not my core capability, but quite good in debugging and adding stuff. Would be happy to contribute, if there is some room to support you. Would be great, if we can make this officially available for 3.0.

Cheers,
Gernot

hello Brian, first of all many thanks, this is something I’ve been trying to solve for months.

I successfully installed the add-on on a test copy of Openhab on my Mac, but then when I tried the same thing on a fresh install of Openhabian on a Raspberry Pi 3B, it came back with the following error:

2021-02-26 15:11:51.081 [WARN ] [org.apache.felix.fileinstall ] - Error while starting bundle: file:/usr/share/openhab/addons/org.openhab.binding.jvcprojector-2.5.5-SNAPSHOT.jar

org.osgi.framework.BundleException: Could not resolve module: org.openhab.binding.jvcprojector [272]
Unresolved requirement: Import-Package: org.eclipse.smarthome.config.core

is this some sort of a compatibility issue?

This binding is compiled for OH 2.5.x. It won’t work on OH 3.0.0 and up unless the author updates it for OH 3.

1 Like

Thank you! I wrongly assumed my version was 2.5 as I downloaded it from the old versions link. Managed to roll back and the binding now works! Brilliant