# Send Homeassistant Skill to your agent
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
## Fast path
- Download the package from Yavira.
- Extract it into a folder your agent can access.
- Paste one of the prompts below and point your agent at the extracted folder.
## Suggested prompts
### New install

```text
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete.
```
### Upgrade existing

```text
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run.
```
## Machine-readable fields
```json
{
  "schemaVersion": "1.0",
  "item": {
    "slug": "homeassistant-skill",
    "name": "Homeassistant Skill",
    "source": "tencent",
    "type": "skill",
    "category": "效率提升",
    "sourceUrl": "https://clawhub.ai/anotb/homeassistant-skill",
    "canonicalUrl": "https://clawhub.ai/anotb/homeassistant-skill",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadUrl": "/downloads/homeassistant-skill",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=homeassistant-skill",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "packageFormat": "ZIP package",
    "primaryDoc": "SKILL.md",
    "includedAssets": [
      "README.md",
      "SKILL.md"
    ],
    "downloadMode": "redirect",
    "sourceHealth": {
      "source": "tencent",
      "slug": "homeassistant-skill",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T03:36:57.134Z",
      "expiresAt": "2026-05-07T03:36:57.134Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=homeassistant-skill",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=homeassistant-skill",
        "contentDisposition": "attachment; filename=\"homeassistant-skill-2.1.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "homeassistant-skill"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/homeassistant-skill"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    }
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/homeassistant-skill",
    "downloadUrl": "https://openagent3.xyz/downloads/homeassistant-skill",
    "agentUrl": "https://openagent3.xyz/skills/homeassistant-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/homeassistant-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/homeassistant-skill/agent.md"
  }
}
```
## Documentation

### Home Assistant Skill

Control smart home devices via the Home Assistant REST API.

### Setup

Set environment variables:

HA_URL — Your Home Assistant URL (e.g., http://10.0.0.10:8123)
HA_TOKEN — Long-lived access token (create in HA → Profile → Long-Lived Access Tokens)

### Safety Rules

Always confirm with the user before performing these actions:

Locks — locking or unlocking any lock
Alarm panels — arming or disarming
Garage doors — opening or closing (cover.* with device_class: garage)
Security automations — disabling automations related to security or safety
Covers — opening or closing covers that control physical access (gates, barriers)

Never act on security-sensitive devices without explicit user confirmation.

### List all entities

curl -s "$HA_URL/api/states" -H "Authorization: Bearer $HA_TOKEN" \\
  | jq -r '.[].entity_id' | sort

### List entities by domain

# Switches
curl -s "$HA_URL/api/states" -H "Authorization: Bearer $HA_TOKEN" \\
  | jq -r '.[] | select(.entity_id | startswith("switch.")) | "\\(.entity_id): \\(.state)"'

# Lights
curl -s "$HA_URL/api/states" -H "Authorization: Bearer $HA_TOKEN" \\
  | jq -r '.[] | select(.entity_id | startswith("light.")) | "\\(.entity_id): \\(.state)"'

# Sensors
curl -s "$HA_URL/api/states" -H "Authorization: Bearer $HA_TOKEN" \\
  | jq -r '.[] | select(.entity_id | startswith("sensor.")) | "\\(.entity_id): \\(.state) \\(.attributes.unit_of_measurement // "")"'

Replace the domain prefix (switch., light., sensor., etc.) to discover entities
in any domain.

### Get single entity state

curl -s "$HA_URL/api/states/ENTITY_ID" -H "Authorization: Bearer $HA_TOKEN"

### Area & Floor Discovery

Use the template API to query areas, floors, and labels.

# List all areas
curl -s -X POST "$HA_URL/api/template" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"template": "{{ areas() }}"}'

# Entities in a specific area
curl -s -X POST "$HA_URL/api/template" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"template": "{{ area_entities(\\"kitchen\\") }}"}'

# Only lights in an area
curl -s -X POST "$HA_URL/api/template" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"template": "{{ area_entities(\\"kitchen\\") | select(\\"match\\", \\"light.\\") | list }}"}'

