Skip to content
This repository has been archived by the owner on May 28, 2020. It is now read-only.

Commit

Permalink
Fixed Conversion bug and PEP8 formatting
Browse files Browse the repository at this point in the history
  • Loading branch information
“Bjarne committed Jan 28, 2020
1 parent 2491cf1 commit 63cd111
Show file tree
Hide file tree
Showing 3 changed files with 174 additions and 85 deletions.
47 changes: 30 additions & 17 deletions custom_components/mbweather/binary_sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,31 +12,36 @@

import homeassistant.helpers.config_validation as cv
import voluptuous as vol
from homeassistant.components.binary_sensor import (ENTITY_ID_FORMAT,
PLATFORM_SCHEMA,
BinarySensorDevice)
from homeassistant.const import (ATTR_ATTRIBUTION, CONF_ENTITY_NAMESPACE,
CONF_MONITORED_CONDITIONS, CONF_NAME)
from homeassistant.helpers.entity import Entity, generate_entity_id
from homeassistant.components.binary_sensor import (
ENTITY_ID_FORMAT,
PLATFORM_SCHEMA,
BinarySensorDevice,
)
from homeassistant.const import ATTR_ATTRIBUTION, CONF_MONITORED_CONDITIONS, CONF_NAME
from homeassistant.helpers.entity import generate_entity_id
from . import DEFAULT_ATTRIBUTION, MBDATA, DOMAIN

DEPENDENCIES = ['mbweather']
DEPENDENCIES = ["mbweather"]

_LOGGER = logging.getLogger(__name__)

SCAN_INTERVAL = timedelta(seconds=5)

SENSOR_TYPES = {
'raining': ['Raining', None, 'mdi:water', 'mdi:water-off'],
'lowbattery': ['Battery Status', None, 'mdi:battery-10', 'mdi:battery'],
'freezing': ['Freezing', None, 'mdi:thermometer-minus', 'mdi:thermometer-plus']
"raining": ["Raining", None, "mdi:water", "mdi:water-off"],
"lowbattery": ["Battery Status", None, "mdi:battery-10", "mdi:battery"],
"freezing": ["Freezing", None, "mdi:thermometer-minus", "mdi:thermometer-plus"],
}

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Required(CONF_MONITORED_CONDITIONS, default=list(SENSOR_TYPES)):
vol.All(cv.ensure_list, [vol.In(SENSOR_TYPES)]),
vol.Optional(CONF_NAME, default=DOMAIN): cv.string
})
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
{
vol.Required(CONF_MONITORED_CONDITIONS, default=list(SENSOR_TYPES)): vol.All(
cv.ensure_list, [vol.In(SENSOR_TYPES)]
),
vol.Optional(CONF_NAME, default=DOMAIN): cv.string,
}
)


def setup_platform(hass, config, add_entities, discovery_info=None):
"""Set up the MBWeather binary sensor platform."""
Expand All @@ -54,6 +59,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):

add_entities(sensors, True)


class MBweatherBinarySensor(BinarySensorDevice):
""" Implementation of a MBWeather Binary Sensor. """

Expand All @@ -64,7 +70,11 @@ def __init__(self, hass, data, condition, name):
self._state = self.data[self._condition]
self._device_class = SENSOR_TYPES[self._condition][1]
self._name = SENSOR_TYPES[self._condition][0]
self.entity_id = generate_entity_id(ENTITY_ID_FORMAT, '{} {}'.format('mbw', SENSOR_TYPES[self._condition][0]), hass=hass)
self.entity_id = generate_entity_id(
ENTITY_ID_FORMAT,
"{} {}".format("mbw", SENSOR_TYPES[self._condition][0]),
hass=hass,
)

@property
def name(self):
Expand All @@ -79,8 +89,11 @@ def is_on(self):
@property
def icon(self):
"""Icon to use in the frontend."""
return SENSOR_TYPES[self._condition][2] if self.data[self._condition] \
return (
SENSOR_TYPES[self._condition][2]
if self.data[self._condition]
else SENSOR_TYPES[self._condition][3]
)

@property
def device_class(self):
Expand Down
172 changes: 123 additions & 49 deletions custom_components/mbweather/sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,62 +12,123 @@
from datetime import timedelta

import homeassistant.helpers.config_validation as cv
import voluptuous as vol
from homeassistant.components.sensor import ENTITY_ID_FORMAT, PLATFORM_SCHEMA
from homeassistant.const import (ATTR_ATTRIBUTION, CONF_MONITORED_CONDITIONS,
CONF_NAME, DEVICE_CLASS_HUMIDITY,
DEVICE_CLASS_ILLUMINANCE,
DEVICE_CLASS_PRESSURE,
DEVICE_CLASS_TEMPERATURE, LENGTH_METERS,
TEMP_CELSIUS, TEMP_FAHRENHEIT)
from homeassistant.const import (
ATTR_ATTRIBUTION,
CONF_MONITORED_CONDITIONS,
CONF_NAME,
DEVICE_CLASS_HUMIDITY,
DEVICE_CLASS_PRESSURE,
DEVICE_CLASS_TEMPERATURE,
TEMP_CELSIUS,
TEMP_FAHRENHEIT,
)
from homeassistant.helpers.entity import Entity, generate_entity_id

