From 5553a3e6fc065bd3bc30c17ac2437a9c2555767c Mon Sep 17 00:00:00 2001 From: Onkel Andy Date: Sat, 21 Dec 2024 21:04:05 +0100 Subject: [PATCH] uzsu: introduce set_activetoday plugin function --- uzsu/__init__.py | 41 ++++++++++++++++++++++++++++++----------- uzsu/plugin.yaml | 25 +++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 11 deletions(-) diff --git a/uzsu/__init__.py b/uzsu/__init__.py index 0d15fe707..58c581564 100755 --- a/uzsu/__init__.py +++ b/uzsu/__init__.py @@ -141,7 +141,7 @@ def run(self): self.scheduler_add('uzsu_sunupdate', self._update_all_suns, value={'caller': 'Scheduler:UZSU'}, cron=self._suncalculation_cron) self.logger.info(f"Adding sun update schedule for {self._suncalculation_cron}") - self.scheduler_add('uzsu_resetactivetoday', self._reset_activetoday, cron='55 59 23 * * *') + self.scheduler_add('uzsu_resetactivetoday', self.set_activetoday, value={'set': False}, cron='55 59 23 * * *') _invaliditems = [] update = '' for item in self._items: @@ -177,7 +177,6 @@ def run(self): # set activeToday to false if entry is in the future (and wasn't reset correctly at midnight) for i, entry in enumerate(self._items[item].get('list')): next, _, _ = self._get_time(entry, 'next', item, i, 'dry_run') - self.logger.debug(f'this entry {entry} next {next}') if next and next.time() > datetime.now().time() and entry.get('activeToday'): entry['activeToday'] = False update = 'activeToday' @@ -208,15 +207,6 @@ def stop(self): self.scheduler_remove_all() self.alive = False - def _reset_activetoday(self): - """ - Set activeToday to False for all list entries (for smartVISU) - """ - for item in self._items: - for entry in self._items[item].get('list'): - entry['activeToday'] = False - self._write_dict_to_item(item, 'reset_activetoday') - def _update_all_suns(self, caller=None): """ Update sun information for all uzsu items @@ -397,6 +387,34 @@ def interpolation(self, intpl_type=None, interval=5, backintime=0, perday=False, self._write_dict_to_item(item, 'logic') return self._items[item].get('interpolation') + def set_activetoday(self, set=False, item=None): + """ + Set activeToday to False for all list entries (for smartVISU) + """ + if item is None: + items_to_change = self._items + elif self._items.get(item) is None: + try: + self.logger.warning(f'Item {item.property.path} is no valid UZSU item!') + except: + self.logger.warning(f'Item {item} does not exist!') + return None + else: + items_to_change = [item] + if isinstance(set, str): + if set.lower() in ['1', 'yes', 'true', 'on']: + reset = True + elif set.lower() in ['0', 'no', 'false', 'off']: + reset = False + else: + self.logger.warning(f'Value to reset activeToday of item "{item}" has to be boolean.') + if isinstance(set, bool): + for item in items_to_change: + for entry in self._items[item].get('list'): + entry['activeToday'] = set + self.logger.debug(f'Item "{item}": set all activeToday entries to {set}') + self._write_dict_to_item(item, 'set_activetoday') + def clear(self, clear=False, item=None): if self._items.get(item) is None: try: @@ -524,6 +542,7 @@ def parse_item(self, item): item.resume = functools.partial(self.resume, item=item) item.interpolation = functools.partial(self.interpolation, item=item) item.clear = functools.partial(self.clear, item=item) + item.set_activetoday = functools.partial(self.set_activetoday, item=item) item.planned = functools.partial(self.planned, item=item) item.itpl = functools.partial(self.itpl, item=item) diff --git a/uzsu/plugin.yaml b/uzsu/plugin.yaml index d6b7c8356..697bdcf3f 100755 --- a/uzsu/plugin.yaml +++ b/uzsu/plugin.yaml @@ -241,6 +241,31 @@ plugin_functions: description: de: "Das Item-Objekt" en: "An item object" + set_activetoday: + type: bool + description: + de: 'Alle activeToday Einträge, die durch Einmalausführung gesetzt worden sind, werden auf den entsprechenden Wert gesetzt.' + en: 'All activeToday entries that have been set due to once evaluations are set to the specified value.' + description_long: + de: 'Setzen der activeToday Einträge eines Items.\n + - False: Setzen der Einträge auf False, praktisch ein Reset\n + - True: Setzen der Einträge auf True - im Normalfall nicht hilfreich, lediglich für Debuggingzwecke\n + ' + en: 'Delete the activeToday entries of an item.\n + - False: Setting the entries to False, practically resetting them\n + - True: setting the entries to True - usually not helpful except for debugging purposes\n + ' + parameters: + set: + type: bool + description: + de: "True, um die activeToday Einträge zu aktivieren, False um sie zu deaktivieren/zurückzusetzen." + en: "True to activate the activeToday entries, False to deactivate/reset them." + item: + type: foo + description: + de: "Das Item-Objekt" + en: "An item object" itpl: type: dict description: