Living in an urban city without a garden, I have been exercising my green thumb by accumulating more and more houseplants. I have them tucked away in every light-filled corner, hanging from every rafter in my tall ceilings. Which is a problem, because I have to get a ladder out to water most of them!

Using some cheap plant soil sensors and a simple Python script, I will have Home Assistant check all of my plants and make a list of which need my attention. Then when more than a few need to be watered, I can be notified or have the voice assistant give me an update.





HARDWARE

You could use the Xiaomi plant sensors I’ve linked here, they occasionally go on sale on aliexpress.com. A cheaper option would be to build them yourself (no soldering required) with an esp8266 board. Here’s a shopping list, you don’t need all the sensors but these are the sensors supported by the plant platform.

Building this is beyond this post, but it is fairly simple. Flash the Wemos D1 Mini with ESP Easy firmware, hook up the sensors, and configure them in the ESP Easy web menu to publish to MQTT. Home Assistant can then create sensors via the MQTT Sensor platform.

(Also if anyone knows of a DIY conductivity sensor, please comment, as I’m not aware of one).

PLANTS IN HASS

The plant platform allows us to combine these sensors into one plant entity & set thresholds for alerts for that plant. Here is an example YAML config

plants.yaml

giant_pothos: sensors: moisture: sensor.giant_pothos_moisture battery: sensor.giant_pothos_battery temperature: sensor.giant_pothos_temperature conductivity: sensor.giant_pothos_conductivity brightness: sensor.giant_pothos_light_intensity min_moisture: 10 max_moisture: 100 min_battery: 15 min_conductivity: 200 min_temperature: 45

And here’s the resulting plant entity in the Home Assistant UI

This is wonderful, but I bought a dozen of these Xiaomi sensors when they were on sale. Wouldn’t it be great if, once I’m up on the ladder with a watering can, I could yell out to Alexa to list off which ones need it?





PYTHON SCRIPT

This script uses the python script platform in Home Assistant. I’m going to trigger it anytime my plants update their status, like so:

automations.yaml

- alias: 'Update Plant Problems' trigger: - platform: state entity_id: plant.giant_philodendron, plant.giant_pothos, plant.hanging_red_pothos, plant.hanging_spider_plant, plant.kitchen_pothos, plant.palm, plant.projector_pothos, plant.rubber_plant, plant.small_philodendron, plant.window_spider_plant action: - service: python_script.plant_problems

And now for the script itself. It’s going to create 3 new entities:

sensor.water_plants_number

sensor.fertilize_plants_number

sensor.problem_plants

The last one will contain a number of attributes that will be useful for automations, including lists in human readable form.

python_scripts/plant_problems.py

And here you have it:

TALK TO ME, PLANTS

This is a Home Assistant script, you will need to have a text-to-speech platform configured.

scripts.yaml

tts_plant_info: alias: Announce Plant Info sequence: - service: tts.amazon_polly_say data_template: entity_id: media_player.vlc_tts message: > {% if is_state_attr('sensor.plant_problems','water_number',0) %} No plants need watering. {% elif states.sensor.plant_problems.attributes.water_number | float > 0 %} {{states.sensor.plant_problems.attributes.water}} need to be watered. {% endif %} {% if is_state_attr('sensor.plant_problems','fertilize_number',0) %} No plants need fertilizer. {% elif states.sensor.plant_problems.attributes.fertilize_number | float > 0 %} These plants {{states.sensor.plant_problems.attributes.fertilize}} need fertilizing. {% endif %}

And now your plants talk to you. Welcome to the future. I have added some additional functionality to my set up with Node-Red: Mine also tweet to the world when I’ve ignored them too long. Follow at @diyfuturism.