from . import DEFAULT_ATTRIBUTION, MBDATA, DOMAIN

DEPENDENCIES = ['mbweather']
DEPENDENCIES = ["mbweather"]

_LOGGER = logging.getLogger(__name__)

CONF_WIND_UNIT = 'wind_unit'
CONF_WIND_UNIT = "wind_unit"

ATTR_UPDATED = 'updated'
ATTR_UPDATED = "updated"

SCAN_INTERVAL = timedelta(seconds=5)

SENSOR_TYPES = {
'temperature': ['Temperature', TEMP_CELSIUS, 'mdi:thermometer', DEVICE_CLASS_TEMPERATURE, TEMP_FAHRENHEIT],
'temphigh': ['Temp High Today', TEMP_CELSIUS, 'mdi:thermometer', DEVICE_CLASS_TEMPERATURE, TEMP_FAHRENHEIT],
'templow': ['Temp Low Today', TEMP_CELSIUS, 'mdi:thermometer', DEVICE_CLASS_TEMPERATURE, TEMP_FAHRENHEIT],
'in_temperature': ['Indoor Temp', TEMP_CELSIUS, 'mdi:thermometer', DEVICE_CLASS_TEMPERATURE, TEMP_FAHRENHEIT],
'dewpoint': ['Dewpoint', TEMP_CELSIUS, 'mdi:thermometer', DEVICE_CLASS_TEMPERATURE, TEMP_FAHRENHEIT],
'windchill': ['Wind Chill', TEMP_CELSIUS, 'mdi:thermometer', DEVICE_CLASS_TEMPERATURE, TEMP_FAHRENHEIT],
'heatindex': ['Heatindex', TEMP_CELSIUS, 'mdi:thermometer', DEVICE_CLASS_TEMPERATURE, TEMP_FAHRENHEIT],
'feels_like': ['Feels Like', TEMP_CELSIUS, 'mdi:thermometer', DEVICE_CLASS_TEMPERATURE, TEMP_FAHRENHEIT],
'windspeedavg': ['Wind Speed Avg', 'm/s', 'mdi:weather-windy', None, 'mph'],
'windspeed': ['Wind Speed', 'm/s', 'mdi:weather-windy', None, 'mph'],
'windbearing': ['Wind Bearing', '°', 'mdi:compass-outline', None, None],
'winddirection': ['Wind Direction', '', 'mdi:compass-outline', None, None],
'windgust': ['Wind Gust', 'm/s', 'mdi:weather-windy', None, 'mph'],
'raintoday': ['Rain today', 'mm', 'mdi:weather-rainy', None, 'in'],
'rainrate': ['Rain rate', 'mm/h', 'mdi:weather-pouring', None, 'in/h'],
'humidity': ['Humidity', '%', 'mdi:water-percent', DEVICE_CLASS_HUMIDITY, None],
'in_humidity': ['Indoor Hum', '%', 'mdi:water-percent', DEVICE_CLASS_HUMIDITY, None],
'pressure': ['Pressure', 'hPa', 'mdi:gauge', DEVICE_CLASS_PRESSURE, 'inHg'],
'condition': ['Condition', '', 'mdi:text-short', None, None],
'precip_probability': ['Precip Probability', '%', 'mdi:water-percent', None, None],
'forecast': ['Forecast', '', 'mdi:text-short', None, None]
"temperature": [
"Temperature",
TEMP_CELSIUS,
"mdi:thermometer",
DEVICE_CLASS_TEMPERATURE,
TEMP_FAHRENHEIT,
],
"temphigh": [
"Temp High Today",
TEMP_CELSIUS,
"mdi:thermometer",
DEVICE_CLASS_TEMPERATURE,
TEMP_FAHRENHEIT,
],
"templow": [
"Temp Low Today",
TEMP_CELSIUS,
"mdi:thermometer",
DEVICE_CLASS_TEMPERATURE,
TEMP_FAHRENHEIT,
],
"in_temperature": [
"Indoor Temp",
TEMP_CELSIUS,
"mdi:thermometer",
DEVICE_CLASS_TEMPERATURE,
TEMP_FAHRENHEIT,
],
"dewpoint": [
"Dewpoint",
TEMP_CELSIUS,
"mdi:thermometer",
DEVICE_CLASS_TEMPERATURE,
TEMP_FAHRENHEIT,
],
"windchill": [
"Wind Chill",
TEMP_CELSIUS,
"mdi:thermometer",
DEVICE_CLASS_TEMPERATURE,
TEMP_FAHRENHEIT,
],
"heatindex": [
"Heatindex",
TEMP_CELSIUS,
"mdi:thermometer",
DEVICE_CLASS_TEMPERATURE,
TEMP_FAHRENHEIT,
],
"feels_like": [
"Feels Like",
TEMP_CELSIUS,
"mdi:thermometer",
DEVICE_CLASS_TEMPERATURE,
TEMP_FAHRENHEIT,
],
"windspeedavg": ["Wind Speed Avg", "m/s", "mdi:weather-windy", None, "mph"],
"windspeed": ["Wind Speed", "m/s", "mdi:weather-windy", None, "mph"],
"windbearing": ["Wind Bearing", "°", "mdi:compass-outline", None, None],
"winddirection": ["Wind Direction", "", "mdi:compass-outline", None, None],
"windgust": ["Wind Gust", "m/s", "mdi:weather-windy", None, "mph"],
"raintoday": ["Rain today", "mm", "mdi:weather-rainy", None, "in"],
"rainrate": ["Rain rate", "mm/h", "mdi:weather-pouring", None, "in/h"],
"humidity": ["Humidity", "%", "mdi:water-percent", DEVICE_CLASS_HUMIDITY, None],
"in_humidity": [
"Indoor Hum",
"%",
"mdi:water-percent",
DEVICE_CLASS_HUMIDITY,
None,
],
"pressure": ["Pressure", "hPa", "mdi:gauge", DEVICE_CLASS_PRESSURE, "inHg"],
"condition": ["Condition", "", "mdi:text-short", None, None],
"precip_probability": ["Precip Probability", "%", "mdi:water-percent", None, None],
"forecast": ["Forecast", "", "mdi:text-short", None, None],
}

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Required(CONF_MONITORED_CONDITIONS, default=list(SENSOR_TYPES)):
vol.All(cv.ensure_list, [vol.In(SENSOR_TYPES)]),
vol.Optional(CONF_WIND_UNIT, default='ms'): cv.string,
vol.Optional(CONF_NAME, default=DOMAIN): cv.string
})
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
{
vol.Required(CONF_MONITORED_CONDITIONS, default=list(SENSOR_TYPES)): vol.All(
cv.ensure_list, [vol.In(SENSOR_TYPES)]
),
vol.Optional(CONF_WIND_UNIT, default="ms"): cv.string,
vol.Optional(CONF_NAME, default=DOMAIN): cv.string,
}
)


