Home Assistant projects
All projects

Garden Card

Lovelace card · Home & energy
v1.0.1 · Nov 13, 2026 HA 2024.8.0+ Marketplace

Watering zones, plants and soil moisture, with a rain suggestion.

Cards for the garden: watering zones started for the duration you pick, the next watering, a suggestion to skip it when rain is coming, and your plants and soil sensors as gauges. Zones, plants and the weather are found on their own.

Highlights

  • Watering zones of Gardena, Rain Bird, OpenSprinkler, Hydrawise, LinkTap, Rachio, B-hyve, or any valve
  • Start a zone for the duration you pick, a ring counting down while it waters
  • Next watering and "No watering needed" when rain is coming
  • Plants with moisture, fertility, light, temperature and battery gauges
  • Animated garden: sprinkler, rain cloud, thirsty plant
  • Mini card with a detail button showing the full card

Works with

Brands & integrations

  • Gardena
  • Rain Bird
  • OpenSprinkler
  • Hunter Hydrawise
  • LinkTap
  • Rachio
  • Orbit B-hyve
  • Xiaomi

Cards

garden-cardgarden-mini-card
type: custom:garden-card

Install

  1. 1Open the repository in the Marketplace with the Add to Marketplace button above, or addgithub.com/juju35/ha-garden-card as a custom repository (category Dashboard).
  2. 2Download it from the Marketplace.
  3. 3Reload the browser and add the card from the dashboard editor.

Documentation

From the README

Features

Features

  • Two cards: a full Garden Card (custom:garden-card) and a compact Garden Mini Card (custom:garden-mini-card)
  • Drawn garden (lawn, pop-up sprinkler, potted plant, sky) animated by what goes on: the sprinkler sprays while a zone waters, a cloud rains when watering is not needed, the plant wilts under a burning sun when one of your plants is thirsty (see Animations)
  • Header icon in a tinted round badge, in the color of the garden's state (blue watering, red a plant needs water, orange a plant needs attention, green all fine), and a status chip on the title's line
  • Watering zones: state, next run, soil moisture of the zone, and while it waters a ring that counts down second by second with water spraying from the zone's icon; Start opens a popup at the top of the card to pick the duration (presets 5 to 60 min, or minute by minute), Stop ends the run
  • Each integration is started its own way (Rain Bird, Rachio and B-hyve services in minutes, Gardena smart system and OpenSprinkler in seconds, Hydrawise on its watering sensor, the watering duration number of LinkTap and Gardena Bluetooth), or with a script of your own (see Starting a zone)
  • Next watering: the earliest next run of the zones (Hydrawise next cycle, any timestamp sensor) or of the entity you pick (a timestamp sensor, an input_datetime or a calendar)
  • Rain suggestion: "No watering needed" when the rain expected over the next 24 h reaches 2 mm, when rain is likely (70 % and more) or when it rains now, else the rain expected (or "no rain expected"); the thresholds and the window are options
  • Plants: moisture, fertility (conductivity), light, temperature and battery as gauges, the green band showing the plant's thresholds; a plant that needs water turns red with a pulsing drop
  • Thresholds from the plant's own settings (the Plant Monitor threshold numbers), your configuration, or sensible defaults (those of the plant integration for moisture and fertility)
  • Soil moisture sensors as gauges too
  • Collapsible sections (zones, plants, soil moisture), folded back to their defaults by a click elsewhere on the page
  • Detail button on the mini card (top right): it switches the mini card to the full card's content and back; a click anywhere outside the card brings the compact view back
  • Click any value to open its Home Assistant history (more-info dialog)
  • Visual editor in the dashboard UI for both cards (no YAML needed)
  • Light and dark mode, English, French, German, Spanish, Serbian (Cyrillic and Latin), Italian, Dutch, European Portuguese, Polish, Romanian, Danish, Swedish, Bulgarian, Russian, Ukrainian, Hungarian, Slovak, Czech, Slovenian, Latvian and Greek
  • Single file, no external dependency, the drawings are embedded

Supported integrations

Supported integrations

