Eight years ago, I built the first version of The Garden Bot. It was a massive learning curve. I spent weeks poring over forums, decoding manufacturer data sheets to understand analog-to-digital conversion, and pieceing together sample code from various sources. It took more than a month to get a basic temperature, humidity, and soil moisture monitoring system up and running. It saved csv files locally on the Raspberry Pi, and synced periodically to BigQuery, which I then visualized in Looker Studio (Data Studio back then).
This weekend, I rebuilt it as the Arid Architect. It took under an hour with the help of AI (Gemini). Here’s how we went about it:
- Hardware Identification: I gave Gemini an image of the hardware setup and asked it to identify the components and their functions.
- Botanical Analysis: Similarly, we identified the plant and how it needs to be cared for in Chennai’s specific climate.
- Precision Wiring: Gemini created a detailed wiring guide. We tested the components individually and then together to ensure they were working as expected.
- Agent Logic: We defined what the agent should do and then wrote the code to gather the data.
- Monitoring & Nudges: We populated a dashboard to visualize the data and set up OpenClaw to send updates and nudges to Slack.
Now, the system is agentic. It runs twice a day, talks to me on Slack via OpenClaw, and gives me actual advice on whether my String of Nickels needs water or just more sunlight.
The Arid Architect: A collaborative build between human and AI.
The Patient: Dischidia nummularia (String of Nickels)
The String of Nickels is an epiphyte, meaning in the wild, it grows on other plants rather than in soil. This makes it incredibly sensitive to over-watering. In Chennai’s high-humidity environment, the “Arid Architect” must prioritize neglect over action. The goal isn’t to water the plant; it’s to find every reason not to water it until it’s absolutely necessary.
The subject: A String of Nickels (Dischidia nummularia) under agentic care.
The Agentic Decision Engine
The agent doesn’t just look at a single number. It processes a multi-modal stream of inputs to decide the next move.
The Sensory Inputs:
- Soil Moisture (Analog): The primary indicator of root-level dryness.
- Ambient Humidity (DHT11): Crucial for an epiphyte that absorbs moisture from the air.
- Water Reservoir Level (Ultrasonic): To prevent pump cavitation (burning out the motor).
- Time Since Last Pulse: To track rate of change in evaporation.
The System Prompt:
The “Architect” is governed by a specific system prompt that forces it to think like a cautious botanist:
“You are the Arid Architect, a senior botanical agent specializing in epiphytic succulents. Your primary mission is to prevent root rot. You must view watering as a last resort. When analyzing a pulse:
- Check if the water reservoir has at least 100ml; if not, ABORT and nudge the human.
- If soil is > 850 (Dry), check humidity. If humidity > 70%, suggest waiting 24h as the plant can ‘drink’ from the air.
- If watering is triggered, only run the pump for 3 seconds.
- Always provide your reasoning in the Slack report.”
Evolving to Multi-Modal Vision
The next evolution of the Arid Architect is moving beyond raw sensor data to Visual Intelligence. While the sensors tell us about the environment, the leaves tell us about the plant’s actual health.
We are updating the system prompt to include a “Visual Audit” step. Instead of just reading numbers, the agent will analyze the daily growth photo:
“In addition to sensor data, you are provided with a 1024x1024 crop of the plant.
- Analyze Turgor: Do the leaves look plump or shrivelled?
- Color Check: Are there signs of yellowing (over-watering) or browning (under-watering/sunburn)?
- Growth Pattern: Compare with previous pulse. Is there new node development?
Decision Override: If sensors say ‘Thirsty’ but the image shows plump leaves, DELAY watering. The plant is still holding enough moisture.”
Mapping the Senses: How the Hardware Works
The hardware provides the raw data, but it’s important to understand how the agent perceives the world.
The sensory toolkit: Arduino Uno, DHT11, Soil Probe, Ultrasonic sensor, and Relay.
1. The Soil Probe (Conductivity)
The soil moisture sensor works by measuring electrical resistance between two metal probes. Water conducts electricity better than dry soil. When the soil is wet, the resistance is low, returning a lower analog value. As it dries, the resistance increases. The agent interprets these raw electrical signals into a “percent-dryness” metric.
2. The Ultrasonic “Ears” (Distance)
To monitor the “coffee sipper” reservoir, we use the HC-SR04. It sends a high-frequency sound pulse that bounces off the water’s surface. By measuring the “time-of-flight” (how long it takes for the echo to return), the agent calculates the exact distance to the water. This tells it exactly how many milliliters are left in the tank.
3. Ambient Mapping (Temperature & Humidity)
The DHT11 combines a capacitive humidity sensor and a thermistor. For the String of Nickels, the humidity reading is often more important than the temperature, as it dictates how much moisture the plant can pull directly from the air.
Next step: Adding Vision
Currently, the system uses “daily growth checks.” Every 24 hours, it captures a static photo and stores it in the /photos directory. This allows the agent (and me) to track slow-motion pixel-shifts that indicate growth or distress.
But we’re moving toward higher-fidelity vision. The next step is connecting a dedicated live webcam. This will allow for:
- Real-time Video: Watching the plant react to sunlight in a time-lapse.
- AI Vision Analysis: Using AI to visually inspect the leaves for yellowing or shriveling, adding a literal “visual pulse” to the agent’s decision matrix.
Talking via OpenClaw and Slack
The highlight of the new setup is the communication layer. I’ve linked the Python agent to OpenClaw, which pushes the logs directly to Slack.
OpenClaw pushing real-time botanical reasoning to Slack.
- Status Reports: After every pulse, I get a quick summary in a dedicated Slack channel.
- Nudges: If the soil is bone dry (
> 850) or the water tank is low, the agent pings me. It’s a proactive nudge, not a loud alarm. - Contextual Reasoning: The agent provides actual logic: “Soil is dry, but skip watering for 24h. Humidity is high (75%), so we don’t want to risk root rot today.”
The Terminal Dashboard
I’ve designed a static dashboard that reflects the “Signal in the Void” aesthetic. It provides a real-time view of the plant’s health, environmental stats, and historical pulse data.
The Terminal Dashboard: Real-time visualization of the garden’s pulse.