Unable to connect to HA from Appdaemon

Ubuntu 24.04
HA Core 2026.1.0
appdaemon 4.5.13

I am running Home Assistant core which is working as expected along with appdaemon running in a python venv, so no add on. I verified appdaemon is running with a dashboard, however I am not able to get it to connect to HA. Also I verified the token is correct and that port 8123 is in my firewall rules. I tried using localhost, 127.0.0.1 and my server IP address for ha_url. My appdaemon.yaml file with a few updates worked for a 2024 version of HA and appdaemon. Any settings I need to do for the latest versions of HA and appdaemon?

Any help is appreciated.
Thanks Mark

My YAML file:

appdaemon:
  plugins:
    HASS:
      type: hass
      ha_url: <http://localhost:8123>
      cert_verify: False  
      token: <my_ha_token> 
  # Location required to calculate the time the sun rises and sets
  latitude: xxxxx
  longitude: xxxx
  # Impacts weather/sunrise data (altitude above sea level in meters)
  elevation: 2100
  # Pick yours from here: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
  time_zone: America/New_York

    #logs:
  main_log: 
    filename: /home/mark/appdaemon_conf/conf/appdaemon.log
  error_log: 
    filename: /home/mark/appdaemon_conf/conf/error.log
  diag_log: 
    filename: /home/mark/appdaemon_conf/conf/diag.log
  access_log: 
    filename: /home/mark/appdaemon_conf/conf/access.log
    #  log_generations: 3
    #  log_size: 1000000


http: 
  url: http://0.0.0.0:5050

