# Ha Custom Cards

> Configure HACS custom cards for beautiful Home Assistant dashboards including ApexCharts, modern-circular-gauge, bubble-card, mini-graph-card, and mushroom. Use when creating visually rich dashboards with graphs, gauges, separators, or time-series visualizations. Covers card configurations, color schemes, layouts, and HACS installation.

- Skill: `majiayu000/ha-custom-cards-2` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add majiayu000/ha-custom-cards-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/ha-custom-cards-2/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/majiayu000/ha-custom-cards-2

---


# Home Assistant Custom Cards

Configure HACS (Home Assistant Community Store) custom cards for enhanced dashboard visualizations.

## Installed Cards

| Card | Purpose | Repository ID |
|------|---------|---------------|
| `mini-graph-card` | Compact sparkline graphs | 151280062 |
| `bubble-card` | Section separators with icons | 680112919 |
| `modern-circular-gauge` | Beautiful circular gauges | 871730343 |
| `lovelace-mushroom` | Modern entity cards | 444350375 |
| `apexcharts-card` | Advanced graphs with time axis | 331701152 |

## Quick Start

### Modern Circular Gauge (VALIDATED)

```yaml
type: custom:modern-circular-gauge
entity: sensor.temperature
name: Temperature
min: 10
max: 40
needle: true
segments:
  - from: 10
    color: "#3498db"    # Cold - blue
  - from: 18
    color: "#2ecc71"    # Comfortable - green
  - from: 26
    color: "#f1c40f"    # Warm - yellow
  - from: 32
    color: "#e74c3c"    # Hot - red
```

### ApexCharts with Time Axis (VALIDATED)

**CRITICAL:** The `span.end` field must be one of: "minute", "hour", "day", "week", "month", "year", "isoWeek"

```yaml
type: custom:apexcharts-card
header:
  show: true
  title: 24 Hour History
  show_states: true
graph_span: 24h
span:
  end: hour  # REQUIRED: must be minute/hour/day/week/month/year/isoWeek
yaxis:
  - min: 0
    max: 50
    decimals: 1
apex_config:
  chart:
    height: 200
  xaxis:
    type: datetime
    labels:
      datetimeFormatter:
        hour: "HH:mm"
  legend:
    show: true
series:
  - entity: sensor.temperature
    name: Temperature
    color: "#e74c3c"
    stroke_width: 2
```

**Common ApexCharts Errors:**
- WRONG: `"span": {"end": "now"}` → ❌ Causes parsing error
- CORRECT: `"span": {"end": "hour"}` → ✅ Valid value

### Bubble Card Separator

```yaml
type: custom:bubble-card
card_type: separator
name: Section Name
icon: mdi:thermometer
```

### Mushroom Climate Card (VALIDATED)

```yaml
type: custom:mushroom-climate-card
entity: climate.ac_unit
name: AC Name
hvac_modes:
  - "off"
  - cool
  - heat
  - auto
show_temperature_control: true
collapsible_controls: true
```

## Common Patterns

### Grid Layout with Gauges

```yaml
type: grid
columns: 3
square: false
cards:
  - type: custom:modern-circular-gauge
    entity: sensor.officeht_temperature
    name: Temperature
    min: 10
    max: 40
    needle: true
    segments:
      - from: 10
        color: "#3498db"
      - from: 18
        color: "#2ecc71"
      - from: 26
        color: "#f1c40f"
      - from: 32
        color: "#e74c3c"
  - type: custom:modern-circular-gauge
    entity: sensor.officeht_humidity
    name: Humidity
    min: 0
    max: 100
    needle: true
    segments:
      - from: 0
        color: "#e74c3c"
      - from: 30
        color: "#f1c40f"
      - from: 40
        color: "#2ecc71"
      - from: 60
        color: "#f1c40f"
      - from: 70
        color: "#e74c3c"
```

See `examples/examples.md` for complete environmental dashboard section with separators and graphs.

