# Sprinkler and garage controller

> A 2018-era home sprinkler controller, a Raspberry Pi orchestrated by Jenkins, because Jenkins was already running on the home Xen cluster. Long since retired.

- Source: https://nabkey.com/tinkerings/sprinkler
- Author: Chris Nabkey
- Published: 2026-04-24
- Built: 2018
- Status: archived
- Stack: Raspberry Pi, Jenkins, Python, Xen

A home sprinkler controller built because my old one died, and I wanted an excuse. It was running
in the garage for a few years, then was retired when I moved. The pattern (relays driven by a
small board, talking to Home Assistant) got reused and is now doing
[garage doors](https://nabkey.com/tinkerings/garage-doors), but the sprinkler part is gone.

## Architecture

<figure class="diagram">
  *Diagram: Sprinkler architecture: Jenkins on a Xen VM scheduled Python jobs that flipped GPIO pins on a Raspberry Pi to drive a 4-zone relay module.* ([view it on nabkey.com](https://nabkey.com/tinkerings/sprinkler))
</figure>

## Why Jenkins

The home lab at the time was a small **Xen cluster** running the always-on
services I cared about: off-site backups, dynamic-DNS updates. 
Jenkins was handling all of my cron type workloads.

- Each zone is a parameterized Jenkins job.
- The job's body is a one-liner that flips a relay GPIO on, sleeps, flips it
  off.
- Schedule is a Jenkins cron trigger.
