diff --git a/custom_components/afvalwijzer/const/const.py b/custom_components/afvalwijzer/const/const.py index 6d15e84..ec473ab 100755 --- a/custom_components/afvalwijzer/const/const.py +++ b/custom_components/afvalwijzer/const/const.py @@ -69,6 +69,7 @@ ATTR_IS_COLLECTION_DATE_DAY_AFTER_TOMORROW = "is_collection_date_day_after_tomorrow" ATTR_DAYS_UNTIL_COLLECTION_DATE = "days_until_collection_date" ATTR_YEAR_MONTH_DAY_DATE = "year_month_day_date" +ATTR_NAMED_DATE = "named_date" _LOGGER = logging.getLogger(__name__) diff --git a/custom_components/afvalwijzer/sensor_custom.py b/custom_components/afvalwijzer/sensor_custom.py index 5f5c52e..7d70286 100755 --- a/custom_components/afvalwijzer/sensor_custom.py +++ b/custom_components/afvalwijzer/sensor_custom.py @@ -9,6 +9,7 @@ ATTR_DAYS_UNTIL_COLLECTION_DATE, ATTR_LAST_UPDATE, ATTR_YEAR_MONTH_DAY_DATE, + ATTR_NAMED_DATE, MIN_TIME_BETWEEN_UPDATES, PARALLEL_UPDATES, SENSOR_ICON, @@ -26,6 +27,7 @@ def __init__(self, hass, fetch_afvalwijzer_data, waste_type, default_label): self._state = None self._icon = SENSOR_ICON self._year_month_day_date = None + self._named_date = None @property def name(self): @@ -45,6 +47,7 @@ def device_state_attributes(self): return { ATTR_LAST_UPDATE: self._last_update, ATTR_YEAR_MONTH_DAY_DATE: self._year_month_day_date, + ATTR_NAMED_DATE: self._named_date, } else: return {ATTR_LAST_UPDATE: self._last_update} @@ -54,7 +57,9 @@ async def async_update(self): await self.hass.async_add_executor_job(self.fetch_afvalwijzer_data.update) waste_data_custom = self.fetch_afvalwijzer_data.waste_data_custom _LOGGER.debug( - "Generating state via AfvalwijzerCustomSensor for = %s", waste_data_custom + "Generating state via AfvalwijzerCustomSensor for = %s with value %s", + self.waste_type, + waste_data_custom[self.waste_type], ) self._last_update = datetime.today().strftime("%d-%m-%Y %H:%M") @@ -62,21 +67,19 @@ async def async_update(self): if self.waste_type == "first_next_date": if waste_data_custom["first_next_date"] != self.default_label: - - # Add date in Dutch and US format + # Add date in different formats collection_date_nl = waste_data_custom[self.waste_type] - _LOGGER.debug( - "AfvalwijzerCustomSensorcollection_date_nl = %s", collection_date_nl - ) - collection_date_convert_to_us = datetime.strptime( + + collection_date_us = datetime.strptime( waste_data_custom[self.waste_type], "%d-%m-%Y" ).strftime("%Y-%m-%d") - collection_date_us = datetime.strptime( - collection_date_convert_to_us, "%Y-%m-%d" - ).date() - _LOGGER.debug( - "AfvalwijzerCustomSensorcollection_date_us = %s", collection_date_us - ) + + collection_date_named = datetime.strptime( + waste_data_custom[self.waste_type], "%d-%m-%Y" + ).strftime("%a %d %b") # Add attribute date in format "%Y-%m-%d" - self._year_month_day_date = str(collection_date_us) + self._year_month_day_date = collection_date_us + + # Add attribute date in format "%a %d %b" + self._named_date = collection_date_named diff --git a/custom_components/afvalwijzer/sensor_provider.py b/custom_components/afvalwijzer/sensor_provider.py index b217463..d30a9a3 100755 --- a/custom_components/afvalwijzer/sensor_provider.py +++ b/custom_components/afvalwijzer/sensor_provider.py @@ -13,6 +13,7 @@ ATTR_IS_COLLECTION_DATE_TOMORROW, ATTR_LAST_UPDATE, ATTR_YEAR_MONTH_DAY_DATE, + ATTR_NAMED_DATE, MIN_TIME_BETWEEN_UPDATES, PARALLEL_UPDATES, SENSOR_ICON, @@ -39,6 +40,7 @@ def __init__( self._is_collection_date_tomorrow = False self._is_collection_date_day_after_tomorrow = False self._year_month_day_date = None + self._named_date = None @property def name(self): @@ -55,13 +57,14 @@ def state(self): @property def device_state_attributes(self): return { - ATTR_YEAR_MONTH_DAY_DATE: self._year_month_day_date, ATTR_LAST_UPDATE: self._last_update, ATTR_HIDDEN: self._hidden, ATTR_DAYS_UNTIL_COLLECTION_DATE: self._days_until_collection_date, ATTR_IS_COLLECTION_DATE_TODAY: self._is_collection_date_today, ATTR_IS_COLLECTION_DATE_TOMORROW: self._is_collection_date_tomorrow, ATTR_IS_COLLECTION_DATE_DAY_AFTER_TOMORROW: self._is_collection_date_day_after_tomorrow, + ATTR_YEAR_MONTH_DAY_DATE: self._year_month_day_date, + ATTR_NAMED_DATE: self._named_date, } @Throttle(MIN_TIME_BETWEEN_UPDATES) @@ -69,31 +72,38 @@ async def async_update(self): await self.hass.async_add_executor_job(self.fetch_afvalwijzer_data.update) waste_data_provider = self.fetch_afvalwijzer_data.waste_data_provider _LOGGER.debug( - "Generating state via AfvalwijzerProviderSensor for = %s", - waste_data_provider, + "Generating state via AfvalwijzerProviderSensor for = %s with value %s", + self.waste_type, + waste_data_provider[self.waste_type], ) try: if waste_data_provider: if self.waste_type in waste_data_provider: - if waste_data_provider[self.waste_type] != self.default_label: + # Add attribute, set the last updated status of the sensor + self._last_update = datetime.today().strftime("%d-%m-%Y %H:%M") + if waste_data_provider[self.waste_type] != self.default_label: # Add date in Dutch and US format collection_date_nl = waste_data_provider[self.waste_type] - _LOGGER.debug("collection_date_nl = %s", collection_date_nl) - collection_date_convert_to_us = datetime.strptime( + + collection_date_convert = datetime.strptime( waste_data_provider[self.waste_type], "%d-%m-%Y" ).strftime("%Y-%m-%d") + collection_date_us = datetime.strptime( - collection_date_convert_to_us, "%Y-%m-%d" + collection_date_convert, "%Y-%m-%d" ).date() - _LOGGER.debug("collection_date_us = %s", collection_date_us) + + collection_date_named = datetime.strptime( + waste_data_provider[self.waste_type], "%d-%m-%Y" + ).strftime("%a %d %b") # Add attribute date in format "%Y-%m-%d" self._year_month_day_date = str(collection_date_us) - # Add attribute, set the last updated status of the sensor - self._last_update = datetime.today().strftime("%d-%m-%Y %H:%M") + # Add attribute date in format "%a %d %b" + self._named_date = collection_date_named # Add attribute, is the collection date today, tomorrow and/or day_after_tomorrow? self._is_collection_date_today = ( @@ -109,19 +119,21 @@ async def async_update(self): # Add attribute, days until collection date delta = collection_date_us - date.today() self._days_until_collection_date = delta.days + self._state = collection_date_nl else: - raise (ValueError) + self._state = self.default_label else: raise (ValueError) else: raise (ValueError) except ValueError: - _LOGGER.debug("ValueError AfvalwijzerProviderSensor") + _LOGGER.debug("ValueError AfvalwijzerProviderSensor - unable to set value!") self._state = self.default_label self._hidden = False self._days_until_collection_date = None self._year_month_day_date = None + self._named_date = None self._is_collection_date_today = False self._is_collection_date_tomorrow = False self._is_collection_date_day_after_tomorrow = False