Advanced Control Components

Q-SYS Control 101 Training : Control Components
At 9:32, Nate “steals” a keypad from a Softphone to make his password page. In the latest versions of Q-SYS Designer Software, a Softphone keypad will only function properly if a Softphone is actually configured, which would invalidate this part of the example (even though it would still work in Emulation Mode). In the “Downloads and Links” section, you can download some Custom Components that have found alternative solutions to this keypad puzzle.

3 ) Simple Communication

12m 49s

4 ) Feature License Activation

4m 12s

5 ) Block Controller

19m 7s

7 ) Flow Control

34m 20s

8 ) Control 101 Conclusion

1m 42s

Lesson Description

Advanced Control Components 12m 27s

Dive deep into some advanced applications of Control Components, such as Custom Fader Behavior, Non-Binary Buttons, Status Combiner/E-mailer, and Password Protected Pages.

Video Transcript

Advanced Control Components 12m 27s
0:08
Once you become familiar with Control Components, you can start to combine them
0:12
together to create more interesting results. Like a game of Mouse Trap or a Rube
0:16
Goldberg machine, you can wire these components together to trigger an event only
0:21
under very specific conditions. You can get quite creative with your use of Control
0:26
Components, and accomplish a wide variety of tasks. Eventually you will hit a wall –
0:32
you can accomplish a lot with these simple tools, but there will come a point when
0:36
you need to move on to a more complicated coding language like our Script or Block
0:41
Controller. However, in this video we’ll walk through a few examples of things that
0:46
you can accomplish with the Control Components, as well as look at a few of the remaining
0:50
components that we haven’t seen yet. If you want to look at just one of these in particular,
0:56
feel free to jump to the timestamp where each section begins.
1:02
Here’s a common scenario – you need to put the gain fader for a microphone onto a UCI,
1:07
but that UCI is going to be operated by a human, and – I don’t know if you’ve ever
1:11
met a human before – but they’re mostly terrible. If you give them a fader, they
1:15
are guaranteed to slam that fader all the way to the top, which is never a good idea.
1:19
Instead, you can add a Custom Control with a Level Fader, and customize the range
1:25
of that fader. I’ll restrict this one between -20dB and 5dB, since that’s all the flexibility
1:32
I think they’ll really need. I’ll wire this control to my original Gain knob, and add it onto the UCI.
1:39
The user will never know the difference. They think they’re maxing out
1:42
the system, even though there’s still plenty of headroom.
1:45
Let’s also grab the channel’s mute button so the user can turn the microphone off.
1:50
Since I’ve capped the fader’s lower limit to -20dB this bottom range is still audible, so
1:56
it would be nice if this Mute would automatically engage when the user turns the
2:00
fader all the way down. For that, we can add a simple Control Function. Regardless
2:05
of what range I’ve customized for this fader, I know that when it’s all the way down,
2:10
its .Position parameter is 0. So I’m going to add a comparative statement with another
2:16
control that will already have a Position of 0. I’ll add a toggle button which by default is off,
2:22
and select a Control Function of “Position Equal.” When the fader is at the bottom its Position is 0,
2:29
which equals the toggle button that also has a Position of 0, so that satisfies the conditions
2:35
of the “Position Equal” Control Function, which outputs a 1 that engages my Mute button.
2:41
Now when I pull the fader down, it automatically engages the Mute. If I move the fader again,
2:47
its position no longer matches the toggle button, sending a 0 that will disengage the Mute.
2:53
I could still manually engage the Mute, but when I choose to move the fader it will automatically
2:58
open the mic again. We’ve made a simple solution to a simple problem.
3:05
Buttons are great for binary behavior – when you need a 1 or a 0, they’re perfect.
3:10
But what if you want a button to output two other values? For instance, let’s say we
3:15
want a simple button that will toggle the gain of an Audio Player between a loud setting
3:20
and a quiet setting. We don’t want to mute it and unmute it, but instead toggle
3:23
the Gain’s value between 5dB and -10dB. How can we do that? There are actually a
3:30
lot of different ways to accomplish this, it all sort of depends on how your brain works.
3:34
Let’s look at a few methods.
3:36
The easiest way I can think of is to use Snapshots – you can use a 1 and a 0 to activate
3:41
a Snapshot Load button, which can recall a saved value for your Gain control.
3:46
Let’s create a new Snapshot Bank, and associate our Gain knob with that bank. Then
3:51
we’ll set the Gain to 5dB and save Snapshot 1, set it to -10 and save snapshot 2. Then
3:59
I’m going to grab a Flip-Flop – you may remember that its “Out” and “Not Out” LEDs
4:04
alternate based on the Flip-Flop’s state. I’ll expose the Control pins to load Snapshots
4:10
1 and 2 and wire them to the Flip-Flop. Now I could put this State button on a UCI,
4:18
giving the user a single button which has the effect of loading two different values to the Gain knob.
4:25
Let’s look at another method – we could use a Control
4:28
Router that directly sends a new Value to the Gain control. Here we have two custom
4:33
knobs for our inputs, one set to 5 and the other set to -10. The Control Router
4:38
determines which one passes forward. We can expose the controls for Selecting Input 1 or Input 2,
4:45
and then use our Flip-Flop to toggle between these options.
4:49
Alternatively if you didn’t want to use the Flip-Flop, you could use another button to
4:53
activate the first Router or Snapshot option, and then use a Control Function to Invert
4:59
the Position of that button, so that when the button is off it will send an on signal to
5:04
the second Router or Snapshot option. These all have the same effect, it’s just an example
5:09
of the flexibility of these control components.
5:15
Let’s take a look at this control component – the Status Combiner. This is a rare component
5:20
that only accepts Status controls. You can find Status controls in almost every inventory item
5:26
or network-dependent component. You probably recognize these Status controls from the
5:30
default “Inventory Status” UCI that lists the health of every device in your design. While
5:36
this UCI is helpful, it might take a while to look through every status on a design with many
5:42
inventory items. You can combine them all into a single location by wiring their Status
5:48
control to the Status Combiner.
5:51
At the top, the Status Combiner lists the worst status of all its inputs. If everything in
5:56
your design is running properly, then it will say OK. But if I were to disconnect one of
6:02
my peripherals, for instance, that device would disappear from the network, and register
6:06
as a Fault. Since that’s the worst Status of all my devices, the Status Combiner will report
6:12
the Fault. You can customize a label for each input so it will tell you exactly which device
6:17
is experiencing an issue, and if you want to ignore a particular device then you could suppress
6:23
its status, which will temporarily remove the problematic item from the Status Combiner’s
6:28
list of things to worry about.
6:29
We have another video available where a much younger version of me shows you
6:33
how to use this Status Combiner to send an e-mail to yourself or a technician. It look
6:38
something like this – when the Fault LED engages, we can activate the Send button
6:43
on an E-mailer component. The message of this E-mail can be populated with the
6:47
text string we get from the “Combined Status” control, which describes the error.
6:53
However, there is a problem with this setup. If the venue resets the system, or has a
6:58
blackout, then there will be a brief period where the Core is active but its peripherals
7:03
are still initializing. You don’t want to get an e-mail telling you the system is broken
7:06
just because they’ve had a power cycle, so how can you avoid that?
7:11
Let’s use some of our control components to outthink this. We know that if the system
7:16
is simply rebooting, then it will be OK again in about thirty seconds. Let’s use this to
7:22
validate whether or not we actually hit the Send button. I’ll introduce a Control Delay
7:29
between the Fault LED and the Send control, and we’ll set this to 30 seconds. After this
7:35
30 seconds expires, we want to compare it to the current state of the LED to see if the Fault
7:40
is still happening. I’ll grab a Control Function and set this to “Logic AND.” This requires
7:47
both of its inputs to be true. So if the Fault has waited 30 seconds then the first pin will be true,
7:54
and if the Fault is still occurring then the second pin will be true, and the function will
7:58
activate the E-mailer’s send button. If 30 seconds have passed and the system has restored
8:03
itself, then the original Fault LED would be false, which does not satisfy the conditions
8:08
of the function, and the e-mail is not sent. Again, a simple solution for a simple problem.
8:18
Finally, one of the questions I get asked a lot is whether we can add a password on a
8:23
particular page on a UCI. While you can restrict an entire UCI to a User, requiring
8:28
them to log in with a PIN number, there isn’t a native way to require a code to access
8:33
a specific page. However, with all the tools you’ve seen so far in the Control Components,
8:38
you can devise your own method. There are a few ways to do this, and this is the sort of
8:42
thing that would actually be quite easy if you knew some scripting, but if you don’t then
8:46
we just have to think it out with control components.
8:50
One of the ways I like to think things through with these components is to write out
8:53
the desired function, and then replace each bit with a tool at my disposal. Here’s the
8:59
desire: If the User inputs the correct password and presses enter, the UCI page
9:05
should change.” Well I can already see that I’m going to need a “Logic AND” in order
9:10
to validate whether “The password is correct” and “they press enter.” So I have a
9:15
Logic AND and a Momentary Button for “Enter”. But how can I get a password from
9:21
the user, and test if it’s correct? Well a number of options come to mind, but let me
9:26
show you my favorite. To get the password from the user, I need a keypad. And don’t
9:30
tell anyone, but I’m going to steal one from a Softphone component. If this design
9:34
isn’t already using its maximum number of Softphones, then there’s no harm in creating
9:38
one just to use its keypad. I’ll add all of its keypad buttons to my UCI page. Here’s the
9:44
trick I like to use to validate the password – I’ll create a new Snapshot Bank, and associate
9:50
the Dial String (that’s the phone number) with that Snapshot. Then I’ll input the correct
9:56
password and save it as Snapshot 1. There’s a control pin available on every Snapshot
10:02
that you may not have known about – I’ll expose this one called “Match 1.” The “Match” control
10:08
is an LED that lights up when the design is in a state that matches the configuration saved in
10:14
the Snapshot. So if someone were to type in the same number that I had saved in Snapshot 1,
10:21
the Snapshot Match actually lights up, indicating a match. I’ll use that for the first half of
10:27
my Logic AND. Now when someone enters the right number AND presses the
10:33
enter button, we’ve got a 1!
10:35
Again, there are a number of ways we could use this 1 to change the UCI page, but
10:40
I’m going to activate another Snapshot since I think that’s easiest. I’ll create another
10:44
Snapshot Bank and associate it with the “Current Page” control of the touch screen I
10:49
want to affect. I’ll select the Secret Page and then save the snapshot, and wire my
10:56
Logic AND to activate this snapshot.
10:59
Tada! I’ve got a keypad, I enter the code, and the page changes. I could give the user
11:05
a simple Navigation button to return to the main screen. There are probably some
11:09
additional tweaks I’d make to this design. For instance, if the user enters an incorrect
11:14
code – or if the Match LED is NOT active when they press the Enter button, then I
11:18
want that to activate the PinPad’s “Clear” button to erase their entry. I bet I could
11:24
also devise a counter that goes up each time they enter an unsuccessful entry. If they
11:29
try three times, I could also trigger an alarm warning, send a GPIO signal to the lights
11:39
in the room, aim the Q-SYS Cameras to focus on their position and command the
11:46
networked video switchers to deliver the camera’s feed to every TV in the venue,
11:51
while calling the police and sending myself an e-mail … etc.
11:55
The point is, you can have a lot of fun with Control Functions. I really do recommend
12:00
that you spend some time playing with them, and hopefully these videos have inspired
12:03
some ideas of your own. We have an exercise in the Control Training Worksheet
12:07
for you to complete, but feel free to challenge yourself by thinking of a problem you
12:12
want to fix and devising a solution. If you find something that you can’t do, this may
12:18
be a time to look at scripting or the Block controller. Have fun playing, and we’ll see you next time.