Change STATE_UNKOWN to None (#20337)

* Change STATE_UNKOWN to None

* Change STATE_UNKOWN to None

* tests

* tests

* tests

* tests

* tests

* style

* fix comments

* fix comments

* update fan test
This commit is contained in:
Daniel Høyer Iversen 2019-01-24 08:20:20 +01:00 committed by Martin Hjelmare
parent 074fcd96ed
commit 1bd31e3459
64 changed files with 147 additions and 168 deletions

View file

@ -9,7 +9,7 @@ import logging
from homeassistant.components.amcrest import DATA_AMCREST, SENSORS
from homeassistant.helpers.entity import Entity
from homeassistant.const import CONF_NAME, CONF_SENSORS, STATE_UNKNOWN
from homeassistant.const import CONF_NAME, CONF_SENSORS
DEPENDENCIES = ['amcrest']
@ -48,7 +48,7 @@ class AmcrestSensor(Entity):
self._name = '{0}_{1}'.format(name,
SENSORS.get(self._sensor_type)[0])
self._icon = 'mdi:{}'.format(SENSORS.get(self._sensor_type)[2])
self._state = STATE_UNKNOWN
self._state = None
@property
def name(self):

View file

@ -13,7 +13,7 @@ import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import (
CONF_UNIT_OF_MEASUREMENT, CONF_VALUE_TEMPLATE, CONF_RESOURCE,
CONF_MONITORED_VARIABLES, CONF_NAME, STATE_UNKNOWN)
CONF_MONITORED_VARIABLES, CONF_NAME)
from homeassistant.exceptions import TemplateError
from homeassistant.helpers.entity import Entity
from homeassistant.util import Throttle
@ -116,7 +116,7 @@ class ArestSensor(Entity):
self._name = '{} {}'.format(location.title(), name.title())
self._variable = variable
self._pin = pin
self._state = STATE_UNKNOWN
self._state = None
self._unit_of_measurement = unit_of_measurement
self._renderer = renderer
@ -145,7 +145,7 @@ class ArestSensor(Entity):
return values['error']
value = self._renderer(
values.get('value', values.get(self._variable, STATE_UNKNOWN)))
values.get('value', values.get(self._variable, None)))
return value
def update(self):

View file

@ -15,7 +15,7 @@ import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import (
ATTR_ATTRIBUTION, CONF_NAME, CONF_OFFSET, STATE_UNKNOWN)
ATTR_ATTRIBUTION, CONF_NAME, CONF_OFFSET)
from homeassistant.helpers.aiohttp_client import async_get_clientsession
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
@ -120,7 +120,7 @@ class ComedHourlyPricingSensor(Entity):
float(data[0]['price']) + self.offset, 2)
else:
self._state = STATE_UNKNOWN
self._state = None
except (asyncio.TimeoutError, aiohttp.ClientError) as err:
_LOGGER.error("Could not get data from ComEd API: %s", err)

View file

@ -11,8 +11,7 @@ from homeassistant.components.comfoconnect import (
ATTR_CURRENT_HUMIDITY, ATTR_OUTSIDE_TEMPERATURE,
ATTR_OUTSIDE_HUMIDITY, ATTR_AIR_FLOW_SUPPLY,
ATTR_AIR_FLOW_EXHAUST, SIGNAL_COMFOCONNECT_UPDATE_RECEIVED)
from homeassistant.const import (
CONF_RESOURCES, TEMP_CELSIUS, STATE_UNKNOWN)
from homeassistant.const import CONF_RESOURCES, TEMP_CELSIUS
from homeassistant.helpers.dispatcher import dispatcher_connect
from homeassistant.helpers.entity import Entity
@ -122,7 +121,7 @@ class ComfoConnectSensor(Entity):
try:
return self._ccb.data[self._sensor_id]
except KeyError:
return STATE_UNKNOWN
return None
@property
def name(self):

View file

