I've done quite a bit now with my Apex. I recently "upgraded" from a reefkeeper. lol
I have multiple float switches, pressure switches, timings, and inputs for failsafes to perform many tasks. Off the top of my head Automatic water changes, feeding timing for my return/skimmer with my AFS feeder, bean animal total failure failsafe, Skimmer overflow failsafes, locker failsafes, Automatic water change failure failsafe, ATS pump control, ATS light timing, reactor pump control, return pump control, ATO timing, ATO failure failsafe, kalk overdose failsafes, ph high low failsafes, salinity high low failsafes, heater failsafes, lunar light timing and intensity, temp control via seasonal chart, display lighting via seasonal chart, ATO Davey jones locker emptying, Skimmer swabbie neck cleaner timing, vinegar carbon dosing timing, carbon dosing failure failsafes, ozone control, ozone failsafes, Alerting emails, power outage notifications, module failure notifications, stuck switch alerting, high low ATO reservoir notifications, high/low salt mix notifications, high/low skimmate locker notifications, skimmer maintenance timing, ATO maintenance timing, video streaming(not public), and I might have missed somethings.
So, yeah, I love my Apex and plan on doing even more with it. If any of that interests you I can go into more depth or share programming which can all be seen at my reeftronics.net page. I suggest setting up an account with reeftronics and it's another way of graphing but even better it will alert you if they can't connect to your Apex for an hour.
https://www.reeftronics.net/ja/jason2459/apex-status
reeftronics.net is also a great place to browse many other people's programming.
There is one thing I left out from above that I feel is the coolest thing I've done and I'll copy paste what I've typed up for a thread on another forum
Timing pumps (Maxspect Gyre), or any controllable pump, with the Lunar Cycle Season Table
Summary: To change the direction of flow with a ramp up/full speed/ramp down cycle approximately every 6 hours in time with the Moon rise/set in the seasonal table.
It was suggested I post this over here in the Neptune Forums. I suppose this can apply to any controllable pump but here's what I've done with my Maxspect Gyre XF150's. For a little background I have two XF150's now and both are setup vertical on the back wall. There's one on the left back corner and the other on the right back corner. The left gyre has BB cages/paddle wheels and the right gyre has AA cages/paddle wheels. I use an alternating gyre where the Left gyre will either push water toward the front and to the right or across the back to the right depending on direction. The Right gyre does the opposite working in coordination with the Left gyre making a nice flow around the tank alternating directions. Detritus doesn't stand a chance to settle anywhere. Setting up the alternating directions also makes it semi self cleaning as it blows off debris that was building up while running in the other direction. My fish love that feature. As the debris could be edible or little critters that are edible are on the debris. When the direction changes they fly off and the fish go nuts chasing after it for a snack. Plus, watching the overall flow in a constant motion is something the gyre excels at. Watching the little turbulent streams caused by the corals, rocks and fish is peaceful and causes chain reactions in the flow that's fun to watch for and you can see the fish interact with that flow in unique and interesting ways.
I have setup with the Gyre pumps an Icecap module for each one. And the special alternating cable for the variable speed ports so two variable speed ports (1 single full rj45 connection) is needed for each pump. On one RJ45 connection is then one variable speed outlet used for speed and the other is used for direction.
I started with a single gyre and with the basic controller I was alternating every 6 hours and not coordinated with anything else. Witht he second gyre in place and the icecap modules I have a LOT more control with the Apex. So, I had fun getting the gyres to alternate with the Moon rise/set in the seasonal table and flipping direction twice per cycle or around every 6 hours.
The below is what I posted on another forum and is a straight copy paste on what I did. I'm not an expert on Apex programming (just got the apex a couple months ago) and I'm sure there may be more efficient ways to do this but this is working. It really is fun watching how the fish interact with the changes in the flow and intensities.
Copy/paste:
I finally got the dual gyres and the apex controller timed with the lunar cycle from the seasonal tables. I have all my display lights, lunar lights, and even heaters/ranco using the Apex Seasonal tables to control when to turn on/off, intensities, and temp. So, why not try to use that seasonal table to control the direction of the gyres like a tide.
Now, tides are rather complex and varies greatly from place to place. They could change once a day, twice a day, not at all, more then twice a day, on a fairly regular schedule, or completely variable on when it happens. I'm going go with trying to change directions every 6 hours or so with the standard two high and two low tides per day causing a change in flow direction 4 times a day. Now timing there is fairly regular (at least predictable) and mostly (not entirely of course) controlled by the moon's gravitational pull and high tides slightly ahead of the moon by about 10 degrees due to friction forces that shifts in time through out the days/weeks/months/years.
So, in comes trying to time it with the lunar cycle. Right now for my viewing pleasure I have all the lighting off set behind by 3.5 hours (210 minutes with white lights on 30 minutes after blues and off 30 minutes before blues.)
What I'm doing now is using the Lunar chart to start the cycle and kick a series of virtual outlets to finally get to an ON or OFF state spreading out 6 hours coordinating with the moons position and causing low/high tides and flow changes. Each vMoon cycle re-syncs the timing as the moon rises about 50 minutes later each day and can happen during the day. I'm using a vMoon virtual outlet instead of my Lunar LSM outlet as I want the timing to be offset from my Moon lights in the display. Typically high tide coordinates with the moon rise will happen around 1-1.5 hours after the moon starts rising. Which is that 10degree offset mentioned earlier. So by the time the moon reaches the full height(median) in the sky high tide already came and went well ahead of it.
I looked at using OSC but it bases its timing from a fixed point which I don't want a fixed point. I played with Min Time and that worked in testing but in practice virtual outlets where in an OFF state that I wanted them to be in long enough to turn on right away that I didn't want to happen. So, in came defer and its worked so far through out today. If it ends up breaking for some reason I will post an update.
Next thing I'll work on is ramping up and down. As during peak high and peak low tides there's not much water flow besides any surface movement. Mostly this is all just for the fun of it.
So for now here's my programming that really would work for any water pump plugged into an outlet on the Apex directly or controllable and wants to time themselves to the constantly shifting Lunar cycle and not a static timing.
Programming and brief comments:
Here's my Lunar lights shifted in time forward the same amount as my main display lights
[ Lunar_5_1 ] ( 5_1 )
Program Type: Advanced
Display Icon: Moon
Logging: Enabled
Program:
Set OFF
If Moon 210/210 Then ON
If Power Apex OFF 001 Then OFF
Virtual outlet to set a lunar timer offset ahead 1h 10m after moon rise to trigger the peak high tide ahead of full Lunar median in the sky and tide change. This also re-syncs my gyres to the Moon Cycle. If I need or want to adjust timing I can do it from this single spot.
[vMoon_B4 ] ( Cntl_B4 )
Program Type: Advanced
Display Icon: Clock
Logging: Enabled
Program:
Set OFF
If Moon 280/280 Then ON
Now based on if that vMoon outlet is on or off will trigger two more virtual outlets. In each virtual outlet is a Defer Then ON statement delaying them being turned on for 6 hours. This sets the off(6(hrs)/on(6hrs)/off(6hrs)/on(6hrs + ~50m sync) timing to corrodinate with the moon traveling through the sky (more the earth's spinning) causing the low and high tide changes approximately every 6 hours. OSC could do this but again that would be easy and boring and a fixed point every day.
[vMoonUp_B2 ] ( Cntl_B2 )
Program Type: Advanced
Display Icon: Moon
Logging: Enabled
Program:
If Outlet vMoon_B4 = OFF Then OFF (sets the off state)
If Outlet vMoon_B4 = ON Then ON
Defer 360:00 Then ON (keep in that off state for 6 hours then turn on)
[ vMoonDown_B3 ] ( Cntl_B3 )
Program Type: Advanced
Display Icon: Moon
Logging: Enabled
Program:
If Outlet vMoon_B4 = ON Then OFF
If Outlet vMoon_B4 = OFF Then ON
Defer 360:00 Then ON
Now for the virtual outlet that will be used by the variable speed ports to determine which profile to use. This is a simple off/on but need the order
[ vTide_B1 ] ( Cntl_B1 )
Program Type: Advanced
Display Icon: Up/Down Arrows
Logging: Enabled
Program:
Set ON
If Outlet vMoonUp_B2 = OFF Then OFF
If Outlet vMoonDown_B3 = OFF Then OFF
If Outlet vMoonUp_B2 = ON Then ON
If Outlet vMoonDown_B3 = ON Then ON
Then finally the variable speed ports.
Variable Ports Controlling direction
[Dir_GyreL]
If Outlet vTide_B1 = OFF Then DirF_GyreL
If Outlet vTide_B1 = ON Then DirR_GyreL
[Dir_GyreR] Mirror of the above
If Outlet vTide_B1 = OFF Then DirR_GyreR
If Outlet vTide_B1 = ON Then DirF_GyreR
That is all now working. For now the speed is constant. I will work on the speed controls next trying to ramp up and down. I would also love to vary the max speed based on other variables but that is not available.
Here's the second part controlling the ramping up/ full speed/ and ramping down at ~6hour intervals to coordinate with the directional changes achieved above.
copy/paste:
~Speed control completed and working.
Using the vTidal virtual outlet created for the above directional controls for the trigger again but changed it's name to something more meaning full (at least to me) called vTideChg. vMoon is still my main timing for the cycles then. I will have two sets of ramp up/full speed/ramp down virtual outlets but cycles through based on vTideChng
So, here it is...
The basis for the cycles timing that syncs to the lunar seasonal chart and adjusted the same amount of time as my main display LED lights for my viewing pleasure. Plus an additional offset forward from my actual Lunar lights for reasons explained in the previous post above on tidal changes, gravity, earths friction, 10 degree offsets, etc.
[ vMoon_B4 ] ( Cntl_B4 )
Program Type: Advanced
Display Icon: Clock
Logging: Enabled
Program:
Set OFF
If Moon 280/280 Then ON
Simulation trigger of the moon rising and falling triggering the Tide Change virtual outlet and helps split up the tide changes around 6 hours apart. Used for the directional variable speed outlets and now for the speed control.
[ vMoonUp_B2 ] ( Cntl_B2 )
Program Type: Advanced
Display Icon: Moon
Logging: Enabled
Program:
If Outlet vMoon_B4 = OFF Then OFF
If Outlet vMoon_B4 = ON Then ON
Defer 360:00 Then ON
[ vMoonDown_B3 ] ( Cntl_B3 )
Program Type: Advanced
Display Icon: Moon
Logging: Enabled
Program:
If Outlet vMoon_B4 = ON Then OFF
If Outlet vMoon_B4 = OFF Then ON
Defer 360:00 Then ON
Tidal change trigger on reversing directions and main trigger for ramping up/full/ramping down speed profiles.
[ vTideChg_B1 ] ( Cntl_B1 )
Program Type: Advanced
Display Icon: Up/Down Arrows
Logging: Enabled
Program:
Set ON
If Outlet vMoonUp_B2 = OFF Then OFF
If Outlet vMoonDown_B3 = OFF Then OFF
If Outlet vMoonUp_B2 = ON Then ON
If Outlet vMoonDown_B3 = ON Then ON
Now for the new stuff to time the directional changes with a period of ramping up, full speed, ramping back down, ramping back up, full speed, and so on...
This splits up the tidal changes into 2 major cycles. Which basically splits up the 6 hour intervals which is all that I had to worry about for the direction. But once I was able to get that done I am now able to split it out even further. So, here's Tide Cycle 1 and Tide Cycle 2.
Ramp up kicks in right away as soon as the Tide change trigger kicks in. This kicks in the ramp up speed profile that is timed to last 15.
[ vT1RampUp_C1 ] ( Cntl_C1 )
Program Type: Advanced
Display Icon: Up/Down Arrows
Logging: Enabled
Program:
Set OFF
If Outlet vTideChg_B1 = OFF Then OFF
If Outlet vTideChg_B1 = ON Then ON
The defer here waits 15m for the ramp up profile to finish
[ vT1Full_C2 ] ( Cntl_C2 )
Program Type: Advanced
Display Icon: Left/Right Arrows
Logging: Enabled
Program:
If Outlet vTideChg_B1 = OFF Then OFF
If Outlet vTideChg_B1 = ON Then ON
Defer 015:00 Then ON
The Defer here times it to the last 15 minutes of the 6 hour cycle to start cycling down.
[ vT1RampDn_C3 ] ( Cntl_C3 )
Program Type: Advanced
Display Icon: Up/Down Arrows
Logging: Enabled
Program:
If Outlet vTideChg_B1 = OFF Then OFF
If Outlet vTideChg_B1 = ON Then ON
Defer 345:00 Then ON
Then start ramping up right away again repeating above.
[ vT2RampUp_C4 ] ( Cntl_C4 )
Program Type: Advanced
Display Icon: Up/Down Arrows
Logging: Enabled
Program:
If Outlet vTideChg_B1 = ON Then OFF
If Outlet vTideChg_B1 = OFF Then ON
[ vT2Full_C5 ] ( Cntl_C5 )
Program Type: Advanced
Display Icon: Left/Right Arrows
Logging: Enabled
Program:
If Outlet vTideChg_B1 = ON Then OFF
If Outlet vTideChg_B1 = OFF Then ON
Defer 015:00 Then ON
[ vT2RampDn_C6 ] ( Cntl_C6 )
Program Type: Advanced
Display Icon: Up/Down Arrows
Logging: Enabled
Program:
If Outlet vTideChg_B1 = ON Then OFF
If Outlet vTideChg_B1 = OFF Then ON
Defer 345:00 Then ON
Then back to tide cycle 1.
The Profiles
[ TideRampUp ] ( PF10 )
Type: Ramp
Ramp Time: 15
Start Intensity: 30
End Intensity: 100
[ TideRampDn ] ( PF11 )
Type: Ramp
Ramp Time: 15
Start Intensity: 100
End Intensity: 30
[ FullSpeed ] ( PF12 )
Type: Pump
Synchronize: Disable
Divide By 10: Disable
Initial Off Time: 0
On Time: 0
Off Time: 0
Minimum Intensity: 100
Maximum Intensity: 100
The variable speed outlets then check the Tide cycle 1 and Tide cycle 2 virtual outlets for their states and to decide which of the profiles to apply.
Again I'm just testing this out on the Left side gyre for now.
[ Spd_GyreL ] ( base_Var1 )
Program Type: Advanced
Display Icon: Fan
Logging: Enabled
Program
If Outlet vT1RampUp_C1 = ON Then TideRampUp
If Outlet vT1Full_C2 = ON Then FullSpeed
If Outlet vT1RampDn_C3 = ON Then TideRampDn
If Outlet vT2RampUp_C4 = ON Then TideRampUp
If Outlet vT2Full_C5 = ON Then FullSpeed
If Outlet vT2RampDn_C6 = ON Then TideRampDn
I now have both gyres setup the same alternating between each other. When one is going forward the other is going reverse. Direction control already done above.
[ Spd_GyreR ] ( base_Var3 )
Program Type: Advanced
Display Icon: Fan
Logging: Enabled
Program:
If Outlet vT1RampUp_C1 = ON Then TideRampUp
If Outlet vT1Full_C2 = ON Then FullSpeed
If Outlet vT1RampDn_C3 = ON Then TideRampDn
If Outlet vT2RampUp_C4 = ON Then TideRampUp
If Outlet vT2Full_C5 = ON Then FullSpeed
If Outlet vT2RampDn_C6 = ON Then TideRampDn
So, now I have my temp, display lights, lunar lights, and flow all controlled via seasonal charts, lunar cycles, and shifting times.