## ApexCharts Advanced Features

### Valid Span Configuration (VALIDATED)

**CRITICAL:** Always use one of these valid values for `span.end`:

```yaml
span:
  end: minute   # Start of current minute
  end: hour     # Start of current hour
  end: day      # Start of current day
  end: week     # Start of current week
  end: month    # Start of current month
  end: year     # Start of current year
  end: isoWeek  # Start of ISO week (Monday)
```

**Never use:** `"now"` or other string values - these cause errors.

### Dual Y-Axis

```yaml
type: custom:apexcharts-card
header:
  show: true
  title: Temperature & Humidity
graph_span: 24h
span:
  end: hour
yaxis:
  - id: temp
    min: 0
    max: 50
    decimals: 1
  - id: humidity
    opposite: true
    min: 0
    max: 100
series:
  - entity: sensor.temperature
    name: Temperature
    yaxis_id: temp
    color: "#e74c3c"
    stroke_width: 2
  - entity: sensor.humidity
    name: Humidity
    yaxis_id: humidity
    color: "#3498db"
    stroke_width: 2
```

### Annotations (Sunrise/Sunset)

**WARNING:** JavaScript template annotations may cause errors. Use with caution.

```yaml
apex_config:
  annotations:
    xaxis:
      - x: "${ new Date(states['sun.sun'].attributes.next_rising).getTime() }"
        borderColor: "#FFA500"
        label:
          text: Sunrise
          style:
            background: "#FFA500"
```

**Note:** If annotations cause configuration errors, remove them or use static timestamps instead.

See `references/reference.md` for complete ApexCharts advanced features and time formatting options.

## Supporting Files

- **examples/examples.md** - Comprehensive examples (environmental dashboard section, grid layouts, mushroom cards, ApexCharts patterns)
- **references/reference.md** - Color schemes, HACS installation (UI and API), troubleshooting, best practices, official documentation

## HACS Installation

### Via UI

1. Open HACS → Frontend
2. Search for card name
3. Click Download
4. Restart Home Assistant

### Via API (Programmatic)

```python
import json
import websocket

ws_url = "ws://192.168.68.123:8123/api/websocket"
ws = websocket.create_connection(ws_url)

# Auth
ws.recv()
ws.send(json.dumps({
    "type": "auth",
    "access_token": os.environ["HA_LONG_LIVED_TOKEN"]
}))
ws.recv()

# Install card by repository ID
ws.send(json.dumps({
    "id": 1,
    "type": "hacs/repository/download",
    "repository": 151280062,  # mini-graph-card
}))
response = json.loads(ws.recv())
ws.close()
```

## Common Error Patterns

### 1. ApexCharts span error

Check `span.end` uses valid value (hour/day/week/month/year)

```yaml
# WRONG
span:
  end: now  # ❌

# CORRECT
span:
  end: hour  # ✅
```

### 2. Entity not found

Verify entity exists in Developer Tools → States

### 3. Card not loading

Check HACS installation and browser console (F12)

### 4. JavaScript template error

Remove or simplify template annotations

See `references/reference.md` for complete troubleshooting guide.

## Best Practices

1. **Use meaningful colors**: Red for warnings/hot, blue for cold/water, green for normal
2. **Test incrementally**: Add cards one at a time and validate
3. **Check browser console**: View errors in browser console (F12)
4. **Validate entities**: Ensure entity IDs exist before using in cards
5. **Restart HA after HACS install**: Custom cards require restart to activate

## Notes

- ApexCharts `span.end` MUST use valid enum values (minute/hour/day/week/month/year/isoWeek)
- All HACS cards require Home Assistant restart after installation
- Repository IDs: mini-graph-card (151280062), apexcharts-card (331701152), bubble-card (680112919)
- JavaScript template annotations may cause errors - test before deploying
- Use Developer Tools → States to verify entity IDs exist

