Understanding Fishquarium
Fishquarium is an open-source aquarium simulation and monitoring application. The concept combines real-time tank visualization with parameter tracking, so you can keep an eye on water quality metrics alongside a graphical representation of your fish and substrate without flipping between multiple apps. Download the latest release from the official GitHub repository. The project page is at github.com/fishquarium/fishquarium. Clone it or grab the release binary for your OS. On Linux, the typical install sequence is straightforward: grab the dependencies (Python 3.9 minimum, a handful of Flask packages, and psycopg2 or sqlite3 depending on your backend), run the requirements file, then point the config to your database path and fire up the server. On Windows it's the same flow minus the package manager steps. I found the config structure to be the trickiest part. Early on I spent about forty minutes troubleshooting why my sensor readings weren't appearing in the web dashboard. The issue turned out to be that the default timezone handling in the config was set to UTC, but my sensors report local time. Fishquarium applies a UTC offset in its processing pipeline, so everything looked backdated and then got filtered out by the default aggregation window. The fix was just setting tz_offset to match your local timezone in config.yaml before starting the service. Once I did that, data started flowing correctly within a few minutes.
Hardware Integration
Fishquarium supports several input types. The most common setup uses an ESP32 or Raspberry Pi Pico with ADC modules reading pH, temperature, and conductivity probes. The firmware side pushes JSON payloads to the Fishquarium API endpoint, which accepts them over HTTP. I've also seen people route things through MQTT when they already have an existing broker running, since the built-in MQTT client is supported. One thing beginners miss is probe calibration frequency. The default drift rate on cheap pH sensors is roughly 0.1 to 0.2 units per week. If you're relying on a single-point calibration, your readings are likely off by that margin within days. A two-point buffer calibration every ten to fourteen days brings the typical error down to under 0.05 pH units, which is where the data actually becomes useful for making decisions about water changes.
What It Does Well and Where It Falters
The strength of Fishquarium is in the data history view. You can pull up a graph covering weeks of parameter changes and overlay water change events, feeding times, and lighting cycles. That kind of correlation is genuinely hard to get from standalone sensor monitors, which tend to show only current values. The weakness is real-time responsiveness under heavy data loads. If you're logging at sub-minute intervals across six or more sensors, the web interface starts lagging noticeably. The underlying SQLite backend doesn't scale past a certain write volume, and the built-in browser renderer becomes a bottleneck. If you're running a large display tank with frequent parameter logging, you'll want to either lower the sampling interval to once per minute or swap the database to PostgreSQL, which handles the write throughput much better. The performance difference is significant enough that I switched my own secondary system over after about three months of SQLite complaints. Another limitation worth noting is the alerting system. It exists but is basic. You can set thresholds that trigger notifications, but there's no escalation logic, no delay-to-alarm feature, and no way to batch alerts during maintenance windows. If your pH dips below a threshold during a scheduled water change, you'll get repeated pings until the condition clears. I worked around this by adding a simple cron job that temporarily suppresses alerts during known maintenance periods, but it's not a built-in capability.
Common Pitfalls
The API key system is functional but easy to misconfigure. By default, Fishquarium doesn't enforce key rotation, so if you're exposing the dashboard to a home network with guest devices, you should rotate keys quarterly. I've seen people leave default keys in place for months because the docs don't emphasize this. It's not a security disaster in a home setup, but it's easy to overlook. Firmware mismatch is another recurring issue. The Fishquarium firmware versions need to align with the server version. A firmware update that changes the JSON payload structure will break data ingestion until you update the server or roll back the firmware. Check the compatibility matrix before flashing anything. Version drift here causes more headaches than any other single issue I've encountered, usually manifesting as silent data drops that look like sensor failures.
Who This Is Actually For
Fishquarium fits people who want a local-first, self-hosted solution. If you're comfortable managing a web server and dealing with configuration files, the data ownership and visualization make it worth the effort. If you'd rather just plug in a device and have a mobile app handle everything, you're better off with something like the APIK system or commercial alternatives. Fishquarium asks for a bit of setup time upfront and some ongoing maintenance, but it pays off in long-term flexibility and zero recurring costs beyond your hosting. The community around it is small but active. The GitHub issues page has detailed troubleshooting threads for edge cases, and the configuration reference is thorough even if it isn't always easy to find. Reading through closed issues before asking a question saves a lot of time.