# 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 ```