# Find which area an entity belongs to
curl -s -X POST "$HA_URL/api/template" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"template": "{{ area_name(\\"light.kitchen\\") }}"}'

# List all floors and their areas
curl -s -X POST "$HA_URL/api/template" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"template": "{% for floor in floors() %}{{ floor }}: {{ floor_areas(floor) }}\\n{% endfor %}"}'

### Switches

# Turn on
curl -s -X POST "$HA_URL/api/services/switch/turn_on" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "switch.office_lamp"}'

# Turn off
curl -s -X POST "$HA_URL/api/services/switch/turn_off" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "switch.office_lamp"}'

# Toggle
curl -s -X POST "$HA_URL/api/services/switch/toggle" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "switch.office_lamp"}'

### Lights

# Turn on with brightness
curl -s -X POST "$HA_URL/api/services/light/turn_on" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "light.living_room", "brightness_pct": 80}'

# Turn on with color (RGB)
curl -s -X POST "$HA_URL/api/services/light/turn_on" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "light.living_room", "rgb_color": [255, 150, 50]}'

# Turn on with color temperature (mireds)
curl -s -X POST "$HA_URL/api/services/light/turn_on" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "light.living_room", "color_temp": 300}'

# Turn off
curl -s -X POST "$HA_URL/api/services/light/turn_off" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "light.living_room"}'

### Scenes

curl -s -X POST "$HA_URL/api/services/scene/turn_on" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "scene.movie_time"}'

### Scripts

# List all scripts
curl -s "$HA_URL/api/states" -H "Authorization: Bearer $HA_TOKEN" \\
  | jq -r '.[] | select(.entity_id | startswith("script.")) | "\\(.entity_id): \\(.state)"'

# Run a script
curl -s -X POST "$HA_URL/api/services/script/turn_on" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "script.bedtime_routine"}'

# Run a script with variables
curl -s -X POST "$HA_URL/api/services/script/bedtime_routine" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"variables": {"brightness": 20, "delay_minutes": 5}}'

### Automations

# List all automations
curl -s "$HA_URL/api/states" -H "Authorization: Bearer $HA_TOKEN" \\
  | jq -r '.[] | select(.entity_id | startswith("automation.")) | "\\(.entity_id): \\(.state)"'

# Trigger an automation
curl -s -X POST "$HA_URL/api/services/automation/trigger" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "automation.morning_routine"}'

# Enable automation
curl -s -X POST "$HA_URL/api/services/automation/turn_on" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "automation.morning_routine"}'

# Disable automation
curl -s -X POST "$HA_URL/api/services/automation/turn_off" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "automation.morning_routine"}'

### Climate Control

# Get thermostat state
curl -s "$HA_URL/api/states/climate.thermostat" -H "Authorization: Bearer $HA_TOKEN" \\
  | jq '{state: .state, current_temp: .attributes.current_temperature, target_temp: .attributes.temperature}'

# Set temperature
curl -s -X POST "$HA_URL/api/services/climate/set_temperature" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "climate.thermostat", "temperature": 72}'

# Set HVAC mode (heat, cool, auto, off)
curl -s -X POST "$HA_URL/api/services/climate/set_hvac_mode" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "climate.thermostat", "hvac_mode": "auto"}'

### Covers (Blinds, Garage Doors)

Safety: Confirm with the user before opening/closing garage doors or gates.

# Open
curl -s -X POST "$HA_URL/api/services/cover/open_cover" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "cover.garage_door"}'

# Close
curl -s -X POST "$HA_URL/api/services/cover/close_cover" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "cover.garage_door"}'

# Set position (0 = closed, 100 = open)
curl -s -X POST "$HA_URL/api/services/cover/set_cover_position" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "cover.blinds", "position": 50}'

### Locks

Safety: Always confirm with the user before locking/unlocking.

# Lock
curl -s -X POST "$HA_URL/api/services/lock/lock" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "lock.front_door"}'

