Skip to content

Commit

Permalink
Suez water (#23844)
Browse files Browse the repository at this point in the history
* 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_entities
  • Loading branch information
ooii authored and MartinHjelmare committed Jul 23, 2019
1 parent e4b4551 commit 4fb1937
Show file tree
Hide file tree
Showing 6 changed files with 142 additions and 0 deletions.
1 change: 1 addition & 0 deletions .coveragerc
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions homeassistant/components/suez_water/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
"""France Suez Water integration."""
8 changes: 8 additions & 0 deletions homeassistant/components/suez_water/manifest.json
Original file line number Diff line number Diff line change
@@ -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"]
}
128 changes: 128 additions & 0 deletions homeassistant/components/suez_water/sensor.py
Original file line number Diff line number Diff line change
@@ -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)
3 changes: 3 additions & 0 deletions requirements_all.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down

0 comments on commit 4fb1937

Please sign in to comment.