[ANSWERED] Controlling Projectors with TCP
-
I'm in a difficult situation with a Barco 4K40 projector that I am hoping Isadora can get me out of. Due to a failure in the secondary projector, the 4K40 now needs to hit two screens at different depths at different moments in the show (sometimes focused near the upstage, sometimes near a screen downstage).
This projector has motor control for its lens as well as a JSON RPC/Pulse Based remote control protocol that can run over TCP. Here's the manual for this API. My understanding is that if I want to adjust the focus of the lens, I need to send something like:{
"jsonrpc": "2.0",
"method": "property.set",
"params": {
"property": "optics.focus.target",
"value": 1
}
}And I assume this goes in the TCP Send Data actor in Isadora, converted from string to hex. I also believe that if I put P1 in place of the hex for the value currently supplied as 1, I can adjust that focus target position on the actor itself. However, I am largely unfamiliar with the behavior of JSON over the TCP actors. Do I need to serialize the string (removing newlines, and tabs?) and then convert to hex? Or do I leave those as-is? Is there a better way to communicate with the projector?
Thanks for any assistance that can be provided. Show is tomorrow and they just dumped this on me an hr ago :) -
Unfortunelty I don't have any experience with this format of commands either, so without the hardware to do a little trial/error testing I am no help.
I do know that bitfocus companion has a number of addons for Barco support. Perhaps you could use it as middle ware, since you can control it from Isadora rather easily.
-
The projector does except ArtNet (DMX over Ethernet).
General DMX / ArtNet functionality discription in the manual
DMX controlling tables
Maybe this would be the more common way to do it.
There are ArtNet Plugin Actors for Isadora, but I did not use them yet, as I found them to be a bit unintuitive.
Instead I use QLC+, a free ArtNet/DMX Software, which in turn can be controlled by OSC or Midi.Instead of moving the lens to a specific position, you could save profiles and recall them. there are specific DMX values to recall a specific profile. (Controlling the motors directly is possible as well, if you switch to the advanced DMX mode).
If you need help with this, send me a message.
Best,
Dill -
@dillthekraut and @DusX thank you both for your replies. As it turns out, yes, serializing the JSON and using the TCP actor can work with this unit, though for anyone looking at this thread in the future the DMX route would be much easier I assume. We didn't have that capability in our case, but it would be much lower friction!
-
Just to make this clear for everyone interested in this. The Projector offers DMX connection via XLR connectors and cables. This is helpfull to integrate all the functionality to an already existing light controlling desk.
But beside that, the projector offers ArtNet over the usual ethernet connection, which should exist in most cases anyway for easier configuration.
This is as well the case for others brands 'bigger' projectors, like epson or panasonic. But most of them do not offer the classic DMX via XLR.
Best
Dill
-
@liminal_andy said:
Do I need to serialize the string (removing newlines, and tabs?)
Hi Andy, this is a Question about syntax for you since you have done it before.
I'm trying this out on the same series projector.(* copy paste straight from the API by Barco that you provided a link to in your initial post, thank you.)
------page 4 example-------
{
"jsonrpc": "2.0",
"method": "system.poweron"
}
------------------------------
By putting this all on one line works with other software I'm using for testing, however The send TCP actor is complaining with a dialogue "Invalid Hex Character".
When you say serialize, do you mean simply deleting the curly brackets and putting all text in one line? i.e.
"jsonrpc": "2.0","method": "system.poweron"
According to the Isadora manual p.261 Data output formatting: to make the TCP actor function correctly, I add an additional pair of double quotes to contain the JSON message and end with a carriage return and new line feed HEX outside of these quotes. i.e.
""jsonrpc": "2.0","method": "system.poweron"" 0D 0A
What have I not understood here?
-
The solution here:
BING copilot translated the JSON to HEX and pasted it in the TCP send actor. Worked straight away!
{"jsonrpc": "2.0","method": "system.poweron"}
7b 22 6a 73 6f 6e 72 70 63 22 3a 20 22 32 2e 30 22 2c 22 6d 65 74 68 6f 64 22 3a 20 22 73 79 73 74 65 6d 2e 70 6f 77 65 72 6f 6e 22 20 7d{"jsonrpc": "2.0","method": "system.poweroff" }
7b 22 6a 73 6f 6e 72 70 63 22 3a 20 22 32 2e 30 22 2c 22 6d 65 74 68 6f 64 22 3a 20 22 73 79 73 74 65 6d 2e 70 6f 77 65 72 6f 66 66 22 20 7d