Suez water (#23844)
* Add suez water sensor * flake8 test * pylint test * edition to fix flake8 and pylint issues * edition to be okay with the musts * Added a blank line to __init.py__ for flake8 * added blank line for flake8 * changer scan interval from 10 to 720 minutes * use of pysuez * bug fix and isort * use of pysuez * fixed flake8 and pylint errors * update requirements_all.txt * added a method to test login/password befire adding device * flake8 edition * update requirements_all.txt * add of .coveragerc file with untested files * update of .coveragerc * Update homeassistant/components/suez_water/__init__.py Co-Authored-By: Fabian Affolter <mail@fabian-affolter.ch> * Update homeassistant/components/suez_water/sensor.py Co-Authored-By: Fabian Affolter <mail@fabian-affolter.ch> * Update homeassistant/components/suez_water/sensor.py Co-Authored-By: Fabian Affolter <mail@fabian-affolter.ch> * Update homeassistant/components/suez_water/sensor.py Co-Authored-By: Fabian Affolter <mail@fabian-affolter.ch> * Update homeassistant/components/suez_water/sensor.py Co-Authored-By: Fabian Affolter <mail@fabian-affolter.ch> * Update homeassistant/components/suez_water/sensor.py Co-Authored-By: Fabian Affolter <mail@fabian-affolter.ch> * bug fix in check credentials * flake8 and pylint fixes * fix codeowner * update requirements_all.txt * Sorted suez_water line * edition to answer comments from @MartinHjelmare on #23844 * Attribute keys formatting to lowercase snakecase, name and icon constants returned directly, and remove of attribute. Update of . * pylint edition * correction wrong keys in client attributes * remove of unnedeed return and move add_entitiespull/25453/head
parent
e4b4551b35
commit
4fb1937f65
|
@ -590,6 +590,7 @@ omit =
|
|||
homeassistant/components/stiebel_eltron/*
|
||||
homeassistant/components/streamlabswater/*
|
||||
homeassistant/components/stride/notify.py
|
||||
homeassistant/components/suez_water/*
|
||||
homeassistant/components/supervisord/sensor.py
|
||||
homeassistant/components/swiss_hydrological_data/sensor.py
|
||||
homeassistant/components/swiss_public_transport/sensor.py
|
||||
|
|
|
@ -247,6 +247,7 @@ homeassistant/components/sql/* @dgomes
|
|||
homeassistant/components/statistics/* @fabaff
|
||||
homeassistant/components/stiebel_eltron/* @fucm
|
||||
homeassistant/components/stream/* @hunterjm
|
||||
homeassistant/components/suez_water/* @ooii
|
||||
homeassistant/components/sun/* @Swamp-Ig
|
||||
homeassistant/components/supla/* @mwegrzynek
|
||||
homeassistant/components/swiss_hydrological_data/* @fabaff
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
"""France Suez Water integration."""
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"domain": "suez_water",
|
||||
"name": "Suez Water Consumption Sensor",
|
||||
"documentation": "https://www.home-assistant.io/components/suez_water",
|
||||
"dependencies": [],
|
||||
"codeowners": ["@ooii"],
|
||||
"requirements": ["pysuez==0.1.17"]
|
||||
}
|
|
@ -0,0 +1,128 @@
|
|||
"""Sensor for Suez Water Consumption data."""
|
||||
from datetime import timedelta
|
||||
import logging
|
||||
|
||||
import voluptuous as vol
|
||||
|
||||
from pysuez.client import PySuezError
|
||||
from pysuez import SuezClient
|
||||
|
||||
from homeassistant.components.sensor import PLATFORM_SCHEMA
|
||||
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME, VOLUME_LITERS
|
||||
import homeassistant.helpers.config_validation as cv
|
||||
from homeassistant.helpers.entity import Entity
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
CONF_COUNTER_ID = 'counter_id'
|
||||
|
||||
SCAN_INTERVAL = timedelta(hours=12)
|
||||
|
||||
COMPONENT_ICON = 'mdi:water-pump'
|
||||
COMPONENT_NAME = "Suez Water Client"
|
||||
|
||||
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
||||
vol.Required(CONF_USERNAME): cv.string,
|
||||
vol.Required(CONF_PASSWORD): cv.string,
|
||||
vol.Required(CONF_COUNTER_ID): cv.string,
|
||||
})
|
||||
|
||||
|
||||
def setup_platform(hass, config, add_entities, discovery_info=None):
|
||||
"""Set up the sensor platform."""
|
||||
username = config[CONF_USERNAME]
|
||||
password = config[CONF_PASSWORD]
|
||||
counter_id = config[CONF_COUNTER_ID]
|
||||
try:
|
||||
client = SuezClient(
|
||||
username, password, counter_id)
|
||||
|
||||
if not client.check_credentials():
|
||||
_LOGGER.warning("Wrong username and/or password")
|
||||
return
|
||||
|
||||
except PySuezError:
|
||||
_LOGGER.warning("Unable to create Suez Client")
|
||||
return
|
||||
|
||||
add_entities([SuezSensor(client)], True)
|
||||
|
||||
|
||||
class SuezSensor(Entity):
|
||||
"""Representation of a Sensor."""
|
||||
|
||||
def __init__(self, client):
|
||||
"""Initialize the data object."""
|
||||
self._attributes = {}
|
||||
self._state = None
|
||||
self._available = None
|
||||
self.client = client
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
"""Return the name of the sensor."""
|
||||
return COMPONENT_NAME
|
||||
|
||||
@property
|
||||
def state(self):
|
||||
"""Return the state of the sensor."""
|
||||
return self._state
|
||||
|
||||
@property
|
||||
def unit_of_measurement(self):
|
||||
"""Return the unit of measurement."""
|
||||
return VOLUME_LITERS
|
||||
|
||||
@property
|
||||
def device_state_attributes(self):
|
||||
"""Return the state attributes."""
|
||||
return self._attributes
|
||||
|
||||
@property
|
||||
def icon(self):
|
||||
"""Return the icon of the sensor."""
|
||||
return COMPONENT_ICON
|
||||
|
||||
def _fetch_data(self):
|
||||
"""Fetch latest data from Suez."""
|
||||
try:
|
||||
self.client.update()
|
||||
# _state holds the volume of consumed water during previous day
|
||||
self._state = self.client.state
|
||||
self._available = True
|
||||
self._attributes[
|
||||
'attribution'] = self.client.attributes[
|
||||
'attribution']
|
||||
self._attributes['this_month_consumption'] = {}
|
||||
for item in self.client.attributes['thisMonthConsumption']:
|
||||
self._attributes['this_month_consumption'][
|
||||
item] = self.client.attributes[
|
||||
'thisMonthConsumption'][item]
|
||||
self._attributes['previous_month_consumption'] = {}
|
||||
for item in self.client.attributes['previousMonthConsumption']:
|
||||
self._attributes['previous_month_consumption'][
|
||||
item] = self.client.attributes[
|
||||
'previousMonthConsumption'][item]
|
||||
self._attributes[
|
||||
'highest_monthly_consumption'] = self.client.attributes[
|
||||
'highestMonthlyConsumption']
|
||||
self._attributes[
|
||||
'last_year_overall'] = self.client.attributes[
|
||||
'lastYearOverAll']
|
||||
self._attributes[
|
||||
'this_year_overall'] = self.client.attributes[
|
||||
'thisYearOverAll']
|
||||
self._attributes['history'] = {}
|
||||
for item in self.client.attributes['history']:
|
||||
self._attributes[
|
||||
'history'][item] = self.client.attributes[
|
||||
'history'][item]
|
||||
|
||||
except PySuezError:
|
||||
self._available = False
|
||||
_LOGGER.warning("Unable to fetch data")
|
||||
|
||||
def update(self):
|
||||
"""Return the latest collected data from Linky."""
|
||||
self._fetch_data()
|
||||
_LOGGER.debug(
|
||||
"Suez data state is: %s.", self._state)
|
|
@ -1401,6 +1401,9 @@ pystiebeleltron==0.0.1.dev2
|
|||
# homeassistant.components.stride
|
||||
pystride==0.1.7
|
||||
|
||||
# homeassistant.components.suez_water
|
||||
pysuez==0.1.17
|
||||
|
||||
# homeassistant.components.supla
|
||||
pysupla==0.0.3
|
||||
|
||||
|
|
Loading…
Reference in New Issue