@ -9,7 +9,6 @@ from datetime import timedelta
import voluptuous as vol
from homeassistant.const import STATE_UNKNOWN
from homeassistant.components.sensor import PLATFORM_SCHEMA
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
@ -73,7 +72,7 @@ class WanIpSensor(Entity):
self.resolver = aiodns.DNSResolver(loop=self.hass.loop)
self.resolver.nameservers = [resolver]
self.querytype = 'AAAA' if ipv6 else 'A'
self._state = STATE_UNKNOWN
self._state = None
@property
def name(self):
@ -97,4 +96,4 @@ class WanIpSensor(Entity):
if response:
self._state = response[0].host
else:
self._state = STATE_UNKNOWN
self._state = None

View file

@ -13,7 +13,7 @@ import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import (
CONF_HOST, CONF_PORT, EVENT_HOMEASSISTANT_STOP, STATE_UNKNOWN)
CONF_HOST, CONF_PORT, EVENT_HOMEASSISTANT_STOP)
from homeassistant.core import CoreState
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
@ -270,7 +270,7 @@ class DSMREntity(Entity):
if value is not None:
return value
return STATE_UNKNOWN
return None
@property
def unit_of_measurement(self):
@ -287,7 +287,7 @@ class DSMREntity(Entity):
if value == '0001':
return 'low'
return STATE_UNKNOWN
return None
class DerivativeDSMREntity(DSMREntity):
@ -300,7 +300,7 @@ class DerivativeDSMREntity(DSMREntity):
_previous_reading = None
_previous_timestamp = None
_state = STATE_UNKNOWN
_state = None
@property
def state(self):

View file

@ -13,7 +13,7 @@ import voluptuous as vol
import homeassistant.helpers.config_validation as cv
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import (
CONF_NAME, CONF_VALUE_TEMPLATE, STATE_UNKNOWN, CONF_UNIT_OF_MEASUREMENT)
CONF_NAME, CONF_VALUE_TEMPLATE, CONF_UNIT_OF_MEASUREMENT)
from homeassistant.helpers.entity import Entity
REQUIREMENTS = ['dweepy==0.3.0']
@ -69,7 +69,7 @@ class DweetSensor(Entity):
self.dweet = dweet
self._name = name
self._value_template = value_template
self._state = STATE_UNKNOWN
self._state = None
self._unit_of_measurement = unit_of_measurement
@property
@ -92,11 +92,11 @@ class DweetSensor(Entity):
self.dweet.update()
if self.dweet.data is None:
self._state = STATE_UNKNOWN
self._state = None
else:
values = json.dumps(self.dweet.data[0]['content'])
self._state = self._value_template.render_with_possible_json_value(
values, STATE_UNKNOWN)
values, None)
class DweetData:

View file

@ -16,7 +16,7 @@ import voluptuous as vol
import homeassistant.helpers.config_validation as cv
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import (
STATE_UNKNOWN, CONF_UNIT_OF_MEASUREMENT, CONF_NAME,
CONF_UNIT_OF_MEASUREMENT, CONF_NAME,
CONF_LATITUDE, CONF_LONGITUDE, CONF_RADIUS, CONF_URL)
from homeassistant.helpers.entity import Entity
@ -89,7 +89,7 @@ class GeoRssServiceSensor(Entity):
"""Initialize the sensor."""
self._category = category
self._service_name = service_name
self._state = STATE_UNKNOWN
self._state = None
self._state_attributes = None
self._unit_of_measurement = unit_of_measurement
from georss_client.generic_feed import GenericFeed

View file

@ -97,7 +97,7 @@ class GoogleWifiSensor(Entity):
"""Initialize a Google Wifi sensor."""
self._api = api
self._name = name
self._state = STATE_UNKNOWN
self._state = None
variable_info = MONITORED_CONDITIONS[variable]
self._var_name = variable
@ -135,7 +135,7 @@ class GoogleWifiSensor(Entity):
if self.available:
self._state = self._api.data[self._var_name]
else:
self._state = STATE_UNKNOWN
self._state = None
class GoogleWifiAPI:

View file

