appdaemon 4.5.2__tar.gz → 4.5.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {appdaemon-4.5.2/appdaemon.egg-info → appdaemon-4.5.4}/PKG-INFO +1 -1
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/adapi.py +18 -10
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/app_management.py +9 -6
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/entity.py +1 -3
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/models/config/plugin.py +0 -1
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/plugin_management.py +8 -2
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/plugins/hass/hassapi.py +23 -13
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/plugins/hass/hassplugin.py +2 -2
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/stream/adstream.py +12 -10
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/stream/ws_handler.py +4 -3
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/threads.py +6 -1
- appdaemon-4.5.4/appdaemon/version.py +2 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4/appdaemon.egg-info}/PKG-INFO +1 -1
- appdaemon-4.5.2/appdaemon/version.py +0 -2
- {appdaemon-4.5.2 → appdaemon-4.5.4}/LICENSE.md +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/MANIFEST.in +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/README.md +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/README.rst +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/__init__.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/__main__.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/adbase.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/admin.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/admin_loop.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/appdaemon.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/aui/appdaemon.png +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/aui/css/app.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/aui/css/chunk-vendors.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/aui/favicon.ico +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/aui/index.html +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/aui/js/app.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/aui/js/app.js.map +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/aui/js/chunk-vendors.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/aui/js/chunk-vendors.js.map +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/all.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/climacons-font.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/default/dashboard.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/default/variables.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/fontawesome.min.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/fonts.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/glassic/dashboard.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/glassic/img/carbon1.jpg +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/glassic/img/carbon2.jpg +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/glassic/img/carbon3.jpg +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/glassic/img/carbon4.jpg +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/glassic/img/glassic_bg.jpg +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/glassic/variables.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/images/ui-icons_444444_256x240.png +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/images/ui-icons_555555_256x240.png +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/images/ui-icons_777620_256x240.png +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/images/ui-icons_777777_256x240.png +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/images/ui-icons_cc0000_256x240.png +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/images/ui-icons_ffffff_256x240.png +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/jquery-ui.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/jquery.gridster.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/main.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/materialdesignicons.min.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/non_dashboard.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/obsidian/dashboard.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/obsidian/img/obsidian_bg.jpg +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/obsidian/img/obsidian_w_bg.jpg +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/obsidian/img/obsidianbg.jpg +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/obsidian/img/widgetbg.jpg +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/obsidian/variables.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/rickshaw.min.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/simplyred/dashboard.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/simplyred/img/goldgradient.png +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/simplyred/img/goldtexture.jpg +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/simplyred/js/timer.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/simplyred/variables.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/v4-shims.min.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/zen/dashboard.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/zen/img/zen_bg.jpg +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/zen/img/zen_bg2.jpg +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/zen/img/zen_weatherbg.jpg +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/css/zen/variables.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/fonts/TickingTimebombBB.ttf +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/fonts/climacons-webfont.eot +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/fonts/climacons-webfont.svg +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/fonts/climacons-webfont.ttf +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/fonts/climacons-webfont.woff +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/fonts/digital-7-mono.eot +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/fonts/digital-7-mono.ttf +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/fonts/materialdesignicons-webfont.eot +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/fonts/materialdesignicons-webfont.ttf +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/fonts/materialdesignicons-webfont.woff +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/fonts/materialdesignicons-webfont.woff2 +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/fonts/repetition.ttf +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/images/Blank.gif +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/images/android-chrome-192x192.png +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/images/android-chrome-512x512.png +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/images/apple-touch-icon.png +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/images/browserconfig.xml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/images/favicon-16x16.png +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/images/favicon-32x32.png +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/images/favicon.ico +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/images/manifest.json +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/images/mstile-144x144.png +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/images/mstile-150x150.png +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/images/mstile-310x150.png +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/images/mstile-310x310.png +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/images/mstile-70x70.png +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/javascript/admin.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/javascript/d3.layout.min.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/javascript/d3.min.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/javascript/dashboard.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/javascript/gauge.min.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/javascript/jquery-3.1.1.min.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/javascript/jquery-ui.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/javascript/jquery.gridster.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/javascript/justgage.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/javascript/knockout-3.4.1.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/javascript/list.min.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/javascript/plotly.min.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/javascript/raphael-2.1.4.min.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/javascript/reconnecting-websocket.min.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/javascript/rickshaw.min.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/javascript/socket.io.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/javascript/sockjs.min.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/javascript/stream.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/templates/admin.jinja2 +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/templates/body_include.jinja2 +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/templates/dashboard.jinja2 +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/templates/dashinit.jinja2 +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/templates/error.jinja2 +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/templates/head_include.jinja2 +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/templates/list.jinja2 +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/templates/logon.jinja2 +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-brands-400.eot +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-brands-400.svg +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-brands-400.ttf +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-brands-400.woff +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-brands-400.woff2 +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-regular-400.eot +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-regular-400.svg +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-regular-400.ttf +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-regular-400.woff +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-regular-400.woff2 +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-solid-900.eot +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-solid-900.svg +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-solid-900.ttf +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-solid-900.woff +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/webfonts/fa-solid-900.woff2 +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/callbacks.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/dashboard.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/dependency.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/dependency_manager.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/events.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/exceptions.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/futures.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/http.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/logging.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/models/__init__.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/models/config/__init__.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/models/config/api.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/models/config/app.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/models/config/appdaemon.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/models/config/common.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/models/config/dashboard.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/models/config/http.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/models/config/log.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/models/config/misc.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/models/config/sequence.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/models/config/yaml.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/models/internal/__init__.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/models/internal/app_management.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/models/internal/file_check.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/models/internal/plugin.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/models/internal/state.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/models/internal/threading.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/models/notification/__init__.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/models/notification/android.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/models/notification/base.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/models/notification/iOS.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/plugins/__init__.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/plugins/dummy/dummyapi.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/plugins/dummy/dummyplugin.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/plugins/hass/__init__.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/plugins/hass/exceptions.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/plugins/hass/models.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/plugins/hass/notifications.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/plugins/hass/utils.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/plugins/mqtt/__init__.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/plugins/mqtt/mqttapi.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/plugins/mqtt/mqttplugin.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/pyversions.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/scheduler.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/sequences.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/services.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/state.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/stream/__init__.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/stream/socketio_handler.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/stream/sockjs_handler.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/thread_async.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/utility_loop.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/utils.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/AdminLog.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/AdminSummary.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/AdminTable.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/alarm.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basealarm/basealarm.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basealarm/basealarm.html +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basealarm/basealarm.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basecamera/basecamera.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basecamera/basecamera.html +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basecamera/basecamera.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseclimate/baseclimate.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseclimate/baseclimate.html +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseclimate/baseclimate.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseclock/baseclock.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseclock/baseclock.html +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseclock/baseclock.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basedatetime/basedatetime.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basedatetime/basedatetime.html +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basedatetime/basedatetime.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basedisplay/basedisplay.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basedisplay/basedisplay.html +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basedisplay/basedisplay.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseentitypicture/baseentitypicture.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseentitypicture/baseentitypicture.html +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseentitypicture/baseentitypicture.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseerror/baseerror.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseerror/baseerror.html +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseerror/baseerror.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basefan/basefan.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basefan/basefan.html +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basefan/basefan.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basegauge/basegauge.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basegauge/basegauge.html +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basegauge/basegauge.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseheater/baseheater.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseheater/baseheater.html +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseheater/baseheater.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseicon/baseicon.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseicon/baseicon.html +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseicon/baseicon.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseiframe/baseiframe.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseiframe/baseiframe.html +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseiframe/baseiframe.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseinputnumber/baseinputnumber.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseinputnumber/baseinputnumber.html +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseinputnumber/baseinputnumber.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basejavascript/basejavascript.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basejavascript/basejavascript.html +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basejavascript/basejavascript.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baselight/baselight.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baselight/baselight.html +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baselight/baselight.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basemedia/basemedia.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basemedia/basemedia.html +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basemedia/basemedia.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseradial/baseradial.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseradial/baseradial.html +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseradial/baseradial.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baserss/baserss.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baserss/baserss.html +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baserss/baserss.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseselect/baseselect.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseselect/baseselect.html +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseselect/baseselect.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseslider/baseslider.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseslider/baseslider.html +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseslider/baseslider.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseswitch/baseswitch.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseswitch/baseswitch.html +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseswitch/baseswitch.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basetemperature/basetemperature.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basetemperature/basetemperature.html +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basetemperature/basetemperature.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basetext/basetext.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basetext/basetext.html +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/basetext/basetext.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseweather/baseweather.css +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseweather/baseweather.html +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/baseweather/baseweather.js +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/binary_sensor.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/camera.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/climate.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/clock.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/cover.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/device_tracker.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/entitypicture.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/fan.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/gauge.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/group.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/heater.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/icon.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/iframe.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/input_boolean.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/input_datetime.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/input_number.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/input_select.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/input_slider.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/input_text.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/javascript.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/label.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/light.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/lock.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/london_underground.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/media_player.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/mode.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/navigate.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/person.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/pirateweather.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/radial.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/reload.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/rss.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/scene.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/script.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/sensor.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/sequence.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/switch.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/temperature.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/text_sensor.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/weather.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/widgets/weather_summary.yaml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon.egg-info/SOURCES.txt +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon.egg-info/dependency_links.txt +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon.egg-info/entry_points.txt +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon.egg-info/requires.txt +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon.egg-info/top_level.txt +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/apps/hello.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/ObjectTracker/general_app_functions.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/ObjectTracker/objectcontrole.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/alexa.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/battery.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/bysykkel.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/commute.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/dark_day.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/door_notification.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/eventCache.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/eventMonitor.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/globals.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/grandfather.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/hwcheck.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/ical.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/minimote.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/modes.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/momentary_switch.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/motion_lights.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/motion_notification.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/occusim.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/outside_lights.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/presence.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/ruter.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/secure.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/sensor_notification.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/sensor_notify.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/sequence.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/smart_heat.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/sound.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/switch_reset.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/conf/example_apps/yr.py +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/pyproject.toml +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/setup.cfg +0 -0
- {appdaemon-4.5.2 → appdaemon-4.5.4}/tests/test_main.py +0 -0
|
@@ -489,7 +489,8 @@ class ADAPI:
|
|
|
489
489
|
# Threading
|
|
490
490
|
#
|
|
491
491
|
|
|
492
|
-
|
|
492
|
+
@utils.sync_decorator
|
|
493
|
+
async def set_app_pin(self, pin: bool) -> None:
|
|
493
494
|
"""Sets an App to be pinned or unpinned.
|
|
494
495
|
|
|
495
496
|
Args:
|
|
@@ -506,7 +507,8 @@ class ADAPI:
|
|
|
506
507
|
"""
|
|
507
508
|
self.AD.app_management.set_app_pin(self.name, pin)
|
|
508
509
|
|
|
509
|
-
|
|
510
|
+
@utils.sync_decorator
|
|
511
|
+
async def get_app_pin(self) -> bool:
|
|
510
512
|
"""Finds out if the current App is currently pinned or not.
|
|
511
513
|
|
|
512
514
|
Returns:
|
|
@@ -519,7 +521,8 @@ class ADAPI:
|
|
|
519
521
|
"""
|
|
520
522
|
return self.AD.app_management.get_app_pin(self.name)
|
|
521
523
|
|
|
522
|
-
|
|
524
|
+
@utils.sync_decorator
|
|
525
|
+
async def set_pin_thread(self, thread: int) -> None:
|
|
523
526
|
"""Sets the thread that the App will be pinned to.
|
|
524
527
|
|
|
525
528
|
Args:
|
|
@@ -537,7 +540,8 @@ class ADAPI:
|
|
|
537
540
|
"""
|
|
538
541
|
self.AD.app_management.set_pin_thread(self.name, thread)
|
|
539
542
|
|
|
540
|
-
|
|
543
|
+
@utils.sync_decorator
|
|
544
|
+
async def get_pin_thread(self) -> int:
|
|
541
545
|
"""Finds out which thread the App is pinned to.
|
|
542
546
|
|
|
543
547
|
Returns:
|
|
@@ -590,7 +594,8 @@ class ADAPI:
|
|
|
590
594
|
# Keeping namespace get/set functions for legacy compatibility
|
|
591
595
|
return self.namespace
|
|
592
596
|
|
|
593
|
-
|
|
597
|
+
@utils.sync_decorator
|
|
598
|
+
async def namespace_exists(self, namespace: str) -> bool:
|
|
594
599
|
"""Check the existence of a namespace in AppDaemon.
|
|
595
600
|
|
|
596
601
|
See the `namespace documentation <APPGUIDE.html#namespaces>`__ for more information.
|
|
@@ -668,7 +673,8 @@ class ADAPI:
|
|
|
668
673
|
|
|
669
674
|
return await self.AD.state.remove_namespace(namespace)
|
|
670
675
|
|
|
671
|
-
|
|
676
|
+
@utils.sync_decorator
|
|
677
|
+
async def list_namespaces(self) -> list[str]:
|
|
672
678
|
"""Get a list of all the namespaces in AppDaemon.
|
|
673
679
|
|
|
674
680
|
Examples:
|
|
@@ -909,7 +915,8 @@ class ADAPI:
|
|
|
909
915
|
"""
|
|
910
916
|
return devices.split(",")
|
|
911
917
|
|
|
912
|
-
|
|
918
|
+
@utils.sync_decorator
|
|
919
|
+
async def get_plugin_config(self, namespace: str | None = None) -> Any:
|
|
913
920
|
"""Gets any useful metadata that the plugin may have available.
|
|
914
921
|
|
|
915
922
|
For instance, for the HASS plugin, this will return Home Assistant configuration
|
|
@@ -931,7 +938,8 @@ class ADAPI:
|
|
|
931
938
|
namespace = namespace or self.namespace
|
|
932
939
|
return self.AD.plugins.get_plugin_meta(namespace)
|
|
933
940
|
|
|
934
|
-
|
|
941
|
+
@utils.sync_decorator
|
|
942
|
+
async def friendly_name(self, entity_id: str, namespace: str | None = None) -> str:
|
|
935
943
|
"""Gets the Friendly Name of an entity.
|
|
936
944
|
|
|
937
945
|
Args:
|
|
@@ -1380,7 +1388,7 @@ class ADAPI:
|
|
|
1380
1388
|
# State
|
|
1381
1389
|
#
|
|
1382
1390
|
|
|
1383
|
-
@overload
|
|
1391
|
+
@overload # single entity
|
|
1384
1392
|
@utils.sync_decorator
|
|
1385
1393
|
async def listen_state(
|
|
1386
1394
|
self,
|
|
@@ -1399,7 +1407,7 @@ class ADAPI:
|
|
|
1399
1407
|
**kwargs: Any
|
|
1400
1408
|
) -> str: ...
|
|
1401
1409
|
|
|
1402
|
-
@overload
|
|
1410
|
+
@overload # multiple entities
|
|
1403
1411
|
@utils.sync_decorator
|
|
1404
1412
|
async def listen_state(
|
|
1405
1413
|
self,
|
|
@@ -191,10 +191,11 @@ class AppManagement:
|
|
|
191
191
|
def app_rel_path(self, app_name: str) -> Path:
|
|
192
192
|
return self.app_config.root[app_name].config_path.relative_to(self.AD.app_dir.parent)
|
|
193
193
|
|
|
194
|
-
def
|
|
194
|
+
def err_app_path(self, app_obj: object) -> Path:
|
|
195
195
|
module_path = Path(sys.modules[app_obj.__module__].__file__)
|
|
196
|
-
|
|
197
|
-
|
|
196
|
+
if module_path.is_relative_to(self.AD.app_dir.parent):
|
|
197
|
+
return module_path.relative_to(self.AD.app_dir.parent)
|
|
198
|
+
return module_path
|
|
198
199
|
|
|
199
200
|
async def init_admin_stats(self):
|
|
200
201
|
# create sensors
|
|
@@ -266,16 +267,18 @@ class AppManagement:
|
|
|
266
267
|
async def initialize_app(self, app_name: str):
|
|
267
268
|
assert app_name in self.objects, 'Something is very wrong'
|
|
268
269
|
app_obj = self.objects[app_name].object
|
|
269
|
-
|
|
270
|
+
|
|
271
|
+
# Get the path that will be used for the exception
|
|
272
|
+
err_path = self.err_app_path(app_obj)
|
|
270
273
|
|
|
271
274
|
try:
|
|
272
275
|
init_func = app_obj.initialize
|
|
273
276
|
except AttributeError:
|
|
274
|
-
raise ade.NoInitializeMethod(app_obj.__class__,
|
|
277
|
+
raise ade.NoInitializeMethod(app_obj.__class__, err_path)
|
|
275
278
|
|
|
276
279
|
signature = inspect.signature(init_func)
|
|
277
280
|
if len(signature.parameters) != 0:
|
|
278
|
-
raise ade.BadInitializeMethod(app_obj.__class__,
|
|
281
|
+
raise ade.BadInitializeMethod(app_obj.__class__, err_path, signature)
|
|
279
282
|
|
|
280
283
|
# Call its initialize function
|
|
281
284
|
await self.set_state(app_name, state="initializing")
|
|
@@ -355,8 +355,6 @@ class Entity:
|
|
|
355
355
|
|
|
356
356
|
Args:
|
|
357
357
|
service (str): The service name, without the domain (e.g "toggle")
|
|
358
|
-
return_result(bool, option): If `return_result` is provided and set to `True` AD will attempt
|
|
359
|
-
to wait for the result, and return it after execution
|
|
360
358
|
callback: The non-async callback to be executed when complete.
|
|
361
359
|
**kwargs: Each service has different parameter requirements. This argument
|
|
362
360
|
allows you to specify a comma-separated list of keyword value pairs, e.g.,
|
|
@@ -437,7 +435,7 @@ class Entity:
|
|
|
437
435
|
self.logger.warning(f"State Wait for {self.entity_id} Timed Out")
|
|
438
436
|
raise TimeOutException("The entity timed out") from e
|
|
439
437
|
finally:
|
|
440
|
-
self._async_events.pop(wait_id)
|
|
438
|
+
self._async_events.pop(wait_id, None) # Ignore if already removed
|
|
441
439
|
|
|
442
440
|
async def entity_state_changed(self, *args, wait_id: str, **kwargs) -> None:
|
|
443
441
|
"""The entity state changed"""
|
|
@@ -100,7 +100,6 @@ class HASSConfig(PluginConfig):
|
|
|
100
100
|
BeforeValidator(utils.parse_timedelta)
|
|
101
101
|
] = Field(default_factory=lambda: timedelta(seconds=10))
|
|
102
102
|
"""Default timeout for waiting for responses from the websocket connection"""
|
|
103
|
-
# return_result: bool | None = None
|
|
104
103
|
suppress_log_messages: bool = False
|
|
105
104
|
retry_secs: int = 5
|
|
106
105
|
services_sleep_time: int = 60
|
|
@@ -126,8 +126,14 @@ class PluginBase(abc.ABC):
|
|
|
126
126
|
pass
|
|
127
127
|
|
|
128
128
|
# @abc.abstractmethod
|
|
129
|
-
async def set_plugin_state(
|
|
130
|
-
|
|
129
|
+
# async def set_plugin_state(
|
|
130
|
+
# self,
|
|
131
|
+
# namespace: str,
|
|
132
|
+
# entity_id: str,
|
|
133
|
+
# state: Any | None = None,
|
|
134
|
+
# attributes: Any | None = None,
|
|
135
|
+
# ) -> dict[str, Any] | None:
|
|
136
|
+
# pass
|
|
131
137
|
|
|
132
138
|
# @abc.abstractmethod
|
|
133
139
|
async def fire_plugin_event(self):
|
|
@@ -260,7 +260,8 @@ class Hass(ADBase, ADAPI):
|
|
|
260
260
|
"""
|
|
261
261
|
return self.get_state(*args, **kwargs)
|
|
262
262
|
|
|
263
|
-
|
|
263
|
+
@utils.sync_decorator
|
|
264
|
+
async def anyone_home(self, person: bool = True, namespace: str | None = None) -> bool:
|
|
264
265
|
"""Determines if the house/apartment is occupied.
|
|
265
266
|
|
|
266
267
|
A convenience function to determine if one or more person is home. Use
|
|
@@ -285,10 +286,11 @@ class Hass(ADBase, ADAPI):
|
|
|
285
286
|
>>> do something
|
|
286
287
|
|
|
287
288
|
"""
|
|
288
|
-
details = self.get_tracker_details(person, namespace, copy=False)
|
|
289
|
+
details = await self.get_tracker_details(person, namespace, copy=False)
|
|
289
290
|
return any(state['state'] == 'home' for state in details.values())
|
|
290
291
|
|
|
291
|
-
|
|
292
|
+
@utils.sync_decorator
|
|
293
|
+
async def everyone_home(self, person: bool = True, namespace: str | None = None) -> bool:
|
|
292
294
|
"""Determine if all family's members at home.
|
|
293
295
|
|
|
294
296
|
A convenience function to determine if everyone is home. Use this in
|
|
@@ -312,10 +314,11 @@ class Hass(ADBase, ADAPI):
|
|
|
312
314
|
>>> do something
|
|
313
315
|
|
|
314
316
|
"""
|
|
315
|
-
details = self.get_tracker_details(person, namespace, copy=False)
|
|
317
|
+
details = await self.get_tracker_details(person, namespace, copy=False)
|
|
316
318
|
return all(state['state'] == 'home' for state in details.values())
|
|
317
319
|
|
|
318
|
-
|
|
320
|
+
@utils.sync_decorator
|
|
321
|
+
async def noone_home(self, person: bool = True, namespace: str | None = None) -> bool:
|
|
319
322
|
"""Determines if the house/apartment is empty.
|
|
320
323
|
|
|
321
324
|
A convenience function to determine if no people are at home. Use this
|
|
@@ -340,7 +343,7 @@ class Hass(ADBase, ADAPI):
|
|
|
340
343
|
>>> do something
|
|
341
344
|
|
|
342
345
|
"""
|
|
343
|
-
return not self.anyone_home(person, namespace)
|
|
346
|
+
return not await self.anyone_home(person, namespace)
|
|
344
347
|
|
|
345
348
|
#
|
|
346
349
|
# Built-in constraints
|
|
@@ -408,7 +411,7 @@ class Hass(ADBase, ADAPI):
|
|
|
408
411
|
case str():
|
|
409
412
|
constraints = [value]
|
|
410
413
|
|
|
411
|
-
assert isinstance(
|
|
414
|
+
assert isinstance(constraints, list) and all(isinstance(v, str) for v in constraints)
|
|
412
415
|
|
|
413
416
|
for constraint in constraints:
|
|
414
417
|
# using re.split allows for an arbitrary amount of whitespace after the comma
|
|
@@ -1340,7 +1343,7 @@ class Hass(ADBase, ADAPI):
|
|
|
1340
1343
|
# Functions that use self.render_template
|
|
1341
1344
|
|
|
1342
1345
|
@utils.sync_decorator
|
|
1343
|
-
async def render_template(self, template: str, namespace: str | None = None) -> Any:
|
|
1346
|
+
async def render_template(self, template: str, namespace: str | None = None, **kwargs) -> Any:
|
|
1344
1347
|
"""Renders a Home Assistant Template.
|
|
1345
1348
|
|
|
1346
1349
|
See the documentation for the `Template Integration <https://www.home-assistant.io/integrations/template>`__ and
|
|
@@ -1348,9 +1351,9 @@ class Hass(ADBase, ADAPI):
|
|
|
1348
1351
|
|
|
1349
1352
|
Args:
|
|
1350
1353
|
template (str): The Home Assistant template to be rendered.
|
|
1351
|
-
namespace (str, optional):
|
|
1352
|
-
`
|
|
1353
|
-
|
|
1354
|
+
namespace (str, optional): Optional namespace to use. Defaults to using the app's current namespace. See the
|
|
1355
|
+
`namespace documentation <APPGUIDE.html#namespaces>`__ for more information.
|
|
1356
|
+
**kwargs (optional): Zero or more keyword arguments that get passed to the template rendering.
|
|
1354
1357
|
|
|
1355
1358
|
Returns:
|
|
1356
1359
|
The rendered template in a native Python type.
|
|
@@ -1365,17 +1368,20 @@ class Hass(ADBase, ADAPI):
|
|
|
1365
1368
|
>>> self.render_template("{{ states('sensor.outside_temp') }}")
|
|
1366
1369
|
97.2
|
|
1367
1370
|
|
|
1371
|
+
>>> self.render_template("hello {{ name }}", variables={"name": "bob"})
|
|
1372
|
+
hello bob
|
|
1373
|
+
|
|
1368
1374
|
"""
|
|
1369
1375
|
plugin: "HassPlugin" = self.AD.plugins.get_plugin_object(
|
|
1370
1376
|
namespace or self.namespace
|
|
1371
1377
|
)
|
|
1372
|
-
result = await plugin.render_template(self.namespace, template)
|
|
1378
|
+
result = await plugin.render_template(self.namespace, template, **kwargs)
|
|
1373
1379
|
try:
|
|
1374
1380
|
return literal_eval(result)
|
|
1375
1381
|
except (SyntaxError, ValueError):
|
|
1376
1382
|
return result
|
|
1377
1383
|
|
|
1378
|
-
def _template_command(self, command: str, *args:
|
|
1384
|
+
def _template_command(self, command: str, *args: str) -> str | list[str]:
|
|
1379
1385
|
"""Internal AppDaemon function to format calling a single template command correctly."""
|
|
1380
1386
|
if len(args) == 0:
|
|
1381
1387
|
return self.render_template(f'{{{{ {command}() }}}}')
|
|
@@ -1478,6 +1484,10 @@ class Hass(ADBase, ADAPI):
|
|
|
1478
1484
|
<https://www.home-assistant.io/docs/configuration/templating/#entities-for-an-integration>`_ for more
|
|
1479
1485
|
information.
|
|
1480
1486
|
"""
|
|
1487
|
+
entities = self._template_command('integration_entities', integration)
|
|
1488
|
+
assert isinstance(entities, list) and all(isinstance(e, str) for e in entities), \
|
|
1489
|
+
'Invalid return type from integration_entities'
|
|
1490
|
+
return entities
|
|
1481
1491
|
|
|
1482
1492
|
# Labels
|
|
1483
1493
|
# https://www.home-assistant.io/docs/configuration/templating/#labels
|
|
@@ -888,7 +888,7 @@ class HassPlugin(PluginBase):
|
|
|
888
888
|
return result
|
|
889
889
|
|
|
890
890
|
@utils.warning_decorator(error_text='Unexpected error rendering template')
|
|
891
|
-
async def render_template(self, namespace: str, template: str):
|
|
891
|
+
async def render_template(self, namespace: str, template: str, **kwargs):
|
|
892
892
|
self.logger.debug(
|
|
893
893
|
"render_template() namespace=%s data=%s",
|
|
894
894
|
namespace,
|
|
@@ -897,4 +897,4 @@ class HassPlugin(PluginBase):
|
|
|
897
897
|
|
|
898
898
|
# if we get a request for not our namespace something has gone very wrong
|
|
899
899
|
assert namespace == self.namespace
|
|
900
|
-
return await self.http_method("post", "/api/template", template=template)
|
|
900
|
+
return await self.http_method("post", "/api/template", template=template, **kwargs)
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
import threading
|
|
1
3
|
import traceback
|
|
2
|
-
import bcrypt
|
|
3
4
|
import uuid
|
|
4
|
-
import threading
|
|
5
|
-
import asyncio
|
|
6
5
|
|
|
7
|
-
|
|
6
|
+
import bcrypt
|
|
7
|
+
|
|
8
8
|
import appdaemon.utils as utils
|
|
9
|
+
from appdaemon.appdaemon import AppDaemon
|
|
10
|
+
from appdaemon.exceptions import RequestHandlerException
|
|
9
11
|
from appdaemon.stream.socketio_handler import SocketIOHandler
|
|
10
|
-
from appdaemon.stream.ws_handler import WSHandler
|
|
11
12
|
from appdaemon.stream.sockjs_handler import SockJSHandler
|
|
12
|
-
from appdaemon.
|
|
13
|
+
from appdaemon.stream.ws_handler import WSHandler
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
class ADStream:
|
|
@@ -51,7 +52,7 @@ class ADStream:
|
|
|
51
52
|
rh = RequestHandler(self.AD, self, handle, request)
|
|
52
53
|
with self.handlers_lock:
|
|
53
54
|
self.handlers[handle] = rh
|
|
54
|
-
await rh.stream.run()
|
|
55
|
+
return await rh.stream.run()
|
|
55
56
|
|
|
56
57
|
async def on_disconnect(self, handle):
|
|
57
58
|
with self.handlers_lock:
|
|
@@ -98,9 +99,7 @@ class RequestHandler:
|
|
|
98
99
|
|
|
99
100
|
# Create a stream
|
|
100
101
|
#
|
|
101
|
-
self.stream = self.adstream.stream_handler.makeStream(
|
|
102
|
-
self.AD, request, on_message=self._on_message, on_disconnect=self._on_disconnect
|
|
103
|
-
)
|
|
102
|
+
self.stream = self.adstream.stream_handler.makeStream(self.AD, request, on_message=self._on_message, on_disconnect=self._on_disconnect)
|
|
104
103
|
#
|
|
105
104
|
|
|
106
105
|
async def _on_message(self, data):
|
|
@@ -331,6 +330,9 @@ class RequestHandler:
|
|
|
331
330
|
|
|
332
331
|
service_data = data["data"]
|
|
333
332
|
|
|
333
|
+
if "__name" in service_data:
|
|
334
|
+
del service_data["__name"]
|
|
335
|
+
|
|
334
336
|
return await self.AD.services.call_service(
|
|
335
337
|
namespace=data["namespace"],
|
|
336
338
|
domain=domain,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import asyncio
|
|
2
2
|
import json
|
|
3
|
+
import traceback
|
|
3
4
|
|
|
4
5
|
import aiohttp
|
|
5
6
|
from aiohttp import web
|
|
6
|
-
import asyncio
|
|
7
7
|
|
|
8
8
|
from appdaemon import utils as utils
|
|
9
9
|
|
|
@@ -24,7 +24,7 @@ class WSHandler:
|
|
|
24
24
|
# We have a connection
|
|
25
25
|
#
|
|
26
26
|
# Add handler
|
|
27
|
-
await self.ADStream.on_connect(request)
|
|
27
|
+
return await self.ADStream.on_connect(request)
|
|
28
28
|
|
|
29
29
|
def makeStream(self, ad, request, **kwargs):
|
|
30
30
|
return WSStream(ad, request, **kwargs)
|
|
@@ -76,6 +76,7 @@ class WSStream:
|
|
|
76
76
|
self.logger.debug("Closing websocket ...")
|
|
77
77
|
await self.ws.close()
|
|
78
78
|
self.logger.debug("Done")
|
|
79
|
+
return self.ws
|
|
79
80
|
|
|
80
81
|
async def sendclient(self, data):
|
|
81
82
|
try:
|
|
@@ -78,10 +78,15 @@ class Threading:
|
|
|
78
78
|
self.callback_list = []
|
|
79
79
|
|
|
80
80
|
@property
|
|
81
|
-
def pin_apps(self):
|
|
81
|
+
def pin_apps(self) -> bool:
|
|
82
82
|
"Whether each app should be pinned to a thread"
|
|
83
83
|
return self.AD.config.pin_apps
|
|
84
84
|
|
|
85
|
+
@pin_apps.setter
|
|
86
|
+
def pin_apps(self, new: bool) -> None:
|
|
87
|
+
"""Set whether each app should be pinned to a thread"""
|
|
88
|
+
self.AD.config.pin_apps = new
|
|
89
|
+
|
|
85
90
|
@property
|
|
86
91
|
def total_threads(self) -> int:
|
|
87
92
|
"""Number of threads created for apps.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{appdaemon-4.5.2 → appdaemon-4.5.4}/appdaemon/assets/fonts/materialdesignicons-webfont.woff2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|