// the find
kizniche/Mycodo
An environmental monitoring and regulation system
Mycodo is a Python-based environmental automation system for Raspberry Pi that wires sensor inputs to GPIO/relay outputs through PID controllers, timers, and conditionals. It runs a web UI, a Flask API, and a background daemon all on-device. The primary audience is serious hobbyists doing mushroom cultivation, hydroponics, terrariums, and fermentation — people who want real closed-loop control, not just data logging.
The plugin architecture is genuinely well-designed — custom Inputs, Outputs, Functions, and Widgets are drop-in Python modules with a defined interface, so adding an unsupported sensor doesn't require touching core code. The PID implementation goes beyond on/off bang-bang: it includes autotune, setpoint tracking (ramping a temperature target over days), and the animated demo shows ±0.5°C real-world deviation, which is credible. Over 100 Alembic migration files in the repo means this project has survived years of schema changes without telling users to wipe their database — that's a meaningful commitment. The separation of config storage (SQLite) from time-series measurements (InfluxDB) is the right architecture call; mixing those workloads into one DB causes pain at scale.
The install is `curl -L url | bash` with no checksum or signature verification — you're executing whatever is on a GitHub Pages URL as root on your Pi. Docker support is explicitly labeled 'experimental' with a years-old open issue (#637), because GPIO and I2C access inside containers on Pi hardware is genuinely hard — this system is designed to own the metal, not run isolated. Daemon components communicate via Pyro5 (Python Remote Objects), an unusual IPC choice that adds a dependency and introduces a whole class of local-network-failure bugs that don't exist with simpler IPC. Highcharts is used for graphing — it's proprietary for commercial use, so anyone building a product on top of Mycodo needs a license they probably haven't budgeted for.