dawiddutoit/custom-claude/ha-conditional-cards

Claude Code and agent skill by dawiddutoit/custom-claude

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Implements conditional visibility for Home Assistant dashboard cards using state, numeric_state, screen, user, time, and/or conditions via Conditional Card wrapper and per-card visibility property. Use when asked to "hide card when", "show only if", "user-specific dashboard", "mobile vs desktop cards", "conditional visibility", or "show card based on state/time/user".

Install

npx vskill@latest install dawiddutoit/custom-claude/ha-conditional-cards

SKILL.md

Works with Lovelace YAML dashboards and conditional/visibility card configurations.

Home Assistant Conditional Cards

Control card visibility dynamically based on states, users, screen size, and complex conditions.

Overview

Home Assistant provides two approaches for conditional visibility:

  • Conditional Card (wrapper): Shows/hides entire card based on conditions
  • Per-Card Visibility: Native visibility property on any card

Both support multiple condition types:

  • state: Entity matches specific state
  • numeric_state: Sensor value within range
  • screen: Screen width/media queries
  • user: Current user matches list
  • time: Current time within range
  • and/or: Complex logic combinations

When to Use This Skill

Use this skill when you need to:

  • Show cards only when specific conditions are met (person home, motion detected, temperature threshold)
  • Create responsive dashboards with mobile vs desktop layouts
  • Build user-specific views with different access levels
  • Display time-based cards (daytime vs nighttime controls)
  • Combine multiple conditions with AND/OR logic for complex visibility rules

Do NOT use when:

  • You need to modify card content based on state (use template cards instead)
  • Building static dashboards where all cards are always visible
  • Checking entity attributes directly (create template sensor first)

Quick Start

Conditional Card (Wrapper)
yaml
type: conditional
conditions:
- condition: state
entity: person.john
state: home
card:
type: entities
entities:
- light.bedroom
Per-Card Visibility (Native)
yaml
type: entities
entities:
- light.bedroom
visibility:
- condition: state
entity: person.john
state: home

Usage

  1. Choose approach: Use Conditional Card wrapper for complex logic, per-card visibility for simple conditions
  2. Select condition type: state, numeric_state, screen, user, time, and/or
  3. Apply condition: Add conditions to conditional card or visibility to any card
  4. Test in edit mode: Exit edit mode to test visibility (cards always show when editing)
  5. Verify entity states: Check Developer Tools → States to debug conditions

See Condition Types Reference below for all available conditions and syntax.

Condition Types Reference

ConditionParametersUse Case
stateentity, stateShow when entity has specific state
numeric_stateentity, above, belowShow when sensor in range
screenmedia_queryShow based on screen width
userusers (list of user IDs)Show for specific users only
timeafter, beforeShow during specific time window
andList of conditionsAll conditions must be true
orList of conditionsAt least one condition must be true

State Conditions

Basic State Match
yaml
type: conditional
conditions:
- condition: state
entity: binary_sensor.motion_living_room
state: "on"
card:
type: camera
entity: camera.living_room
Multiple State Options
yaml
visibility:
- condition: state
entity: climate.living_room
state_not:
- "off"
- unavailable
State with Attributes (Workaround)

Note: Native conditional cards don't support attribute conditions. Create a template sensor instead.

yaml
# In configuration.yaml
template:
- sensor:
- name: "AC Mode Cool"
state: "{{ state_attr('climate.living_room', 'hvac_mode') == 'cool' }}"
# In dashboard
visibility:
- condition: state
entity: sensor.ac_mode_cool
state: "True"

Numeric State Conditions

Temperature Range
yaml
type: entities
entities:
- climate.bedroom
visibility:
- condition: numeric_state
entity: sensor.temperature
above: 18
below: 30
Above Threshold
yaml
visibility:
- condition: numeric_state
entity: sensor.battery
below: 20 # Show when battery < 20%
Between Values
yaml
visibility:
- condition: numeric_state
entity: sensor.humidity
above: 40
below: 60 # Show when 40% < humidity < 60%

Screen/Responsive Conditions

Mobile Only
yaml
visibility:
- condition: screen
media_query: "(max-width: 600px)"
Desktop Only
yaml
visibility:
- condition: screen
media_query: "(min-width: 1280px)"
Tablet Range
yaml
visibility:
- condition: screen
media_query: "(min-width: 601px) and (max-width: 1279px)"
Common Media Queries
yaml
# Mobile (portrait)
media_query: "(max-width: 600px)"
# Tablet (portrait)
media_query: "(min-width: 601px) and (max-width: 900px)"
# Desktop
media_query: "(min-width: 1280px)"
# Landscape orientation
media_query: "(orientation: landscape)"
# Portrait orientation
media_query: "(orientation: portrait)"

