Mattgsa 315 gallon build

Free Phyto Promo
Spend $39+ → free 16oz Phyto · Use code FREEPHYTO at checkout · $16.99 value · Densest 6-species blend · Free shipping on every order · 100% live arrival guaranteed Spend $39+ → free 16oz Phyto · Use code FREEPHYTO at checkout · $16.99 value · Densest 6-species blend · Free shipping on every order · 100% live arrival guaranteed
Shop Now Code: FREEPHYTO
A little milestone for the build.

Today the aquarium completed its first successful closed-loop heating cycle under Jarvise control.

The controller is now maintaining the tank at the approved biological setpoint of 78.0°F using the PLC while continuously monitoring the system through multiple independent software watchdogs and the World Model.

Current status:
  • Temperature: 77.56°F
  • Phase C commissioning
  • Automatic control enabled
  • PLC read-back verification
  • High-confidence operation
  • Live trend logging
  • Safety watchdogs active
  • World Model monitoring every decision
One thing I'm particularly happy with is that the interface isn't just displaying numbers anymore. Jarvise actually explains why it's making decisions.

Instead of simply showing that the heater is on, it tells me:

why heating is occurring
  • confidence in the decision
  • operating profile
  • system health
  • watchdog status
  • verified PLC feedback
The reporting side has also come a long way. Daily, weekly, and monthly reports are now being generated, along with safety history, equipment health, biological trends, and AI-generated insights.

This has been a long journey from replacing the failed Ranco controller to building a completely custom PLC-based control system, but it's finally starting to feel like a complete platform rather than a collection of individual projects.

There's still plenty left to do before I call it finished, but seeing the controller quietly maintaining temperature while explaining every decision is incredibly satisfying.

Next stop... the native iPhone companion app.

1784518937048.png
 
One thing you'll probably notice right away is that the graph doesn't have that classic "heartbeat" pattern that pretty much every aquarium controller produces.

That was actually one of my goals from the very beginning.

Most controllers wait until the temperature drops below the setpoint, turn the heater on, let it warm back up, shut it off, then repeat that cycle over and over. There's absolutely nothing wrong with that. It works, but the tank is constantly warming and cooling.

My thinking was a little different. The corals don't know the controller is set to 78°. They only know the water around them is changing. So instead of waiting for the temperature to drift and then correcting it, I wanted to see if I could make much smaller corrections before it ever got very far from the target.

That's why you're seeing the stair stepping instead of the sawtooth pattern. The controller is slowly walking the temperature to where it wants it instead of making one big correction after another. The goal wasn't just to hit 78°. The goal was to reduce how much the temperature is actually changing.

The part that really excites me, though, isn't the controller itself. It's what Jarvise is doing in the background.

Right now Jarvise is still in the learning phase. While the PLC is maintaining the temperature, Jarvise is building a thermal model of my aquarium. Every heating cycle teaches it something. How fast the system heats up, how quickly it cools down, how much heater run time is needed to maintain the target temperature, and how those characteristics change throughout the day.

Every aquarium has its own personality. My system has its own dedicated fish room with its own AC, different equipment, different water volume, and its own thermal characteristics. Instead of assuming every aquarium behaves the same, I'm trying to teach Jarvise how this system responds so it can make better decisions over time.

The long term goal is to stop reacting and start predicting.

Once Jarvise has enough data, I'm hoping it will begin recognizing the normal thermal patterns of this aquarium and make tiny adjustments before the temperature ever starts to drift. If that works the way I'm hoping, the graph should get flatter over time instead of developing larger swings.

It's still early, so I'm definitely not claiming victory yet. Jarvise needs a lot more heating and cooling cycles before I'll trust it to make predictive decisions. But seeing the controller settle into this stair stepping pattern instead of the constant sawtooth I'm used to from previous controllers has been really encouraging.

Temperature control has always been part of the plan for Jarvise. The Ranco controller failing just changed the order of the projects. Instead of waiting until later, it became the first opportunity to put the architecture through its paces on something that really matters. If this approach proves itself over time, the same ideas can eventually be applied to other parts of the system.

I'd love to hear if anyone else has experimented with anything beyond traditional hysteresis or PID control. Most of what I've seen in the hobby follows the same basic approach, so it'll be interesting to compare notes.


1784576298299.png
 
Well, I figured it was time for an update on the temperature experiment because Jarvise has been quietly collecting data since my last post, and the results are getting pretty interesting.

In my last update I talked about how Jarvise was still in the learning phase. The PLC was controlling the heater while Jarvise watched what happened during every heating and cooling cycle and tried to learn how my particular aquarium behaves.

The idea was that eventually I wanted Jarvise to stop simply reacting to temperature changes and start predicting them.

He's doing that now.

Every five minutes Jarvise looks at the tank and predicts where the temperature will be 30 minutes and 60 minutes later. Then he waits to see what actually happens and grades himself.

He's done this more than 4,500 times now.

So far, his average 30-minute prediction has been off by only about 0.13°F.

At 60 minutes, he's averaging about 0.22°F off.

That was already better than I expected, but then I found something much more interesting.

Jarvise also keeps track of whether he agrees with the normal heater controller.

The normal controller still has the final say. It's intentionally simple and predictable: temperature drops, heater comes on; temperature rises, heater goes off.

