Advanced Control Components

Q-SYS Control 101 Training : Control Components

1 ) Introduction

8m 37s

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.