Call Service
ha_call_serviceControl smart home entities and trigger automations by executing Home Assistant services like light.turn_on or climate.set_temperature.
Instructions
Execute Home Assistant services to control entities and trigger automations.
This is the universal tool for controlling all Home Assistant entities. Services follow the pattern domain.service (e.g., light.turn_on, climate.set_temperature).
Basic Usage:
# Turn on a light
ha_call_service("light", "turn_on", entity_id="light.living_room")
# Set temperature with parameters
ha_call_service("climate", "set_temperature",
entity_id="climate.thermostat", data={"temperature": 22})
# Trigger automation
ha_call_service("automation", "trigger", entity_id="automation.morning_routine")
# Universal controls work with any entity
ha_call_service("homeassistant", "toggle", entity_id="switch.porch_light")Key behavior:
Result compaction (default ON):
resultis trimmed to the targeted entity's record (drops parent-group propagation) and stripped ofcontext/last_*metadata and heavy attribute lists (effect_list,hue_scenes). Escape hatches:verbose=Truefor the raw changed-state records, orresult_fields/result_attribute_keysfor explicit per-record projection (mirrorsha_get_state).
For detailed service documentation, use ha_get_skill_guide.
Common patterns: Use ha_get_state() to check current values before making changes. Use ha_search() to find correct entity IDs.
WebSocket command escape hatch (advanced):
A few Home Assistant operations are WebSocket-only commands, not
registered services — most notably dismissing a Repairs issue. Pass
ws_command (instead of domain/service) to send one, with its
parameters in data:
# Dismiss a repair (get domain/issue_id from ha_get_overview repairs
# or ha_get_system_health include="repairs")
ha_call_service(ws_command="repairs/ignore_issue",
data={"domain": "sun", "issue_id": "abc", "ignore": True})Only one-shot request/response commands are supported; streaming/two-phase and service-invoking commands are rejected, and the other service parameters (entity_id, return_response, etc.) don't apply.
Unavailable in Read Only Mode, including read-like services and WebSocket commands. Use dedicated read tools while that mode is enabled.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | Extra service-call parameters beyond entity_id (e.g. {'temperature': 22} for climate.set_temperature). Also carries the raw command payload when ws_command is set. If entity_id is also present in data, the entity_id parameter wins. | |
| wait | No | If True (default), wait for the entity state to change before returning. Applies only to state-changing services called with a single entity_id. A comma-separated multi-target does not get confirmed by this: it falls through to a legacy path that polls for the literal composite entity_id and times out after 10s. Set wait=False for multi-target calls. | |
| domain | No | Service domain (e.g. 'light', 'climate', 'automation'). Required for a service call; must be omitted when ws_command is set. | |
| service | No | Service name within domain (e.g. 'turn_on', 'set_temperature', 'trigger'). Required for a service call; must be omitted when ws_command is set. | |
| verbose | No | Return HA's raw changed-state records unchanged (default: False). Use as an escape hatch when you need the full propagation chain or raw attribute payload (debug / inspection). With return_response=True the response data still surfaces once as the top-level service_response key, never nested in result. WARNING: brings back token-bloat for nested-group targets — prefer result_fields / result_attribute_keys for targeted control. | |
| entity_id | No | Entity ID(s) the service call targets — one ID ('light.living_room') or several comma-separated ('light.a,light.b'). Optional for services that don't target a specific entity. Must be omitted when ws_command is set. | |
| ws_command | No | Advanced escape hatch: send a raw one-shot Home Assistant WebSocket command that is NOT a registered service (e.g. 'repairs/ignore_issue' to dismiss a Repairs issue). When set, omit domain/service and the other service params; put the command's parameters in data. Streaming/two-phase and service-invoking commands (call_service, execute_script) are rejected. | |
| result_fields | No | Project each record in 'result' to only these top-level keys (e.g. ['entity_id', 'state']). Mirrors ha_get_state's fields=. Setting this DISABLES default compaction — no entity-id filter, no metadata strip — and applies the explicit projection instead. | |
| return_response | No | If True, the service's response data is returned once, as the top-level 'service_response' key — never nested inside 'result' (default: False). Must stay False when ws_command is set. | |
| result_attribute_keys | No | Project each record's 'attributes' dict to only these keys (e.g. ['brightness', 'rgb_color']). Mirrors ha_get_state's attribute_keys=. Setting this DISABLES default compaction. Requires 'attributes' to be present in result_fields (or result_fields=None). |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||