User Conditions

Single User
yaml
visibility:
- condition: user
users:
- 1234567890abcdef # User ID (not username)
Multiple Users (Admin Access)
yaml
type: entities
entities:
- switch.advanced_settings
visibility:
- condition: user
users:
- 1234567890abcdef # Admin user 1
- fedcba0987654321 # Admin user 2

Finding User IDs:

  1. Go to Settings → People
  2. Click on user
  3. User ID is in the URL: /config/person/USER_ID_HERE

Time Conditions

During Daytime
yaml
visibility:
- condition: time
after: "06:00:00"
before: "22:00:00"
Night Mode Cards
yaml
visibility:
- condition: time
after: "22:00:00"
before: "06:00:00"
Business Hours
yaml
visibility:
- condition: time
after: "09:00:00"
before: "17:00:00"
weekday:
- mon
- tue
- wed
- thu
- fri

Complex Logic (AND/OR)

AND Condition (All Must Be True)
yaml
visibility:
- condition: and
conditions:
- condition: state
entity: person.john
state: home
- condition: numeric_state
entity: sensor.temperature
below: 18
- condition: time
after: "06:00:00"
before: "23:00:00"
OR Condition (At Least One Must Be True)
yaml
visibility:
- condition: or
conditions:
- condition: state
entity: person.john
state: home
- condition: state
entity: person.jane
state: home
Nested Logic
yaml
visibility:
- condition: and
conditions:
# Show during daytime...
- condition: time
after: "06:00:00"
before: "22:00:00"
# ...AND (someone is home OR security is armed)
- condition: or
conditions:
- condition: state
entity: person.john
state: home
- condition: state
entity: alarm_control_panel.home
state: armed_away

Real-World Patterns

Show Camera When Motion Detected
yaml
type: conditional
conditions:
- condition: state
entity: binary_sensor.motion_living_room
state: "on"
card:
type: camera
entity: camera.living_room
Mobile vs Desktop Layout
yaml
# Mobile: Compact view
type: custom:mushroom-chips-card
visibility:
- condition: screen
media_query: "(max-width: 600px)"
# Desktop: Detailed view
type: grid
columns: 3
visibility:
- condition: screen
media_query: "(min-width: 1280px)"
User-Specific Controls
yaml
type: entities
entities:
- switch.developer_mode
visibility:
- condition: user
users:
- 1234567890abcdef # Admin user ID (Settings → People → URL)

For more patterns (low battery alerts, temperature warnings, occupied rooms, time-based controls), see references/advanced-patterns.md.

Best Practices

  1. Combine approaches: Use conditional card for complex logic, per-card visibility for simple conditions
  2. Test in edit mode: Exit edit mode to test visibility (cards always visible when editing)
  3. Use helper entities: Create template sensors for attribute-based or complex conditions
  4. Add buffer zones: Use hysteresis for numeric conditions to prevent flapping
  5. Document user IDs: Keep reference of user IDs for maintenance
  6. Screen conditions: Use media queries for responsive mobile/desktop layouts

Limitations

Cannot check attributes directly - Create template sensor to expose attribute as entity state.

No template conditions - Create template binary sensor instead.

Always visible in edit mode - Must exit edit mode to test visibility behavior.

For detailed workarounds, see references/advanced-patterns.md.

Troubleshooting

IssueSolution
Card not hidingExit edit mode, check entity state, verify YAML indentation
User condition failsUse user ID (not username), find in Settings → People → URL
Time condition failsUse 24-hour format "23:00:00", check HA timezone
Numeric condition failsVerify sensor has numeric state (not "unknown")
Screen condition failsTest on actual device (not browser resize)

For detailed troubleshooting, see references/advanced-patterns.md.

Supporting Files

  • references/advanced-patterns.md - Complex logic patterns, real-world use cases, workarounds, detailed troubleshooting, best practices, common media queries

Official Documentation

Security

  • Security scanPassed, 95 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
1
7-day trend score
3

Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 31 Mar 2026, 7 months ago.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/dawiddutoit/custom-claude/ha-conditional-cards/badge)](https://verified-skill.com/skills/dawiddutoit/custom-claude/ha-conditional-cards)

Something wrong with this skill or its page? Tell us.