Files
ha-mcp-server/EXAMPLES.md
Felix Zösch 1761c3cdd3 Initial commit
2025-12-11 20:29:51 +01:00

511 lines
11 KiB
Markdown

# Home Assistant MCP Server - Usage Examples
This document provides practical examples of how LLMs can interact with Home Assistant through this MCP server.
## Basic Entity State Queries
### Example 1: Check if a light is on
```
User: Is the living room light on?
LLM Process:
1. Uses get_state tool
2. Parameters: { entity_id: "light.living_room" }
3. Receives response with state: "on" or "off"
4. Responds: "Yes, the living room light is currently on."
```
### Example 2: Get temperature reading
```
User: What's the temperature in the bedroom?
LLM Process:
1. Uses get_state tool
2. Parameters: { entity_id: "sensor.bedroom_temperature" }
3. Receives state with attributes
4. Responds: "The bedroom temperature is 22.5°C"
```
### Example 3: Check multiple sensors
```
User: Show me the status of all doors
LLM Process:
1. Reads ha://states resource
2. Filters for entities matching "binary_sensor.*_door"
3. Lists each door and its state (open/closed)
```
## Device Control
### Example 4: Turn on a light
```
User: Turn on the kitchen light
LLM Process:
1. Uses call_service tool
2. Parameters:
{
domain: "light",
service: "turn_on",
service_data: { entity_id: "light.kitchen" }
}
3. Responds: "I've turned on the kitchen light."
```
### Example 5: Dim lights
```
User: Set the bedroom lights to 30% brightness
LLM Process:
1. Uses call_service tool
2. Parameters:
{
domain: "light",
service: "turn_on",
service_data: {
entity_id: "light.bedroom",
brightness_pct: 30
}
}
```
### Example 6: Set thermostat
```
User: Set the thermostat to 21 degrees
LLM Process:
1. Uses call_service tool
2. Parameters:
{
domain: "climate",
service: "set_temperature",
service_data: {
entity_id: "climate.living_room",
temperature: 21
}
}
```
### Example 7: Control multiple devices
```
User: Turn off all lights in the house
LLM Process:
1. Reads ha://states to find all light entities
2. Uses call_service tool
3. Parameters:
{
domain: "light",
service: "turn_off",
service_data: {
entity_id: "all" // or comma-separated list
}
}
```
## Complex Queries with Templates
### Example 8: Count entities by state
```
User: How many lights are currently on?
LLM Process:
1. Uses render_template tool
2. Parameters:
{
template: "{{ states.light | selectattr('state', 'eq', 'on') | list | count }}"
}
3. Receives: "5"
4. Responds: "There are 5 lights currently on."
```
### Example 9: Calculate total power consumption
```
User: What's the total power consumption right now?
LLM Process:
1. Uses render_template tool
2. Parameters:
{
template: "{{ states.sensor | selectattr('attributes.device_class', 'eq', 'power') | map(attribute='state') | map('float', 0) | sum | round(2) }}"
}
```
### Example 10: Check battery levels
```
User: Which devices have low battery?
LLM Process:
1. Uses render_template tool
2. Parameters:
{
template: "{% for state in states.sensor if state.attributes.device_class == 'battery' and state.state | float < 20 %}{{ state.name }}: {{ state.state }}%\n{% endfor %}"
}
```
## Historical Data Analysis
### Example 11: Temperature trend
```
User: Show me the living room temperature for the last 24 hours
LLM Process:
1. Calculate timestamps (now and 24h ago)
2. Uses get_history tool
3. Parameters:
{
entity_ids: ["sensor.living_room_temperature"],
start_time: "2024-01-06T10:00:00Z",
end_time: "2024-01-07T10:00:00Z"
}
4. Analyzes data and presents trend
```
### Example 12: Door activity log
```
User: When was the front door last opened today?
LLM Process:
1. Uses get_logbook tool
2. Parameters:
{
entity_id: "binary_sensor.front_door",
start_time: "2024-01-07T00:00:00Z"
}
3. Finds most recent "opened" event
4. Responds: "The front door was last opened at 2:30 PM."
```
### Example 13: Energy usage comparison
```
User: Compare today's energy usage to yesterday
LLM Process:
1. Get today's energy data (get_history)
2. Get yesterday's energy data (get_history)
3. Calculate totals and difference
4. Present comparison
```
## Automation and Events
### Example 14: Trigger an automation
```
User: Run the "Good Night" automation
LLM Process:
1. Uses call_service tool
2. Parameters:
{
domain: "automation",
service: "trigger",
service_data: {
entity_id: "automation.good_night"
}
}
```
### Example 15: Fire custom event
```
User: Send a notification that I'm working from home
LLM Process:
1. Uses fire_event tool
2. Parameters:
{
event_type: "custom_presence_update",
event_data: {
status: "working_from_home",
timestamp: "2024-01-07T10:00:00Z"
}
}
```
### Example 16: Create automation trigger
```
User: Create a reminder state for watering plants
LLM Process:
1. Uses set_state tool
2. Parameters:
{
entity_id: "input_boolean.water_plants_reminder",
state: "on",
attributes: {
friendly_name: "Water Plants Reminder",
last_set: "2024-01-07T10:00:00Z"
}
}
```
## Scene and Group Management
### Example 17: Activate a scene
```
User: Activate the movie scene
LLM Process:
1. Uses call_service tool
2. Parameters:
{
domain: "scene",
service: "turn_on",
service_data: {
entity_id: "scene.movie"
}
}
```
### Example 18: Control a group
```
User: Turn off all bedroom devices
LLM Process:
1. Uses call_service tool
2. Parameters:
{
domain: "homeassistant",
service: "turn_off",
service_data: {
entity_id: "group.bedroom_devices"
}
}
```
## Media and Entertainment
### Example 19: Control media player
```
User: Play music in the living room
LLM Process:
1. Uses call_service tool
2. Parameters:
{
domain: "media_player",
service: "media_play",
service_data: {
entity_id: "media_player.living_room"
}
}
```
### Example 20: Set volume
```
User: Set living room speaker volume to 50%
LLM Process:
1. Uses call_service tool
2. Parameters:
{
domain: "media_player",
service: "volume_set",
service_data: {
entity_id: "media_player.living_room",
volume_level: 0.5
}
}
```
## Camera and Security
### Example 21: Get camera snapshot
```
User: Show me the front door camera
LLM Process:
1. Uses get_camera_image tool
2. Parameters: { entity_id: "camera.front_door" }
3. Receives base64-encoded image
4. Can describe or analyze the image
```
### Example 22: Check security system status
```
User: Is the alarm armed?
LLM Process:
1. Uses get_state tool
2. Parameters: { entity_id: "alarm_control_panel.home" }
3. Checks state (armed_away, armed_home, disarmed)
4. Responds with status
```
## Calendar Integration
### Example 23: Check upcoming events
```
User: What's on my calendar tomorrow?
LLM Process:
1. Calculate tomorrow's date range
2. Uses get_calendar_events tool
3. Parameters:
{
entity_id: "calendar.personal",
start: "2024-01-08T00:00:00Z",
end: "2024-01-08T23:59:59Z"
}
4. Lists events with times
```
### Example 24: Check if anyone is busy
```
User: Is anyone in a meeting right now?
LLM Process:
1. Get current time
2. Get calendar events for now
3. Check for active events
4. Respond with status
```
## System Information
### Example 25: Check Home Assistant version
```
User: What version of Home Assistant are you running?
LLM Process:
1. Reads ha://config resource
2. Extracts version field
3. Responds: "Home Assistant version 2024.1.0"
```
### Example 26: List available services
```
User: What can you control?
LLM Process:
1. Reads ha://services resource
2. Lists domains and key services
3. Provides capabilities summary
```
### Example 27: Check for errors
```
User: Are there any recent errors?
LLM Process:
1. Reads ha://error_log resource
2. Analyzes recent error entries
3. Summarizes issues or reports "No errors"
```
## Advanced Scenarios
### Example 28: Smart morning routine
```
User: Good morning! Start my day.
LLM Process:
1. Get current weather (state)
2. Turn on bedroom lights gradually (call_service with transition)
3. Start coffee maker (call_service)
4. Read calendar events for today (get_calendar_events)
5. Announce summary via TTS (call_service)
```
### Example 29: Energy optimization
```
User: Help me save energy right now
LLM Process:
1. Get all device states (ha://states)
2. Identify devices consuming power unnecessarily
3. Suggest turning off unused devices
4. Adjust thermostat based on occupancy
5. Provide energy-saving tips based on usage patterns
```
### Example 30: Presence detection
```
User: Is anyone home?
LLM Process:
1. Check person entities (device_tracker.*)
2. Check motion sensors
3. Check recent door activity (logbook)
4. Synthesize presence information
5. Respond with confidence level
```
## Error Handling Examples
### Example 31: Entity not found
```
User: Turn on the garage light
LLM Process:
1. Attempts to call service
2. Receives 404 error
3. Reads available entities
4. Responds: "I couldn't find a garage light. Did you mean 'light.driveway' or 'light.carport'?"
```
### Example 32: Service unavailable
```
User: Set the pool temperature to 28 degrees
LLM Process:
1. Checks if pool heater entity exists
2. Checks available services for climate domain
3. If service unavailable, suggests alternatives
4. Responds: "The pool heater isn't available. Would you like me to create a reminder to set it manually?"
```
## Best Practices for LLM Interactions
1. **Verify before acting**: Check entity states before making changes
2. **Provide context**: Include entity IDs and states in responses
3. **Handle errors gracefully**: Suggest alternatives when operations fail
4. **Use templates for complex queries**: Offload processing to Home Assistant
5. **Batch operations**: Use comma-separated entity IDs when possible
6. **Respect user preferences**: Confirm destructive operations
7. **Provide feedback**: Confirm successful operations with details
## Tips for Implementation
- Always read available services/states before attempting operations
- Use templates for calculations and complex filtering
- Leverage logbook for recent activity analysis
- Combine multiple operations for "scene-like" behavior
- Use attributes for rich context (battery level, last updated, etc.)
- Consider time zones when working with timestamps
- Handle partial matches gracefully (fuzzy entity ID matching)
## Common Patterns
### Discovery Pattern
```
1. Read ha://states or ha://services
2. Filter/search for relevant entities
3. Execute operation on found entities
```
### Validation Pattern
```
1. Get current state
2. Verify desired operation is valid
3. Execute operation
4. Confirm new state
```
### Historical Analysis Pattern
```
1. Calculate time range
2. Get historical data
3. Analyze trends
4. Present insights
```
### Multi-step Automation Pattern
```
1. Check preconditions
2. Execute step 1
3. Verify success
4. Execute step 2
5. Provide summary
```