Integration Devices What the cards use
Gardena smart system (custom, gardena_smart_system) Water Control, Irrigation Control Valves (zones), started with gardena_smart_system.valve_open and the chosen duration
Gardena Bluetooth (core) Water Control Bluetooth, soil moisture sensor Valve, started for the chosen duration with its Open for number (else its manual watering time number, set before opening); remaining time, soil moisture
Rain Bird (core) Rain Bird controllers Zone switches, started with rainbird.start_irrigation
OpenSprinkler (custom, opensprinkler) OpenSprinkler controllers Stations (…_station_enabled switches, master station left out, state from …_station_running), started with opensprinkler.run_station, stopped with opensprinkler.stop
Hunter Hydrawise (core) Hydrawise controllers Zone valves, started with hydrawise.start_watering on the zone's watering sensor; next cycle and remaining watering time
LinkTap (custom, linktap) LinkTap taps Valve, started with linktap.start_watering; its watering duration number as the default, remaining and total duration
Rachio (core) Rachio controllers Zone switches (not standby, rain delay or schedules), started with rachio.start_watering
Orbit B-hyve (custom, bhyve) B-hyve timers and controllers Zone valves (4.x; zone switches of 3.x), started with bhyve.start_watering
Any other valve or switch ESPHome sprinkler, Zigbee water valves, smart plugs on a pump… Listed in zones: opened and closed; a duration with a duration number of its device or your own script
Plant (core) and Plant Monitor (custom) Plants Readings, the integration's problem verdict, and the Plant Monitor threshold numbers
Xiaomi BLE and other plant sensors Mi Flora, Flower Care, Zigbee plant sensors Devices with soil moisture plus fertility or light become plants
Any weather entity Met.no, Météo-France, OpenWeatherMap… Hourly (else twice daily or daily) forecast: precipitation and its probability

The zones of these integrations are found on their own; other valves and switches (a main water shutoff valve is a valve too) are only shown when listed in zones. Details in How it works.

Prerequisites

Prerequisites

Home Assistant 2024.8 or later, with at least a watering zone, a plant, a soil moisture sensor or a weather entity.

Configuration

Configuration

Card types#

Card Type
Garden Card custom:garden-card
Garden Mini Card custom:garden-mini-card

Visual editor#

Edit a dashboard, click Add card and search for Garden Card or Garden Mini Card. Everything is discovered when the lists are left empty; pick zones (valves, switches), plants, plant sensor devices and soil moisture sensors to show only those, choose the weather entity, the rain thresholds, the default watering duration, the sections and the language. The preview updates live, and options left at their default are kept out of the generated YAML; options of a zone or a plant written in YAML (name, duration, thresholds…) are kept when the lists are edited.

Minimal#

type: custom:garden-card
type: custom:garden-mini-card

Full options#

type: custom:garden-card
title: Backyard
weather: weather.home
rain_threshold: 3
rain_probability: 80
rain_window: 24
default_duration: 15
next_run: calendar.watering
zones:
  - valve.lawn
  - entity: switch.rain_bird_sprinkler_1
    name: Hedge drip line
    duration: 30
  - entity: switch.drip_pump
    name: Greenhouse
    script: script.timed_watering
    moisture: sensor.greenhouse_soil_moisture
plants:
  - plant.basil
  - device: Tomatoes
    min_moisture: 25
    max_moisture: 55
  - name: Lemon tree
    moisture: sensor.lemon_moisture
    conductivity: sensor.lemon_conductivity
    illuminance: sensor.lemon_illuminance
    temperature: sensor.lemon_temperature
    image: /local/lemon.jpg
moisture_sensors:
  - sensor.lawn_soil_moisture
  - entity: sensor.bed_soil_moisture
    min: 30
    max: 70
show_title: true
show_subtitle: true
show_weather: true
show_zones: true
show_plants: true
show_soil: true
collapsed:
  - soil
language: en
type: custom:garden-mini-card
weather: weather.home
zoom: true
language: en

Options reference#

