Home AMX User Forum AMX General Discussion

Best way to handle Master Panel in large installation

OK, So this is almost purely a theoretical exercise. I've been programming for right at a year, and I've only been certified since April, so I dont have a ton of experience here. I'm the only programmer where I work, so I dont really have anyone to bounce questions off of or learn from, so I'm entirely self taught. I've caught myself doing things the long way more than once, and I thought I check to see if perhaps I've done that again.

I have 29 conference rooms with AMX Systems in them, spread between two buildings. System 1 is my master system. Systems 2-13 are in the main building I'm in, and systems 51-67 are in the second building. I'm continually adding new systems. Since the second building is several blocks away, I decided to attempt to have everything in the building controllable from a main panel. I don't have the budget for RMS anyway, so I figured I'd program my own stripped down version of it that only tracks what I care about anyway.

I've created a Master Panel that has pages on it for all of the other systems. All of the buttons and variable text addresses for System 2 are on port two of this master panel. All of the buttons and variable text address for System 58 are on port 58 of this master panel. The local systems have dvMasterTP defined as 10001:system_number:1.

This has been great, because half of my rooms have the exact same code loaded in them, and the others all follow a basic template. button 1 is always projector/plasma on, button 2 is always projector/plasma off, etc etc. Doesn't matter what room I'm using, the buttons are all similar and follow a pattern. I can load one token file to 10 different rooms and they figure out what buttons are theirs and only follow those. Its great. I also have a virtual device defined on every system that is also defined on the Master system that uses this same concept to track things like how many times a system is used in a month, how many service calls I get, and it emails me a daily update telling me all my systems and polycoms are online, as well as tracking bulb hours in the projectors etc etc etc etc.

Here's my problem. I can only define 100 ports on a NXT-CV7. This system wouldn't work if I went beyond 100 ports. I guess then I could start layering them and use the 4000 buttons I'm allowed to use per port, but this system is much more easily expandable than that. I don't expect to go over 100 ports in the next 10 years, and I'm sure there will be a new set of panels out with different requirements by then anyway, but I just thought I'd check.

So my question is, how do you handle extremely large installations that all want buttons on a single Main panel? Am I going about this an incredibly difficult way?

Otherwise, I'd be interested in hearing anything you have to share about designing these huge installations. Like I said, I'm new to programming and I keep finding myself going the long way around, but I also keep finding out new things I can do I'd never thought of before.

Anything you can share would be helpful. Thanks guys!

J

