Home Assistant Unofficial Reference 2024.12.1
const.py
Go to the documentation of this file.
1 """Constants for InfluxDB integration."""
2 
3 from datetime import timedelta
4 import re
5 
6 import voluptuous as vol
7 
8 from homeassistant.const import (
9  CONF_API_VERSION,
10  CONF_HOST,
11  CONF_PASSWORD,
12  CONF_PATH,
13  CONF_PORT,
14  CONF_SSL,
15  CONF_TOKEN,
16  CONF_USERNAME,
17  CONF_VERIFY_SSL,
18 )
20 
21 CONF_DB_NAME = "database"
22 CONF_BUCKET = "bucket"
23 CONF_ORG = "organization"
24 CONF_TAGS = "tags"
25 CONF_DEFAULT_MEASUREMENT = "default_measurement"
26 CONF_MEASUREMENT_ATTR = "measurement_attr"
27 CONF_OVERRIDE_MEASUREMENT = "override_measurement"
28 CONF_TAGS_ATTRIBUTES = "tags_attributes"
29 CONF_COMPONENT_CONFIG = "component_config"
30 CONF_COMPONENT_CONFIG_GLOB = "component_config_glob"
31 CONF_COMPONENT_CONFIG_DOMAIN = "component_config_domain"
32 CONF_RETRY_COUNT = "max_retries"
33 CONF_IGNORE_ATTRIBUTES = "ignore_attributes"
34 CONF_PRECISION = "precision"
35 CONF_SSL_CA_CERT = "ssl_ca_cert"
36 
37 CONF_QUERIES = "queries"
38 CONF_QUERIES_FLUX = "queries_flux"
39 CONF_GROUP_FUNCTION = "group_function"
40 CONF_FIELD = "field"
41 CONF_MEASUREMENT_NAME = "measurement"
42 CONF_WHERE = "where"
43 
44 CONF_RANGE_START = "range_start"
45 CONF_RANGE_STOP = "range_stop"
46 CONF_FUNCTION = "function"
47 CONF_QUERY = "query"
48 CONF_IMPORTS = "imports"
49 
50 DEFAULT_DATABASE = "home_assistant"
51 DEFAULT_HOST_V2 = "us-west-2-1.aws.cloud2.influxdata.com"
52 DEFAULT_SSL_V2 = True
53 DEFAULT_BUCKET = "Home Assistant"
54 DEFAULT_VERIFY_SSL = True
55 DEFAULT_API_VERSION = "1"
56 DEFAULT_GROUP_FUNCTION = "mean"
57 DEFAULT_FIELD = "value"
58 DEFAULT_RANGE_START = "-15m"
59 DEFAULT_RANGE_STOP = "now()"
60 DEFAULT_FUNCTION_FLUX = "|> limit(n: 1)"
61 DEFAULT_MEASUREMENT_ATTR = "unit_of_measurement"
62 
63 INFLUX_CONF_MEASUREMENT = "measurement"
64 INFLUX_CONF_TAGS = "tags"
65 INFLUX_CONF_TIME = "time"
66 INFLUX_CONF_FIELDS = "fields"
67 INFLUX_CONF_STATE = "state"
68 INFLUX_CONF_VALUE = "value"
69 INFLUX_CONF_VALUE_V2 = "_value"
70 INFLUX_CONF_ORG = "org"
71 
72 EVENT_NEW_STATE = "new_state"
73 DOMAIN = "influxdb"
74 API_VERSION_2 = "2"
75 TIMEOUT = 10 # seconds
76 RETRY_DELAY = 20
77 QUEUE_BACKLOG_SECONDS = 30
78 RETRY_INTERVAL = 60 # seconds
79 BATCH_TIMEOUT = 1
80 BATCH_BUFFER_SIZE = 100
81 LANGUAGE_INFLUXQL = "influxQL"
82 LANGUAGE_FLUX = "flux"
83 TEST_QUERY_V1 = "SHOW DATABASES;"
84 TEST_QUERY_V2 = "buckets()"
85 CODE_INVALID_INPUTS = 400
86 
87 MIN_TIME_BETWEEN_UPDATES = timedelta(seconds=10)
88 
89 RE_DIGIT_TAIL = re.compile(r"^[^\.]*\d+\.?\d+[^\.]*$")
90 RE_DECIMAL = re.compile(r"[^\d.]+")
91 
92 CONNECTION_ERROR = (
93  "Cannot connect to InfluxDB due to '%s'. "
94  "Please check that the provided connection details (host, port, etc.) are correct "
95  "and that your InfluxDB server is running and accessible."
96 )
97 CLIENT_ERROR_V2 = (
98  "InfluxDB bucket is not accessible due to '%s'. "
99  "Please check that the bucket, org and token are correct and "
100  "that the token has the correct permissions set."
101 )
102 CLIENT_ERROR_V1 = (
103  "InfluxDB database is not accessible due to '%s'. "
104  "Please check that the database, username and password are correct and "
105  "that the specified user has the correct permissions set."
106 )
107 NO_BUCKET_ERROR = (
108  "InfluxDB bucket '%s' cannot be found. "
109  "Check the name is correct and the token has access to it."
110 )
111 NO_DATABASE_ERROR = (
112  "InfluxDB database '%s' cannot be found. "
113  "Check the name is correct and the user has access to it."
114 )
115 WRITE_ERROR = "Could not write '%s' to influx due to '%s'."
116 QUERY_ERROR = (
117  "Could not execute query '%s' due to '%s'. Check the syntax of your query."
118 )
119 RETRY_MESSAGE = f"%s Retrying in {RETRY_INTERVAL} seconds."
120 CATCHING_UP_MESSAGE = "Catching up, dropped %d old events."
121 RESUMED_MESSAGE = "Resumed, lost %d events."
122 WROTE_MESSAGE = "Wrote %d events."
123 RUNNING_QUERY_MESSAGE = "Running query: %s."
124 QUERY_NO_RESULTS_MESSAGE = "Query returned no results, sensor state set to UNKNOWN: %s."
125 QUERY_MULTIPLE_RESULTS_MESSAGE = (
126  "Query returned multiple results, only value from first one is shown: %s."
127 )
128 RENDERING_QUERY_MESSAGE = "Rendering query: %s."
129 RENDERING_QUERY_ERROR_MESSAGE = "Could not render query template: %s."
130 RENDERING_WHERE_MESSAGE = "Rendering where: %s."
131 RENDERING_WHERE_ERROR_MESSAGE = "Could not render where template: %s."
132 
133 COMPONENT_CONFIG_SCHEMA_CONNECTION = {
134  # Connection config for V1 and V2 APIs.
135  vol.Optional(CONF_API_VERSION, default=DEFAULT_API_VERSION): vol.All(
136  vol.Coerce(str),
137  vol.In([DEFAULT_API_VERSION, API_VERSION_2]),
138  ),
139  vol.Optional(CONF_HOST): cv.string,
140  vol.Optional(CONF_PATH): cv.string,
141  vol.Optional(CONF_PORT): cv.port,
142  vol.Optional(CONF_SSL): cv.boolean,
143  vol.Optional(CONF_VERIFY_SSL, default=DEFAULT_VERIFY_SSL): cv.boolean,
144  vol.Optional(CONF_SSL_CA_CERT): cv.isfile,
145  vol.Optional(CONF_PRECISION): vol.In(["ms", "s", "us", "ns"]),
146  # Connection config for V1 API only.
147  vol.Inclusive(CONF_USERNAME, "authentication"): cv.string,
148  vol.Inclusive(CONF_PASSWORD, "authentication"): cv.string,
149  vol.Optional(CONF_DB_NAME, default=DEFAULT_DATABASE): cv.string,
150  # Connection config for V2 API only.
151  vol.Inclusive(CONF_TOKEN, "v2_authentication"): cv.string,
152  vol.Inclusive(CONF_ORG, "v2_authentication"): cv.string,
153  vol.Optional(CONF_BUCKET, default=DEFAULT_BUCKET): cv.string,
154 }