# Unlock
curl -s -X POST "$HA_URL/api/services/lock/unlock" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "lock.front_door"}'

### Fans

# Turn on
curl -s -X POST "$HA_URL/api/services/fan/turn_on" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "fan.bedroom", "percentage": 50}'

# Turn off
curl -s -X POST "$HA_URL/api/services/fan/turn_off" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "fan.bedroom"}'

### Media Players

# Play/pause
curl -s -X POST "$HA_URL/api/services/media_player/media_play_pause" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "media_player.living_room_tv"}'

# Set volume (0.0 to 1.0)
curl -s -X POST "$HA_URL/api/services/media_player/volume_set" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "media_player.living_room_tv", "volume_level": 0.5}'

### Vacuum

# Start cleaning
curl -s -X POST "$HA_URL/api/services/vacuum/start" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "vacuum.robot"}'

# Return to dock
curl -s -X POST "$HA_URL/api/services/vacuum/return_to_base" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "vacuum.robot"}'

### Alarm Control Panel

Safety: Always confirm with the user before arming/disarming.

# Arm (home mode)
curl -s -X POST "$HA_URL/api/services/alarm_control_panel/alarm_arm_home" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "alarm_control_panel.home"}'

# Disarm (requires code if configured)
curl -s -X POST "$HA_URL/api/services/alarm_control_panel/alarm_disarm" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "alarm_control_panel.home", "code": "1234"}'

### Notifications

# List available notification targets
curl -s "$HA_URL/api/services" -H "Authorization: Bearer $HA_TOKEN" \\
  | jq -r '.[] | select(.domain == "notify") | .services | keys[]' | sort

# Send a notification to a mobile device
curl -s -X POST "$HA_URL/api/services/notify/mobile_app_phone" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"message": "Front door opened", "title": "Home Alert"}'

# Send to all devices (default notify service)
curl -s -X POST "$HA_URL/api/services/notify/notify" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"message": "System alert", "title": "Home Assistant"}'

Replace mobile_app_phone with the actual service name from the list command.

### Person & Presence

# Who is home?
curl -s "$HA_URL/api/states" -H "Authorization: Bearer $HA_TOKEN" \\
  | jq -r '.[] | select(.entity_id | startswith("person.")) | "\\(.attributes.friendly_name // .entity_id): \\(.state)"'

# Device tracker locations
curl -s "$HA_URL/api/states" -H "Authorization: Bearer $HA_TOKEN" \\
  | jq -r '.[] | select(.entity_id | startswith("device_tracker.")) | "\\(.entity_id): \\(.state)"'

States: home, not_home, or a zone name.

### Weather

# Current weather
curl -s "$HA_URL/api/states/weather.home" -H "Authorization: Bearer $HA_TOKEN" \\
  | jq '{state: .state, temperature: .attributes.temperature, humidity: .attributes.humidity, wind_speed: .attributes.wind_speed}'

# Get forecast (daily)
curl -s -X POST "$HA_URL/api/services/weather/get_forecasts" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "weather.home", "type": "daily"}'

# Get forecast (hourly)
curl -s -X POST "$HA_URL/api/services/weather/get_forecasts" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "weather.home", "type": "hourly"}'

### Input Helpers

# Toggle an input boolean
curl -s -X POST "$HA_URL/api/services/input_boolean/toggle" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "input_boolean.guest_mode"}'

# Set input number
curl -s -X POST "$HA_URL/api/services/input_number/set_value" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "input_number.target_temperature", "value": 72}'

# Set input select
curl -s -X POST "$HA_URL/api/services/input_select/select_option" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "input_select.house_mode", "option": "Away"}'

# Set input text
curl -s -X POST "$HA_URL/api/services/input_text/set_value" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "input_text.welcome_message", "value": "Welcome home!"}'

# Set input datetime
curl -s -X POST "$HA_URL/api/services/input_datetime/set_datetime" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "input_datetime.alarm_time", "time": "07:30:00"}'

### Calendar

