Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate file integration to config entry #32593

Merged
merged 7 commits into from
May 12, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 15 additions & 88 deletions source/_integrations/file.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -16,77 +16,22 @@ ha_platforms:
ha_integration_type: integration
---

There is currently support for the following device types within Home Assistant:
The File integration allows to store notifications to a file or to set up a sensor based on a file's content.

- [Notifications](#notifications)
- [Sensor](#sensor)
{% include integrations/config_flow.md %}

## Notifications

The `file` platform allows you to store notifications from Home Assistant as a file.

To enable file notifications in your installation, add the following to your `configuration.yaml` file:

```yaml
# Example configuration.yaml entry
notify:
- name: NOTIFIER_NAME
platform: file
filename: FILENAME
```

{% configuration %}
name:
description: Setting the optional parameter `name` allows multiple notifiers to be created. The notifier will bind to the service `notify.NOTIFIER_NAME`.
required: false
default: notify
type: string
filename:
description: Name of the file to use. The file will be created if it doesn't exist. Add the path of your [configuration](/docs/configuration/) folder (e.g., `/config`) to save the file there.
required: true
type: string
timestamp:
description: Setting `timestamp` to `true` adds a timestamp to every entry.
required: false
default: false
type: boolean
{% endconfiguration %}
The `file` platform allows you to store notifications from Home Assistant as a file. Make sure that the file you want to use is added to the [allowlist_external_dirs](https://www.home-assistant.io/integrations/homeassistant/#allowlist_external_dirs). The file will be created if it doesn't exist. Add the path of your [configuration](/docs/configuration/) folder (e.g., `/config`) to save the file there. Setting the optional parameter `name` allows multiple notifiers to be created. Setting `timestamp` to `true` adds a timestamp to every entry.

To use notifications, please see the [getting started with automation page](/getting-started/automation/).

Use the `notify.{name}` service to store notification messages.

## Sensor

The `file` sensor platform reads the entries from a plain-text file and shows the found value. Only the last line of the file is used. This is similar to do `$ tail -n 1 sensor.txt` on the command-line. Note that file paths must be added to [allowlist_external_dirs](/integrations/homeassistant/#allowlist_external_dirs).

To enable the `file` sensor, add the following lines to your `configuration.yaml`:

```yaml
# Example configuration.yaml entry
sensor:
- platform: file
file_path: /home/user/.homeassistant/sensor-data.txt
```

{% configuration %}
file_path:
description: Path to file that stores the sensor data.
required: true
type: string
name:
description: Name of the sensor to use in the frontend.
required: false
default: file name
type: string
unit_of_measurement:
description: Defines the units of measurement of the sensor, if any.
required: false
type: string
value_template:
description: Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload.
required: false
type: template
{% endconfiguration %}

### Examples

In this section you find some real-life examples of how to use this sensor.
Expand All @@ -101,21 +46,12 @@ Assuming that the log file contains multiple values formatted as JSON like shown
{"temperature": 22, "humidity": 36}
```

This would require the following entry in the `configuration.yaml` file to extract the temperature:

{% raw %}

```yaml
# Example configuration.yaml entry
sensor:
- platform: file
name: Temperature
file_path: /home/user/.homeassistant/sensor.json
value_template: '{{ value_json.temperature }}'
unit_of_measurement: "°C"
```
This would require the following settings extract the temperature:

{% endraw %}
- Name: `Temperature`
- File path: `/home/user/.homeassistant/sensor.json`
- Value template: {% raw %}`'{{ value_json.temperature }}'`{% endraw %}
- Unit of measurement: `"°C"`

#### Entries as CSV

Expand All @@ -127,18 +63,9 @@ timestamp,temperature,humidity
1631472949,22,36
```

This would require the following entry in the `configuration.yaml` file to extract the temperature:

{% raw %}

```yaml
# Example configuration.yaml entry
sensor:
- platform: file
name: Temperature
file_path: /home/user/.homeassistant/sensor.csv
value_template: '{{ value.split(",")[1] }}'
unit_of_measurement: "°C"
```
This would require the following settings to extract the temperature:

{% endraw %}
- Name: `Temperature`
- File path: `/home/user/.homeassistant/sensor.csv`
- Value template: {% raw %}`'{{ value.split(",")[1] }}'`{% endraw %}
- Unit of measurement: `"°C"`