- Add complete homeassistant skill source to skills/ directory - Includes all scripts, references, and automation templates - Matches format of other skills in repository
285 lines
4.5 KiB
Markdown
285 lines
4.5 KiB
Markdown
# Home Assistant API Reference
|
|
|
|
## REST API
|
|
|
|
### Authentication
|
|
|
|
All API requests require a Long-Lived Access Token passed in the Authorization header:
|
|
|
|
```
|
|
Authorization: Bearer YOUR_TOKEN_HERE
|
|
```
|
|
|
|
Obtain tokens from: `http://YOUR_HA_URL:8123/profile`
|
|
|
|
### Base URL
|
|
|
|
```
|
|
http://YOUR_HA_URL:8123/api/
|
|
```
|
|
|
|
### Key Endpoints
|
|
|
|
#### Get All Entity States
|
|
|
|
```http
|
|
GET /api/states
|
|
```
|
|
|
|
Returns array of all entities with their current states, attributes, and timestamps.
|
|
|
|
#### Get Specific Entity State
|
|
|
|
```http
|
|
GET /api/states/<entity_id>
|
|
```
|
|
|
|
Example: `/api/states/light.living_room`
|
|
|
|
Returns single entity object with state, attributes, last_changed, last_updated.
|
|
|
|
#### Call a Service
|
|
|
|
```http
|
|
POST /api/services/<domain>/<service>
|
|
```
|
|
|
|
Example: `/api/services/light/turn_on`
|
|
|
|
Request body (optional):
|
|
```json
|
|
{
|
|
"entity_id": "light.living_room",
|
|
"brightness": 255,
|
|
"color_name": "blue"
|
|
}
|
|
```
|
|
|
|
Returns array of entity states that were changed by the service call.
|
|
|
|
#### List All Services
|
|
|
|
```http
|
|
GET /api/services
|
|
```
|
|
|
|
Returns object with domains as keys, each containing available services with descriptions and field definitions.
|
|
|
|
#### Get Configuration
|
|
|
|
```http
|
|
GET /api/config
|
|
```
|
|
|
|
Returns Home Assistant configuration including version, location, unit system, time zone, etc.
|
|
|
|
#### Get Error Log
|
|
|
|
```http
|
|
GET /api/error_log
|
|
```
|
|
|
|
Returns text content of the error log.
|
|
|
|
### Response Codes
|
|
|
|
- `200` - Success (existing resource)
|
|
- `201` - Created (new resource)
|
|
- `400` - Bad Request
|
|
- `401` - Unauthorized
|
|
- `404` - Not Found
|
|
- `405` - Method Not Allowed
|
|
|
|
## WebSocket API
|
|
|
|
### Connection
|
|
|
|
Connect to: `ws://YOUR_HA_URL:8123/api/websocket`
|
|
|
|
### Authentication Flow
|
|
|
|
1. Client connects
|
|
2. Server sends `auth_required` message:
|
|
```json
|
|
{
|
|
"type": "auth_required",
|
|
"ha_version": "2024.1.0"
|
|
}
|
|
```
|
|
|
|
3. Client sends `auth` message:
|
|
```json
|
|
{
|
|
"type": "auth",
|
|
"access_token": "YOUR_TOKEN_HERE"
|
|
}
|
|
```
|
|
|
|
4. Server responds with either:
|
|
```json
|
|
{"type": "auth_ok"}
|
|
```
|
|
or
|
|
```json
|
|
{
|
|
"type": "auth_invalid",
|
|
"message": "Invalid access token"
|
|
}
|
|
```
|
|
|
|
### Message Format
|
|
|
|
All messages use JSON. Command phase messages require an `id` field for request/response correlation.
|
|
|
|
### Common Commands
|
|
|
|
#### Get All States
|
|
|
|
```json
|
|
{
|
|
"id": 1,
|
|
"type": "get_states"
|
|
}
|
|
```
|
|
|
|
Response:
|
|
```json
|
|
{
|
|
"id": 1,
|
|
"type": "result",
|
|
"success": true,
|
|
"result": [
|
|
{
|
|
"entity_id": "light.living_room",
|
|
"state": "on",
|
|
"attributes": {...},
|
|
"last_changed": "2024-01-15T10:30:00+00:00",
|
|
"last_updated": "2024-01-15T10:30:00+00:00"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
#### Call Service
|
|
|
|
```json
|
|
{
|
|
"id": 2,
|
|
"type": "call_service",
|
|
"domain": "light",
|
|
"service": "turn_on",
|
|
"target": {
|
|
"entity_id": "light.kitchen"
|
|
},
|
|
"service_data": {
|
|
"brightness": 255,
|
|
"color_name": "warm_white"
|
|
},
|
|
"return_response": true
|
|
}
|
|
```
|
|
|
|
Response:
|
|
```json
|
|
{
|
|
"id": 2,
|
|
"type": "result",
|
|
"success": true,
|
|
"result": {
|
|
"context": {
|
|
"id": "326ef27d19415c60c492fe330945f954",
|
|
"parent_id": null,
|
|
"user_id": "31ddb597e03147118cf8d2f8fbea5553"
|
|
},
|
|
"response": null
|
|
}
|
|
}
|
|
```
|
|
|
|
#### Subscribe to Events
|
|
|
|
Subscribe to state changes:
|
|
```json
|
|
{
|
|
"id": 3,
|
|
"type": "subscribe_events",
|
|
"event_type": "state_changed"
|
|
}
|
|
```
|
|
|
|
Server confirms subscription:
|
|
```json
|
|
{
|
|
"id": 3,
|
|
"type": "result",
|
|
"success": true
|
|
}
|
|
```
|
|
|
|
Then sends events as they occur:
|
|
```json
|
|
{
|
|
"id": 3,
|
|
"type": "event",
|
|
"event": {
|
|
"event_type": "state_changed",
|
|
"data": {
|
|
"entity_id": "sensor.temperature",
|
|
"old_state": {...},
|
|
"new_state": {...}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
#### Unsubscribe from Events
|
|
|
|
```json
|
|
{
|
|
"id": 4,
|
|
"type": "unsubscribe_events",
|
|
"subscription": 3
|
|
}
|
|
```
|
|
|
|
### Error Responses
|
|
|
|
```json
|
|
{
|
|
"id": 5,
|
|
"type": "result",
|
|
"success": false,
|
|
"error": {
|
|
"code": "invalid_format",
|
|
"message": "Message incorrectly formatted"
|
|
}
|
|
}
|
|
```
|
|
|
|
## Common Entity Domains
|
|
|
|
- `light` - Lights
|
|
- `switch` - Switches
|
|
- `sensor` - Sensors (read-only)
|
|
- `binary_sensor` - Binary sensors (on/off, open/closed)
|
|
- `climate` - Climate control (thermostats, AC)
|
|
- `cover` - Covers (blinds, garage doors)
|
|
- `fan` - Fans
|
|
- `media_player` - Media players
|
|
- `camera` - Cameras
|
|
- `lock` - Door locks
|
|
- `alarm_control_panel` - Alarm systems
|
|
- `vacuum` - Vacuum cleaners
|
|
- `automation` - Automations themselves
|
|
- `script` - Scripts
|
|
- `scene` - Scenes
|
|
|
|
## Common Service Patterns
|
|
|
|
Most domains support these services:
|
|
- `turn_on` - Turn entity on
|
|
- `turn_off` - Turn entity off
|
|
- `toggle` - Toggle entity state
|
|
|
|
Domain-specific services may include additional parameters like `brightness`, `color_temp`, `position`, etc.
|