---
title: "Scripts"
description: "Instructions on how to setup scripts within Home Assistant."
logo: home-assistant.png
ha_category:
- Automation
ha_qa_scale: internal
ha_release: 0.7
---
The `script` integration allows users to specify a sequence of actions to be executed by Home Assistant when turned on. The script integration will create an entity for each script and allow them to be controlled via services.
## Configuration
The sequence of actions is specified using the [Home Assistant Script Syntax](/getting-started/scripts/).
```yaml
# Example configuration.yaml entry
script:
message_temperature:
sequence:
# This is Home Assistant Script Syntax
- service: notify.notify
data_template:
message: Current temperature is {% raw %}{{ states('sensor.temperature') }}{% endraw %}
```
Script names (e.g., `message_temperature` in the example above) are not allowed to contain capital letters, or dash (minus) characters, i.e. `-`. The preferred way to separate words for better readability is to use underscore (`_`) characters.
{% configuration %}
alias:
description: Friendly name for the script.
required: false
type: string
description:
description: A description of the script that will be displayed in the Services tab under Developer Tools.
required: false
default: ''
type: string
fields:
description: Information about the parameters that the script uses; see the [Passing variables to scripts](#passing-variables-to-scripts) section below.
required: false
default: {}
type: map
keys:
PARAMETER_NAME:
description: A parameter used by this script.
type: map
keys:
description:
description: A description of PARAMETER_NAME.
type: string
example:
description: An example value for PARAMETER_NAME.
type: string
sequence:
description: The sequence of actions to be performed in the script.
required: true
type: list
{% endconfiguration %}
### Full Configuration
```yaml
script:
wakeup:
alias: Wake Up
description: 'Turns on the bedroom lights and then the living room lights after a delay'
fields:
minutes:
description: 'The amount of time to wait before turning on the living room lights'
example: 1
sequence:
# This is Home Assistant Script Syntax
- event: LOGBOOK_ENTRY
event_data:
name: Paulus
message: is waking up
entity_id: device_tracker.paulus
domain: light
- alias: Bedroom lights on
service: light.turn_on
data:
entity_id: group.bedroom
brightness: 100
- delay:
# supports seconds, milliseconds, minutes, hours
minutes: {{ minutes }}
- alias: Living room lights on
service: light.turn_on
data:
entity_id: group.living_room
```
### Passing variables to scripts
As part of the service, variables can be passed along to a script so they become available within templates in that script.
There are two ways to achieve this. One way is using the generic `script.turn_on` service. To pass variables to the script with this service, call it with the desired variables:
```yaml
# Example configuration.yaml entry
automation:
trigger:
platform: state
entity_id: light.bedroom
from: 'off'
to: 'on'
action:
service: script.turn_on
entity_id: script.notify_pushover
data:
variables:
title: 'State change'
message: 'The light is on!'
```
The other way is calling the script as a service directly. In this case, all service data will be made available as variables. If we apply this approach on the script above, it would look like this:
```yaml
# Example configuration.yaml entry
automation:
trigger:
platform: state
entity_id: light.bedroom
from: 'off'
to: 'on'
action:
service: script.notify_pushover
data:
title: 'State change'
message: 'The light is on!'
```
Using the variables in the script requires the use of `data_template`:
```yaml
# Example configuration.yaml entry
script:
notify_pushover:
description: 'Send a pushover notification'
fields:
title:
description: 'The title of the notification'
example: 'State change'
message:
description: 'The message content'
example: 'The light is on!'
sequence:
- condition: state
entity_id: switch.pushover_notifications
state: 'on'
- service: notify.pushover
data_template:
title: "{% raw %}{{ title }}{% endraw %}"
message: "{% raw %}{{ message }}{% endraw %}"
```
### In the Overview
Scripts in the Overview panel will be displayed with an **EXECUTE** button if the device has no `delay:` or `wait:` statement, and as a toggle switch if it has either of those.
This is to enable you to stop a running script.