When I wrote my 8-part Apex Programming Tutorial series, all of the coding examples were applied to outputs where the Control Type was set to Advanced. Control Types are pre-set shortcuts to program an output for a specific device, allowing less experienced Apex users with a simple entry form to fill in the desired settings, and the Apex does the programming for you behind the scenes. The EB832 EnergyBar comes pre-programmed with each output set for specific Control Types, so you can just plug your lights into outputs 1 & 2, return pump in output 3, heater in output 4, etc. to get your system up and running quickly. However, these pre-programmed outputs can be changed to any Control Type you choose.To set a Control Type, first click the gear icon on the Fusion dashboard for the output you want to configure:
The Control Type can then be selected from the dropdown list on the Output Configuration screen:
There are 12 Control Types to choose from:
When you select a Control Type, the screen will change to show you the settings specific to that device. After you fill in the settings and save it, you can change the Control Type to "Advanced" and the screen will change to show you the underlying program code. You can toggle back and forth between the pre-defined Control Type and Advanced. This is actually a good way to learn Apex programming because you can see how the code is changed when you alter the fill-in fields with different parameters, then toggle back to the Advanced view. However, if you manually modify the Advanced code and then toggle back to the specific Control Type, your manual changes will be lost. If you want to alter the automatically-generated program code, you must leave the Control Type set to Advanced.Below are screenshots of each Control Type, and then the automatically-generated code when switching it to Advanced. In screens where Fallback is mentioned, Fallback is the setting applied if the output's module is disconnected from the Apex, or if the Apex is not communicating with the module (such as when rebooting). Also, the Log checkbox is useful if you want to review a historic record of each time an output is turned on or off. This can be viewed in the Output Log screen.Control Type: AlwaysAlways should be used any time you want the output to remain On or Off 24/7. This is good for devices that you never want to turn off, or if you have an unused output and always want it to be powered off so if you plug something in it doesn't accidentally power on before you're ready.
Here is the generated code for Always:
Control Type: ATOATO should be used if you're configuring a non-Neptune ATO system. (Do NOT use this control type if you have the Neptune ATK. Please follow the instructions in my ATK Tutorial instead.)With this Control Type you specify the low water and high water switch ports, and how long to wait before turning on the pump. These are typically float switches attached to a Breakout Box, but could also be optical sensors attached to the FMM module.
Here is the generated code for ATO:
Control Type: ChillerChiller allows you to specify the high temperature to turn on your chiller, and the low temperature to turn it off. You also need to specify which temperature probe to use if you have more than one. This Control Type could also be used for a cooling fan rather than a refrigerated chiller.
Here is the generated code for Chiller:
Control Type: FeederFeeder is used to control the Neptune AFS automatic feeder. Of all the Control Types, this one is probably the most convenient because programming the AFS can be complicated. While this Control Type is convenient, it does not allow you to coordinate other devices such as pumps, skimmers, or powerheads to shut down during automated feedings. For this I wrote an entire tutorial topic on Apex Feed Cycles which covers how to automate all your devices during feeding.For the Feeder, you specify the time of day for the first feeding, how many times the AFS drum should rotate per feeding, how many times to feed per day, and if more than one feeding per day how long to wait between feedings. The Feed Cycle option is to choose which Feed button can be used to manually trigger the feeder outside of the scheduled times.
Here is the generated code for Feeder. Please see my tutorial on Apex Timers for details on the OSC and If Time commands.
Control Type: HeaterHeater allows you to specify the low temperature to turn on your heater, and the high temperature to turn it off. You also need to specify which temperature probe to use if you have more than one.
Here is the generated code for Heater:
Control Type: LightLight allows you to schedule the on and off times for a light, and a temperature to turn it off if the water gets too warm. You also need to specify which temperature probe to use if you have more than one. Hysteresis is the time (in MM:SS) to wait before turning the lights back on once the temperature drops below the limit.
Here is the generated code for Light:
Control Type: pH ControlpH Control allows you to turn on or turn off a device based on the pH probe reading. This is useful for controlling CO2 feed in calcium reactors, or to turn off dosing of certain additives that impact the pH of your water. You need to select your pH probe if you have more than one, the high pH reading, the low pH reading, and whether to turn on the device when pH is low or high.
Here is the generated code for pH Control:
Control Type: ORP ControlORP Control allows you to turn on or turn off a device based on the ORP probe reading. This is typically used to control an ozone generator. You need to select your ORP probe if you have more than one, the high ORP reading, the low ORP reading, and whether to turn on the device when ORP is low or high.
Here is the generated code for ORP Control:
Control Type: PowerheadPowerhead allows you to configure the output to turn on and off on a repeating timed cycle. This is typically only used for powerheads which do not have any variable speed control. The times are specified in MM:SS format. The Initial Off Time is typically used to offset the cycle from another powerhead to create an oscillating flow pattern. If you only have one powerhead, the Initial Off Time is of little value, but keep in mind the total amount of time the output is off will be the combination of the Initial Off Time and the Off Time. For example, if you want the powerhead on for 1 minute and off for 1 minute, but you are using the Initial Off Time, then split the 1 minute between the Initial Off Time field and the Off Time field, such as 0:30 and 0:30.The Feed Timer option will turn off the output when the selected Feed button is manually pressed, and the Feed Timer Delay is the number of additional minutes to remain off after the Feed timer has expired. See my tutorial on Apex Feed Cycles for more details.
Here is the generated code for Powerhead. Please see my tutorial on Apex Timers for details on the OSC command.
Control Type: Return PumpReturn Pump is pretty self explanatory. The Feed Timer option will turn off the output when the selected Feed button is manually pressed, and the Feed Timer Delay is the number of additional minutes to remain off after the Feed timer has expired. See my tutorial on Apex Feed Cycles for more details.
Here is the generated code for Return Pump:
Control Type: SkimmerSkimmer is also pretty self explanatory. The Feed Timer option will turn off the output when the selected Feed button is manually pressed, and the Feed Timer Delay is the number of additional minutes to remain off after the Feed timer has expired. See my tutorial on Apex Feed Cycles for more details.The Defer Time is the number of minutes & seconds to wait before turning on the skimmer, typically to allow the water level in the sump to normalize if the return pump was also shut down. This is to prevent skimmer overflows.
Here is the generated code for Skimmer:
I hope this article gives you better understanding of how Control Types can be used, and also provides a starting point to get into more advanced Apex programming. Be sure to read the tutorial series linked a the top of this article to expand your Apex programming skills.Happy reefing!