From 2031b2803f2f75e0a4588410dc26dac5e289b97a Mon Sep 17 00:00:00 2001 From: PeteBa Date: Sun, 19 Nov 2017 20:30:47 +0000 Subject: [PATCH] Include unit_of_measurement as InfluxDb field (#9790) --- homeassistant/components/influxdb.py | 5 +++- tests/components/test_influxdb.py | 42 ++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/influxdb.py b/homeassistant/components/influxdb.py index b41deb5e5e3..0006b052ab2 100644 --- a/homeassistant/components/influxdb.py +++ b/homeassistant/components/influxdb.py @@ -151,6 +151,7 @@ def setup(hass, config): _state = state.state _state_key = "state" + include_uom = True measurement = component_config.get(state.entity_id).get( CONF_OVERRIDE_MEASUREMENT) if measurement in (None, ''): @@ -163,6 +164,8 @@ def setup(hass, config): measurement = default_measurement else: measurement = state.entity_id + else: + include_uom = False json_body = [ { @@ -181,7 +184,7 @@ def setup(hass, config): for key, value in state.attributes.items(): if key in tags_attributes: json_body[0]['tags'][key] = value - elif key != 'unit_of_measurement': + elif key != 'unit_of_measurement' or include_uom: # If the key is already in fields if key in json_body[0]['fields']: key = key + "_" diff --git a/tests/components/test_influxdb.py b/tests/components/test_influxdb.py index 7c98dfcd540..8815b9eee4a 100644 --- a/tests/components/test_influxdb.py +++ b/tests/components/test_influxdb.py @@ -532,6 +532,48 @@ class TestInfluxDB(unittest.TestCase): self.assertFalse(mock_client.return_value.write_points.called) mock_client.return_value.write_points.reset_mock() + def test_event_listener_unit_of_measurement_field(self, mock_client): + """Test the event listener for unit of measurement field.""" + config = { + 'influxdb': { + 'host': 'host', + 'username': 'user', + 'password': 'pass', + 'override_measurement': 'state', + } + } + assert setup_component(self.hass, influxdb.DOMAIN, config) + self.handler_method = self.hass.bus.listen.call_args_list[0][0][1] + + attrs = { + 'unit_of_measurement': 'foobars', + } + state = mock.MagicMock( + state='foo', domain='fake', entity_id='fake.entity-id', + object_id='entity', attributes=attrs) + event = mock.MagicMock(data={'new_state': state}, time_fired=12345) + body = [{ + 'measurement': 'state', + 'tags': { + 'domain': 'fake', + 'entity_id': 'entity', + }, + 'time': 12345, + 'fields': { + 'state': 'foo', + 'unit_of_measurement_str': 'foobars', + }, + }] + self.handler_method(event) + self.assertEqual( + mock_client.return_value.write_points.call_count, 1 + ) + self.assertEqual( + mock_client.return_value.write_points.call_args, + mock.call(body) + ) + mock_client.return_value.write_points.reset_mock() + def test_event_listener_tags_attributes(self, mock_client): """Test the event listener when some attributes should be tags.""" config = {