Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """Provide pre-made queries on top of the recorder component."""
2 
3 from __future__ import annotations
4 
5 from datetime import datetime
6 from typing import Any
7 
8 from sqlalchemy.orm.session import Session
9 
10 from homeassistant.core import HomeAssistant, State
11 from homeassistant.helpers.recorder import get_instance
12 
13 from ..filters import Filters
14 from .const import NEED_ATTRIBUTE_DOMAINS, SIGNIFICANT_DOMAINS
15 from .modern import (
16  get_full_significant_states_with_session as _modern_get_full_significant_states_with_session,
17  get_last_state_changes as _modern_get_last_state_changes,
18  get_significant_states as _modern_get_significant_states,
19  get_significant_states_with_session as _modern_get_significant_states_with_session,
20  state_changes_during_period as _modern_state_changes_during_period,
21 )
22 
23 # These are the APIs of this package
24 __all__ = [
25  "NEED_ATTRIBUTE_DOMAINS",
26  "SIGNIFICANT_DOMAINS",
27  "get_full_significant_states_with_session",
28  "get_last_state_changes",
29  "get_significant_states",
30  "get_significant_states_with_session",
31  "state_changes_during_period",
32 ]
33 
34 
36  hass: HomeAssistant,
37  session: Session,
38  start_time: datetime,
39  end_time: datetime | None = None,
40  entity_ids: list[str] | None = None,
41  filters: Filters | None = None,
42  include_start_time_state: bool = True,
43  significant_changes_only: bool = True,
44  no_attributes: bool = False,
45 ) -> dict[str, list[State]]:
46  """Return a dict of significant states during a time period."""
47  if not get_instance(hass).states_meta_manager.active:
48  from .legacy import ( # pylint: disable=import-outside-toplevel
49  get_full_significant_states_with_session as _legacy_get_full_significant_states_with_session,
50  )
51 
52  _target = _legacy_get_full_significant_states_with_session
53  else:
54  _target = _modern_get_full_significant_states_with_session
55  return _target(
56  hass,
57  session,
58  start_time,
59  end_time,
60  entity_ids,
61  filters,
62  include_start_time_state,
63  significant_changes_only,
64  no_attributes,
65  )
66 
67 
69  hass: HomeAssistant, number_of_states: int, entity_id: str
70 ) -> dict[str, list[State]]:
71  """Return the last number_of_states."""
72  if not get_instance(hass).states_meta_manager.active:
73  from .legacy import ( # pylint: disable=import-outside-toplevel
74  get_last_state_changes as _legacy_get_last_state_changes,
75  )
76 
77  _target = _legacy_get_last_state_changes
78  else:
79  _target = _modern_get_last_state_changes
80  return _target(hass, number_of_states, entity_id)
81 
82 
84  hass: HomeAssistant,
85  start_time: datetime,
86  end_time: datetime | None = None,
87  entity_ids: list[str] | None = None,
88  filters: Filters | None = None,
89  include_start_time_state: bool = True,
90  significant_changes_only: bool = True,
91  minimal_response: bool = False,
92  no_attributes: bool = False,
93  compressed_state_format: bool = False,
94 ) -> dict[str, list[State | dict[str, Any]]]:
95  """Return a dict of significant states during a time period."""
96  if not get_instance(hass).states_meta_manager.active:
97  from .legacy import ( # pylint: disable=import-outside-toplevel
98  get_significant_states as _legacy_get_significant_states,
99  )
100 
101  _target = _legacy_get_significant_states
102  else:
103  _target = _modern_get_significant_states
104  return _target(
105  hass,
106  start_time,
107  end_time,
108  entity_ids,
109  filters,
110  include_start_time_state,
111  significant_changes_only,
112  minimal_response,
113  no_attributes,
114  compressed_state_format,
115  )
116 
117 
119  hass: HomeAssistant,
120  session: Session,
121  start_time: datetime,
122  end_time: datetime | None = None,
123  entity_ids: list[str] | None = None,
124  filters: Filters | None = None,
125  include_start_time_state: bool = True,
126  significant_changes_only: bool = True,
127  minimal_response: bool = False,
128  no_attributes: bool = False,
129  compressed_state_format: bool = False,
130 ) -> dict[str, list[State | dict[str, Any]]]:
131  """Return a dict of significant states during a time period."""
132  if not get_instance(hass).states_meta_manager.active:
133  from .legacy import ( # pylint: disable=import-outside-toplevel
134  get_significant_states_with_session as _legacy_get_significant_states_with_session,
135  )
136 
137  _target = _legacy_get_significant_states_with_session
138  else:
139  _target = _modern_get_significant_states_with_session
140  return _target(
141  hass,
142  session,
143  start_time,
144  end_time,
145  entity_ids,
146  filters,
147  include_start_time_state,
148  significant_changes_only,
149  minimal_response,
150  no_attributes,
151  compressed_state_format,
152  )
153 
154 
156  hass: HomeAssistant,
157  start_time: datetime,
158  end_time: datetime | None = None,
159  entity_id: str | None = None,
160  no_attributes: bool = False,
161  descending: bool = False,
162  limit: int | None = None,
163  include_start_time_state: bool = True,
164 ) -> dict[str, list[State]]:
165  """Return a list of states that changed during a time period."""
166  if not get_instance(hass).states_meta_manager.active:
167  from .legacy import ( # pylint: disable=import-outside-toplevel
168  state_changes_during_period as _legacy_state_changes_during_period,
169  )
170 
171  _target = _legacy_state_changes_during_period
172  else:
173  _target = _modern_state_changes_during_period
174  return _target(
175  hass,
176  start_time,
177  end_time,
178  entity_id,
179  no_attributes,
180  descending,
181  limit,
182  include_start_time_state,
183  )
dict[str, list[State]] state_changes_during_period(HomeAssistant hass, datetime start_time, datetime|None end_time=None, str|None entity_id=None, bool no_attributes=False, bool descending=False, int|None limit=None, bool include_start_time_state=True)
Definition: __init__.py:164
dict[str, list[State|dict[str, Any]]] get_significant_states(HomeAssistant hass, datetime start_time, datetime|None end_time=None, list[str]|None entity_ids=None, Filters|None filters=None, bool include_start_time_state=True, bool significant_changes_only=True, bool minimal_response=False, bool no_attributes=False, bool compressed_state_format=False)
Definition: __init__.py:94
dict[str, list[State]] get_full_significant_states_with_session(HomeAssistant hass, Session session, datetime start_time, datetime|None end_time=None, list[str]|None entity_ids=None, Filters|None filters=None, bool include_start_time_state=True, bool significant_changes_only=True, bool no_attributes=False)
Definition: __init__.py:45
dict[str, list[State]] get_last_state_changes(HomeAssistant hass, int number_of_states, str entity_id)
Definition: __init__.py:70
dict[str, list[State|dict[str, Any]]] get_significant_states_with_session(HomeAssistant hass, Session session, datetime start_time, datetime|None end_time=None, list[str]|None entity_ids=None, Filters|None filters=None, bool include_start_time_state=True, bool significant_changes_only=True, bool minimal_response=False, bool no_attributes=False, bool compressed_state_format=False)
Definition: __init__.py:130
Recorder get_instance(HomeAssistant hass)
Definition: recorder.py:74