@ -10,7 +10,7 @@ import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import (
ATTR_LATITUDE, ATTR_LONGITUDE, STATE_UNKNOWN, CONF_HOST, CONF_PORT,
ATTR_LATITUDE, ATTR_LONGITUDE, CONF_HOST, CONF_PORT,
CONF_NAME)
from homeassistant.helpers.entity import Entity
import homeassistant.helpers.config_validation as cv
@ -93,7 +93,7 @@ class GpsdSensor(Entity):
return "3D Fix"
if self.agps_thread.data_stream.mode == 2:
return "2D Fix"
return STATE_UNKNOWN
return None
@property
def device_state_attributes(self):

View file

@ -9,8 +9,7 @@ import logging
import voluptuous as vol
from homeassistant.const import (CONF_HOST, CONF_PORT, CONF_DEVICE,
CONF_NAME, EVENT_HOMEASSISTANT_STOP,
STATE_UNKNOWN)
CONF_NAME, EVENT_HOMEASSISTANT_STOP)
from homeassistant.helpers.entity import Entity
from homeassistant.components.sensor import PLATFORM_SCHEMA
import homeassistant.helpers.config_validation as cv
@ -105,7 +104,7 @@ class KWBSensor(Entity):
"""Return the state of value."""
if self._sensor.value is not None and self._sensor.available:
return self._sensor.value
return STATE_UNKNOWN
return None
@property
def unit_of_measurement(self):

View file

@ -11,7 +11,6 @@ import requests
import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import STATE_UNKNOWN
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
from homeassistant.util import Throttle
@ -143,7 +142,7 @@ class AirSensor(Entity):
if sites_status:
self._state = max(set(sites_status), key=sites_status.count)
else:
self._state = STATE_UNKNOWN
self._state = None
def parse_species(species_data):

View file

@ -70,20 +70,20 @@ async def async_setup_platform(hass, config, async_add_entities,
def calc_min(sensor_values):
"""Calculate min value, honoring unknown states."""
val = STATE_UNKNOWN
val = None
for sval in sensor_values:
if sval != STATE_UNKNOWN:
if val == STATE_UNKNOWN or val > sval:
if val is None or val > sval:
val = sval
return val
def calc_max(sensor_values):
"""Calculate max value, honoring unknown states."""
val = STATE_UNKNOWN
val = None
for sval in sensor_values:
if sval != STATE_UNKNOWN:
if val == STATE_UNKNOWN or val < sval:
if val is None or val < sval:
val = sval
return val
@ -97,7 +97,7 @@ def calc_mean(sensor_values, round_digits):
val += sval
count += 1
if count == 0:
return STATE_UNKNOWN
return None
return round(val/count, round_digits)
@ -119,7 +119,7 @@ class MinMaxSensor(Entity):
if self._sensor_type == v)).capitalize()
self._unit_of_measurement = None
self._unit_of_measurement_mismatch = False
self.min_value = self.max_value = self.mean = self.last = STATE_UNKNOWN
self.min_value = self.max_value = self.mean = self.last = None
self.count_sensors = len(self._entity_ids)
self.states = {}
@ -164,7 +164,7 @@ class MinMaxSensor(Entity):
def state(self):
"""Return the state of the sensor."""
if self._unit_of_measurement_mismatch:
return STATE_UNKNOWN
return None
return getattr(self, next(
k for k, v in SENSOR_TYPES.items() if self._sensor_type == v))

View file

@ -14,8 +14,7 @@ import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import (
CONF_NAME, ATTR_ATTRIBUTION, STATE_UNKNOWN
)
CONF_NAME, ATTR_ATTRIBUTION)
REQUIREMENTS = ['PyMVGLive==1.1.4']
@ -87,7 +86,7 @@ class MVGLiveSensor(Entity):
self._name = name
self.data = MVGLiveData(station, destinations, directions,
lines, products, timeoffset, number)
self._state = STATE_UNKNOWN
self._state = None
self._icon = ICONS['-']
@property

View file

@ -13,7 +13,7 @@ import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import (
TEMP_CELSIUS, DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_TEMPERATURE,
DEVICE_CLASS_BATTERY, STATE_UNKNOWN)
DEVICE_CLASS_BATTERY)
from homeassistant.helpers.entity import Entity
import homeassistant.helpers.config_validation as cv
@ -161,7 +161,7 @@ class NetAtmoSensor(Entity):
if data is None:
_LOGGER.warning("No data found for %s", self.module_name)
self._state = STATE_UNKNOWN
self._state = None
return
if self.type == 'temperature':

