diff --git a/homeassistant/components/influxdb.py b/homeassistant/components/influxdb.py index 37aeeee41b7..6b8cd6734dd 100644 --- a/homeassistant/components/influxdb.py +++ b/homeassistant/components/influxdb.py @@ -58,6 +58,9 @@ CONFIG_SCHEMA = vol.Schema({ }), }, extra=vol.ALLOW_EXTRA) +RE_DIGIT_TAIL = re.compile(r'^[^\.]*\d+\.?\d+[^\.]*$') +RE_DECIMAL = re.compile(r'[^\d.]+') + def setup(hass, config): """Set up the InfluxDB component.""" @@ -149,8 +152,6 @@ def setup(hass, config): } ] - non_digit_tail = re.compile(r'[\d.]+') - non_decimal = re.compile(r'[^\d.]+') for key, value in state.attributes.items(): if key != 'unit_of_measurement': # If the key is already in fields @@ -164,10 +165,12 @@ def setup(hass, config): json_body[0]['fields'][key] = float(value) except (ValueError, TypeError): new_key = "{}_str".format(key) - json_body[0]['fields'][new_key] = str(value) - if non_digit_tail.match(json_body[0]['fields'][new_key]): + new_value = str(value) + json_body[0]['fields'][new_key] = new_value + + if RE_DIGIT_TAIL.match(new_value): json_body[0]['fields'][key] = float( - non_decimal.sub('', value)) + RE_DECIMAL.sub('', new_value)) json_body[0]['tags'].update(tags) diff --git a/tests/components/test_influxdb.py b/tests/components/test_influxdb.py index 301c4c7b9b1..896ee4699cc 100644 --- a/tests/components/test_influxdb.py +++ b/tests/components/test_influxdb.py @@ -1,5 +1,6 @@ """The tests for the InfluxDB component.""" import unittest +import datetime from unittest import mock import influxdb as influx_client @@ -123,7 +124,9 @@ class TestInfluxDB(unittest.TestCase): 'latitude': '2.2', 'battery_level': '99%', 'temperature': '20c', - 'last_seen': 'Last seen 23 minutes ago' + 'last_seen': 'Last seen 23 minutes ago', + 'updated_at': datetime.datetime(2017, 1, 1, 0, 0), + 'multi_periods': '0.120.240.2023873' } state = mock.MagicMock( state=in_, domain='fake', object_id='entity', attributes=attrs) @@ -144,7 +147,11 @@ class TestInfluxDB(unittest.TestCase): 'battery_level': 99.0, 'temperature_str': '20c', 'temperature': 20.0, - 'last_seen_str': 'Last seen 23 minutes ago' + 'last_seen_str': 'Last seen 23 minutes ago', + 'last_seen': 23.0, + 'updated_at_str': '2017-01-01 00:00:00', + 'updated_at': 20170101000000, + 'multi_periods_str': '0.120.240.2023873' }, }] @@ -164,7 +171,11 @@ class TestInfluxDB(unittest.TestCase): 'battery_level': 99.0, 'temperature_str': '20c', 'temperature': 20.0, - 'last_seen_str': 'Last seen 23 minutes ago' + 'last_seen_str': 'Last seen 23 minutes ago', + 'last_seen': 23.0, + 'updated_at_str': '2017-01-01 00:00:00', + 'updated_at': 20170101000000, + 'multi_periods_str': '0.120.240.2023873' }, }] self.handler_method(event)