Files
hassos_config/custom_components/afvalwijzer/sensor.py
2022-12-20 21:26:47 +01:00

147 lines
5.0 KiB
Python

#!/usr/bin/env python3
"""
Sensor component Afvalwijzer
Author: Bram van Dartel - xirixiz
"""
from functools import partial
from homeassistant.components.sensor import PLATFORM_SCHEMA
import homeassistant.helpers.config_validation as cv
from homeassistant.util import Throttle
import voluptuous as vol
from .collector.main_collector import MainCollector
from .const.const import (
_LOGGER,
CONF_COLLECTOR,
CONF_DEFAULT_LABEL,
CONF_EXCLUDE_LIST,
CONF_EXCLUDE_PICKUP_TODAY,
CONF_ID,
CONF_POSTAL_CODE,
CONF_STREET_NUMBER,
CONF_SUFFIX,
MIN_TIME_BETWEEN_UPDATES,
PARALLEL_UPDATES,
SCAN_INTERVAL,
STARTUP_MESSAGE,
)
from .sensor_custom import CustomSensor
from .sensor_provider import ProviderSensor
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
{
vol.Optional(
CONF_COLLECTOR, default="mijnafvalwijzer"
): cv.string,
vol.Required(CONF_POSTAL_CODE, default="1234AB"): cv.string,
vol.Required(CONF_STREET_NUMBER, default="5"): cv.string,
vol.Optional(CONF_SUFFIX, default=""): cv.string,
vol.Optional(CONF_EXCLUDE_PICKUP_TODAY, default="true"): cv.string,
vol.Optional(CONF_EXCLUDE_LIST, default=""): cv.string,
vol.Optional(CONF_DEFAULT_LABEL, default="Geen"): cv.string,
vol.Optional(CONF_ID.strip().lower(), default=""): cv.string,
}
)
_LOGGER.info(STARTUP_MESSAGE)
async def async_setup_platform(hass, config, async_add_entities, discovery_info=None):
provider = config.get(CONF_COLLECTOR)
postal_code = config.get(CONF_POSTAL_CODE)
street_number = config.get(CONF_STREET_NUMBER)
suffix = config.get(CONF_SUFFIX)
exclude_pickup_today = config.get(CONF_EXCLUDE_PICKUP_TODAY)
exclude_list = config.get(CONF_EXCLUDE_LIST)
default_label = config.get(CONF_DEFAULT_LABEL)
_LOGGER.debug(f"Afvalwijzer provider = {provider}")
_LOGGER.debug(f"Afvalwijzer zipcode = {postal_code}")
_LOGGER.debug(f"Afvalwijzer street_number = {street_number}")
try:
collector = await hass.async_add_executor_job(
partial(
MainCollector,
provider,
postal_code,
street_number,
suffix,
exclude_pickup_today,
exclude_list,
default_label,
)
)
except ValueError as err:
_LOGGER.error(f"Check afvalwijzer platform settings {err.args}")
fetch_data = AfvalwijzerData(config)
waste_types_provider = collector.waste_types_provider
_LOGGER.debug(f"Generating waste_types_provider list = {waste_types_provider}")
waste_types_custom = collector.waste_types_custom
_LOGGER.debug(f"Generating waste_types_custom list = {waste_types_custom}")
entities = []
for waste_type in waste_types_provider:
_LOGGER.debug(f"Adding sensor provider: {waste_type}")
entities.append(ProviderSensor(hass, waste_type, fetch_data, config))
for waste_type in waste_types_custom:
_LOGGER.debug(f"Adding sensor custom: {waste_type}")
entities.append(CustomSensor(hass, waste_type, fetch_data, config))
_LOGGER.debug(f"Entities appended = {entities}")
async_add_entities(entities)
class AfvalwijzerData(object):
def __init__(self, config):
self.config = config
@Throttle(MIN_TIME_BETWEEN_UPDATES)
def update(self):
provider = self.config.get(CONF_COLLECTOR)
postal_code = self.config.get(CONF_POSTAL_CODE)
street_number = self.config.get(CONF_STREET_NUMBER)
suffix = self.config.get(CONF_SUFFIX)
exclude_pickup_today = self.config.get(CONF_EXCLUDE_PICKUP_TODAY)
default_label = self.config.get(CONF_DEFAULT_LABEL)
exclude_list = self.config.get(CONF_EXCLUDE_LIST)
try:
collector = MainCollector(
provider,
postal_code,
street_number,
suffix,
exclude_pickup_today,
exclude_list,
default_label,
)
except ValueError as err:
_LOGGER.error(f"Check afvalwijzer platform settings {err.args}")
# waste data provider update - with today
try:
self.waste_data_with_today = collector.waste_data_with_today
except ValueError as err:
_LOGGER.error(f"Check waste_data_provider {err.args}")
self.waste_data_with_today = default_label
# waste data provider update - without today
try:
self.waste_data_without_today = collector.waste_data_without_today
except ValueError as err:
_LOGGER.error(f"Check waste_data_provider {err.args}")
self.waste_data_without_today = default_label
# waste data custom update
try:
self.waste_data_custom = collector.waste_data_custom
except ValueError as err:
_LOGGER.error(f"Check waste_data_custom {err.args}")
self.waste_data_custom = default_label