Comments

  • ericmedleyericmedley Posts: 4,177
    One way that might work if indeed each room's panel was identicle (or at least fairly close) would be to have just the one interface using only one port and then a 'set system' type button.

    So, for example, let's say that you decide that buttons 101-110 on the panel were source selects for the projector in the rooms. 101=computer, 102=Document Cam, etc... If there's no Doc cam in the room, you simply skip using that button in that room.

    Now, have a conditional on the main panel that flags which room you're looking at. So, a series of buttons that indicate which Room you're looking at.

    button 1=bld 1 - room 107, button 2= bld. 1 - room 108, etc...

    I'll do old fashioned button stacks to make it simple. I'd create dev arrays myself...
    BUTTON_EVENT[TP_MAIN,1] // however many rooms
    BUTTON_EVENT[TP_MAIN,2]
    BUTTON_EVENT[TP_MAIN,3]
    BUTTON_EVENT[TP_MAIN,(etc)]
    BUTTON_EVENT[TP_MAIN,100]
    {
    push:
      {
      tp_button_pushed=button.input.channel
      current_room_control=tp_button_pushed
      on[TP_MAIN,tp_button_pushed]
      }
    }
    
    

    Now, you know which room you're trying to control.

    Next, put in conditionals for the buttons as they pertain to the room control. For example, in the Projector Source example above...
    (Again, this is overly simplified to make the example short. You'd want to gussy it up quite a bit and deal with feedback updates and whatnot. I'd do it in a completely different way myself. but you'll get the general drift of the example.)
    BUTTON_EVENT[TP_MAIN,101] // PROJECTOR SOURCE SELECT
    BUTTON_EVENT[TP_MAIN,102]
    BUTTON_EVENT[TP_MAIN,103]
    {
    PUSH:
      {
      tp_button_pushed=button.input.channel
      SWITCH(current_room_control) // which room is being controlled by the master
        {
          CASE 1: // bld. 1 - room 107
               {
                // code to change the video switcher in  room 107
               }
          CASE 2: // bld. 1 - room 108
               {
                // code to change the video switcher in  room 108
               }
          CASE 3: // bld. 1 - room etc...
               {
                // code to change the video switcher in  room etc...
               }
         } // end switch
      } // end push:
    } // end button_event
    

    Hope that helps.
  • JeffJeff Posts: 374
    I considered doing things like that, but the real reason I left it alone was the need to define all the devices in each room on my Main Panel. Is there a way to easily control multiple devices in remote rooms without defining them all on the Master System? My current method has all the code for controlling stuff in the remote rooms on their own masters, instead of on the master system.

    J
  • ericmedleyericmedley Posts: 4,177
    Jeff wrote:
    I considered doing things like that, but the real reason I left it alone was the need to define all the devices in each room on my Main Panel. Is there a way to easily control multiple devices in remote rooms without defining them all on the Master System? My current method has all the code for controlling stuff in the remote rooms on their own masters, instead of on the master system.

    J

    Well, you don't need to define each device in the master per se.

    It's all in the way you organize the programs in the first place. Take the video switcher example. If it were me, I'd always put the video switcher on the same port. Or, I'd at least create a consistent virtual device that is the same on every system.

    So,
    (*  Code in each of the rooms masters *)
    dv_Switcher  =  5001:01:0
    
    
    vdv_Switcher  = 33001:01:0
    

    Then in the Master you could just do the math and send it to the correct system.
    (* code in the main master *)
    button_event[TP_MAIN, (all the source select buttons)]
    {
     PUSH:
        {
        TP_BUTTON_PUSHED=BUTTON.INPUT.CHANNEL
        SEND_STRING 5001:01:CURRENT_SYSTEM_NUMBER,' Change source command here'
        } // end push:
    } // end button_event
    

    If you're dealing with different switchers and whatnot, send the command to the virtual device and let it interpret what command you need to send locally to get the gig done.
  • Spire_JeffSpire_Jeff Posts: 1,917
    This is just a thought, as I don't run across this type of situation on the jobs I deal with, but you might want to create virtual touch panel devices on your master and then use COMBINE_DEVICES() and UNCOMBINE_DEVICES(). Then when a room is selected from your master touch panel, you simply flip to the appropriate page layout and Combine the master touch panel with the virtual touch panel for the room. This may actually be a good thing since all of the rooms will only be continuously talking with the virtual TP device on the master, you lower the risk of network congestion due to the master touch panel popping on and off line. It would also allow you to conserve space in the master touch panels memory because you would not need to duplicate rooms that are identical.

    Just a thought,
    Jeff
  • I had a project with 11 conference rooms, all with a similar setup. To control each panel from any panel I used the computer control functionality to control remote panels. The '^BVN' command is used to set the IP of the selected panel to control. Not sure if this would be a viable solution for you but worth a mention.

    SEND_COMMAND tpDEV_ARY[tpCUR_DEV], "'^BVN-1090,tpIP_ADDRESS_FOR_VNC_CONNECTION'"
  • JeffJeff Posts: 374
    Thats really cool, I'd never even begun to think about that. I just added buttons to my control pages for each room that have the ^BVN command in the Command Output section of the button, with the IP address on it, and a link to a page with fullscreen computer control. I may use this more than any of my Master Panel only pages.

    J
  • It is really nice, because it saves you programming time, and tp design time. Plus it gives you real time feedback in a help desk scenario. The project that I implemented it on had several conference rooms and a tech room. The tech room could use the ^BVN to access a panel on the network when a user called with a question. We also used it to start up and shutdown the rooms when users would forget or we were preparing for an event.
Sign In or Register to comment.