Option Card Default Description
title both Garden Card title
show_title both true Show the title in the header
show_subtitle full true Show the subtitle (next watering, or the number of zones and plants)
zones both Automatic Watering zones: entity ids of valves or switches, or objects (see Zone options); empty or absent, the zones of the supported integrations
plants both Automatic Plants: plant.* entity ids, devices (device: its name or id) or plants made of sensors (see Plant options); absent, every plant entity and every plant sensor device
moisture_sensors full Automatic Soil moisture sensors: entity ids, or objects with entity, name, min and max (default 20–60 %); absent, the moisture sensors of no plant and no zone
weather both First weather entity Weather entity whose forecast gives the rain expected; none for no rain suggestion
rain_sensor both — Sensor giving the rain expected over the window (in its unit, mm by default), used instead of the forecast amount (e.g. a Météo-France or OpenWeatherMap rain sensor)
rain_threshold both 2 Rain expected over the window from which watering is not needed, in the forecast's unit (mm, or in)
rain_probability both 70 Rain probability (%) from which watering is not needed, when some rain is expected
rain_window both 24 Forecast window, in hours
next_run both — Entity of the next watering: a timestamp sensor, an input_datetime or a calendar (start of its next event); the earliest of it and of the zones' next runs is shown
default_duration both 10 Duration preselected in the Start popup, in minutes (a zone's duration, else its device's duration number, comes first)
show_weather both true Rain suggestion (and the forecast subscription)
show_zones full true Watering zones section
show_plants full true Plants section
show_soil full true Soil moisture section
collapsed full [] Sections folded by default, among zones, plants and soil. Click a section title (or Tab to it and press Enter or Space) to fold or unfold it
zoom mini true Detail button at the top right of the mini card: it shows the full card's content (with the same options) and switches back to the compact view; a click outside the card also brings the compact view back. false removes the button
language both Auto Force language: fr, en, de, es, sr, sr-Latn, it, nl, pt, pl, ro, da, sv, bg, ru, uk, hu, sk, cs, sl, lv or el (auto-detects from HA settings)

Zone options#

