Manage your garden with Notion and automate reminders with Home Assistant. Track watering, fertilizing, and pruning schedules for all your plants in one place.
- ๐ฟ Automatic Setup - No coding required, everything happens in the Home Assistant UI
- ๐๏ธ Auto-Create Database - Integration creates the Notion database for you
- ๐ Smart Reminders - Never forget to water, fertilize, or prune
- ๐ Self-Healing Dashboard Card - Drop
custom:garden-care-root-cardin any dashboard; discovers plants at runtime - ๐ Area-Based Bulk Care - Group plants by HA area and water/fertilize/prune an entire area at once
- ๐ผ๏ธ Area Background Images - Area section headers use your HA area picture automatically
- ๐๏ธ Responsive Grid Layout - Plants arranged in a multi-column grid, one column per area
- ๐ฑ๏ธ Clickable Plant Cards - Click the plant name to open the HA more-info dialog
- โ Add Plant Form - Add new plants from the dashboard; entities refresh automatically
- ๐ค AI-Powered Plant Addition - Add plants with automatic care info using your AI assistant
- ๐ Bidirectional Sync - Update Notion from Home Assistant and vice versa
- ๐ชด Example Plants - Pre-configured templates to get started
- ๐ฑ Mobile Friendly - Works on all Home Assistant apps
- โ๏ธ Sun Exposure - Track light requirements (Full Sun, Partial Sun, Shade)
- ๐ Harvest Info - Record harvest months and notes
- ๐ป Companion Plants - Get planting suggestions
- ๐ซ Bad Companions - Plants to avoid planting nearby
- ๐ Bee Friendly - Mark pollinator-friendly plants
โ ๏ธ Toxicity Warnings - Safety info for pets and children- ๐ฑ Lawn Care - Track aeration and sanding schedules
- ๐ Lifecycle - Perennial, Annual, or Biennial
- ๐ก๏ธ Hardiness Zone - USDA zones 1-13
- ๐ชด Soil Type - Sandy, Loamy, Clay, etc.
- โ๏ธ Soil pH - Acidic, Neutral, or Alkaline
- ๐ Height - Expected mature height
- ๐ Growth per Year - Annual growth rate
- โ๏ธ Winterize - Winter protection requirements
- Go to https://www.notion.so/signup
- Sign up for a free account (email or Google/Apple)
- Complete the onboarding
- Go to https://www.notion.so/my-integrations
- Click "+ New integration"
- Fill in the required fields:
- Name:
Home Assistant Garden - Associated workspace: Select your Notion workspace
- Type: Leave as Internal
- Name:
- Under Capabilities, enable at minimum:
- โ Read content
- โ Update content
- โ Insert content
- Click "Save"
- Copy the token (starts with
ntn_...) from the Secrets tab
Note: Make sure to select your workspace and enable all three content capabilities โ without them the integration cannot read or write your Notion database.
- Open Notion and create a new blank page (e.g., "Gardening" or "Home Assistant")
- Connect your integration:
- Click "..." (three dots, top right)
- Select "Connections" โ Add "Home Assistant Garden" โ Confirm
- Copy the page URL from your browser
Option A: HACS (Coming Soon)
- Open HACS โ Integrations โ Search "Notion Garden Care" โ Install
Option B: Manual Install
cd /config/custom_components
git clone https://github.com/pfalzcraft/notion-garden-care.git
cp -r notion-garden-care/custom_components/notion_garden_care .
rm -rf notion-garden-careRestart Home Assistant.
- Go to Settings โ Devices & Services
- Click "+ Add Integration" โ Search "Notion Garden Care"
- Follow the setup wizard:
- Screen 1: Paste your Notion token
- Screen 2: Paste your page URL
- โ Keep "Create database automatically" checked
- โ Keep "Add example plants" checked
- Click Submit
That's it! ๐
The integration will:
- โ Create the "Garden Care" database in Notion with all properties and formulas
- โ Add 5 example plants (Tomatoes, Rose, Apple Tree, Basil, Lawn)
- โ Create aggregate sensors and individual plant sensors in Home Assistant
- โ Register frontend resources automatically (JS cards loaded on every dashboard)
-
Install a Conversation Agent (if you don't have one):
- Settings โ Devices & Services โ Add Integration
- Add one of: OpenAI Conversation, Google Generative AI, Anthropic, or any other AI agent
-
Connect to Garden Care:
- Settings โ Devices & Services โ Notion Garden Care โ Configure (gear icon)
- Select your Conversation Agent โ Submit
-
Add Plants with AI:
- Use the Add Plant form on the dashboard, or:
action: notion_garden_care.add_plant data: plant_name: "Lavender"
The AI fills in all care details tailored to your local climate using your HA location settings.
After setup, assign each plant sensor to a Home Assistant area to enable area grouping and bulk care:
- Settings โ Devices & Services โ find a plant sensor โ click it
- Click the Area field โ select or create an area
- The
garden-care-root-cardgroups and grid update automatically on the next browser refresh
Tip: Set an area picture in Settings โ Areas โ it becomes the background image of that area's section header card.
Aggregate Sensors (always created):
sensor.notion_garden_care_database- All plants from Notionsensor.plants_to_water- Plants needing water todaysensor.plants_to_fertilize- Plants needing fertilizer todaysensor.plants_to_prune- Plants to prune this monthsensor.active_plants_count- Total active plants
Individual Plant Sensors (one per plant):
sensor.garden_care_tomatoesโ shows status, all care dates, and attributes
Each plant sensor state is one of: "OK", "Needs Water", "Needs Fertilizer", "Needs Pruning".
๐ฐ Plants to Water โ "Next Water" date is today or in the past
๐ฟ Plants to Fertilize โ "Next Fertilize" date is today or in the past
โ๏ธ Plants to Prune โ current month is in the plant's "Prune Months" list
๐บ Active Plants Count โ "Active" checkbox is checked
Update your plants from Home Assistant (11 actions available):
# Mark single plant as watered (today)
action: notion_garden_care.mark_as_watered
data:
entity_id: sensor.garden_care_tomatoes
# Mark plant as watered on a specific date
action: notion_garden_care.mark_as_watered
data:
plant_name: "Tomatoes"
date: "2026-01-20"
# Water ALL plants in a Home Assistant area at once
action: notion_garden_care.mark_as_watered
data:
area_id: balcony
# Mark plant as fertilized / pruned / harvested / aerated / sanded / mowed
action: notion_garden_care.mark_as_fertilized
data:
entity_id: sensor.garden_care_rose_bush
# Update any Notion property directly
action: notion_garden_care.update_plant_property
data:
entity_id: sensor.garden_care_tomatoes
property_name: "Water Interval (days)"
property_value: "5"
# Add a new plant using AI
action: notion_garden_care.add_plant
data:
plant_name: "Lavender"
# Refresh data from Notion
action: notion_garden_care.refresh_databaseAll mark_as_* actions accept one of:
entity_idโ select a plant sensorplant_nameโ plant name as a stringpage_idโ Notion page IDarea_idโ HA area ID โ updates all plants in that area at once
Plus an optional date (YYYY-MM-DD, defaults to today).
Configure an AI conversation agent (OpenAI, Google AI, Anthropic, etc.) and the integration will automatically fill in:
- Plant type, lifecycle, hardiness zone, soil requirements
- Sun exposure, watering and fertilizing schedules
- Pruning and harvest months with instructions
- Companion plants, toxicity, bee-friendliness
- Care guide URLs, winter protection, special notes
- All tailored to your local climate via your HA location settings
Set up reminders in seconds via Settings โ Automations & Scenes โ Create Automation โ Start with blueprint:
- Garden Care - Watering Reminder (daily)
- Garden Care - Fertilizing Reminder (daily)
- Garden Care - Pruning Reminder (monthly)
The integration does not create a dashboard automatically โ you add the root card to any existing dashboard yourself.
- Settings โ Dashboards โ open your dashboard โ Edit (pencil icon)
- Add a card โ choose Manual card (YAML editor)
- Paste:
type: custom:garden-care-root-card- Save. The card discovers all your plants and areas automatically โ no further YAML configuration needed.
Tip: Place the card in a full-width section (or set the view to
panel: true) so the grid can use the full screen width.
custom:garden-care-root-card is a self-contained card that:
- Auto-discovers all plant sensors from
hass.statesat page load โ no YAML regeneration needed - Groups by HA area using live
hass.entities/hass.areasdata - Responsive grid โ one column per area, adapts to any screen width
- Area background images โ uses your HA area picture as the section header background
- Rebuilds automatically when plants are added or area assignments change
Each plant card displays:
- Clickable plant name โ click to open the HA more-info dialog
- Area label โ shown below the plant name; updates live when area assignment changes
- Type-specific icon (flower, tree, vegetable, herb, lawn, etc.)
- Next and Last dates for Water, Fertilize, Prune, Harvest (lawn: Aeration, Sanding, Mowed)
- Overdue indicators highlighted in red/orange
- โ Info button โ shows all plant attributes in a popup
- Action buttons โ Water / Fertilize / Prune / Harvest with loading and success feedback
- Delete button โ removes the plant from Notion with inline confirmation
At the top of the dashboard:
- Enter a plant name โ click Add Plant
- AI generates the full care profile
- Duplicate protection โ won't create a plant that already exists
- Auto-refresh โ triggers
refresh_databaseautomatically so the new plant appears without a manual reload
Each HA area gets its own column with:
- A header card showing the area name and bulk action buttons
- The area picture (set in Settings โ Areas) as background with a readable overlay
- All plants assigned to that area stacked below
Plants not assigned to any area appear in a separate column at the end.
The integration creates these properties automatically:
- Name - Plant name
- Type - Plant, Tree, Shrub, Vegetable, Herb, Lawn
- Active - Is the plant still active?
Note: Location is not a Notion field. Use Home Assistant Areas instead โ assign each plant sensor to an area in Settings โ Devices & Services โ (entity) โ Area. This enables area-based grouping and bulk actions.
- Water Interval (days), Last Watered, Next Water (auto-calculated โจ), Water Amount
- Fertilize Interval (days), Last Fertilized, Next Fertilize (auto-calculated โจ), Fertilizer Type
- Prune Months, Prune Instructions, Last Pruned
- Harvest Months, Harvest Notes, Last Harvested
- Lifecycle, Hardiness Zone, Soil Type, Soil pH, Height, Growth per Year, Winterize
- Companion Plants, Bad Companions, Bee Friendly, Toxicity
- Aeration Interval (days), Last Aeration, Next Aeration (auto-calculated โจ)
- Sanding Interval (days), Last Sanded, Next Sanding (auto-calculated โจ), Last Mowed
- Care Instructions, Special Notes, Notes
- Care Instructions URL, Prune Instructions URL, Harvest Instructions URL
- Sun Exposure - Full Sun, Partial Sun, Partial Shade, Full Shade
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ Home Assistant โโโโโโโโโโโค Notion API โโโโโโโโโโบโ Notion โ
โ Integration โ Sync โ (REST) โ Create โ Database โ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ
โผ
Plant sensors created
Aggregate sensors updated hourly
Actions + automations available
`garden-care-root-card` displays plants grouped by area
automation:
- alias: "Morning Garden Report"
trigger:
- platform: time
at: "07:00:00"
actions:
- action: notify.mobile_app
data:
title: "Good Morning! Garden Update"
message: >
๐ฑ {{ states('sensor.active_plants_count') }} plants total
๐ง {{ states('sensor.plants_to_water') }} need water
๐ฟ {{ states('sensor.plants_to_fertilize') }} need fertilizerautomation:
- alias: "Evening Balcony Watering"
trigger:
- platform: time
at: "19:00:00"
actions:
- action: notion_garden_care.mark_as_watered
data:
area_id: balconytype: button
name: Water Tomatoes
tap_action:
action: perform-action
perform_action: notion_garden_care.mark_as_watered
data:
plant_name: Tomatoes
icon: mdi:watering-can- Reload the integration: Settings โ Devices & Services โ Notion Garden Care โ โฎ โ Reload
- Hard-refresh your browser: Ctrl+Shift+R
- Verify sensors exist: Developer Tools โ States โ search for
sensor.garden_care_
The custom:garden-care-root-card discovers plants from hass.states at page load. If sensors exist but plants don't appear, ensure the card is loading its JS resources (see below).
The integration auto-registers both JS files as Lovelace resources on startup. If you see "Custom element doesn't exist":
- Reload the integration
- Hard-refresh your browser (Ctrl+Shift+R)
- Open Developer Tools (F12) โ Console and confirm you see:
PLANT-CARE-CARD Loaded GARDEN-AREA-CARD Loaded GARDEN-CARE-ROOT-CARD Loaded - If the messages are missing, check Settings โ Dashboards โ โฎ โ Resources โ both entries should be present. If not, reload the integration again.
- Verify files are in
custom_components/notion_garden_care/ - Restart Home Assistant
- Check logs: Settings โ System โ Logs
- Check Notion connection: open page in Notion โ "..." โ Connections โ "Home Assistant Garden" should be listed
- Verify your Notion token is correct
- Call
notion_garden_care.refresh_database - Check Home Assistant logs
The Add Plant form automatically triggers a database refresh after creation. If the plant still doesn't appear after ~30 seconds, call notion_garden_care.refresh_database manually, then hard-refresh your browser.
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes
- Open a Pull Request
MIT License โ see LICENSE for details.
- Issues: GitHub Issues
- Discussions: GitHub Discussions
If you find this integration helpful, consider supporting the development:
Made with ๐ฑ for gardeners who love automation
No Python knowledge required ยท No YAML editing needed ยท Just works โจ