Dish Genie is a simple but fun MagTag project that lets you set a timer for your dishwasher cycle and get notified when it’s done — complete with custom e-Ink graphics, NeoPixel LED feedback, and button-driven control.
- 🕒 Adjustable timer — Increase timer by 30-minute increments, or reset to default (1 hour). In either 12 or 24 hour format!
- 🧽 Visual dishwasher states — “Dirty”, “Cleaning…”, and “Clean!” screens with custom BMP images.
- 💡 LED notifications — MagTag’s built-in NeoPixels blink in different colors for each state.
- 🔔 Completion alert — Audible jingle plays when the cleaning timer finishes.
- 🌐 Real-time tracking — Fetches the current time from Adafruit IO’s time integration.
- 🔋 Low power sleep — Uses
alarmdeep-sleep to conserve power between cycles.
- On boot, the MagTag displays the Home screen (Dish Genie logo).
- Press the Cleaning button to start the dishwasher timer.
- The device fetches the current time via Adafruit IO and calculates the estimated finish time.
- The MagTag goes into deep sleep until the timer expires (or a button is pressed).
- When the timer ends, LEDs flash yellow, a tone plays, and the Clean! screen appears.
Rename
secrets.EXAMPLE.pytosecrets.pyand fill in with your Network/AIO settings to fetch time.
- Adafruit MagTag
- USB-C cable for programming/power
- Optional: 3D-printed stand or magnetic mount for your dishwasher door
- CircuitPython 10.0+
- Libraries:
adafruit_magtagadafruit_requestsadafruit_iowifialarmsocketpooldisplayioterminalio
You can install these from the Adafruit CircuitPython Bundle.
- Uses alarm.exit_and_deep_sleep_until_alarms() to conserve battery life.
- Can be woken early by pressing Button A or B.
- Automatically stores the last timer duration in timer.txt for next use.
- Untested with 2025 version of the MagTag, but should all work the same.
- PRs welcome!
Copyright © 2025 Adam Neighbors
Released under the GNU General Public License v3.0 (GPLv3). See the LICENSE file for details.
