mirror of
https://github.com/home-assistant/core.git
synced 2025-08-07 14:45:09 +02:00
Fix #6783, remove a test that makes no sense anymore
This commit is contained in:
@@ -98,7 +98,7 @@ class MinMaxSensor(Entity):
|
|||||||
if self._unit_of_measurement != new_state.attributes.get(
|
if self._unit_of_measurement != new_state.attributes.get(
|
||||||
ATTR_UNIT_OF_MEASUREMENT):
|
ATTR_UNIT_OF_MEASUREMENT):
|
||||||
_LOGGER.warning("Units of measurement do not match")
|
_LOGGER.warning("Units of measurement do not match")
|
||||||
return
|
|
||||||
try:
|
try:
|
||||||
self.states[entity] = float(new_state.state)
|
self.states[entity] = float(new_state.state)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
@@ -150,10 +150,36 @@ class MinMaxSensor(Entity):
|
|||||||
"""Get the latest data and updates the states."""
|
"""Get the latest data and updates the states."""
|
||||||
sensor_values = [self.states[k] for k in self._entity_ids
|
sensor_values = [self.states[k] for k in self._entity_ids
|
||||||
if k in self.states]
|
if k in self.states]
|
||||||
if len(sensor_values) == self.count_sensors:
|
self.min_value = self.calc_min(sensor_values)
|
||||||
self.min_value = min(sensor_values)
|
self.max_value = self.calc_max(sensor_values)
|
||||||
self.max_value = max(sensor_values)
|
self.mean = self.calc_mean(sensor_values)
|
||||||
self.mean = round(sum(sensor_values) / self.count_sensors,
|
|
||||||
self._round_digits)
|
def calc_min(self, sensor_values):
|
||||||
else:
|
"""Calculate min value, honoring unkown states."""
|
||||||
self.min_value = self.max_value = self.mean = STATE_UNKNOWN
|
val = STATE_UNKNOWN
|
||||||
|
for v in sensor_values:
|
||||||
|
if v != STATE_UNKNOWN:
|
||||||
|
if val == STATE_UNKNOWN or val > v:
|
||||||
|
val = v
|
||||||
|
return val
|
||||||
|
|
||||||
|
def calc_max(self, sensor_values):
|
||||||
|
"""Calculate max value, honoring unkown states."""
|
||||||
|
val = STATE_UNKNOWN
|
||||||
|
for v in sensor_values:
|
||||||
|
if v != STATE_UNKNOWN:
|
||||||
|
if val == STATE_UNKNOWN or val < v:
|
||||||
|
val = v
|
||||||
|
return val
|
||||||
|
|
||||||
|
def calc_mean(self, sensor_values):
|
||||||
|
"""Calculate mean value, honoring unkown states."""
|
||||||
|
val = 0
|
||||||
|
count = 0
|
||||||
|
for v in sensor_values:
|
||||||
|
if v != STATE_UNKNOWN:
|
||||||
|
val += v
|
||||||
|
count += 1
|
||||||
|
if count == 0:
|
||||||
|
return STATE_UNKNOWN
|
||||||
|
return round(val/count, self._round_digits)
|
||||||
|
@@ -2,8 +2,7 @@
|
|||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from homeassistant.setup import setup_component
|
from homeassistant.setup import setup_component
|
||||||
from homeassistant.const import (
|
from homeassistant.const import STATE_UNKNOWN
|
||||||
STATE_UNKNOWN, ATTR_UNIT_OF_MEASUREMENT, TEMP_CELSIUS, TEMP_FAHRENHEIT)
|
|
||||||
from tests.common import get_test_home_assistant
|
from tests.common import get_test_home_assistant
|
||||||
|
|
||||||
|
|
||||||
@@ -191,62 +190,20 @@ class TestMinMaxSensor(unittest.TestCase):
|
|||||||
|
|
||||||
entity_ids = config['sensor']['entity_ids']
|
entity_ids = config['sensor']['entity_ids']
|
||||||
|
|
||||||
self.hass.states.set(entity_ids[0], self.values[0])
|
self.hass.states.set(entity_ids[0], STATE_UNKNOWN)
|
||||||
self.hass.block_till_done()
|
self.hass.block_till_done()
|
||||||
|
|
||||||
state = self.hass.states.get('sensor.test_max')
|
state = self.hass.states.get('sensor.test_max')
|
||||||
self.assertEqual(STATE_UNKNOWN, state.state)
|
self.assertEqual(STATE_UNKNOWN, state.state)
|
||||||
|
|
||||||
self.hass.states.set(entity_ids[1], self.values[1])
|
self.hass.states.set(entity_ids[2], self.values[1])
|
||||||
self.hass.block_till_done()
|
|
||||||
|
|
||||||
state = self.hass.states.get('sensor.test_max')
|
|
||||||
self.assertEqual(STATE_UNKNOWN, state.state)
|
|
||||||
|
|
||||||
self.hass.states.set(entity_ids[2], self.values[2])
|
|
||||||
self.hass.block_till_done()
|
self.hass.block_till_done()
|
||||||
|
|
||||||
state = self.hass.states.get('sensor.test_max')
|
state = self.hass.states.get('sensor.test_max')
|
||||||
self.assertNotEqual(STATE_UNKNOWN, state.state)
|
self.assertNotEqual(STATE_UNKNOWN, state.state)
|
||||||
|
|
||||||
def test_different_unit_of_measurement(self):
|
self.hass.states.set(entity_ids[2], STATE_UNKNOWN)
|
||||||
"""Test for different unit of measurement."""
|
|
||||||
config = {
|
|
||||||
'sensor': {
|
|
||||||
'platform': 'min_max',
|
|
||||||
'name': 'test',
|
|
||||||
'type': 'mean',
|
|
||||||
'entity_ids': [
|
|
||||||
'sensor.test_1',
|
|
||||||
'sensor.test_2',
|
|
||||||
'sensor.test_3',
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
assert setup_component(self.hass, 'sensor', config)
|
|
||||||
|
|
||||||
entity_ids = config['sensor']['entity_ids']
|
|
||||||
|
|
||||||
self.hass.states.set(entity_ids[0], self.values[0],
|
|
||||||
{ATTR_UNIT_OF_MEASUREMENT: TEMP_CELSIUS})
|
|
||||||
self.hass.block_till_done()
|
self.hass.block_till_done()
|
||||||
|
|
||||||
state = self.hass.states.get('sensor.test_mean')
|
state = self.hass.states.get('sensor.test_max')
|
||||||
|
self.assertNotEqual(STATE_UNKNOWN, state.state)
|
||||||
self.assertEqual(STATE_UNKNOWN, state.state)
|
|
||||||
self.assertEqual('°C', state.attributes.get('unit_of_measurement'))
|
|
||||||
|
|
||||||
self.hass.states.set(entity_ids[1], self.values[1],
|
|
||||||
{ATTR_UNIT_OF_MEASUREMENT: TEMP_FAHRENHEIT})
|
|
||||||
self.hass.block_till_done()
|
|
||||||
|
|
||||||
self.assertEqual(STATE_UNKNOWN, state.state)
|
|
||||||
self.assertEqual('°C', state.attributes.get('unit_of_measurement'))
|
|
||||||
|
|
||||||
self.hass.states.set(entity_ids[2], self.values[2],
|
|
||||||
{ATTR_UNIT_OF_MEASUREMENT: '%'})
|
|
||||||
self.hass.block_till_done()
|
|
||||||
|
|
||||||
self.assertEqual(STATE_UNKNOWN, state.state)
|
|
||||||
self.assertEqual('°C', state.attributes.get('unit_of_measurement'))
|
|
||||||
|
Reference in New Issue
Block a user