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
type: custom:garden-cardInstall
- 1Open the repository in the Marketplace with the Add to Marketplace button above, or add
github.com/juju35/ha-garden-cardas a custom repository (category Dashboard). - 2Download it from the Marketplace.
- 3Reload the browser and add the card from the dashboard editor.
Gallery 12
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_datetimeor 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) |
Water Control, Irrigation Control | Valves (zones), started with gardena_smart_system.valve_open and the chosen duration |
| 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 controllers | Zone switches, started with rainbird.start_irrigation |
|
opensprinkler) |
OpenSprinkler controllers | Stations (…_station_enabled switches, master station left out, state from …_station_running), started with opensprinkler.run_station, stopped with opensprinkler.stop |
| Hydrawise controllers | Zone valves, started with hydrawise.start_watering on the zone's watering sensor; next cycle and remaining watering time |
|
linktap) |
LinkTap taps | Valve, started with linktap.start_watering; its watering duration number as the default, remaining and total duration |
| Rachio controllers | Zone switches (not standby, rain delay or schedules), started with rachio.start_watering |
|
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 |
| 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_windowhours, each entry for the part of it inside the window. Watering is not needed when that amount reachesrain_threshold, when the highest probability reachesrain_probabilitywith some rain expected, or when the weather is rainy now. Arain_sensorreplaces 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.
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_probabilityandrain_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.