View file

@ -9,7 +9,7 @@ import logging
import voluptuous as vol
from homeassistant.const import (
CONF_NAME, STATE_UNKNOWN, CONF_UNIT_OF_MEASUREMENT, CONF_PAYLOAD)
CONF_NAME, CONF_UNIT_OF_MEASUREMENT, CONF_PAYLOAD)
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.helpers.entity import Entity
from homeassistant.components import pilight
@ -46,7 +46,7 @@ class PilightSensor(Entity):
def __init__(self, hass, name, variable, payload, unit_of_measurement):
"""Initialize the sensor."""
self._state = STATE_UNKNOWN
self._state = None
self._hass = hass
self._name = name
self._variable = variable

View file

@ -18,7 +18,7 @@ from homeassistant.const import (
CONF_METHOD, CONF_PASSWORD, CONF_PAYLOAD, CONF_RESOURCE,
CONF_UNIT_OF_MEASUREMENT, CONF_USERNAME,
CONF_VALUE_TEMPLATE, CONF_VERIFY_SSL, CONF_DEVICE_CLASS,
HTTP_BASIC_AUTHENTICATION, HTTP_DIGEST_AUTHENTICATION, STATE_UNKNOWN)
HTTP_BASIC_AUTHENTICATION, HTTP_DIGEST_AUTHENTICATION)
from homeassistant.exceptions import PlatformNotReady
from homeassistant.helpers.entity import Entity
import homeassistant.helpers.config_validation as cv
@ -100,7 +100,7 @@ class RestSensor(Entity):
self._hass = hass
self.rest = rest
self._name = name
self._state = STATE_UNKNOWN
self._state = None
self._unit_of_measurement = unit_of_measurement
self._device_class = device_class
self._value_template = value_template
@ -159,11 +159,9 @@ class RestSensor(Entity):
_LOGGER.debug("Erroneous JSON: %s", value)
else:
_LOGGER.warning("Empty reply found when expecting JSON data")
if value is None:
value = STATE_UNKNOWN
elif self._value_template is not None:
if value is not None and self._value_template is not None:
value = self._value_template.render_with_possible_json_value(
value, STATE_UNKNOWN)
value, None)
self._state = value

View file

@ -15,7 +15,7 @@ from homeassistant.components.ring import (
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import (
CONF_ENTITY_NAMESPACE, CONF_MONITORED_CONDITIONS,
STATE_UNKNOWN, ATTR_ATTRIBUTION)
ATTR_ATTRIBUTION)
from homeassistant.helpers.entity import Entity
from homeassistant.helpers.icon import icon_for_battery_level
@ -98,7 +98,7 @@ class RingSensor(Entity):
self._kind = SENSOR_TYPES.get(self._sensor_type)[4]
self._name = "{0} {1}".format(
self._data.name, SENSOR_TYPES.get(self._sensor_type)[0])
self._state = STATE_UNKNOWN
self._state = None
self._tz = str(hass.config.time_zone)
self._unique_id = '{}-{}'.format(self._data.id, self._sensor_type)
@ -141,7 +141,7 @@ class RingSensor(Entity):
@property
def icon(self):
"""Icon to use in the frontend, if any."""
if self._sensor_type == 'battery' and self._state is not STATE_UNKNOWN:
if self._sensor_type == 'battery' and self._state is not None:
return icon_for_battery_level(battery_level=int(self._state),
charging=False)
return self._icon

View file