# List all calendars
curl -s "$HA_URL/api/calendars" -H "Authorization: Bearer $HA_TOKEN" \\
  | jq -r '.[].entity_id'

# Get upcoming events (next 7 days)
curl -s "$HA_URL/api/calendars/calendar.personal?start=$(date -u +%Y-%m-%dT%H:%M:%S.000Z)&end=$(date -u -v+7d +%Y-%m-%dT%H:%M:%S.000Z)" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  | jq '[.[] | {summary: .summary, start: .start.dateTime, end: .end.dateTime}]'

### Text-to-Speech

curl -s -X POST "$HA_URL/api/services/tts/speak" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "tts.google_en", "media_player_entity_id": "media_player.living_room_speaker", "message": "Dinner is ready"}'

Replace tts.google_en with your TTS entity and media_player.living_room_speaker with the target speaker.

### Call Any Service

The general pattern for any HA service:

curl -s -X POST "$HA_URL/api/services/{domain}/{service}" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": "domain.entity_name", ...}'

### Batch operations

Control multiple entities in one call by passing an array of entity IDs:

# Turn off all living room lights at once
curl -s -X POST "$HA_URL/api/services/light/turn_off" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"entity_id": ["light.living_room", "light.living_room_lamp", "light.living_room_ceiling"]}'

### Check API connectivity

curl -s -o /dev/null -w "%{http_code}" "$HA_URL/api/" \\
  -H "Authorization: Bearer $HA_TOKEN"
# Expect: 200

### Verify entity exists before acting

HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \\
  "$HA_URL/api/states/light.nonexistent" \\
  -H "Authorization: Bearer $HA_TOKEN")
# 200 = exists, 404 = not found

### HTTP status codes

CodeMeaning200Success400Bad request (malformed JSON or invalid service data)401Unauthorized (bad or missing token)404Entity or endpoint not found405Method not allowed (wrong HTTP method)503Home Assistant is starting up or unavailable

### Response Format

Service calls return an array of state objects for affected entities:

[{"entity_id": "light.living_room", "state": "on", "attributes": {...}, "last_changed": "..."}]

Successful call with no state change: returns [] (empty array)
State read (/api/states/...): returns a single state object
Errors: returns {"message": "..."} with an HTTP error code

### Template Evaluation

The /api/template endpoint evaluates Jinja2 templates server-side. Useful for computed queries.

curl -s -X POST "$HA_URL/api/template" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"template": "TEMPLATE_STRING"}'

### Examples

# Count entities by domain
curl -s -X POST "$HA_URL/api/template" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"template": "{{ states.light | list | count }} lights"}'

# Get entity state in a template
curl -s -X POST "$HA_URL/api/template" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"template": "{{ states(\\"light.living_room\\") }}"}'

# List all entities that are "on"
curl -s -X POST "$HA_URL/api/template" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  -H "Content-Type: application/json" \\
  -d '{"template": "{{ states | selectattr(\\"state\\", \\"eq\\", \\"on\\") | map(attribute=\\"entity_id\\") | list }}"}'

Available template functions: states(), is_state(), state_attr(), areas(), area_entities(), area_name(), floors(), floor_areas(), labels(), label_entities(), devices(), device_entities(), now(), relative_time().

### Entity state history

# Last 24 hours for a specific entity
curl -s "$HA_URL/api/history/period?filter_entity_id=sensor.temperature" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  | jq '.[0] | [.[] | {state: .state, last_changed: .last_changed}]'

# Specific time range (ISO 8601)
curl -s "$HA_URL/api/history/period/2025-01-15T00:00:00Z?end_time=2025-01-15T23:59:59Z&filter_entity_id=sensor.temperature" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  | jq '.[0]'

### Logbook

# Recent logbook entries
curl -s "$HA_URL/api/logbook" -H "Authorization: Bearer $HA_TOKEN" \\
  | jq '.[:10]'

# Logbook for a specific entity
curl -s "$HA_URL/api/logbook?entity=light.living_room" \\
  -H "Authorization: Bearer $HA_TOKEN" \\
  | jq '.[:10] | [.[] | {name: .name, message: .message, when: .when}]'

### Dashboard Overview

Quick status of all active devices:

# All lights that are on
curl -s "$HA_URL/api/states" -H "Authorization: Bearer $HA_TOKEN" \\
  | jq -r '.[] | select(.entity_id | startswith("light.")) | select(.state == "on") | .entity_id'

# All open doors/windows (binary sensors)
curl -s "$HA_URL/api/states" -H "Authorization: Bearer $HA_TOKEN" \\
  | jq -r '.[] | select(.entity_id | startswith("binary_sensor.")) | select(.state == "on") | select(.attributes.device_class == "door" or .attributes.device_class == "window") | .entity_id'

# Temperature sensors
curl -s "$HA_URL/api/states" -H "Authorization: Bearer $HA_TOKEN" \\
  | jq -r '.[] | select(.entity_id | startswith("sensor.")) | select(.attributes.device_class == "temperature") | "\\(.attributes.friendly_name // .entity_id): \\(.state)\\(.attributes.unit_of_measurement // "")"'

# Climate summary (all thermostats)
curl -s "$HA_URL/api/states" -H "Authorization: Bearer $HA_TOKEN" \\
  | jq -r '.[] | select(.entity_id | startswith("climate.")) | "\\(.attributes.friendly_name // .entity_id): \\(.state), current: \\(.attributes.current_temperature)°, target: \\(.attributes.temperature)°"'

# Lock status
curl -s "$HA_URL/api/states" -H "Authorization: Bearer $HA_TOKEN" \\
  | jq -r '.[] | select(.entity_id | startswith("lock.")) | "\\(.attributes.friendly_name // .entity_id): \\(.state)"'

# Who is home
curl -s "$HA_URL/api/states" -H "Authorization: Bearer $HA_TOKEN" \\
  | jq -r '.[] | select(.entity_id | startswith("person.")) | "\\(.attributes.friendly_name // .entity_id): \\(.state)"'

### Entity Domains

DomainExamplesswitch.*Smart plugs, generic switcheslight.*Lights (Hue, LIFX, etc.)scene.*Pre-configured scenesscript.*Reusable action sequencesautomation.*Automationsclimate.*Thermostats, AC unitscover.*Blinds, garage doors, gateslock.*Smart locksfan.*Fans, ventilationmedia_player.*TVs, speakers, streaming devicesvacuum.*Robot vacuumsalarm_control_panel.*Security systemsnotify.*Notification targetsperson.*People / presence trackingdevice_tracker.*Device locationsweather.*Weather conditions and forecastscalendar.*Calendar eventstts.*Text-to-speech enginessensor.*Temperature, humidity, power, etc.binary_sensor.*Motion, door/window, presenceinput_boolean.*Virtual togglesinput_number.*Numeric slidersinput_select.*Dropdown selectorsinput_text.*Text inputsinput_datetime.*Date/time inputs

### Notes

API returns JSON by default
Long-lived tokens don't expire — store securely
Test entity IDs with the list command first
For locks, alarms, and garage doors — always confirm actions with the user
## Trust
- Source: tencent
- Verification: Indexed source record
- Publisher: anotb
- Version: 2.1.0
## Source health
- Status: healthy
- Item download looks usable.
- Yavira can redirect you to the upstream package for this item.
- Health scope: item
- Reason: direct_download_ok
- Checked at: 2026-04-30T03:36:57.134Z
- Expires at: 2026-05-07T03:36:57.134Z
- Recommended action: Download for OpenClaw
## Links
- [Detail page](https://openagent3.xyz/skills/homeassistant-skill)
- [Send to Agent page](https://openagent3.xyz/skills/homeassistant-skill/agent)
- [JSON manifest](https://openagent3.xyz/skills/homeassistant-skill/agent.json)
- [Markdown brief](https://openagent3.xyz/skills/homeassistant-skill/agent.md)
- [Download page](https://openagent3.xyz/downloads/homeassistant-skill)