* Update format

* Use string formatting
This commit is contained in:
Fabian Affolter 2018-07-09 14:39:28 +02:00 committed by GitHub
parent 1d1408b98d
commit f7d7d825b0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 83 additions and 66 deletions

View File

@ -5,12 +5,13 @@ For more details about this platform, please refer to the documentation at
https://home-assistant.io/components/sensor.efergy/
"""
import logging
import requests
import voluptuous as vol
from requests import RequestException, get
import homeassistant.helpers.config_validation as cv
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import CONF_CURRENCY
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
_LOGGER = logging.getLogger(__name__)
@ -21,7 +22,6 @@ CONF_UTC_OFFSET = 'utc_offset'
CONF_MONITORED_VARIABLES = 'monitored_variables'
CONF_SENSOR_TYPE = 'type'
CONF_CURRENCY = 'currency'
CONF_PERIOD = 'period'
CONF_INSTANT = 'instant_readings'
@ -60,17 +60,18 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
"""Set up the Efergy sensor."""
app_token = config.get(CONF_APPTOKEN)
utc_offset = str(config.get(CONF_UTC_OFFSET))
dev = []
for variable in config[CONF_MONITORED_VARIABLES]:
if variable[CONF_SENSOR_TYPE] == CONF_CURRENT_VALUES:
url_string = _RESOURCE + 'getCurrentValuesSummary?token=' \
+ app_token
response = get(url_string, timeout=10)
url_string = '{}getCurrentValuesSummary?token={}'.format(
_RESOURCE, app_token)
response = requests.get(url_string, timeout=10)
for sensor in response.json():
sid = sensor['sid']
dev.append(EfergySensor(variable[CONF_SENSOR_TYPE], app_token,
utc_offset, variable[CONF_PERIOD],
variable[CONF_CURRENCY], sid))
dev.append(EfergySensor(
variable[CONF_SENSOR_TYPE], app_token, utc_offset,
variable[CONF_PERIOD], variable[CONF_CURRENCY], sid))
dev.append(EfergySensor(
variable[CONF_SENSOR_TYPE], app_token, utc_offset,
variable[CONF_PERIOD], variable[CONF_CURRENCY]))
@ -86,7 +87,7 @@ class EfergySensor(Entity):
"""Initialize the sensor."""
self.sid = sid
if sid:
self._name = 'efergy_' + sid
self._name = 'efergy_{}'.format(sid)
else:
self._name = SENSOR_TYPES[sensor_type][0]
self.type = sensor_type
@ -96,7 +97,8 @@ class EfergySensor(Entity):
self.period = period
self.currency = currency
if self.type == 'cost':
self._unit_of_measurement = self.currency + '/' + self.period
self._unit_of_measurement = '{}/{}'.format(
self.currency, self.period)
else:
self._unit_of_measurement = SENSOR_TYPES[sensor_type][1]
@ -119,34 +121,34 @@ class EfergySensor(Entity):
"""Get the Efergy monitor data from the web service."""
try:
if self.type == 'instant_readings':
url_string = _RESOURCE + 'getInstant?token=' + self.app_token
response = get(url_string, timeout=10)
url_string = '{}getInstant?token={}'.format(
_RESOURCE, self.app_token)
response = requests.get(url_string, timeout=10)
self._state = response.json()['reading']
elif self.type == 'amount':
url_string = _RESOURCE + 'getEnergy?token=' + self.app_token \
+ '&offset=' + self.utc_offset + '&period=' \
+ self.period
response = get(url_string, timeout=10)
url_string = '{}getEnergy?token={}&offset={}&period={}'.format(
_RESOURCE, self.app_token, self.utc_offset, self.period)
response = requests.get(url_string, timeout=10)
self._state = response.json()['sum']
elif self.type == 'budget':
url_string = _RESOURCE + 'getBudget?token=' + self.app_token
response = get(url_string, timeout=10)
url_string = '{}getBudget?token={}'.format(
_RESOURCE, self.app_token)
response = requests.get(url_string, timeout=10)
self._state = response.json()['status']
elif self.type == 'cost':
url_string = _RESOURCE + 'getCost?token=' + self.app_token \
+ '&offset=' + self.utc_offset + '&period=' \
+ self.period
response = get(url_string, timeout=10)
url_string = '{}getCost?token={}&offset={}&period={}'.format(
_RESOURCE, self.app_token, self.utc_offset, self.period)
response = requests.get(url_string, timeout=10)
self._state = response.json()['sum']
elif self.type == 'current_values':
url_string = _RESOURCE + 'getCurrentValuesSummary?token=' \
+ self.app_token
response = get(url_string, timeout=10)
url_string = '{}getCurrentValuesSummary?token={}'.format(
_RESOURCE, self.app_token)
response = requests.get(url_string, timeout=10)
for sensor in response.json():
if self.sid == sensor['sid']:
measurement = next(iter(sensor['data'][0].values()))
self._state = measurement
else:
self._state = 'Unknown'
except (RequestException, ValueError, KeyError):
self._state = None
except (requests.RequestException, ValueError, KeyError):
_LOGGER.warning("Could not update status for %s", self.name)

View File

@ -14,21 +14,20 @@ ONE_SENSOR_CONFIG = {
'platform': 'efergy',
'app_token': token,
'utc_offset': '300',
'monitored_variables': [{'type': 'amount', 'period': 'day'},
{'type': 'instant_readings'},
{'type': 'budget'},
{'type': 'cost', 'period': 'day', 'currency': '$'},
{'type': 'current_values'}
]
'monitored_variables': [
{'type': 'amount', 'period': 'day'},
{'type': 'instant_readings'},
{'type': 'budget'},
{'type': 'cost', 'period': 'day', 'currency': '$'},
{'type': 'current_values'},
]
}
MULTI_SENSOR_CONFIG = {
'platform': 'efergy',
'app_token': multi_sensor_token,
'utc_offset': '300',
'monitored_variables': [
{'type': 'current_values'}
]
'monitored_variables': [{'type': 'current_values'}],
}
@ -36,22 +35,23 @@ def mock_responses(mock):
"""Mock responses for Efergy."""
base_url = 'https://engage.efergy.com/mobile_proxy/'
mock.get(
base_url + 'getInstant?token=' + token,
'{}getInstant?token={}'.format(base_url, token),
text=load_fixture('efergy_instant.json'))
mock.get(
base_url + 'getEnergy?token=' + token + '&offset=300&period=day',
'{}getEnergy?token={}&offset=300&period=day'.format(base_url, token),
text=load_fixture('efergy_energy.json'))
mock.get(
base_url + 'getBudget?token=' + token,
'{}getBudget?token={}'.format(base_url, token),
text=load_fixture('efergy_budget.json'))
mock.get(
base_url + 'getCost?token=' + token + '&offset=300&period=day',
'{}getCost?token={}&offset=300&period=day'.format(base_url, token),
text=load_fixture('efergy_cost.json'))
mock.get(
base_url + 'getCurrentValuesSummary?token=' + token,
'{}getCurrentValuesSummary?token={}'.format(base_url, token),
text=load_fixture('efergy_current_values_single.json'))
mock.get(
base_url + 'getCurrentValuesSummary?token=' + multi_sensor_token,
'{}getCurrentValuesSummary?token={}'.format(
base_url, multi_sensor_token),
text=load_fixture('efergy_current_values_multi.json'))
@ -69,7 +69,7 @@ class TestEfergySensor(unittest.TestCase):
self.DEVICES.append(device)
def setUp(self):
"""Initialize values for this testcase class."""
"""Initialize values for this test case class."""
self.hass = get_test_home_assistant()
self.config = ONE_SENSOR_CONFIG
@ -82,27 +82,31 @@ class TestEfergySensor(unittest.TestCase):
"""Test for successfully setting up the Efergy platform."""
mock_responses(mock)
assert setup_component(self.hass, 'sensor', {
'sensor': ONE_SENSOR_CONFIG})
self.assertEqual('38.21',
self.hass.states.get('sensor.energy_consumed').state)
self.assertEqual('1580',
self.hass.states.get('sensor.energy_usage').state)
self.assertEqual('ok',
self.hass.states.get('sensor.energy_budget').state)
self.assertEqual('5.27',
self.hass.states.get('sensor.energy_cost').state)
self.assertEqual('1628',
self.hass.states.get('sensor.efergy_728386').state)
'sensor': ONE_SENSOR_CONFIG,
})
self.assertEqual(
'38.21', self.hass.states.get('sensor.energy_consumed').state)
self.assertEqual(
'1580', self.hass.states.get('sensor.energy_usage').state)
self.assertEqual(
'ok', self.hass.states.get('sensor.energy_budget').state)
self.assertEqual(
'5.27', self.hass.states.get('sensor.energy_cost').state)
self.assertEqual(
'1628', self.hass.states.get('sensor.efergy_728386').state)
@requests_mock.Mocker()
def test_multi_sensor_readings(self, mock):
"""Test for multiple sensors in one household."""
mock_responses(mock)
assert setup_component(self.hass, 'sensor', {
'sensor': MULTI_SENSOR_CONFIG})
self.assertEqual('218',
self.hass.states.get('sensor.efergy_728386').state)
self.assertEqual('1808',
self.hass.states.get('sensor.efergy_0').state)
self.assertEqual('312',
self.hass.states.get('sensor.efergy_728387').state)
'sensor': MULTI_SENSOR_CONFIG,
})
self.assertEqual(
'218', self.hass.states.get('sensor.efergy_728386').state)
self.assertEqual(
'1808', self.hass.states.get('sensor.efergy_0').state)
self.assertEqual(
'312', self.hass.states.get('sensor.efergy_728387').state)

View File

@ -1 +1,4 @@
{"status":"ok", "monthly_budget":250.0000}
{
"status": "ok",
"monthly_budget": 250.0000
}

View File

@ -1 +1,5 @@
{"sum":"5.27","duration":70320,"units":"GBP"}
{
"sum": "5.27",
"duration": 70320,
"units": "GBP"
}

View File

@ -1 +1,5 @@
{"sum":"38.21","duration":70320,"units":"kWh"}
{
"sum": "38.21",
"duration": 70320,
"units": "kWh"
}