history integration will track everything that is going on within Home
Assistant and allows the user to browse through it. It depends on the
integration for storing the data and uses the same database setting.
If any entities are excluded from being recorded,
no history will be available for these entities.
This integration is by default enabled, unless you’ve disabled or removed the
default_config: line from your configuration. If that is the case, the following example shows you how to enable this integration manually:
# Basic configuration.yaml entry history:
Configure which integrations should not be displayed.
Configure which integrations should be displayed.
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
# 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
(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
# Example configuration.yaml entry with include history: include: domains: - sensor - switch - media_player
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,
sensor domain, but want to exclude some specific sensors. Instead
of adding every sensor entity to the
entities list just include the
sensor domain and exclude the sensor entities you are not interested in.
Note that the order of any
entities will be displayed as listed in
the configuration, otherwise, the display order is arbitrary.
# Example configuration.yaml entry with include and exclude history: include: domains: - sensor - switch - media_player exclude: entities: - sensor.last_boot - sensor.date
If you’d like the order of display of the sensors to follow the way they are
listed in the included entity list,
you can set the flag
use_include_order to true.
# Example configuration.yaml entry using specified entity display order history: use_include_order: true include: entities: - sun.sun - light.front_porch
Filters are applied as follows:
- No includes or excludes - pass all entities
- Includes, no excludes - only include specified entities
- Excludes, no includes - only exclude specified entities
- Both includes and excludes:
- Include domain and/or glob patterns specified
- If domain is included, and entity not excluded or match exclude glob pattern, accept
- If entity matches include glob pattern, and entity does not match any exclude criteria (domain, glob pattern or listed), accept
- If domain is not included, glob pattern does not match, and entity not included, reject
- Exclude domain and/or glob patterns specified and include does not list domains or glob patterns
- If domain is excluded and entity not included, reject
- If entity matches exclude glob pattern and entity not included, reject
- If entity does not match any exclude criteria (domain, glob pattern or listed), accept
- Neither include or exclude specifies domains or glob patterns
- If entity is included, accept (as #2 above)
- If entity include and exclude, the entity exclude is ignored
- Include domain and/or glob patterns specified
The following characters can be used in entity globs:
* - The asterisk represents zero, one, or multiple characters
? - The question mark represents a single character
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
- 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
history integration queries the states table it only selects states
where the state has changed:
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 or in Python:
from datetime import datetime datetime.fromtimestamp(1422830502)
The history information is also available through the RESTful API.