Another major milestone night for the Jarvise reef system project. The overall vision from the beginning has always been to build a layered observability and automation platform for the aquarium, but the Apex failure definitely accelerated the timeline and forced me to start integrating pieces together much sooner than originally planned.
Tonight was less about adding hardware and more about turning separate systems into a cohesive ecosystem.
The biggest accomplishment was bringing the tank camera fully online inside the Jarvise infrastructure. Instead of directly exposing the Amcrest stream to dashboards and clients, I built a dedicated camera proxy service running inside one of the Proxmox LXCs. The proxy continuously pulls the MJPEG stream from the camera, caches the latest frame in memory, and serves both live streams and clean JPEG snapshots on demand. It also automatically reconnects if the camera drops offline. That may sound excessive for a reef tank, but it creates a stable foundation for everything that comes next.
The wall-mounted TankControlPanel now has a fully integrated live tank feed. One tap on the touchscreen immediately opens a fullscreen camera view with live/offline health indicators and automatic fallback to snapshot mode if the stream fails. The interface is becoming much more operational and appliance-like rather than just “a dashboard.”
At the same time, the first version of the Jarvise observation pipeline is now running. Every few minutes the system captures a tank snapshot and stores it alongside structured metadata including PLC output states, float switch states, lighting state, frame hashes, and environmental context. Right now it’s operating silently with no alerts while it builds a baseline understanding of what “normal” looks like over time.
That last part is probably the most exciting piece of the entire project.
The goal is not to have AI randomly stare at a fish tank asking “does this look wrong?” That approach would generate endless false alarms. Instead, the system is being designed more like industrial observability infrastructure where multiple independent signals are correlated together before anything is considered an actual issue.
For example:
- Float switch reports low water
- Camera visually confirms abnormal sump level
- Return pump power consumption changes
= high confidence alert
That’s a very different philosophy than traditional aquarium controllers.
The camera system is also laying the groundwork for future capabilities like:
- skimmer overflow detection
- leak detection
- water clarity trend analysis
- equipment state verification
- remote “show me the tank” snapshots from Jarvise chat
- long-term operational trend analysis
What’s becoming really interesting is that the system is beginning to accumulate operational memory. Not “AI memory” in the buzzword sense, but actual historical understanding of how the tank behaves over time:
- what normal nighttime operation looks like
- how equipment states correlate
- what conditions precede instability
- what changes before something fails
The architecture itself is also becoming far more mature:
- CLICK PLC for deterministic control
- MQTT for telemetry
- Node-RED orchestration
- Proxmox LXC infrastructure
- local-first deployment
- camera proxy + observation pipeline
- touchscreen operational interface
- future Atlas sensor integration for temp and ORP
At this point it’s honestly becoming less of a “controller” and more of a true reef observability platform.
Still a huge amount left to build but tonight was one of those nights where the separate pieces finally started feeling like a single integrated system instead of a bunch of independent projects.