diff --git a/source/_components/input_boolean.markdown b/source/_components/input_boolean.markdown
index 61e82ff846c..7608e0c7973 100644
--- a/source/_components/input_boolean.markdown
+++ b/source/_components/input_boolean.markdown
@@ -24,16 +24,34 @@ input_boolean:
icon: mdi:car
```
-Configuration variables:
+{% configuration %}
+ input_boolean:
+ description: Alias for the input. Multiple entries are allowed.
+ required: true
+ type: map
+ keys:
+ name:
+ description: Friendly name of the input.
+ required: false
+ type: String
+ initial:
+ description: Initial value whe Home Assistant starts.
+ required: false
+ type: boolean
+ default: false
+ icon:
+ description: Icon to display for the component. Refer to the [Customizing devices](/docs/configuration/customizing-devices/#possible-values) page for possible values.
+ required: false
+ type: icon
+{% endconfiguration %}
-- **[alias]** (*Required*): Alias for the input.
- - **name** (*Optional*): Friendly name of the input.
- - **initial** (*Optional*): Initial value when Home Assistant starts. Defaults to `False`.
- - **icon** (*Optional*): Icon for entry.
+### {% linkable_title Restore State %}
-Pick an icon that you can find on [materialdesignicons.com](https://materialdesignicons.com/) to use for your input and prefix the name with `mdi:`. For example `mdi:car`, `mdi:ambulance`, or `mdi:motorbike`.
+This component supports the `restore_state` function which restores the state value after Home Assistant has started to the value it has been before Home Assistant stopped. The use this feature please make sure that the [`recorder`](/components/recorder/) component is enabled and your entity does not have and initial value. Additional information and a list of components that support this feature can be found here [recorder/#restore-state](/components/recorder/#restore-state).
-Here's an example of an automation using the above input_boolean. This action will only occur if the switch is on.
+## {% linkable_title Automation Examples %}
+
+Here's an example of an automation using the above `input_boolean`. This action will only occur if the switch is on.
```yaml
automation:
diff --git a/source/_components/input_datetime.markdown b/source/_components/input_datetime.markdown
index 588154ca277..d056e935342 100644
--- a/source/_components/input_datetime.markdown
+++ b/source/_components/input_datetime.markdown
@@ -33,18 +33,45 @@ input_datetime:
has_time: true
```
-Configuration variables:
+{% configuration %}
+ input_datetime:
+ description: Alias for the datetime input. Multiple entries are allowed.
+ required: true
+ type: map
+ keys:
+ name:
+ description: Friendly name of the datetime input.
+ required: false
+ type: String
+ has_time:
+ description: Set to `true` if the input should have a time. At least one `has_time` or `has_date` must be defined.
+ required: false
+ type: Boolean
+ default: false
+ has_date:
+ description: Set to `true` if the input should have a date. At least one `has_time` or `has_date` must be defined.
+ required: false
+ type: Boolean
+ default: false
+ initial:
+ description: Set the initial value of this input, depending on `has_time` and `has_date`.
+ required: false
+ type: datetime | time | date
+ default: 1970-01-01 00:00 | 1970-01-01 | 00:00
+{% endconfiguration %}
-- **[alias]** (*Required*): Alias for the datetime input. Multiple entries are allowed.
- - **name** (*Optional*): Friendly name of the datetime input.
- - **has_time** (*Optional*): Set to `true` if this input should have time. Defaults to `false`.
- - **has_date** (*Optional*): Set to `true` if this input should have a date. Defaults to `false`.
- - **initial** (*Optional*): Set the initial value of this input. Defaults to '1970-01-01 00:00'. If has_time is `false` this must be just a date (e.g.: '1970-01-01'). If has_date is `false` this must be just a time (e.g.: '15:16').
+### {% linkable_title Attributes %}
-A datetime input entity's state exports several attributes that can be useful in automations and templates:
+A datetime input entity's state exports several attributes that can be useful in automations and templates.
-- **has_time**: `true` if this entity has time.
-- **has_date**: `true` if this entity has a date.
-- **year**, **month**, **day** (Only available if *has_date* is true): The year, month and day of the date.
-- **hour**, **minute**, **second** (Only available if *has_time* is true): The hour, minute and second of the time.
-- **timestamp**: A timestamp representing the time held in the input. If *has_date* is true, this is the UNIX timestamp of the date / time held by the input. Otherwise (i.e., if only *has_time* is true) the number of seconds since midnight representing the time held by the input.
+| Attribute | Description |
+| --------- | ----------- |
+| `has_time` | `true` if this entity has a time.
+| `has_date` | `true` if this entity has a date.
+| `year`
`month`
`day` | The year, month and day of the date.
(only availabel if `has_date: true`)
+| `hour`
`minute`
`second` | The hour, minute and second of the time.
(only available if `has_time: true`)
+| `timestamp` | A timestamp representing the time held in the input.
If `has_date: true`, this is the UNIX timestamp of the date / time held by the input. Otherwise if only `has_time: true`, this is the number of seconds since midnight representing the time held by the input.
+
+### {% linkable_title Restore State %}
+
+This component supports the `restore_state` function which restores the state value after Home Assistant has started to the value it has been before Home Assistant stopped. The use this feature please make sure that the [`recorder`](/components/recorder/) component is enabled and your entity does not have and initial value. Additional information and a list of components that support this feature can be found here [recorder/#restore-state](/components/recorder/#restore-state).
diff --git a/source/_components/input_number.markdown b/source/_components/input_number.markdown
index ecb9824772c..f3b2a0fda14 100644
--- a/source/_components/input_number.markdown
+++ b/source/_components/input_number.markdown
@@ -78,11 +78,15 @@ input_number:
required: false
type: string
icon:
- description: Icon to display in front of the box/slider in the frontend. Refer to the [Customizing devices](https://home-assistant.io/docs/configuration/customizing-devices/#possible-values) page for possible values.
+ description: Icon to display in front of the box/slider in the frontend. Refer to the [Customizing devices](/docs/configuration/customizing-devices/#possible-values) page for possible values.
required: false
type: icon
{% endconfiguration %}
+### {% linkable_title Restore State %}
+
+This component supports the `restore_state` function which restores the state value after Home Assistant has started to the value it has been before Home Assistant stopped. The use this feature please make sure that the [`recorder`](/components/recorder/) component is enabled and your entity does not have and initial value. Additional information and a list of components that support this feature can be found here [recorder/#restore-state](/components/recorder/#restore-state).
+
## {% linkable_title Automation Examples %}
Here's an example of `input_number` being used as a trigger in an automation.
diff --git a/source/_components/input_select.markdown b/source/_components/input_select.markdown
index e8cf94f94d1..a1b98fab34f 100644
--- a/source/_components/input_select.markdown
+++ b/source/_components/input_select.markdown
@@ -33,27 +33,64 @@ input_select:
- Home Alone
```
-Configuration variables:
-
-- **[alias]** array (*Required*): Alias for the input. Multiple entries are allowed..
- - **name** (*Optional*): Friendly name of the input.
- - **options** array (*Required*): List of options to choose from.
- - **initial** (*Optional*): Initial value when Home Assistant starts.
- - **icon** (*Optional*): Icon for entry.
-
-Pick an icon that you can find on [materialdesignicons.com](https://materialdesignicons.com/) to use for your input and prefix the name with `mdi:`. For example `mdi:car`, `mdi:ambulance`, or `mdi:motorbike`.
+{% configuration %}
+ input_select:
+ description: Alias for the input. Multiple entries are allowed.
+ required: true
+ type: map
+ keys:
+ name:
+ description: Friendly name of the input.
+ required: false
+ type: String
+ options:
+ description: List of options to choose from.
+ required: true
+ type: Array
+ initial:
+ description: Initial value when Home Assistant starts.
+ required: false
+ type: Element of options
+ default: First element of options
+ icon:
+ description: Icon to display for the component. Refer to the [Customizing devices](/docs/configuration/customizing-devices/#possible-values) page for possible values.
+ required: false
+ type: icon
+{% endconfiguration %}
Because YAML defines [booleans](http://yaml.org/type/bool.html) as equivalent, any variations of 'On', 'Yes', 'Y', 'Off', 'No', or 'N' (regardless of case) used as option names will be replaced by True and False unless they are defined in quotation marks.
+### {% linkable_title Restore State %} + +This component supports the `restore_state` function which restores the state value after Home Assistant has started to the value it has been before Home Assistant stopped. The use this feature please make sure that the [`recorder`](/components/recorder/) component is enabled and your entity does not have and initial value. Additional information and a list of components that support this feature can be found here [recorder/#restore-state](/components/recorder/#restore-state). + ### {% linkable_title Services %} -This components provide three services to modify the state of the `input_select`: +This components provide three services to modify the state of the `input_select`. -- `input_select.select_option`: This can be used to select a specific option. The option is passed as `option` attribute in the service data. -- `input_select.select_previous`: Select the previous option. -- `input_select.select_next`: Select the next option. +| Service | Data | Description | +| ------- | ---- | ----------- | +| `select_option` | `option` | This can be used to select a specific option. +| `set_options` | `options`