Replacing my Rachio with a Custom Sprinkler Controller, Part II: Software

My Rachio sprinkler controller unexpectedly died so I decided to build my own using ESPHome and Home Assistant.