Krill and The Movement of Water
How I use Krill to control water pumps, solenoids, valves and sensors for my aquarium, vivarium and hydroponic systems.
Krill and The Movement of Water
It begins with a tortoise.

Meet "E," our baby Burmese Mountain Tortoise. Mountain tortoises are native to Myanmar and need cooler climates, consistent hydration, and proper humidity. Keeping E healthy means controlling water — where it comes from, where it goes, what's in it, and how fast it moves.
That’s where Krill comes in.
This is a series about my planted aquarium lab — how city tap water moves through filters, into the aquarium, gets cycled through sensors and processors, and then gets tapped off to feed a hydroponic system, a vivarium, and E’s jacuzzi. Multiple Raspberry Pis running Krill Server coordinate everything in real time, with no cloud, no subscriptions, and no single point of failure.
What’s in the series
- Relays and Solenoids — Controlling water flow with GPIO pins, logic gates, and Zigbee smart plugs
- Leak Detection — Using logic gates as safety interlocks to shut everything down if water goes where it shouldn’t
- CO2 Reactor with Color Sensor Feedback — The showpiece: a DIY CO2 injection system with a color sensor that reads pH indicator solution, detects dangerous CO2 levels by color shift, and triggers automated shutoff
How Krill works (the short version)
Everything in Krill is a Node. A data point stores a sensor reading. A cron timer fires on a schedule. A calculation transforms data. A logic gate makes decisions. You wire them together and the system reacts in real time.
Nodes live on servers. Servers auto-discover each other on your network and form a mesh. You see it all in the app — a live swarm of nodes executing, data flowing, alerts firing.
A simple swarm: a timer reads a counter data point, adds 1, and writes it back every 5 seconds.
If you’re the kind of person who has a Raspberry Pi in a closet, a reef tank in the living room, and a Python script duct-taped to a cron job — Krill was built for you.
Last verified: 2026-04-06