def setup_platform(hass, config, add_entities, discovery_info=None):
"""Set up the SmartWeather sensor platform."""
unit_system = 'metric' if hass.config.units.is_metric else 'imperial'
unit_system = "metric" if hass.config.units.is_metric else "imperial"

name = config.get(CONF_NAME)
data = hass.data[MBDATA]
Expand All @@ -78,10 +139,13 @@ def setup_platform(hass, config, add_entities, discovery_info=None):

sensors = []
for variable in config[CONF_MONITORED_CONDITIONS]:
sensors.append(MBWeatherSensor(hass, data, variable, name, unit_system, wind_unit))
sensors.append(
MBWeatherSensor(hass, data, variable, name, unit_system, wind_unit)
)

add_entities(sensors, True)


class MBWeatherSensor(Entity):
""" Implementation of a SmartWeather Weatherflow Current Sensor. """

Expand All @@ -93,7 +157,11 @@ def __init__(self, hass, data, condition, name, unit_system, wind_unit):
self._wind_unit = wind_unit
self._state = self.data[self._condition]
self._name = SENSOR_TYPES[self._condition][0]
self.entity_id = generate_entity_id(ENTITY_ID_FORMAT, '{} {}'.format('mbw', SENSOR_TYPES[self._condition][0]), hass=hass)
self.entity_id = generate_entity_id(
ENTITY_ID_FORMAT,
"{} {}".format("mbw", SENSOR_TYPES[self._condition][0]),
hass=hass,
)

@property
def name(self):
Expand All @@ -103,27 +171,33 @@ def name(self):
@property
def state(self):
"""Return the state of the sensor."""
_LOGGER.debug("Sensor: %s",self._condition)
_LOGGER.debug("Sensor: %s", self._condition)
if self._condition in self.data:
if not (self._state is None):
if SENSOR_TYPES[self._condition][1] == 'm/s':
return round(variable*3.6,1) \
if self._wind_unit == 'kmh' \
if SENSOR_TYPES[self._condition][1] == "m/s":
return (
round(self._state * 3.6, 1)
if self._wind_unit == "kmh"
else self._state
)
else:
return self._state
return None

@property
def unit_of_measurement(self):
"""Return the unit of measurement."""
if self._unit_system == 'imperial' and not (SENSOR_TYPES[self._condition][4] is None):
if self._unit_system == "imperial" and not (
SENSOR_TYPES[self._condition][4] is None
):
return SENSOR_TYPES[self._condition][4]
else:
if SENSOR_TYPES[self._condition][1] == 'm/s':
return 'km/h' \
if self._wind_unit == 'kmh' \
if SENSOR_TYPES[self._condition][1] == "m/s":
return (
"km/h"
if self._wind_unit == "kmh"
else SENSOR_TYPES[self._condition][1]
)
else:
return SENSOR_TYPES[self._condition][1]

Expand All @@ -142,7 +216,7 @@ def device_state_attributes(self):
"""Return the state attributes of the device."""
attr = {}
attr[ATTR_ATTRIBUTION] = DEFAULT_ATTRIBUTION
attr[ATTR_UPDATED] = self.data['time']
attr[ATTR_UPDATED] = self.data["time"]

return attr

Expand Down
Loading

0 comments on commit 63cd111

Please sign in to comment.