mirror of
https://github.com/home-assistant/core.git
synced 2025-07-25 14:17:45 +00:00
(InfluxDB) Configuration for a default measurement value for events without a unit. (#4632)
This commit is contained in:
parent
ec8969351d
commit
08909ed420
@ -21,6 +21,7 @@ _LOGGER = logging.getLogger(__name__)
|
|||||||
|
|
||||||
CONF_DB_NAME = 'database'
|
CONF_DB_NAME = 'database'
|
||||||
CONF_TAGS = 'tags'
|
CONF_TAGS = 'tags'
|
||||||
|
CONF_DEFAULT_MEASUREMENT = 'default_measurement'
|
||||||
|
|
||||||
DEFAULT_DATABASE = 'home_assistant'
|
DEFAULT_DATABASE = 'home_assistant'
|
||||||
DEFAULT_HOST = 'localhost'
|
DEFAULT_HOST = 'localhost'
|
||||||
@ -40,6 +41,7 @@ CONFIG_SCHEMA = vol.Schema({
|
|||||||
vol.Optional(CONF_DB_NAME, default=DEFAULT_DATABASE): cv.string,
|
vol.Optional(CONF_DB_NAME, default=DEFAULT_DATABASE): cv.string,
|
||||||
vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port,
|
vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port,
|
||||||
vol.Optional(CONF_SSL, default=DEFAULT_SSL): cv.boolean,
|
vol.Optional(CONF_SSL, default=DEFAULT_SSL): cv.boolean,
|
||||||
|
vol.Optional(CONF_DEFAULT_MEASUREMENT): cv.string,
|
||||||
vol.Optional(CONF_TAGS, default={}):
|
vol.Optional(CONF_TAGS, default={}):
|
||||||
vol.Schema({cv.string: cv.string}),
|
vol.Schema({cv.string: cv.string}),
|
||||||
vol.Optional(CONF_WHITELIST, default=[]):
|
vol.Optional(CONF_WHITELIST, default=[]):
|
||||||
@ -65,6 +67,7 @@ def setup(hass, config):
|
|||||||
blacklist = conf.get(CONF_BLACKLIST)
|
blacklist = conf.get(CONF_BLACKLIST)
|
||||||
whitelist = conf.get(CONF_WHITELIST)
|
whitelist = conf.get(CONF_WHITELIST)
|
||||||
tags = conf.get(CONF_TAGS)
|
tags = conf.get(CONF_TAGS)
|
||||||
|
default_measurement = conf.get(CONF_DEFAULT_MEASUREMENT)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
influx = InfluxDBClient(
|
influx = InfluxDBClient(
|
||||||
@ -96,7 +99,10 @@ def setup(hass, config):
|
|||||||
|
|
||||||
measurement = state.attributes.get('unit_of_measurement')
|
measurement = state.attributes.get('unit_of_measurement')
|
||||||
if measurement in (None, ''):
|
if measurement in (None, ''):
|
||||||
measurement = state.entity_id
|
if default_measurement:
|
||||||
|
measurement = default_measurement
|
||||||
|
else:
|
||||||
|
measurement = state.entity_id
|
||||||
|
|
||||||
json_body = [
|
json_body = [
|
||||||
{
|
{
|
||||||
|
@ -256,3 +256,46 @@ class TestInfluxDB(unittest.TestCase):
|
|||||||
else:
|
else:
|
||||||
self.assertFalse(mock_client.return_value.write_points.called)
|
self.assertFalse(mock_client.return_value.write_points.called)
|
||||||
mock_client.return_value.write_points.reset_mock()
|
mock_client.return_value.write_points.reset_mock()
|
||||||
|
|
||||||
|
def test_event_listener_default_measurement(self, mock_client):
|
||||||
|
"""Test the event listener with a default measurement."""
|
||||||
|
config = {
|
||||||
|
'influxdb': {
|
||||||
|
'host': 'host',
|
||||||
|
'username': 'user',
|
||||||
|
'password': 'pass',
|
||||||
|
'default_measurement': 'state',
|
||||||
|
'blacklist': ['fake.blacklisted']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assert setup_component(self.hass, influxdb.DOMAIN, config)
|
||||||
|
self.handler_method = self.hass.bus.listen.call_args_list[0][0][1]
|
||||||
|
|
||||||
|
for entity_id in ('ok', 'blacklisted'):
|
||||||
|
state = mock.MagicMock(
|
||||||
|
state=1, domain='fake', entity_id='fake.{}'.format(entity_id),
|
||||||
|
object_id=entity_id, attributes={})
|
||||||
|
event = mock.MagicMock(data={'new_state': state}, time_fired=12345)
|
||||||
|
body = [{
|
||||||
|
'measurement': 'state',
|
||||||
|
'tags': {
|
||||||
|
'domain': 'fake',
|
||||||
|
'entity_id': entity_id,
|
||||||
|
},
|
||||||
|
'time': 12345,
|
||||||
|
'fields': {
|
||||||
|
'value': 1,
|
||||||
|
},
|
||||||
|
}]
|
||||||
|
self.handler_method(event)
|
||||||
|
if entity_id == 'ok':
|
||||||
|
self.assertEqual(
|
||||||
|
mock_client.return_value.write_points.call_count, 1
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
mock_client.return_value.write_points.call_args,
|
||||||
|
mock.call(body)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
self.assertFalse(mock_client.return_value.write_points.called)
|
||||||
|
mock_client.return_value.write_points.reset_mock()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user