How to use appdaemon - 10 common examples

To help you get started, we’ve selected a few appdaemon examples, based on popular ways it is used in public projects.

Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.

github FlorianKempenich / Appdaemon-Test-Framework / appdaemontestframework / hass_mocks.py View on Github external
import logging import warnings import appdaemon.utils import mock from appdaemon.plugins.hass.hassapi import Hass from packaging.version import Version CURRENT_APPDAEMON_VERSION = Version(appdaemon.utils.__version__) def is_appdaemon_version_at_least(version_as_string): expected_appdaemon_version = Version(version_as_string) return CURRENT_APPDAEMON_VERSION >= expected_appdaemon_version class _DeprecatedAppdaemonVersionWarning: already_warned_during_this_test_session = False min_supported_appdaemon_version = '4.0.0'  @classmethod def show_warning_only_once(cls): if cls.already_warned_during_this_test_session is True: return cls.already_warned_during_this_test_session = True
github aneisch / home-assistant-config / extras / appdaemon / apps / countdown_notify.py View on Github external
import appdaemon.plugins.hass.hassapi as hass """ Notifies the specified notifier on the days you specify. """ class Notify(hass.Hass): def initialize(self): if "countdown_entity" in self.args: self.listen_state(self.evaluate_notice, self.args["countdown_entity"]) def evaluate_notice(self, entity, attribute, old, new, kwargs): days_remaining = self.get_state(entity, attribute="days_remaining") entity_friendly_name = self.get_state(entity, attribute="friendly_name") if type(self.args["notification_days"]) == int: notification_days = [self.args["notification_days"]] else: notification_days = [int(day) for day in self.args["notification_days"].split(",")] if days_remaining in notification_days: self.send_notice() elif self.args["notify_overdue"] and days_remaining < 0:
github home-assistant / appdaemon / appdaemon / appdaemon.py View on Github external
def check_constraint(key, value): unconstrained = True  with conf.ha_state_lock: if key == "constrain_input_boolean": values = value.split(",") if len(values) == 2: entity = values[0] state = values[1] else: entity = value state = "on" if entity in conf.ha_state and conf.ha_state[entity]["state"] != state: unconstrained = False if key == "constrain_input_select": values = value.split(",") entity = values.pop(0) if entity in conf.ha_state and conf.ha_state[entity]["state"] not in values: unconstrained = False if key == "constrain_presence":
github home-assistant / appdaemon / appdaemon / appdaemon.py View on Github external
raise ValueError("Invalid scheme for 'dash_url' - only HTTP is supported") dash_net = url.netloc.split(":") conf.dash_host = dash_net[0] try: conf.dash_port = dash_net[1] except IndexError: conf.dash_port = 80 if conf.dash_host == "": raise ValueError("Invalid host for 'dash_url'") if conf.threads is None: conf.threads = 10  if conf.logfile is None: conf.logfile = "STDOUT" if conf.errorfile is None: conf.errorfile = "STDERR" if isdaemon and ( conf.logfile == "STDOUT" or conf.errorfile == "STDERR" or conf.logfile == "STDERR" or conf.errorfile == "STDOUT" ): raise ValueError("STDOUT and STDERR not allowed with -d") # Setup Logging conf.logger = logging.getLogger("log1") numeric_level = getattr(logging, args.debug, None) conf.logger.setLevel(numeric_level)
github home-assistant / appdaemon / appdaemon / appdaemon.py View on Github external
conf.app_dir = config['AppDaemon'].get("app_dir") conf.dashboard_dir = config['AppDaemon'].get("dash_dir") conf.timeout = config['AppDaemon'].get("timeout") if config['AppDaemon'].get("disable_apps") == "1": conf.apps = False else: conf.apps = True if config['AppDaemon'].get("dash_force_compile") == "1": conf.dash_force_compile = True else: conf.dash_force_compile = False if config['AppDaemon'].get("dash_compile_on_start") == "1":  conf.dash_compile_on_start = True else: conf.dash_compile_on_start = False if conf.dash_url is not None: conf.dashboard = True url = urlparse(conf.dash_url) if url.scheme != "http": raise ValueError("Invalid scheme for 'dash_url' - only HTTP is supported") dash_net = url.netloc.split(":") conf.dash_host = dash_net[0] try: conf.dash_port = dash_net[1] except IndexError: conf.dash_port = 80
github home-assistant / appdaemon / appdaemon / __main__.py View on Github external
# Get command line args parser = argparse.ArgumentParser() parser.add_argument("-c", "--config", help="full path to config directory", type=str, default=None) parser.add_argument("-p", "--pidfile", help="full path to PID File", default=None) parser.add_argument("-t", "--timewarp", help="speed that the scheduler will work at for time travel", default=1, type=float) parser.add_argument("-s", "--starttime", help="start time for scheduler ", type=str) parser.add_argument("-e", "--endtime", help="end time for scheduler ", type=str, default=None) parser.add_argument("-D", "--debug", help="global debug level", default="INFO", choices= [ "DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL" ]) parser.add_argument('-m', '--moduledebug', nargs=2, action='append', help=argparse.SUPPRESS)  parser.add_argument('-v', '--version', action='version', version='%(prog)s ' + utils.__version__) parser.add_argument('--profiledash', help=argparse.SUPPRESS, action='store_true') args = parser.parse_args() config_dir = args.config pidfile = args.pidfile if config_dir is None: config_file_yaml = utils.find_path("appdaemon.yaml") else: config_file_yaml = os.path.join(config_dir, "appdaemon.yaml") if config_file_yaml is None: print("FATAL: no configuration directory defined and defaults not present\n") parser.print_help() sys.exit(1)
github home-assistant / appdaemon / appdaemon / app_management.py View on Github external
init = getattr(self.objects[name]["object"], "initialize", None) if init is None: self.logger.warning("Unable to find initialize() function in module %s - skipped", name) await self.increase_inactive_apps(name) return else: self.logger.warning("Unable to find module %s - initialize() skipped", name) await self.increase_inactive_apps(name) return # Call its initialize function try: if asyncio.iscoroutinefunction(init): await init() else:  await utils.run_in_executor(self, init) await self.set_state(name, state="idle") await self.increase_active_apps(name) event_data = { "event_type": "app_initialized", "data": {'app' : name} } await self.AD.events.process_event("admin", event_data) except TypeError: self.AD.threading.report_callback_sig(name, "initialize", init, {}) except: error_logger = logging.getLogger("Error.{}".format(name)) error_logger.warning('-' * 60) error_logger.warning("Unexpected error running initialize() for %s", name)
github home-assistant / appdaemon / appdaemon / threading.py View on Github external
async def check_days_constraint(self, args, name): unconstrained = True if "constrain_days" in args: days = args["constrain_days"] now = await self.AD.sched.get_now() daylist = [] for day in days.split(","):  daylist.append(await utils.run_in_executor(self, utils.day_of_week, day)) if now.weekday() not in daylist: unconstrained = False return unconstrained
github home-assistant / appdaemon / appdaemon / hassapi.py View on Github external
def get_state(self, entity_id=None, attribute=None):  utils.log(conf.logger, "DEBUG", "get_state: {}.{}".format(entity_id, attribute)) device = None entity = None if entity_id is not None and "." in entity_id: if not self.entity_exists(entity_id): return None if entity_id is not None: if "." not in entity_id: if attribute is not None: raise ValueError( "{}: Invalid entity ID: {}".format(self.name, entity)) device = entity_id entity = None else: device, entity = entity_id.split(".") with conf.ha_state_lock:
github azogue / hass_appdaemon_apps / conf / apps / family_tracker.py View on Github external
Harcoded custom logic for controlling HA with feedback from these actions. """ from datetime import datetime as dt from dateutil.parser import parse import appdaemon.appapi as appapi import appdaemon.conf as conf # DELAY_TO_SET_DEFAULT_TARGET = 1800 # sec DELAY_TO_SET_DEFAULT_TARGET = 120 # sec # noinspection PyClassHasNoInit class FamilyTracker(appapi.AppDaemon): """Family Tracker.""" _tracking_state = None _telegram_targets = None _notifier = None _timer_update_target = None _base_url = None _anybody_home = None def initialize(self): """AppDaemon required method for app init.""" config = dict(self.config['AppDaemon']) _chatids = [int(x) for x in config.get('bot_chatids').split(',')] self._notifier = config.get('notifier').replace('.', '/') self._base_url = config.get('base_url').replace('.', '/') self._anybody_home = False