From 845d81bdae20243d03e88f47f5dd5ef193debe9b Mon Sep 17 00:00:00 2001 From: Richard Mitchell Date: Tue, 23 Apr 2019 05:28:40 +0100 Subject: [PATCH] Correct calculation and units of light level values. (#23309) --- homeassistant/components/hue/sensor.py | 9 +++++++-- tests/components/hue/test_sensor_base.py | 10 +++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/homeassistant/components/hue/sensor.py b/homeassistant/components/hue/sensor.py index 555c16a0be7..30a439f92e9 100644 --- a/homeassistant/components/hue/sensor.py +++ b/homeassistant/components/hue/sensor.py @@ -27,12 +27,17 @@ class HueLightLevel(GenericHueGaugeSensorEntity): """The light level sensor entity for a Hue motion sensor device.""" device_class = DEVICE_CLASS_ILLUMINANCE - unit_of_measurement = "Lux" + unit_of_measurement = "lx" @property def state(self): """Return the state of the device.""" - return self.sensor.lightlevel + # https://developers.meethue.com/develop/hue-api/supported-devices/#clip_zll_lightlevel + # Light level in 10000 log10 (lux) +1 measured by sensor. Logarithm + # scale used because the human eye adjusts to light levels and small + # changes at low lux levels are more noticeable than at high lux + # levels. + return 10 ** ((self.sensor.lightlevel - 1) / 10000) @property def device_state_attributes(self): diff --git a/tests/components/hue/test_sensor_base.py b/tests/components/hue/test_sensor_base.py index 38eb3d8c55b..6259921dcfb 100644 --- a/tests/components/hue/test_sensor_base.py +++ b/tests/components/hue/test_sensor_base.py @@ -48,7 +48,7 @@ PRESENCE_SENSOR_1_PRESENT = { } LIGHT_LEVEL_SENSOR_1 = { "state": { - "lightlevel": 0, + "lightlevel": 1, "dark": True, "daylight": True, "lastupdated": "2019-01-01T01:00:00" @@ -141,7 +141,7 @@ PRESENCE_SENSOR_2_NOT_PRESENT = { } LIGHT_LEVEL_SENSOR_2 = { "state": { - "lightlevel": 100, + "lightlevel": 10001, "dark": True, "daylight": True, "lastupdated": "2019-01-01T01:00:00" @@ -234,7 +234,7 @@ PRESENCE_SENSOR_3_PRESENT = { } LIGHT_LEVEL_SENSOR_3 = { "state": { - "lightlevel": 0, + "lightlevel": 1, "dark": True, "daylight": True, "lastupdated": "2019-01-01T01:00:00" @@ -399,7 +399,7 @@ async def test_sensors(hass, mock_bridge): assert presence_sensor_1 is not None assert presence_sensor_1.state == 'on' assert light_level_sensor_1 is not None - assert light_level_sensor_1.state == '0' + assert light_level_sensor_1.state == '1.0' assert light_level_sensor_1.name == 'Living room sensor light level' assert temperature_sensor_1 is not None assert temperature_sensor_1.state == '17.75' @@ -414,7 +414,7 @@ async def test_sensors(hass, mock_bridge): assert presence_sensor_2 is not None assert presence_sensor_2.state == 'off' assert light_level_sensor_2 is not None - assert light_level_sensor_2.state == '100' + assert light_level_sensor_2.state == '10.0' assert light_level_sensor_2.name == 'Kitchen sensor light level' assert temperature_sensor_2 is not None assert temperature_sensor_2.state == '18.75'