Option Description
entity The valve or switch of the zone (required)
name Name shown (default: the entity's name)
duration Duration preselected in the Start popup, in minutes
script Script that starts the zone instead of the integration: called with the variables zone (the entity id) and minutes
remaining Sensor of the time left: a duration (s, min or h, counted from its last update) or a timestamp of the end
total Sensor of the length of the current run (for the ring)
next_run Timestamp sensor of the zone's next run
duration_entity Number entity set to the duration before opening the zone (unit read from the entity)
open_for Gardena Bluetooth: the Open for number (minutes) that opens the valve for the duration
watering Binary sensor telling the zone waters (Hydrawise: the target of hydrawise.start_watering)
running Binary sensor used as the zone's state instead of the entity's own (OpenSprinkler: …_station_running)
moisture Soil moisture sensor of the zone, shown on its line

Every helper left out is looked for on the zone's device (when the device holds that one zone), by its name: remaining, total duration, next, duration / watering time, watering, Gardena Bluetooth's Open for, and the moisture sensor.

Plant options#

Option Description
entity A plant.* entity (the plant integration or Plant Monitor)
device A device (its name or id) whose sensors make the plant (Mi Flora…)
name Name shown
image Picture of the plant (default: the plant entity's picture)
moisture, conductivity, illuminance, temperature, battery Sensors, for a plant made of sensors or to replace one
min_moisture, max_moisture, min_conductivity, max_conductivity, min_illuminance, max_illuminance, min_temperature, max_temperature, min_battery Thresholds

Default thresholds: those of the plant integration, moisture 20–60 %, fertility 500–3000 µS/cm, battery 20 %. Light and temperature have no default (the plant integration checks light against the day's maximum, so a threshold on the current light would warn every night): set them with the options above, or they come from Plant Monitor's numbers. A plant whose moisture is under its minimum is shown in red (it needs water), other readings out of their range in orange.

Starting a zone#

The Start button opens a popup at the top of the card with the duration (presets of 5, 10, 15, 20, 30, 45 and 60 minutes, and − / + buttons, up to the integration's limit), then:

Zone Call
With script script.turn_on with variables: { zone, minutes }
Gardena smart system gardena_smart_system.valve_open with duration in seconds (whole minutes, 1 to 240)
Rain Bird rainbird.start_irrigation with duration in minutes (1 to 1440)
OpenSprinkler opensprinkler.run_station with run_seconds (up to 18 h)
Hydrawise hydrawise.start_watering with duration in minutes, on the zone's watering binary sensor
Rachio rachio.start_watering with duration in minutes (up to 180, the Rachio limit)
LinkTap linktap.start_watering with seconds (up to 1439 minutes)
Orbit B-hyve bhyve.start_watering with minutes
Gardena Bluetooth number.set_value on its Open for number, in minutes
With a duration number (duration_entity, Gardena Bluetooth without Open for) number.set_value (in the number's unit), then valve.open_valve / switch.turn_on
Other valve or switch valve.open_valve / switch.turn_on, without popup: it runs until stopped (or until its own timer ends)

Stop closes the valve (valve.close_valve), turns the switch off, or calls opensprinkler.stop. The buttons are disabled while the zone is unavailable.

How it works

How it works

The cards read the Home Assistant entity and device registries instead of relying on entity ids: a zone is a valve or a switch of a supported integration (OpenSprinkler: its station switches; Rachio and B-hyve: their zone switches, not the rain delay or schedule ones), and its helpers (remaining time, next run, duration number, watering sensor, soil moisture) are the entities of its device recognised by their translation key or name. Entity ids can therefore be in any language or renamed.

  • Countdown: from the zone's remaining time sensor (a duration counted from its last update, or the timestamp of the end), else from the run the card started. The ring shows what is left of the run: its total duration sensor, the device's duration setting, or the length first seen. The countdown moves every second in place, without redrawing the card.
  • Rain: the card subscribes to the weather entity's forecast as Home Assistant's own weather cards do (hourly when the entity offers it, else twice daily or daily) and adds up the precipitation of the next rain_window hours, each entry for the part of it inside the window. Watering is not needed when that amount reaches rain_threshold, when the highest probability reaches rain_probability with some rain expected, or when the weather is rainy now. A rain_sensor replaces the forecast amount.
  • Plants: a plant entity of the plant integration gives its readings (attributes) and its verdict (problem, e.g. moisture low); a Plant Monitor plant gives its sensors and its threshold numbers (min_soil_moisture…), found on its device; a device with a soil moisture sensor and a conductivity or illuminance sensor (Mi Flora) is a plant of its own. Light is shown on a logarithmic scale.
  • Soil moisture: the moisture sensors (device class moisture) that belong to no plant and no zone.

Support

Support

If you find this project useful, you can support its development:

Buy Me a Coffee

Changelog

CHANGELOG.md

1.0.1Nov 13, 2026Latest

Fixes

  • Folding back on a tap elsewhere now works on iOS (Safari and the companion app): a tap on something that is not clickable sent no click to the page, so the unfolded sections, the popup and the detailed view of the mini card stayed open. The press and the release are caught instead; a slider dragged out of the card and a scroll do not fold anything.
  • Leaving the card (another dashboard view, a conditional card hidden) brings it back in its default state: sections folded as configured, popup closed, mini card compact.
  • Clicks lost under an update: Home Assistant updates the card several times a second, and an update that rewrote the card between the press and the release replaced the element pressed, so that the click landed on the card itself and did nothing. The card is no longer rewritten while a press is in progress; the pending update is drawn right after the click.
  • Focus ring after a mouse click: the focus was put back on the clicked element after each update, which drew the focus ring. It is now kept across updates only for the keyboard.

1.0.0Nov 13, 2026

First release.

Features

  • Garden Card (custom:garden-card): drawn garden animated by what goes on (watering, rain expected, thirsty plant), watering zones with their state, next run and soil moisture, a countdown ring while a zone waters, Start with a duration popup and Stop, the next watering, the rain suggestion ("No watering needed" when rain is expected), plants with gauges and thresholds, and soil moisture sensors; collapsible sections.
  • Garden Mini Card (custom:garden-mini-card): compact view with the zone watering now (countdown and Stop), the next watering, the rain suggestion and the plants needing attention; the detail button switches to the full card.
  • Zones discovered from Gardena smart system, Gardena Bluetooth, Rain Bird, OpenSprinkler, Hunter Hydrawise, LinkTap, Rachio and Orbit B-hyve, each started its own way; any other valve or switch in zones, with a duration number or a script of your own.
  • Plants from the plant integration, Plant Monitor (with its threshold numbers) and plant sensor devices such as Mi Flora.
  • Rain forecast from the weather entity's forecast subscription (or a rain sensor), with rain_threshold, rain_probability and rain_window.
  • Visual editor for both cards; light and dark themes; 22 languages, English in the bundle and every other language in its own file loaded on demand.