hadashboard:
2026-02-04 07:39:24.130 DEBUG AppDaemon: Reading config file: /home/mark/appdaemon_conf/conf/appdaemon.yaml
2026-02-04 07:39:24.146 DEBUG AppDaemon: {
    "admin": null,
    "api": null,
    "appdaemon": {
        "access_log": {
            "filename": "/home/mark/appdaemon_conf/conf/access.log"
        },
        "ad_version": "4.5.13",
        "admin_delay": 1.0,
        "api_key": null,
        "api_port": null,
        "api_ssl_certificate": null,
        "api_ssl_key": null,
        "app_dir": "/home/mark/appdaemon_conf/conf/apps",
        "ascii_encode": true,
        "cert_verify": true,
        "check_app_updates_profile": false,
        "config_dir": "/home/mark/appdaemon_conf/conf",
        "config_file": "/home/mark/appdaemon_conf/conf/appdaemon.yaml",
        "diag_log": {
            "filename": "/home/mark/appdaemon_conf/conf/diag.log"
        },
        "disable_apps": false,
        "discard_init_events": false,
        "elevation": 2100,
        "endtime": null,
        "error_log": {
            "filename": "/home/mark/appdaemon_conf/conf/error.log"
        },
        "exclude_dirs": [
            "__pycache__",
            "build",
            ".venv"
        ],
        "ext": ".yaml",
        "filters": [],
        "import_method": null,
        "import_paths": [],
        "internal_function_timeout": 60.0,
        "invalid_config_warnings": true,
        "latitude": 34.892594,
        "load_distribution": "roundrobbin",
        "log_thread_actions": false,
        "loglevel": "DEBUG",
        "longitude": -83.538831,
        "main_log": {
            "filename": "/home/mark/appdaemon_conf/conf/appdaemon.log"
        },
        "max_utility_skew": 2.0,
        "missing_app_warnings": true,
        "module_debug": {},
        "namespaces": {},
        "pin_apps": true,
        "pin_threads": null,
        "plugin_performance_update": 10,
        "plugins": {
            "HASS": {
                "api_class": "Hass",
                "api_module": "appdaemon.plugins.hass.hassapi",
                "appdaemon_startup_conditions": null,
                "cert_path": null,
                "cert_verify": false,
                "commtype": null,
                "config_sleep_time": 60.0,
                "connect_timeout": 1.0,
                "disable": false,
                "enable_started_event": true,
                "ha_key": null,
                "ha_url": "%3Chttp://0.0.0.0:8123%3E",
                "name": "HASS",
                "namespace": "default",
                "namespaces": [],
                "persist_entities": false,
                "plugin_class": "HassPlugin",
                "plugin_module": "appdaemon.plugins.hass.hassplugin",
                "plugin_startup_conditions": null,
                "refresh_delay": 600.0,
                "refresh_timeout": 30.0,
                "retry_secs": 5.0,
                "services_sleep_time": 60.0,
                "suppress_log_messages": false,
                "token": "**********",
                "type": "hass",
                "ws_max_msg_size": 4194304,
                "ws_timeout": 10.0
            }
        },
        "production_mode": false,
        "qsize_warning_iterations": 10,
        "qsize_warning_step": 60,
        "qsize_warning_threshold": 50,
        "starttime": null,
        "stop_function": null,
        "suppress_log_messages": false,
        "thread_duration_warning_threshold": 10.0,
        "threadpool_workers": 10,
        "threads": null,
        "time_zone": "America/New_York",
        "timewarp": 1.0,
        "total_threads": null,
        "use_dictionary_unpacking": false,
        "use_stream": false,
        "utility_delay": 1.0,
        "uvloop": false,
        "write_toml": false
    },
    "hadashboard": {
        "compile_on_start": false,
        "config_dir": "/home/mark/appdaemon_conf/conf",
        "config_file": "/home/mark/appdaemon_conf/conf/appdaemon.yaml",
        "dashboard": true,
        "dashboard_dir": null,
        "force_compile": false,
        "profile_dashboard": false
    },
    "http": {
        "headers": null,
        "password": null,
        "ssl_certificate": null,
        "ssl_key": null,
        "static_dirs": null,
        "transport": "ws",
        "url": "http://0.0.0.0:5050/"
    },
    "log": null,
    "logs": {},
    "old_admin": null
}
2026-02-04 07:39:24.146455 WARNING AppDaemon: Extra config field 'access_log'. This will be ignored
2026-02-04 07:39:24.146571 WARNING AppDaemon: Extra config field 'error_log'. This will be ignored
2026-02-04 07:39:24.146630 WARNING AppDaemon: Extra config field 'main_log'. This will be ignored
2026-02-04 07:39:24.146692 WARNING AppDaemon: Extra config field 'diag_log'. This will be ignored
2026-02-04 07:39:24.147054 DEBUG file: Reading config file: /home/mark/appdaemon_conf/conf/apps/apps.yaml
2026-02-04 07:39:24.147 DEBUG AppDaemon: Using selector: EpollSelector
2026-02-04 07:39:24.147739 DEBUG AppDaemon: Created new async event loop
2026-02-04 07:39:24.150233 INFO AppDaemon: ------------------------------------------------------------
2026-02-04 07:39:24.150298 INFO AppDaemon: AppDaemon Version 4.5.13 starting
2026-02-04 07:39:24.150348 INFO AppDaemon: ------------------------------------------------------------
2026-02-04 07:39:24.150396 INFO AppDaemon: Python version is 3.13.11
2026-02-04 07:39:24.150441 INFO AppDaemon: Configuration read from: /home/mark/appdaemon_conf/conf/appdaemon.yaml
2026-02-04 07:39:24.150778 INFO AppDaemon: Using /home/mark/appdaemon_conf/conf/apps as app_dir
2026-02-04 07:39:24.150905 DEBUG AppDaemon: register_service called: admin.app.edit -> <bound method AppManagement.manage_services of <appdaemon.app_management.AppManagement object at 0x709cefefacf0>>
2026-02-04 07:39:24.150982 DEBUG AppDaemon: register_service called: admin.app.stop -> <bound method AppManagement.manage_services of <appdaemon.app_management.AppManagement object at 0x709cefefacf0>>
2026-02-04 07:39:24.151053 DEBUG AppDaemon: register_service called: admin.app.reload -> <bound method AppManagement.manage_services of <appdaemon.app_management.AppManagement object at 0x709cefefacf0>>
2026-02-04 07:39:24.151121 DEBUG AppDaemon: register_service called: admin.app.create -> <bound method AppManagement.manage_services of <appdaemon.app_management.AppManagement object at 0x709cefefacf0>>
2026-02-04 07:39:24.151187 DEBUG AppDaemon: register_service called: admin.app.start -> <bound method AppManagement.manage_services of <appdaemon.app_management.AppManagement object at 0x709cefefacf0>>
2026-02-04 07:39:24.151260 DEBUG AppDaemon: register_service called: admin.app.enable -> <bound method AppManagement.manage_services of <appdaemon.app_management.AppManagement object at 0x709cefefacf0>>
2026-02-04 07:39:24.151324 DEBUG AppDaemon: register_service called: admin.app.restart -> <bound method AppManagement.manage_services of <appdaemon.app_management.AppManagement object at 0x709cefefacf0>>
2026-02-04 07:39:24.151387 DEBUG AppDaemon: register_service called: admin.app.disable -> <bound method AppManagement.manage_services of <appdaemon.app_management.AppManagement object at 0x709cefefacf0>>
2026-02-04 07:39:24.151449 DEBUG AppDaemon: register_service called: admin.app.remove -> <bound method AppManagement.manage_services of <appdaemon.app_management.AppManagement object at 0x709cefefacf0>>
2026-02-04 07:39:24.152064 INFO AppDaemon: Loading built-in plugin 'HASS' using 'HassPlugin' from 'appdaemon.plugins.hass.hassplugin'
2026-02-04 07:39:24.152249 INFO HASS: HASS Plugin initialization complete
2026-02-04 07:39:24.152402 INFO AppDaemon: Initializing HTTP
2026-02-04 07:39:24.152583 INFO AppDaemon: Using 'ws' for event stream
2026-02-04 07:39:24.153823 INFO AppDaemon: API is disabled
2026-02-04 07:39:24.153922 INFO AppDaemon: Admin Interface is disabled
2026-02-04 07:39:24.153993 INFO AppDaemon: Starting Dashboards
2026-02-04 07:39:24.155103 DEBUG AppDaemon: Starting AppDaemon
2026-02-04 07:39:24.155183 DEBUG AppDaemon: Starting thread_async loop
2026-02-04 07:39:24.155286 DEBUG AppDaemon: Running async event loop forever
2026-02-04 07:39:24.155378 DEBUG AppDaemon: Event type: service_registered:
2026-02-04 07:39:24.155438 DEBUG AppDaemon: process_event_callbacks() admin {'event_type': 'service_registered', 'data': {'namespace': 'admin', 'domain': 'app', 'service': 'edit'}}
2026-02-04 07:39:24.155529 DEBUG AppDaemon: Event type: service_registered:
2026-02-04 07:39:24.155581 DEBUG AppDaemon: process_event_callbacks() admin {'event_type': 'service_registered', 'data': {'namespace': 'admin', 'domain': 'app', 'service': 'stop'}}
2026-02-04 07:39:24.155665 DEBUG AppDaemon: Event type: service_registered:
2026-02-04 07:39:24.155723 DEBUG AppDaemon: process_event_callbacks() admin {'event_type': 'service_registered', 'data': {'namespace': 'admin', 'domain': 'app', 'service': 'reload'}}
2026-02-04 07:39:24.155803 DEBUG AppDaemon: Event type: service_registered:
2026-02-04 07:39:24.155861 DEBUG AppDaemon: process_event_callbacks() admin {'event_type': 'service_registered', 'data': {'namespace': 'admin', 'domain': 'app', 'service': 'create'}}
2026-02-04 07:39:24.155939 DEBUG AppDaemon: Event type: service_registered:
2026-02-04 07:39:24.155995 DEBUG AppDaemon: process_event_callbacks() admin {'event_type': 'service_registered', 'data': {'namespace': 'admin', 'domain': 'app', 'service': 'start'}}
2026-02-04 07:39:24.156073 DEBUG AppDaemon: Event type: service_registered:
2026-02-04 07:39:24.156130 DEBUG AppDaemon: process_event_callbacks() admin {'event_type': 'service_registered', 'data': {'namespace': 'admin', 'domain': 'app', 'service': 'enable'}}
2026-02-04 07:39:24.156207 DEBUG AppDaemon: Event type: service_registered:
2026-02-04 07:39:24.156276 DEBUG AppDaemon: process_event_callbacks() admin {'event_type': 'service_registered', 'data': {'namespace': 'admin', 'domain': 'app', 'service': 'restart'}}
2026-02-04 07:39:24.156359 DEBUG AppDaemon: Event type: service_registered:
2026-02-04 07:39:24.156415 DEBUG AppDaemon: process_event_callbacks() admin {'event_type': 'service_registered', 'data': {'namespace': 'admin', 'domain': 'app', 'service': 'disable'}}
2026-02-04 07:39:24.156491 DEBUG AppDaemon: Event type: service_registered:
2026-02-04 07:39:24.156546 DEBUG AppDaemon: process_event_callbacks() admin {'event_type': 'service_registered', 'data': {'namespace': 'admin', 'domain': 'app', 'service': 'remove'}}
2026-02-04 07:39:24.186819 DEBUG AppDaemon: Previous message repeated 1 times
2026-02-04 07:39:24.186955 DEBUG AppDaemon: thread_async loop, args={'function': <bound method Events.process_event of <appdaemon.events.Events object at 0x709cefef9fd0>>, 'args': ('admin', {'event_type': '__AD_LOG_EVENT', 'data': {'level': 'INFO', 'app_name': 'AppDaemon', 'message': "Loading built-in plugin 'HASS' using 'HassPlugin' from 'appdaemon.plugins.hass.hassplugin'", 'type': 'log', 'log_type': 'main_log', 'asctime': '2026-02-04 07:39:24.152112', 'ts': datetime.datetime(2026, 2, 4, 7, 39, 24, 152039), 'formatted_message': "2026-02-04 07:39:24.152112 INFO AppDaemon: Loading built-in plugin 'HASS' using 'HassPlugin' from 'appdaemon.plugins.hass.hassplugin'"}}), 'kwargs': {}}
2026-02-04 07:39:24.187040 DEBUG AppDaemon: thread_async loop, args={'function': <bound method Events.process_event of <appdaemon.events.Events object at 0x709cefef9fd0>>, 'args': ('admin', {'event_type': '__AD_LOG_EVENT', 'data': {'level': 'INFO', 'app_name': 'HASS', 'message': 'HASS Plugin initialization complete', 'type': 'log', 'log_type': 'main_log', 'asctime': '2026-02-04 07:39:24.152287', 'ts': datetime.datetime(2026, 2, 4, 7, 39, 24, 152227), 'formatted_message': '2026-02-04 07:39:24.152287 INFO HASS: HASS Plugin initialization complete'}}), 'kwargs': {}}
2026-02-04 07:39:24.187131 DEBUG AppDaemon: thread_async loop, args={'function': <bound method Events.process_event of <appdaemon.events.Events object at 0x709cefef9fd0>>, 'args': ('admin', {'event_type': '__AD_LOG_EVENT', 'data': {'level': 'INFO', 'app_name': 'AppDaemon', 'message': 'Initializing HTTP', 'type': 'log', 'log_type': 'main_log', 'asctime': '2026-02-04 07:39:24.152441', 'ts': datetime.datetime(2026, 2, 4, 7, 39, 24, 152383), 'formatted_message': '2026-02-04 07:39:24.152441 INFO AppDaemon: Initializing HTTP'}}), 'kwargs': {}}
2026-02-04 07:39:24.187228 DEBUG AppDaemon: thread_async loop, args={'function': <bound method Events.process_event of <appdaemon.events.Events object at 0x709cefef9fd0>>, 'args': ('admin', {'event_type': '__AD_LOG_EVENT', 'data': {'level': 'INFO', 'app_name': 'AppDaemon', 'message': "Using 'ws' for event stream", 'type': 'log', 'log_type': 'main_log', 'asctime': '2026-02-04 07:39:24.152621', 'ts': datetime.datetime(2026, 2, 4, 7, 39, 24, 152559), 'formatted_message': "2026-02-04 07:39:24.152621 INFO AppDaemon: Using 'ws' for event stream"}}), 'kwargs': {}}
2026-02-04 07:39:24.187299 DEBUG AppDaemon: thread_async loop, args={'function': <bound method Events.process_event of <appdaemon.events.Events object at 0x709cefef9fd0>>, 'args': ('admin', {'event_type': '__AD_LOG_EVENT', 'data': {'level': 'INFO', 'app_name': 'AppDaemon', 'message': 'API is disabled', 'type': 'log', 'log_type': 'main_log', 'asctime': '2026-02-04 07:39:24.153869', 'ts': datetime.datetime(2026, 2, 4, 7, 39, 24, 153798), 'formatted_message': '2026-02-04 07:39:24.153869 INFO AppDaemon: API is disabled'}}), 'kwargs': {}}
2026-02-04 07:39:24.187366 DEBUG AppDaemon: thread_async loop, args={'function': <bound method Events.process_event of <appdaemon.events.Events object at 0x709cefef9fd0>>, 'args': ('admin', {'event_type': '__AD_LOG_EVENT', 'data': {'level': 'INFO', 'app_name': 'AppDaemon', 'message': 'Admin Interface is disabled', 'type': 'log', 'log_type': 'main_log', 'asctime': '2026-02-04 07:39:24.153953', 'ts': datetime.datetime(2026, 2, 4, 7, 39, 24, 153904), 'formatted_message': '2026-02-04 07:39:24.153953 INFO AppDaemon: Admin Interface is disabled'}}), 'kwargs': {}}
2026-02-04 07:39:24.187456 DEBUG AppDaemon: thread_async loop, args={'function': <bound method Events.process_event of <appdaemon.events.Events object at 0x709cefef9fd0>>, 'args': ('admin', {'event_type': '__AD_LOG_EVENT', 'data': {'level': 'INFO', 'app_name': 'AppDaemon', 'message': 'Starting Dashboards', 'type': 'log', 'log_type': 'main_log', 'asctime': '2026-02-04 07:39:24.154021', 'ts': datetime.datetime(2026, 2, 4, 7, 39, 24, 153978), 'formatted_message': '2026-02-04 07:39:24.154021 INFO AppDaemon: Starting Dashboards'}}), 'kwargs': {}}
2026-02-04 07:39:24.187532 DEBUG AppDaemon: thread_async loop, args={'function': <bound method ADStream.process_event of <appdaemon.stream.adstream.ADStream object at 0x709cefefbb60>>, 'args': ({'event_type': 'service_registered', 'data': {'namespace': 'admin', 'domain': 'app', 'service': 'edit'}, 'namespace': 'admin'},), 'kwargs': {}}
2026-02-04 07:39:24.187604 DEBUG AppDaemon: thread_async loop, args={'function': <bound method ADStream.process_event of <appdaemon.stream.adstream.ADStream object at 0x709cefefbb60>>, 'args': ({'event_type': 'service_registered', 'data': {'namespace': 'admin', 'domain': 'app', 'service': 'stop'}, 'namespace': 'admin'},), 'kwargs': {}}
2026-02-04 07:39:24.187674 DEBUG AppDaemon: thread_async loop, args={'function': <bound method ADStream.process_event of <appdaemon.stream.adstream.ADStream object at 0x709cefefbb60>>, 'args': ({'event_type': 'service_registered', 'data': {'namespace': 'admin', 'domain': 'app', 'service': 'reload'}, 'namespace': 'admin'},), 'kwargs': {}}
2026-02-04 07:39:24.187744 DEBUG AppDaemon: thread_async loop, args={'function': <bound method ADStream.process_event of <appdaemon.stream.adstream.ADStream object at 0x709cefefbb60>>, 'args': ({'event_type': 'service_registered', 'data': {'namespace': 'admin', 'domain': 'app', 'service': 'create'}, 'namespace': 'admin'},), 'kwargs': {}}
2026-02-04 07:39:24.187843 DEBUG AppDaemon: thread_async loop, args={'function': <bound method ADStream.process_event of <appdaemon.stream.adstream.ADStream object at 0x709cefefbb60>>, 'args': ({'event_type': 'service_registered', 'data': {'namespace': 'admin', 'domain': 'app', 'service': 'start'}, 'namespace': 'admin'},), 'kwargs': {}}
2026-02-04 07:39:24.187912 DEBUG AppDaemon: thread_async loop, args={'function': <bound method ADStream.process_event of <appdaemon.stream.adstream.ADStream object at 0x709cefefbb60>>, 'args': ({'event_type': 'service_registered', 'data': {'namespace': 'admin', 'domain': 'app', 'service': 'enable'}, 'namespace': 'admin'},), 'kwargs': {}}
2026-02-04 07:39:24.187982 DEBUG AppDaemon: thread_async loop, args={'function': <bound method ADStream.process_event of <appdaemon.stream.adstream.ADStream object at 0x709cefefbb60>>, 'args': ({'event_type': 'service_registered', 'data': {'namespace': 'admin', 'domain': 'app', 'service': 'restart'}, 'namespace': 'admin'},), 'kwargs': {}}
2026-02-04 07:39:24.188051 DEBUG AppDaemon: thread_async loop, args={'function': <bound method ADStream.process_event of <appdaemon.stream.adstream.ADStream object at 0x709cefefbb60>>, 'args': ({'event_type': 'service_registered', 'data': {'namespace': 'admin', 'domain': 'app', 'service': 'disable'}, 'namespace': 'admin'},), 'kwargs': {}}
2026-02-04 07:39:24.188120 DEBUG AppDaemon: thread_async loop, args={'function': <bound method ADStream.process_event of <appdaemon.stream.adstream.ADStream object at 0x709cefefbb60>>, 'args': ({'event_type': 'service_registered', 'data': {'namespace': 'admin', 'domain': 'app', 'service': 'remove'}, 'namespace': 'admin'},), 'kwargs': {}}
2026-02-04 07:39:24.188202 DEBUG AppDaemon: Starting utility loop
2026-02-04 07:39:24.188696 INFO AppDaemon: Starting apps with 1 worker threads. Apps will all be assigned threads and pinned to them.
2026-02-04 07:39:24.189888 ERROR HASS: %3Chttp://0.0.0.0:8123%3E/api/websocket
2026-02-04 07:39:24.190290 INFO HASS: Attempting reconnection in 5.0s
2026-02-04 07:39:24.190412 DEBUG AppDaemon: Event type: __AD_LOG_EVENT:
2026-02-04 07:39:24.190484 DEBUG AppDaemon: process_event_callbacks() admin {'event_type': '__AD_LOG_EVENT', 'data': {'level': 'INFO', 'app_name': 'AppDaemon', 'message': 'Using /home/mark/appdaemon_conf/conf/apps as app_dir', 'type': 'log', 'log_type': 'main_log', 'asctime': '2026-02-04 07:39:24.150821', 'ts': datetime.datetime(2026, 2, 4, 7, 39, 24, 150749), 'formatted_message': '2026-02-04 07:39:24.150821 INFO AppDaemon: Using /home/mark/appdaemon_conf/conf/apps as app_dir'}}
2026-02-04 07:39:24.190569 DEBUG AppDaemon: Event type: __AD_LOG_EVENT:

I assume you know about this… (But just in case)

You would theoretically be locked into that version unless you are maintaining a version on your own.

Yep I do understand that Core install is no longer supported and why it was done. I’m OK with the change. I’m hoping this turns out to be a simple network issue or configuration problem with HA or Appdaemon that I missed during installation. Thanks for pointing out the changes. I could have easily been someone that wasn’t aware of the new policy.

It is working now. The token needed to have “” instead of <>.