@ -12,7 +12,7 @@ from requests.auth import HTTPBasicAuth, HTTPDigestAuth
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.components.sensor.rest import RestData
from homeassistant.const import (
CONF_NAME, CONF_RESOURCE, CONF_UNIT_OF_MEASUREMENT, STATE_UNKNOWN,
CONF_NAME, CONF_RESOURCE, CONF_UNIT_OF_MEASUREMENT,
CONF_VALUE_TEMPLATE, CONF_VERIFY_SSL, CONF_USERNAME, CONF_HEADERS,
CONF_PASSWORD, CONF_AUTHENTICATION, HTTP_BASIC_AUTHENTICATION,
HTTP_DIGEST_AUTHENTICATION)
@ -87,7 +87,7 @@ class ScrapeSensor(Entity):
"""Initialize a web scrape sensor."""
self.rest = rest
self._name = name
self._state = STATE_UNKNOWN
self._state = None
self._select = select
self._attr = attr
self._value_template = value_template
@ -129,6 +129,6 @@ class ScrapeSensor(Entity):
if self._value_template is not None:
self._state = self._value_template.render_with_possible_json_value(
value, STATE_UNKNOWN)
value, None)
else:
self._state = value

View file

@ -13,8 +13,7 @@ import voluptuous as vol
import homeassistant.helpers.config_validation as cv
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import (CONF_DEVICES, CONF_EMAIL, CONF_PASSWORD,
STATE_UNKNOWN)
from homeassistant.const import CONF_DEVICES, CONF_EMAIL, CONF_PASSWORD
from homeassistant.helpers.entity import Entity
@ -78,7 +77,7 @@ class TankUtilitySensor(Entity):
self._password = password
self._token = token
self._device = device
self._state = STATE_UNKNOWN
self._state = None
self._name = "Tank Utility " + self.device
self._unit_of_measurement = SENSOR_UNIT_OF_MEASUREMENT
self._attributes = {}

View file

@ -13,7 +13,7 @@ import homeassistant.helpers.config_validation as cv
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import (
ATTR_ATTRIBUTION, CONF_API_KEY, CONF_SCAN_INTERVAL,
CONF_MONITORED_CONDITIONS, STATE_UNKNOWN)
CONF_MONITORED_CONDITIONS)
from homeassistant.helpers.entity import Entity
REQUIREMENTS = ['TravisPy==0.3.5']
@ -107,7 +107,7 @@ class TravisCISensor(Entity):
self._repo_name = repo_name
self._user = user
self._branch = branch
self._state = STATE_UNKNOWN
self._state = None
self._name = "{0} {1}".format(self._repo_name,
SENSOR_TYPES[self._sensor_type][0])
@ -132,7 +132,7 @@ class TravisCISensor(Entity):
attrs = {}
attrs[ATTR_ATTRIBUTION] = CONF_ATTRIBUTION
if self._build and self._state is not STATE_UNKNOWN:
if self._build and self._state is not None:
if self._user and self._sensor_type == 'state':
attrs['Owner Name'] = self._user.name
attrs['Owner Email'] = self._user.email

View file

@ -57,7 +57,7 @@ class XboxSensor(Entity):
def __init__(self, hass, api, xuid):
"""Initialize the sensor."""
self._hass = hass
self._state = STATE_UNKNOWN
self._state = None
self._presence = {}
self._xuid = xuid
self._api = api
@ -117,5 +117,5 @@ class XboxSensor(Entity):
def update(self):
"""Update state data from Xbox API."""
presence = self._api.get_user_presence(self._xuid)
self._state = presence.get('state', STATE_UNKNOWN)
self._state = presence.get('state')
self._presence = presence.get('devices', {})

View file

@ -12,7 +12,7 @@ import voluptuous as vol
import homeassistant.helpers.config_validation as cv
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import (
TEMP_CELSIUS, CONF_MONITORED_CONDITIONS, CONF_NAME, STATE_UNKNOWN,
TEMP_CELSIUS, CONF_MONITORED_CONDITIONS, CONF_NAME,
ATTR_ATTRIBUTION)
from homeassistant.helpers.entity import Entity
from homeassistant.util import Throttle
@ -99,7 +99,7 @@ class YahooWeatherSensor(Entity):
self._client = name
self._name = SENSOR_TYPES[sensor_type][0]
self._type = sensor_type
self._state = STATE_UNKNOWN
self._state = None
self._unit = SENSOR_TYPES[sensor_type][1]
self._data = weather_data
self._forecast = forecast