# I kept forgetting about my cactus…

> Source: <https://dev.to/gurinayat_kaurmangat_27d/i-kept-forgetting-about-my-cactus-1866>
> Published: 2026-10-23 17:29:01+00:00

*This is a submission for the [Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady](https://dev.to/challenges/hacktoberfest-week3-2026-10-19)*

SlothPlant is a plant caretaker for people who forget their plants. An Arduino UNO R4 WiFi watches the soil moisture of my cactus, and a small open-weight model running on my laptop reads the readings and writes a sleepy two-line message to my phone, but only when the plant actually needs me.

It saves me the chore of remembering to check on the plant. I never look at it; it quietly checks itself and speaks up when it matters. A cactus is also the ultimate sloth plant, since it barely needs anything.

Here's SlothPlant watching my cactus, with the soil sensor in the pot and wired to the Arduino's `A0` pin:

And here's the notification that arrived on my phone when the soil read dry:

A plant caretaker for people who forget their plants. An Arduino watches the soil all day, a small open-weight model running **locally** reads the readings, and your phone gets a sleepy two-line message only when the plant actually needs you.

Built for the Hacktoberfest Open-Source AI Challenge (Week 3: Sloth Day). It grew out of a class assignment on Arduino, and the open-source AI part was built this week.

``` php
Soil sensor -> Arduino UNO R4 WiFi -> Flask server (laptop) -> Ollama (gemma3:1b) -> ntfy -> your phone
```

`readings.csv`.` gemma3:1b` through Ollama) writes the plant's message and judges borderline cases.
MIT licensed, with setup steps in the README.

The pipeline: soil sensor → Arduino UNO R4 WiFi → Flask server on my laptop → Ollama running `gemma3:1b` → ntfy → my phone.

`pip` path on Windows and got around it by calling `python -m pip`.
Because the model runs on my own laptop, my data never leaves it. There are no API keys, no usage fees, and nothing that stops working if a service changes its pricing. A project like this is tiny, a $30 board and a free model sending a few messages a day, and a closed API would turn it into a recurring cost for almost no work. Open weights also let me pick a model small enough for a student laptop and swap it later without rewriting anything.

During testing, my first "thirsty" notification arrived without me checking on anything, which was the whole point. I'm still tuning it: my thresholds are placeholders from class testing, and a cactus likes dry soil, so it can ask for water more than it should. Next steps are per-plant tuning, or telling the model the plant is a cactus so it asks far less often.
