core/homeassistant/components/emoncms/sensor.py

268 lines
8.0 KiB
Python
Raw Normal View History

"""Support for monitoring emoncms feeds."""
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
from datetime import timedelta
from http import HTTPStatus
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
import logging
import requests
import voluptuous as vol
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
from homeassistant.components.sensor import (
PLATFORM_SCHEMA,
STATE_CLASS_MEASUREMENT,
STATE_CLASS_TOTAL_INCREASING,
SensorEntity,
)
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
from homeassistant.const import (
2019-07-31 19:25:30 +00:00
CONF_API_KEY,
CONF_ID,
CONF_SCAN_INTERVAL,
CONF_UNIT_OF_MEASUREMENT,
CONF_URL,
CONF_VALUE_TEMPLATE,
DEVICE_CLASS_ENERGY,
DEVICE_CLASS_POWER,
2019-07-31 19:25:30 +00:00
POWER_WATT,
STATE_UNKNOWN,
2019-07-31 19:25:30 +00:00
)
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
from homeassistant.helpers import template
import homeassistant.helpers.config_validation as cv
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
from homeassistant.util import Throttle
_LOGGER = logging.getLogger(__name__)
2019-07-31 19:25:30 +00:00
ATTR_FEEDID = "FeedId"
ATTR_FEEDNAME = "FeedName"
ATTR_LASTUPDATETIME = "LastUpdated"
ATTR_LASTUPDATETIMESTR = "LastUpdatedStr"
ATTR_SIZE = "Size"
ATTR_TAG = "Tag"
ATTR_USERID = "UserId"
2019-07-31 19:25:30 +00:00
CONF_EXCLUDE_FEEDID = "exclude_feed_id"
CONF_ONLY_INCLUDE_FEEDID = "include_only_feed_id"
CONF_SENSOR_NAMES = "sensor_names"
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
DECIMALS = 2
DEFAULT_UNIT = POWER_WATT
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
MIN_TIME_BETWEEN_UPDATES = timedelta(seconds=5)
2019-07-31 19:25:30 +00:00
ONLY_INCL_EXCL_NONE = "only_include_exclude_or_none"
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
{
vol.Required(CONF_API_KEY): cv.string,
vol.Required(CONF_URL): cv.string,
vol.Required(CONF_ID): cv.positive_int,
vol.Exclusive(CONF_ONLY_INCLUDE_FEEDID, ONLY_INCL_EXCL_NONE): vol.All(
cv.ensure_list, [cv.positive_int]
),
vol.Exclusive(CONF_EXCLUDE_FEEDID, ONLY_INCL_EXCL_NONE): vol.All(
cv.ensure_list, [cv.positive_int]
),
vol.Optional(CONF_SENSOR_NAMES): vol.All(
{cv.positive_int: vol.All(cv.string, vol.Length(min=1))}
),
vol.Optional(CONF_VALUE_TEMPLATE): cv.template,
vol.Optional(CONF_UNIT_OF_MEASUREMENT, default=DEFAULT_UNIT): cv.string,
}
)
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
def get_id(sensorid, feedtag, feedname, feedid, feeduserid):
"""Return unique identifier for feed / sensor."""
return f"emoncms{sensorid}_{feedtag}_{feedname}_{feedid}_{feeduserid}"
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
def setup_platform(hass, config, add_entities, discovery_info=None):
"""Set up the Emoncms sensor."""
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
apikey = config.get(CONF_API_KEY)
url = config.get(CONF_URL)
sensorid = config.get(CONF_ID)
value_template = config.get(CONF_VALUE_TEMPLATE)
Emoncms API now provides a Unit of Measurement (#32042) * Emoncms API provides a Unit The EmonCMS API has been amended to include a 'unit' as part of it's payload. By using this information, all the sensors can be created without the need for individual sensors to be setup by type. The change is backward compatible so if a unit type has been specified in the configuration, this will be used by default. If no unit is pecified either by the Home Assistant configuration, or the Emoncms API, then the default of W will be used as before. * Update sensor.py Check the 'unit' key is in the API call. Older systems may not have that key in the payload. * Modified approach with new configuration item * Removed new config item Removed the configuration item. The integration attempts to get the unit from the API. If this fails *or* the unit key of the API is blank, either the specified unit, or the default will be used. If approved, documentation will be updated. * Update homeassistant/components/emoncms/sensor.py Co-Authored-By: springstan <46536646+springstan@users.noreply.github.com> * Update homeassistant/components/emoncms/sensor.py Co-Authored-By: springstan <46536646+springstan@users.noreply.github.com> * Apply suggestions from code review * Apply suggestions from code review v2 * Update homeassistant/components/emoncms/sensor.py Co-Authored-By: springstan <46536646+springstan@users.noreply.github.com> * Update sensor.py Update `config_unit` Co-authored-by: springstan <46536646+springstan@users.noreply.github.com>
2020-03-05 02:03:51 +00:00
config_unit = config.get(CONF_UNIT_OF_MEASUREMENT)
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
exclude_feeds = config.get(CONF_EXCLUDE_FEEDID)
include_only_feeds = config.get(CONF_ONLY_INCLUDE_FEEDID)
sensor_names = config.get(CONF_SENSOR_NAMES)
interval = config.get(CONF_SCAN_INTERVAL)
if value_template is not None:
value_template.hass = hass
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
data = EmonCmsData(hass, url, apikey, interval)
data.update()
if data.data is None:
return False
sensors = []
for elem in data.data:
if exclude_feeds is not None and int(elem["id"]) in exclude_feeds:
continue
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
if include_only_feeds is not None and int(elem["id"]) not in include_only_feeds:
continue
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
name = None
if sensor_names is not None:
name = sensor_names.get(int(elem["id"]), None)
2021-10-18 13:54:38 +00:00
if unit := elem.get("unit"):
Emoncms API now provides a Unit of Measurement (#32042) * Emoncms API provides a Unit The EmonCMS API has been amended to include a 'unit' as part of it's payload. By using this information, all the sensors can be created without the need for individual sensors to be setup by type. The change is backward compatible so if a unit type has been specified in the configuration, this will be used by default. If no unit is pecified either by the Home Assistant configuration, or the Emoncms API, then the default of W will be used as before. * Update sensor.py Check the 'unit' key is in the API call. Older systems may not have that key in the payload. * Modified approach with new configuration item * Removed new config item Removed the configuration item. The integration attempts to get the unit from the API. If this fails *or* the unit key of the API is blank, either the specified unit, or the default will be used. If approved, documentation will be updated. * Update homeassistant/components/emoncms/sensor.py Co-Authored-By: springstan <46536646+springstan@users.noreply.github.com> * Update homeassistant/components/emoncms/sensor.py Co-Authored-By: springstan <46536646+springstan@users.noreply.github.com> * Apply suggestions from code review * Apply suggestions from code review v2 * Update homeassistant/components/emoncms/sensor.py Co-Authored-By: springstan <46536646+springstan@users.noreply.github.com> * Update sensor.py Update `config_unit` Co-authored-by: springstan <46536646+springstan@users.noreply.github.com>
2020-03-05 02:03:51 +00:00
unit_of_measurement = unit
else:
unit_of_measurement = config_unit
2019-07-31 19:25:30 +00:00
sensors.append(
EmonCmsSensor(
hass,
data,
name,
value_template,
unit_of_measurement,
str(sensorid),
elem,
)
)
add_entities(sensors)
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
class EmonCmsSensor(SensorEntity):
"""Implementation of an Emoncms sensor."""
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
2019-07-31 19:25:30 +00:00
def __init__(
self, hass, data, name, value_template, unit_of_measurement, sensorid, elem
):
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
"""Initialize the sensor."""
if name is None:
# Suppress ID in sensor name if it's 1, since most people won't
# have more than one EmonCMS source and it's redundant to show the
# ID if there's only one.
2019-07-31 19:25:30 +00:00
id_for_name = "" if str(sensorid) == "1" else sensorid
# Use the feed name assigned in EmonCMS or fall back to the feed ID
feed_name = elem.get("name") or f"Feed {elem['id']}"
self._name = f"EmonCMS{id_for_name} {feed_name}"
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
else:
self._name = name
self._identifier = get_id(
2019-07-31 19:25:30 +00:00
sensorid, elem["tag"], elem["name"], elem["id"], elem["userid"]
)
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
self._hass = hass
self._data = data
self._value_template = value_template
self._unit_of_measurement = unit_of_measurement
self._sensorid = sensorid
self._elem = elem
if unit_of_measurement == "kWh":
self._attr_device_class = DEVICE_CLASS_ENERGY
self._attr_state_class = STATE_CLASS_TOTAL_INCREASING
elif unit_of_measurement == "W":
self._attr_device_class = DEVICE_CLASS_POWER
self._attr_state_class = STATE_CLASS_MEASUREMENT
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
if self._value_template is not None:
self._state = self._value_template.render_with_possible_json_value(
2019-07-31 19:25:30 +00:00
elem["value"], STATE_UNKNOWN
)
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
else:
self._state = round(float(elem["value"]), DECIMALS)
@property
def name(self):
"""Return the name of the sensor."""
return self._name
@property
def native_unit_of_measurement(self):
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
"""Return the unit of measurement of this entity, if any."""
return self._unit_of_measurement
@property
def native_value(self):
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
"""Return the state of the device."""
return self._state
@property
def extra_state_attributes(self):
"""Return the attributes of the sensor."""
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
return {
ATTR_FEEDID: self._elem["id"],
ATTR_TAG: self._elem["tag"],
ATTR_FEEDNAME: self._elem["name"],
ATTR_SIZE: self._elem["size"],
ATTR_USERID: self._elem["userid"],
ATTR_LASTUPDATETIME: self._elem["time"],
2019-07-31 19:25:30 +00:00
ATTR_LASTUPDATETIMESTR: template.timestamp_local(float(self._elem["time"])),
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
}
def update(self):
"""Get the latest data and updates the state."""
self._data.update()
if self._data.data is None:
return
2019-07-31 19:25:30 +00:00
elem = next(
(
elem
for elem in self._data.data
if get_id(
self._sensorid,
elem["tag"],
elem["name"],
elem["id"],
elem["userid"],
)
== self._identifier
),
None,
)
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
if elem is None:
return
self._elem = elem
if self._value_template is not None:
self._state = self._value_template.render_with_possible_json_value(
2019-07-31 19:25:30 +00:00
elem["value"], STATE_UNKNOWN
)
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
else:
self._state = round(float(elem["value"]), DECIMALS)
class EmonCmsData:
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
"""The class for handling the data retrieval."""
def __init__(self, hass, url, apikey, interval):
"""Initialize the data object."""
self._apikey = apikey
self._url = f"{url}/feed/list.json"
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
self._interval = interval
self._hass = hass
self.data = None
@Throttle(MIN_TIME_BETWEEN_UPDATES)
def update(self):
"""Get the latest data from Emoncms."""
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
try:
parameters = {"apikey": self._apikey}
req = requests.get(
2019-07-31 19:25:30 +00:00
self._url, params=parameters, allow_redirects=True, timeout=5
)
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
except requests.exceptions.RequestException as exception:
_LOGGER.error(exception)
return
else:
if req.status_code == HTTPStatus.OK:
Emoncms feeds sensor component (#3258) * Add Initial version for emoncms feeds sensor * flake8 test fixes * pylint test fixes * - fix bug with include_feed_id_names not assigning the name to the element in the same postion as found in include_feed_id - a few structure changes to have less nesting (pylint fix) - minor other changes * update .coveragerc * voluptuous fixes: - exclude_feed_id and include_feed_id Exclusive group so that only one (or none) can be specified at once - id must be positive int - exclude_feed_id and include_feed_id must be positive int * Fix comment so it refers to the documentation * use string formatting * Remove outer try * clean up sensors.append calls (break them out for loop) * multiple changes like: - rename config value "include_feed_id" to "include_only_feed_id" - rename config value "include_feed_id_names" to "sensor_names" - renamed config value sensor_names is now a dictionary an can also be used when renamed config value "include_only_feed_id" is not specified - Set default value for scan_interval using the config validation - blank lines between default, 3rd party and own imports - removed homeassistant.util import, it was not needed anymore * fix extended voluptuous schema scan_interval should not be extended to PLATFORM_SCHEMA as it was already in the schema by config_validation helper so i should not add / change it. It was also causing problems reading the value from the config. * Use Home Assistant polling * remove statement that can never happen * Guard clause * Reduce instance variables
2016-09-18 06:34:24 +00:00
self.data = req.json()
else:
2019-07-31 19:25:30 +00:00
_LOGGER.error(
2020-02-13 16:27:00 +00:00
"Please verify if the specified configuration value "
2019-07-31 19:25:30 +00:00
"'%s' is correct! (HTTP Status_code = %d)",
CONF_URL,
req.status_code,
)