Sometimes, though, the normal controller says the heater should be ON while Jarvise looks at where the temperature is going and says it doesn't need any more heat.

So I went back and looked at what actually happened afterward.

When Jarvise disagreed with the normal controller, the results so far are:

Jarvise was right: 548 times
Partially right: 193 times
Wrong: 1 time

That last number definitely got my attention.

I'm still not turning the heater directly over to AI. The PLC remains in control, and there are separate safety systems that can shut the heater down regardless of what Jarvise thinks.

But this gave me an idea for the next experiment.

Right now, the heater really only has two settings:

OFF

or

ON at full power.

What if it didn't?

Instead of Jarvise saying "turn the heater on," what if he could eventually say:

"The tank only needs about 20% heat right now."

Or 40%. Or 60%.

Think of it like driving a car. You don't maintain 60 MPH by flooring the gas pedal, completely letting off, flooring it again, and repeating that forever. You adjust the throttle depending on what the car is doing.

I'm wondering if I can do something similar with the aquarium heater.

The PLC would still be in charge and all the existing safety systems would stay in place. Jarvise would simply be able to recommend how much heat is needed based on what he's learned about the tank and where he thinks the temperature is headed.

I'm not building that part yet. Before I spend any money or change the heater controls, I'm going to have Jarvise calculate what percentage of heat he would have used and record it without actually controlling anything.

Then I'll be able to compare the two approaches using real data.

If it doesn't improve anything, I'll leave the controller alone.

But if Jarvise can show that he could have kept the temperature even steadier by using smaller amounts of heat instead of just ON/OFF...

Well, then I guess I'll have another project.

This is pretty much exactly what I was hoping would happen when I started teaching Jarvise how the tank behaves.

We're finally starting to move from reacting to the aquarium to predicting it.
 
Well, I figured it was time for an update on the temperature experiment because Jarvise has been quietly collecting data since my last post, and the results are getting pretty interesting.

In my last update I talked about how Jarvise was still in the learning phase. The PLC was controlling the heater while Jarvise watched what happened during every heating and cooling cycle and tried to learn how my particular aquarium behaves.

The idea was that eventually I wanted Jarvise to stop simply reacting to temperature changes and start predicting them.

He's doing that now.

Every five minutes Jarvise looks at the tank and predicts where the temperature will be 30 minutes and 60 minutes later. Then he waits to see what actually happens and grades himself.

He's done this more than 4,500 times now.

So far, his average 30-minute prediction has been off by only about 0.13°F.

At 60 minutes, he's averaging about 0.22°F off.

That was already better than I expected, but then I found something much more interesting.

Jarvise also keeps track of whether he agrees with the normal heater controller.

The normal controller still has the final say. It's intentionally simple and predictable: temperature drops, heater comes on; temperature rises, heater goes off.

Sometimes, though, the normal controller says the heater should be ON while Jarvise looks at where the temperature is going and says it doesn't need any more heat.

So I went back and looked at what actually happened afterward.

When Jarvise disagreed with the normal controller, the results so far are:

Jarvise was right: 548 times
Partially right: 193 times
Wrong: 1 time

That last number definitely got my attention.

I'm still not turning the heater directly over to AI. The PLC remains in control, and there are separate safety systems that can shut the heater down regardless of what Jarvise thinks.

But this gave me an idea for the next experiment.

Right now, the heater really only has two settings:

OFF

or

ON at full power.

What if it didn't?

Instead of Jarvise saying "turn the heater on," what if he could eventually say:

"The tank only needs about 20% heat right now."

Or 40%. Or 60%.

Think of it like driving a car. You don't maintain 60 MPH by flooring the gas pedal, completely letting off, flooring it again, and repeating that forever. You adjust the throttle depending on what the car is doing.

I'm wondering if I can do something similar with the aquarium heater.

The PLC would still be in charge and all the existing safety systems would stay in place. Jarvise would simply be able to recommend how much heat is needed based on what he's learned about the tank and where he thinks the temperature is headed.

I'm not building that part yet. Before I spend any money or change the heater controls, I'm going to have Jarvise calculate what percentage of heat he would have used and record it without actually controlling anything.

Then I'll be able to compare the two approaches using real data.

If it doesn't improve anything, I'll leave the controller alone.

But if Jarvise can show that he could have kept the temperature even steadier by using smaller amounts of heat instead of just ON/OFF...

Well, then I guess I'll have another project.

This is pretty much exactly what I was hoping would happen when I started teaching Jarvise how the tank behaves.

We're finally starting to move from reacting to the aquarium to predicting it.
I predict another project to be added to the list soon.

BTW - I've been meaning to ask; how is Jarvise pronounced? Is it jar-viss, jar-vise, jar-veese or something else?
 

TOP 10 Trending Threads

ARE YOU READY TO CONFESS TO CRAZIEST, DUMBEST, FUNNIEST THING YOU’VE EVER DONE IN REEFING?

  • Yeah, I'll confess! (Share your story in the comments!)

    Votes: 70 56.5%
  • Nah, I'll keep mine a secret...(Don't be like that, share with the class!)

    Votes: 54 43.5%
Back
Top
Home
Post thread…
Market
What's new