Remove stale information from history (#26901)

This commit is contained in:
J. Nick Koston 2023-04-07 16:37:23 -10:00 committed by GitHub
parent 6adaf23e5f
commit bad084413c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -30,141 +30,6 @@ history:
</a> </a>
</p> </p>
<div class='note'>
Events are saved in a local database. Google Graphs is used to draw the graph.
Drawing is happening 100% in your browser. No data is transferred to anyone at any time.
</div>
{% configuration %}
exclude:
description: Configure which integrations should **not** be displayed.
required: false
type: map
keys:
entities:
description: The list of entity ids to be excluded from the history.
required: false
type: list
entity_globs:
description: Include all entities matching a listed pattern when creating logbook entries (e.g., `sensor.weather_*`).
required: false
type: list
domains:
description: The list of domains to be excluded from the history.
required: false
type: list
include:
description: Configure which integrations should be displayed.
required: false
type: map
keys:
entities:
description: The list of entity ids to be included in the history.
required: false
type: list
entity_globs:
description: Include all entities matching a listed pattern when creating logbook entries (e.g., `sensor.weather_*`).
required: false
type: list
domains:
description: The list of domains to be included in the history.
required: false
type: list
{% endconfiguration %}
Without any `include` or `exclude` configuration the history displays graphs for
every entity (well that's not exactly true -
`scenes` are never shown) on a given date. If you are only interested in some
of the entities you have several options:
Define domains and entities to `exclude` (aka. blocklist). This is convenient
when you are basically happy with the information displayed, but just want to
remove some entities or domains. Usually these are entities/domains which do not
change or rarely change (like `updater` or `automation`).
```yaml
# Example configuration.yaml entry with exclude
history:
exclude:
domains:
- automation
- updater
entities:
- sensor.last_boot
- sensor.date
entity_globs:
- binary_sensor.*_occupancy
```
Define domains and entities to display by using the `include` configuration
(aka. allowlist). If you have a lot of entities in your system and your
`exclude` list is getting too large, it might be better just to define the
entities or domains to `include`.
```yaml
# Example configuration.yaml entry with include
history:
include:
domains:
- sensor
- switch
- media_player
```
Use the `include` list to define the domains/entities to display, and exclude
some of them within the `exclude` list. This makes sense if you, for instance,
include the `sensor` domain, but want to exclude some specific sensors. Instead
of adding every sensor entity to the `include` `entities` list just include the
`sensor` domain and exclude the sensor entities you are not interested in.
Note that the order of any `include` `entities` will be displayed as listed in
the configuration, otherwise, the display order is arbitrary.
```yaml
# Example configuration.yaml entry with include and exclude
history:
include:
domains:
- sensor
- switch
- media_player
exclude:
entities:
- sensor.last_boot
- sensor.date
```
{% include common-tasks/filters.md %}
#### Implementation details
The history is stored in a SQLite database `home-assistant_v2.db` within your
configuration directory unless the `recorder` integration is set up differently.
- events table is all that happened while recorder integration was running.
- states table contains all the `new_state` values of `state_changed` events.
- Inside the states table you have:
- `entity_id`: the entity_id of the entity
- `state`: the state of the entity
- `attributes`: JSON of the state attributes
- `last_changed`: timestamp last time the state has changed.
- `last_updated`: timestamp anything has changed (state, attributes)
- `created`: timestamp this entry was inserted into the database
When the `history` integration queries the states table it only selects states
where the state has changed: `WHERE last_changed=last_updated`
#### On dates
SQLite databases do not support native dates. That's why all the dates are saved
in seconds since the UNIX epoch. Convert them manually using
[this site](https://www.epochconverter.com/) or in Python:
```python
from datetime import datetime
datetime.fromtimestamp(1422830502)
```
#### API #### API
The history information is also available through the The history information is also available through the