This commit is contained in:
joBr99
2026-02-22 00:21:10 +00:00
commit e3f3858d1e
149 changed files with 84173 additions and 0 deletions

542
standalone/404.html Normal file
View File

@@ -0,0 +1,542 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Documentation for the standalone/Home Assistant add-on rewrite in nspanel-lovelace-ui.">
<meta name="author" content="Johannes Braun">
<link rel="icon" href="/nspanel-lovelace-ui/standalone/assets/images/favicon.png">
<meta name="generator" content="zensical-0.0.23">
<title>NsPanel Lovelace UI Standalone Docs</title>
<link rel="stylesheet" href="/nspanel-lovelace-ui/standalone/assets/stylesheets/modern/main.1e989742.min.css">
<link rel="stylesheet" href="/nspanel-lovelace-ui/standalone/assets/stylesheets/modern/palette.dfe2e883.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=arial,+sans-serif:300,300i,400,400i,500,500i,700,700i%7Cmonospace:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"arial, sans-serif";--md-code-font:"monospace"}</style>
<link rel="stylesheet" href="/nspanel-lovelace-ui/standalone/_assets/user.css">
<script>__md_scope=new URL("/nspanel-lovelace-ui/standalone",location),__md_hash=e=>[...e].reduce(((e,t)=>(e<<5)-e+t.charCodeAt(0)),0),__md_get=(e,t=localStorage,a=__md_scope)=>JSON.parse(t.getItem(a.pathname+"."+e)),__md_set=(e,t,a=localStorage,_=__md_scope)=>{try{a.setItem(_.pathname+"."+e,JSON.stringify(t))}catch(e){}},document.documentElement.setAttribute("data-platform",navigator.platform)</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="/nspanel-lovelace-ui/standalone/" title="NsPanel Lovelace UI Standalone Docs" class="md-header__button md-logo" aria-label="NsPanel Lovelace UI Standalone Docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-book-open" viewBox="0 0 24 24"><path d="M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-menu" viewBox="0 0 24 24"><path d="M4 5h16M4 12h16M4 19h16"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
NsPanel Lovelace UI Standalone Docs
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="none" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue" aria-hidden="true" type="radio" name="__palette" id="__palette_0">
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-search" viewBox="0 0 24 24"><path d="m21 21-4.34-4.34"/><circle cx="11" cy="11" r="8"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog" aria-label="Search">
<button type="button" class="md-search__button">
Search
</button>
</div>
<div class="md-header__source">
<a href="https://github.com/jobr99/nspanel-lovelace-ui" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
jobr99/nspanel-lovelace-ui
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="/nspanel-lovelace-ui/standalone/" title="NsPanel Lovelace UI Standalone Docs" class="md-nav__button md-logo" aria-label="NsPanel Lovelace UI Standalone Docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-book-open" viewBox="0 0 24 24"><path d="M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/></svg>
</a>
NsPanel Lovelace UI Standalone Docs
</label>
<div class="md-nav__source">
<a href="https://github.com/jobr99/nspanel-lovelace-ui" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
jobr99/nspanel-lovelace-ui
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="/nspanel-lovelace-ui/standalone/" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="/nspanel-lovelace-ui/standalone/getting-started/" class="md-nav__link">
<span class="md-ellipsis">
Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="/nspanel-lovelace-ui/standalone/configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="/nspanel-lovelace-ui/standalone/migration-appdaemon/" class="md-nav__link">
<span class="md-ellipsis">
Migration from AppDaemon
</span>
</a>
</li>
<li class="md-nav__item">
<a href="/nspanel-lovelace-ui/standalone/screensaver/" class="md-nav__link">
<span class="md-ellipsis">
Screensaver
</span>
</a>
</li>
<li class="md-nav__item">
<a href="/nspanel-lovelace-ui/standalone/cards/" class="md-nav__link">
<span class="md-ellipsis">
Cards
</span>
</a>
</li>
<li class="md-nav__item">
<a href="/nspanel-lovelace-ui/standalone/entities/" class="md-nav__link">
<span class="md-ellipsis">
Entities
</span>
</a>
</li>
<li class="md-nav__item">
<a href="/nspanel-lovelace-ui/standalone/connection-modes/" class="md-nav__link">
<span class="md-ellipsis">
Connection Modes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="/nspanel-lovelace-ui/standalone/troubleshooting/" class="md-nav__link">
<span class="md-ellipsis">
Troubleshooting
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="On this page">
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1>404 - Not found</h1>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-circle-arrow-up" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="m16 12-4-4-4 4M12 16V8"/></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Copyright © 2026 Johannes Braun
</div>
Made with
<a href="https://zensical.org/" target="_blank" rel="noopener">
Zensical
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"annotate":null,"base":"/nspanel-lovelace-ui/standalone","features":["navigation.indexes","navigation.sections","navigation.top","navigation.tracking","navigation.expand","search.highlight","search.share","search.suggest"],"search":"/nspanel-lovelace-ui/standalone/assets/javascripts/workers/search.e2d2d235.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script>
<script src="/nspanel-lovelace-ui/standalone/assets/javascripts/bundle.5fcf0de6.min.js"></script>
</body>
</html>

112
standalone/_assets/user.css Normal file
View File

@@ -0,0 +1,112 @@
/*.md-header__button.md-logo img {
width: unset;
}*/
.md-main__inner {
margin-top: unset;
}
.md-nav__title {
display: none;
}
/*.md-header,*/ .md-footer,
.md-footer-meta {
background-color: #333333;
}
/* Footer contrast fixes for Zensical/Material variants */
:root {
--md-footer-bg-color: #333333;
--md-footer-bg-color--dark: #2b2b2b;
--md-footer-fg-color: #f2f2f2;
--md-footer-fg-color--light: #ffffff;
--md-footer-fg-color--lighter: #ffffff;
}
.md-footer,
.md-footer-meta,
.md-footer * {
color: #f2f2f2;
}
.md-footer a,
.md-footer-meta a,
.md-footer .md-footer__link {
color: #ffffff;
}
.md-footer a:hover,
.md-footer-meta a:hover,
.md-footer .md-footer__link:hover {
color: #d9e7ff;
}
.md-footer .md-icon svg,
.md-footer-meta .md-icon svg {
fill: currentColor;
}
/* Zensical keeps footer content in the inner/meta containers.
Don't hide footer structure, only style it. */
.md-sidebar {
padding-top: 0px;
}
/*.md-sidebar.md-sidebar--primary {
position: unset;
}*/
.md-sidebar.md-sidebar--secondary {
padding-top: 10px;
}
.md-sidebar.md-sidebar--primary .md-sidebar__scrollwrap {
/*overflow-y: unset;*/
padding-right: 1px;
border-right: 1px solid #adadad;
}
.md-sidebar.md-sidebar--primary .md-sidebar__inner {
/*border-right: 1px solid #adadad;*/
padding-bottom: 30px;
}
.md-sidebar.md-sidebar--secondary .md-sidebar__inner {
border-left: 1px solid #adadad;
}
.md-nav__item .md-nav__list {
padding-left: 10px;
}
.md-content {
margin-top: 25px;
/*border-left: 1px solid #adadad;
border-right: 1px solid #adadad;*/
}
.md-top {
display: none;
}
.md-typeset hr {
border-bottom: 1px solid #adadad;
}
.md-typeset h1,
.md-typeset h2,
.md-typeset h3,
.md-typeset h4,
.md-typeset h5 {
font-weight: bold;
}
.md-typeset table:not([class]) td:not(:last-child),
.md-typeset table:not([class]) th:not(:last-child) {
border-right: .05rem solid var(--md-typeset-table-color);
}
ol li::marker {
font-weight: bold;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -0,0 +1,29 @@
-------------------------------------------------------------------------------
Third-Party licenses
-------------------------------------------------------------------------------
Package: clipboard@2.0.11
License: MIT
Copyright: Zeno Rocha
-------------------------------------------------------------------------------
Package: escape-html@1.0.3
License: MIT
Copyright: 2012-2013 TJ Holowaychuk
2015 Andreas Lubbe
2015 Tiancheng "Timothy" Gu
-------------------------------------------------------------------------------
Package: focus-visible@5.2.1
License: W3C
Copyright: WICG
-------------------------------------------------------------------------------
Package: rxjs@7.8.2
License: Apache-2.0
Copyright: 2015-2018 Google, Inc.,
2015-2018 Netflix, Inc.,
2015-2018 Microsoft Corp. and contributors

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

964
standalone/cards/index.html Normal file
View File

@@ -0,0 +1,964 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Documentation for the standalone/Home Assistant add-on rewrite in nspanel-lovelace-ui.">
<meta name="author" content="Johannes Braun">
<link rel="canonical" href="https://jobr99.github.io/nspanel-lovelace-ui/standalone/cards/">
<link rel="prev" href="../screensaver/">
<link rel="next" href="../entities/">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="zensical-0.0.23">
<title>Cards - NsPanel Lovelace UI Standalone Docs</title>
<link rel="stylesheet" href="../assets/stylesheets/modern/main.1e989742.min.css">
<link rel="stylesheet" href="../assets/stylesheets/modern/palette.dfe2e883.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=arial,+sans-serif:300,300i,400,400i,500,500i,700,700i%7Cmonospace:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"arial, sans-serif";--md-code-font:"monospace"}</style>
<link rel="stylesheet" href="../_assets/user.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,t)=>(e<<5)-e+t.charCodeAt(0)),0),__md_get=(e,t=localStorage,a=__md_scope)=>JSON.parse(t.getItem(a.pathname+"."+e)),__md_set=(e,t,a=localStorage,_=__md_scope)=>{try{a.setItem(_.pathname+"."+e,JSON.stringify(t))}catch(e){}},document.documentElement.setAttribute("data-platform",navigator.platform)</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#cards" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="./.." title="NsPanel Lovelace UI Standalone Docs" class="md-header__button md-logo" aria-label="NsPanel Lovelace UI Standalone Docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-book-open" viewBox="0 0 24 24"><path d="M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-menu" viewBox="0 0 24 24"><path d="M4 5h16M4 12h16M4 19h16"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
NsPanel Lovelace UI Standalone Docs
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Cards
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="none" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue" aria-hidden="true" type="radio" name="__palette" id="__palette_0">
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-search" viewBox="0 0 24 24"><path d="m21 21-4.34-4.34"/><circle cx="11" cy="11" r="8"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog" aria-label="Search">
<button type="button" class="md-search__button">
Search
</button>
</div>
<div class="md-header__source">
<a href="https://github.com/jobr99/nspanel-lovelace-ui" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
jobr99/nspanel-lovelace-ui
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="./.." title="NsPanel Lovelace UI Standalone Docs" class="md-nav__button md-logo" aria-label="NsPanel Lovelace UI Standalone Docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-book-open" viewBox="0 0 24 24"><path d="M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/></svg>
</a>
NsPanel Lovelace UI Standalone Docs
</label>
<div class="md-nav__source">
<a href="https://github.com/jobr99/nspanel-lovelace-ui" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
jobr99/nspanel-lovelace-ui
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="./.." class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../getting-started/" class="md-nav__link">
<span class="md-ellipsis">
Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../migration-appdaemon/" class="md-nav__link">
<span class="md-ellipsis">
Migration from AppDaemon
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../screensaver/" class="md-nav__link">
<span class="md-ellipsis">
Screensaver
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Cards
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="././" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Cards
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="On this page">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
On this page
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#supported-card-types" class="md-nav__link">
<span class="md-ellipsis">
Supported card types
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#common-card-keys" class="md-nav__link">
<span class="md-ellipsis">
Common card keys
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#cardentities-and-cardgrid" class="md-nav__link">
<span class="md-ellipsis">
cardEntities and cardGrid
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#cardqr" class="md-nav__link">
<span class="md-ellipsis">
cardQR
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#cardpower" class="md-nav__link">
<span class="md-ellipsis">
cardPower
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#cardmedia" class="md-nav__link">
<span class="md-ellipsis">
cardMedia
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#cardthermo" class="md-nav__link">
<span class="md-ellipsis">
cardThermo
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#cardalarm" class="md-nav__link">
<span class="md-ellipsis">
cardAlarm
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#cardunlock" class="md-nav__link">
<span class="md-ellipsis">
cardUnlock
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../entities/" class="md-nav__link">
<span class="md-ellipsis">
Entities
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../connection-modes/" class="md-nav__link">
<span class="md-ellipsis">
Connection Modes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../troubleshooting/" class="md-nav__link">
<span class="md-ellipsis">
Troubleshooting
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="On this page">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
On this page
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#supported-card-types" class="md-nav__link">
<span class="md-ellipsis">
Supported card types
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#common-card-keys" class="md-nav__link">
<span class="md-ellipsis">
Common card keys
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#cardentities-and-cardgrid" class="md-nav__link">
<span class="md-ellipsis">
cardEntities and cardGrid
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#cardqr" class="md-nav__link">
<span class="md-ellipsis">
cardQR
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#cardpower" class="md-nav__link">
<span class="md-ellipsis">
cardPower
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#cardmedia" class="md-nav__link">
<span class="md-ellipsis">
cardMedia
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#cardthermo" class="md-nav__link">
<span class="md-ellipsis">
cardThermo
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#cardalarm" class="md-nav__link">
<span class="md-ellipsis">
cardAlarm
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#cardunlock" class="md-nav__link">
<span class="md-ellipsis">
cardUnlock
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="cards">Cards<a class="headerlink" href="#cards" title="Permanent link">&para;</a></h1>
<h2 id="supported-card-types">Supported card types<a class="headerlink" href="#supported-card-types" title="Permanent link">&para;</a></h2>
<ul>
<li><code>cardEntities</code></li>
<li><code>cardGrid</code></li>
<li><code>cardQR</code></li>
<li><code>cardPower</code></li>
<li><code>cardMedia</code></li>
<li><code>cardThermo</code></li>
<li><code>cardAlarm</code></li>
<li><code>cardUnlock</code></li>
</ul>
<h2 id="common-card-keys">Common card keys<a class="headerlink" href="#common-card-keys" title="Permanent link">&para;</a></h2>
<table>
<thead>
<tr>
<th>key</th>
<th>required</th>
<th>type</th>
<th>description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>type</code></td>
<td>yes</td>
<td>string</td>
<td>Card type.</td>
</tr>
<tr>
<td><code>title</code></td>
<td>no</td>
<td>string</td>
<td>Card title.</td>
</tr>
<tr>
<td><code>key</code></td>
<td>no</td>
<td>string</td>
<td>Navigation key used by <code>navigate.&lt;key&gt;</code>.</td>
</tr>
</tbody>
</table>
<h2 id="cardentities-and-cardgrid"><code>cardEntities</code> and <code>cardGrid</code><a class="headerlink" href="#cardentities-and-cardgrid" title="Permanent link">&para;</a></h2>
<div class="highlight"><pre><span></span><code><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cardEntities</span>
<span class="w"> </span><span class="nt">title</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Main</span>
<span class="w"> </span><span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">main</span>
<span class="w"> </span><span class="nt">entities</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">entity</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">light.kitchen</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">entity</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">navigate.settings</span>
<span class="w"> </span><span class="nt">icon</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">mdi:cog</span>
</code></pre></div>
<ul>
<li><code>entities</code> is required.</li>
<li><code>cardGrid</code> auto-switches to <code>cardGrid2</code> if more than 6 entities are present.</li>
</ul>
<h2 id="cardqr"><code>cardQR</code><a class="headerlink" href="#cardqr" title="Permanent link">&para;</a></h2>
<div class="highlight"><pre><span></span><code><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cardQR</span>
<span class="w"> </span><span class="nt">title</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Guest WiFi</span>
<span class="w"> </span><span class="nt">qrCode</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;WIFI:S:myssid;T:WPA;P:mypassword;;&quot;</span>
<span class="w"> </span><span class="nt">entities</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">entity</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">iText.myssid</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">SSID</span>
<span class="w"> </span><span class="nt">icon</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">mdi:wifi</span>
</code></pre></div>
<p>Keys:</p>
<ul>
<li><code>qrCode</code> optional (default value exists, but set it explicitly)</li>
<li>supports optional <code>entity</code> / <code>entities</code></li>
</ul>
<h2 id="cardpower"><code>cardPower</code><a class="headerlink" href="#cardpower" title="Permanent link">&para;</a></h2>
<div class="highlight"><pre><span></span><code><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cardPower</span>
<span class="w"> </span><span class="nt">title</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Energy</span>
<span class="w"> </span><span class="nt">entities</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">entity</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">sensor.house_power</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">entity</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">delete</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">entity</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">sensor.solar_power</span>
</code></pre></div>
<p>Notes:</p>
<ul>
<li><code>entities</code> is required.</li>
<li><code>speed</code> key is accepted in config but currently not applied by the renderer.</li>
</ul>
<h2 id="cardmedia"><code>cardMedia</code><a class="headerlink" href="#cardmedia" title="Permanent link">&para;</a></h2>
<div class="highlight"><pre><span></span><code><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cardMedia</span>
<span class="w"> </span><span class="nt">title</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Living Room</span>
<span class="w"> </span><span class="nt">entity</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">media_player.living_room</span>
<span class="w"> </span><span class="nt">entities</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">entity</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">light.ambient</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">entity</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">switch.tv_bias_light</span>
</code></pre></div>
<p>Notes:</p>
<ul>
<li>Main media entity must exist (<code>entity</code> or first generated entity).</li>
<li>Additional <code>entities</code> are rendered as action buttons on the bottom row.</li>
</ul>
<h2 id="cardthermo"><code>cardThermo</code><a class="headerlink" href="#cardthermo" title="Permanent link">&para;</a></h2>
<div class="highlight"><pre><span></span><code><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cardThermo</span>
<span class="w"> </span><span class="nt">title</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Heating</span>
<span class="w"> </span><span class="nt">entity</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">climate.downstairs</span>
<span class="w"> </span><span class="nt">supported_modes</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">[</span><span class="s">&quot;heat&quot;</span><span class="p p-Indicator">,</span><span class="w"> </span><span class="s">&quot;off&quot;</span><span class="p p-Indicator">]</span>
</code></pre></div>
<p>Keys:</p>
<ul>
<li><code>entity</code> required</li>
<li><code>supported_modes</code> optional (filters shown HVAC mode buttons)</li>
</ul>
<h2 id="cardalarm"><code>cardAlarm</code><a class="headerlink" href="#cardalarm" title="Permanent link">&para;</a></h2>
<div class="highlight"><pre><span></span><code><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cardAlarm</span>
<span class="w"> </span><span class="nt">title</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">House Alarm</span>
<span class="w"> </span><span class="nt">entity</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">alarm_control_panel.house</span>
<span class="w"> </span><span class="nt">supported_modes</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">[</span><span class="s">&quot;arm_home&quot;</span><span class="p p-Indicator">,</span><span class="w"> </span><span class="s">&quot;arm_away&quot;</span><span class="p p-Indicator">,</span><span class="w"> </span><span class="s">&quot;arm_night&quot;</span><span class="p p-Indicator">]</span>
</code></pre></div>
<p>Keys:</p>
<ul>
<li><code>entity</code> required</li>
<li><code>supported_modes</code> optional</li>
</ul>
<h2 id="cardunlock"><code>cardUnlock</code><a class="headerlink" href="#cardunlock" title="Permanent link">&para;</a></h2>
<div class="highlight"><pre><span></span><code><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cardUnlock</span>
<span class="w"> </span><span class="nt">title</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Admin</span>
<span class="w"> </span><span class="nt">pin</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">1234</span>
<span class="w"> </span><span class="nt">destination</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">navigate.admin</span>
</code></pre></div>
<p>Keys:</p>
<ul>
<li><code>pin</code> required</li>
<li><code>destination</code> required</li>
</ul>
<p>Typical target in <code>hiddenCards</code>:</p>
<div class="highlight"><pre><span></span><code><span class="nt">hiddenCards</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cardGrid</span>
<span class="w"> </span><span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">admin</span>
<span class="w"> </span><span class="nt">title</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Admin</span>
<span class="w"> </span><span class="nt">entities</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">entity</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">switch.maintenance_mode</span>
</code></pre></div>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-circle-arrow-up" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="m16 12-4-4-4 4M12 16V8"/></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Copyright © 2026 Johannes Braun
</div>
Made with
<a href="https://zensical.org/" target="_blank" rel="noopener">
Zensical
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"annotate":null,"base":"..","features":["navigation.indexes","navigation.sections","navigation.top","navigation.tracking","navigation.expand","search.highlight","search.share","search.suggest"],"search":"../assets/javascripts/workers/search.e2d2d235.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script>
<script src="../assets/javascripts/bundle.5fcf0de6.min.js"></script>
</body>
</html>

View File

@@ -0,0 +1,950 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Documentation for the standalone/Home Assistant add-on rewrite in nspanel-lovelace-ui.">
<meta name="author" content="Johannes Braun">
<link rel="canonical" href="https://jobr99.github.io/nspanel-lovelace-ui/standalone/configuration/">
<link rel="prev" href="../getting-started/">
<link rel="next" href="../migration-appdaemon/">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="zensical-0.0.23">
<title>Configuration - NsPanel Lovelace UI Standalone Docs</title>
<link rel="stylesheet" href="../assets/stylesheets/modern/main.1e989742.min.css">
<link rel="stylesheet" href="../assets/stylesheets/modern/palette.dfe2e883.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=arial,+sans-serif:300,300i,400,400i,500,500i,700,700i%7Cmonospace:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"arial, sans-serif";--md-code-font:"monospace"}</style>
<link rel="stylesheet" href="../_assets/user.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,t)=>(e<<5)-e+t.charCodeAt(0)),0),__md_get=(e,t=localStorage,a=__md_scope)=>JSON.parse(t.getItem(a.pathname+"."+e)),__md_set=(e,t,a=localStorage,_=__md_scope)=>{try{a.setItem(_.pathname+"."+e,JSON.stringify(t))}catch(e){}},document.documentElement.setAttribute("data-platform",navigator.platform)</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#configuration" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="./.." title="NsPanel Lovelace UI Standalone Docs" class="md-header__button md-logo" aria-label="NsPanel Lovelace UI Standalone Docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-book-open" viewBox="0 0 24 24"><path d="M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-menu" viewBox="0 0 24 24"><path d="M4 5h16M4 12h16M4 19h16"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
NsPanel Lovelace UI Standalone Docs
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Configuration
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="none" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue" aria-hidden="true" type="radio" name="__palette" id="__palette_0">
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-search" viewBox="0 0 24 24"><path d="m21 21-4.34-4.34"/><circle cx="11" cy="11" r="8"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog" aria-label="Search">
<button type="button" class="md-search__button">
Search
</button>
</div>
<div class="md-header__source">
<a href="https://github.com/jobr99/nspanel-lovelace-ui" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
jobr99/nspanel-lovelace-ui
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="./.." title="NsPanel Lovelace UI Standalone Docs" class="md-nav__button md-logo" aria-label="NsPanel Lovelace UI Standalone Docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-book-open" viewBox="0 0 24 24"><path d="M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/></svg>
</a>
NsPanel Lovelace UI Standalone Docs
</label>
<div class="md-nav__source">
<a href="https://github.com/jobr99/nspanel-lovelace-ui" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
jobr99/nspanel-lovelace-ui
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="./.." class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../getting-started/" class="md-nav__link">
<span class="md-ellipsis">
Getting Started
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Configuration
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="././" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Configuration
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="On this page">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
On this page
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#top-level-keys" class="md-nav__link">
<span class="md-ellipsis">
Top-level keys
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#panel-keys-nspanelsname" class="md-nav__link">
<span class="md-ellipsis">
Panel keys (nspanels.&lt;name&gt;)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#brightness-behavior" class="md-nav__link">
<span class="md-ellipsis">
Brightness behavior
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../migration-appdaemon/" class="md-nav__link">
<span class="md-ellipsis">
Migration from AppDaemon
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../screensaver/" class="md-nav__link">
<span class="md-ellipsis">
Screensaver
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cards/" class="md-nav__link">
<span class="md-ellipsis">
Cards
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../entities/" class="md-nav__link">
<span class="md-ellipsis">
Entities
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../connection-modes/" class="md-nav__link">
<span class="md-ellipsis">
Connection Modes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../troubleshooting/" class="md-nav__link">
<span class="md-ellipsis">
Troubleshooting
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="On this page">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
On this page
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#top-level-keys" class="md-nav__link">
<span class="md-ellipsis">
Top-level keys
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#panel-keys-nspanelsname" class="md-nav__link">
<span class="md-ellipsis">
Panel keys (nspanels.&lt;name&gt;)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#brightness-behavior" class="md-nav__link">
<span class="md-ellipsis">
Brightness behavior
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="configuration">Configuration<a class="headerlink" href="#configuration" title="Permanent link">&para;</a></h1>
<p>The runtime reads one YAML file (default: <code>./panels.yaml</code>, add-on mode: <code>/config/panels.yaml</code>).</p>
<h2 id="top-level-keys">Top-level keys<a class="headerlink" href="#top-level-keys" title="Permanent link">&para;</a></h2>
<table>
<thead>
<tr>
<th>key</th>
<th>required</th>
<th>type</th>
<th>default</th>
<th>description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>nspanels</code></td>
<td>yes</td>
<td>object</td>
<td>none</td>
<td>Map of panel definitions.</td>
</tr>
<tr>
<td><code>home_assistant_address</code></td>
<td>recommended</td>
<td>string</td>
<td>none</td>
<td>Home Assistant base URL. In add-on mode it is auto-filled as <code>http://supervisor</code> if missing.</td>
</tr>
<tr>
<td><code>home_assistant_token</code></td>
<td>recommended</td>
<td>string</td>
<td>none</td>
<td>Long-lived token or Supervisor token.</td>
</tr>
<tr>
<td><code>mqtt_server</code></td>
<td>required in MQTT mode</td>
<td>string</td>
<td>from env</td>
<td>MQTT host.</td>
</tr>
<tr>
<td><code>mqtt_port</code></td>
<td>required in MQTT mode</td>
<td>int</td>
<td>from env</td>
<td>MQTT port.</td>
</tr>
<tr>
<td><code>mqtt_username</code></td>
<td>required in MQTT mode</td>
<td>string</td>
<td>from env</td>
<td>MQTT username.</td>
</tr>
<tr>
<td><code>mqtt_password</code></td>
<td>required in MQTT mode</td>
<td>string</td>
<td>from env</td>
<td>MQTT password.</td>
</tr>
<tr>
<td><code>use_ha_api</code></td>
<td>optional</td>
<td>any</td>
<td>absent</td>
<td>If present, MQTT input mode is disabled and HA event mode is used.</td>
</tr>
<tr>
<td><code>timeZone</code></td>
<td>optional</td>
<td>string</td>
<td><code>Europe/Berlin</code></td>
<td>Global fallback for panel <code>timeZone</code>.</td>
</tr>
<tr>
<td><code>hiddenCards</code></td>
<td>optional</td>
<td>list</td>
<td><code>[]</code></td>
<td>Global fallback for panel <code>hiddenCards</code>.</td>
</tr>
</tbody>
</table>
<h2 id="panel-keys-nspanelsname">Panel keys (<code>nspanels.&lt;name&gt;</code>)<a class="headerlink" href="#panel-keys-nspanelsname" title="Permanent link">&para;</a></h2>
<table>
<thead>
<tr>
<th>key</th>
<th>required</th>
<th>type</th>
<th>default</th>
<th>description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>panelRecvTopic</code></td>
<td>yes</td>
<td>string</td>
<td>none</td>
<td>Receive channel for panel events.</td>
</tr>
<tr>
<td><code>panelSendTopic</code></td>
<td>yes</td>
<td>string</td>
<td>none</td>
<td>Send channel for panel commands.</td>
</tr>
<tr>
<td><code>locale</code></td>
<td>yes</td>
<td>string</td>
<td>none</td>
<td>Locale used for translations and date formatting.</td>
</tr>
<tr>
<td><code>timeZone</code></td>
<td>recommended</td>
<td>string</td>
<td>from top-level <code>timeZone</code></td>
<td>Time zone for clock.</td>
</tr>
<tr>
<td><code>timeFormat</code></td>
<td>yes</td>
<td>string</td>
<td>none</td>
<td>Python <code>strftime</code> format.</td>
</tr>
<tr>
<td><code>dateFormat</code></td>
<td>yes</td>
<td>string</td>
<td>none</td>
<td>Babel date format (example: <code>full</code>, <code>medium</code>).</td>
</tr>
<tr>
<td><code>model</code></td>
<td>optional</td>
<td>string</td>
<td><code>eu</code></td>
<td>Panel model (<code>eu</code>, <code>us-p</code>, <code>us-l</code>).</td>
</tr>
<tr>
<td><code>temp_unit</code></td>
<td>optional</td>
<td>string</td>
<td><code>celsius</code></td>
<td>Thermostat card unit (<code>celsius</code> or <code>fahrenheit</code>).</td>
</tr>
<tr>
<td><code>sleepTimeout</code></td>
<td>optional</td>
<td>int</td>
<td><code>20</code></td>
<td>Seconds before screensaver.</td>
</tr>
<tr>
<td><code>sleepBrightness</code></td>
<td>optional</td>
<td>int or entity_id</td>
<td><code>10</code></td>
<td>Screensaver brightness.</td>
</tr>
<tr>
<td><code>screenBrightness</code></td>
<td>optional</td>
<td>int or entity_id</td>
<td><code>100</code></td>
<td>Active-screen brightness.</td>
</tr>
<tr>
<td><code>sleepTracking</code></td>
<td>optional</td>
<td>entity_id</td>
<td>none</td>
<td>Forces sleep brightness to 0 when entity state matches <code>sleepTrackingZones</code>.</td>
</tr>
<tr>
<td><code>sleepTrackingZones</code></td>
<td>optional</td>
<td>list</td>
<td><code>["not_home", "off"]</code></td>
<td>States that trigger forced dimming.</td>
</tr>
<tr>
<td><code>sleepOverride</code></td>
<td>optional</td>
<td>object</td>
<td>none</td>
<td>Override sleep brightness when entity is <code>on</code>/<code>true</code>/<code>home</code>.</td>
</tr>
<tr>
<td><code>defaultBackgroundColor</code></td>
<td>optional</td>
<td>string</td>
<td><code>ha-dark</code></td>
<td><code>ha-dark</code> or <code>black</code>.</td>
</tr>
<tr>
<td><code>featExperimentalSliders</code></td>
<td>optional</td>
<td>int</td>
<td><code>0</code></td>
<td>Forwarded in dimmode command.</td>
</tr>
<tr>
<td><code>defaultCard</code></td>
<td>optional</td>
<td>string</td>
<td>none</td>
<td>Default card when leaving screensaver (<code>navigate.&lt;key&gt;</code>).</td>
</tr>
<tr>
<td><code>screensaver</code></td>
<td>yes</td>
<td>object</td>
<td>none</td>
<td>Screensaver definition.</td>
</tr>
<tr>
<td><code>cards</code></td>
<td>yes</td>
<td>list</td>
<td>none</td>
<td>Top-level cards.</td>
</tr>
<tr>
<td><code>hiddenCards</code></td>
<td>optional</td>
<td>list</td>
<td><code>[]</code></td>
<td>Hidden cards addressable through <code>navigate.&lt;key&gt;</code>.</td>
</tr>
</tbody>
</table>
<h2 id="brightness-behavior">Brightness behavior<a class="headerlink" href="#brightness-behavior" title="Permanent link">&para;</a></h2>
<ul>
<li>Integer values are used directly.</li>
<li>Entity values read Home Assistant state and cast to number.</li>
<li>List/schedule style brightness is not supported in this rewrite.</li>
</ul>
<p>Example:</p>
<div class="highlight"><pre><span></span><code><span class="nt">sleepBrightness</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">input_number.nspanel_sleep</span>
<span class="nt">screenBrightness</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">input_number.nspanel_awake</span>
<span class="nt">sleepTracking</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">person.john</span>
<span class="nt">sleepTrackingZones</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">[</span><span class="s">&quot;not_home&quot;</span><span class="p p-Indicator">,</span><span class="w"> </span><span class="s">&quot;off&quot;</span><span class="p p-Indicator">]</span>
<span class="nt">sleepOverride</span><span class="p">:</span>
<span class="w"> </span><span class="nt">entity</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">light.bedroom</span>
<span class="w"> </span><span class="nt">brightness</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">30</span>
</code></pre></div>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-circle-arrow-up" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="m16 12-4-4-4 4M12 16V8"/></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Copyright © 2026 Johannes Braun
</div>
Made with
<a href="https://zensical.org/" target="_blank" rel="noopener">
Zensical
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"annotate":null,"base":"..","features":["navigation.indexes","navigation.sections","navigation.top","navigation.tracking","navigation.expand","search.highlight","search.share","search.suggest"],"search":"../assets/javascripts/workers/search.e2d2d235.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script>
<script src="../assets/javascripts/bundle.5fcf0de6.min.js"></script>
</body>
</html>

View File

@@ -0,0 +1,730 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Documentation for the standalone/Home Assistant add-on rewrite in nspanel-lovelace-ui.">
<meta name="author" content="Johannes Braun">
<link rel="canonical" href="https://jobr99.github.io/nspanel-lovelace-ui/standalone/connection-modes/">
<link rel="prev" href="../entities/">
<link rel="next" href="../troubleshooting/">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="zensical-0.0.23">
<title>Connection Modes - NsPanel Lovelace UI Standalone Docs</title>
<link rel="stylesheet" href="../assets/stylesheets/modern/main.1e989742.min.css">
<link rel="stylesheet" href="../assets/stylesheets/modern/palette.dfe2e883.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=arial,+sans-serif:300,300i,400,400i,500,500i,700,700i%7Cmonospace:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"arial, sans-serif";--md-code-font:"monospace"}</style>
<link rel="stylesheet" href="../_assets/user.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,t)=>(e<<5)-e+t.charCodeAt(0)),0),__md_get=(e,t=localStorage,a=__md_scope)=>JSON.parse(t.getItem(a.pathname+"."+e)),__md_set=(e,t,a=localStorage,_=__md_scope)=>{try{a.setItem(_.pathname+"."+e,JSON.stringify(t))}catch(e){}},document.documentElement.setAttribute("data-platform",navigator.platform)</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#connection-modes" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="./.." title="NsPanel Lovelace UI Standalone Docs" class="md-header__button md-logo" aria-label="NsPanel Lovelace UI Standalone Docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-book-open" viewBox="0 0 24 24"><path d="M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-menu" viewBox="0 0 24 24"><path d="M4 5h16M4 12h16M4 19h16"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
NsPanel Lovelace UI Standalone Docs
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Connection Modes
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="none" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue" aria-hidden="true" type="radio" name="__palette" id="__palette_0">
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-search" viewBox="0 0 24 24"><path d="m21 21-4.34-4.34"/><circle cx="11" cy="11" r="8"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog" aria-label="Search">
<button type="button" class="md-search__button">
Search
</button>
</div>
<div class="md-header__source">
<a href="https://github.com/jobr99/nspanel-lovelace-ui" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
jobr99/nspanel-lovelace-ui
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="./.." title="NsPanel Lovelace UI Standalone Docs" class="md-nav__button md-logo" aria-label="NsPanel Lovelace UI Standalone Docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-book-open" viewBox="0 0 24 24"><path d="M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/></svg>
</a>
NsPanel Lovelace UI Standalone Docs
</label>
<div class="md-nav__source">
<a href="https://github.com/jobr99/nspanel-lovelace-ui" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
jobr99/nspanel-lovelace-ui
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="./.." class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../getting-started/" class="md-nav__link">
<span class="md-ellipsis">
Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../migration-appdaemon/" class="md-nav__link">
<span class="md-ellipsis">
Migration from AppDaemon
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../screensaver/" class="md-nav__link">
<span class="md-ellipsis">
Screensaver
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cards/" class="md-nav__link">
<span class="md-ellipsis">
Cards
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../entities/" class="md-nav__link">
<span class="md-ellipsis">
Entities
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Connection Modes
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="././" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Connection Modes
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="On this page">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
On this page
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#1-mqtt-mode-default" class="md-nav__link">
<span class="md-ellipsis">
1) MQTT mode (default)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#2-home-assistant-api-mode-use_ha_api" class="md-nav__link">
<span class="md-ellipsis">
2) Home Assistant API mode (use_ha_api)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#common-to-both-modes" class="md-nav__link">
<span class="md-ellipsis">
Common to both modes
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../troubleshooting/" class="md-nav__link">
<span class="md-ellipsis">
Troubleshooting
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="On this page">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
On this page
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#1-mqtt-mode-default" class="md-nav__link">
<span class="md-ellipsis">
1) MQTT mode (default)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#2-home-assistant-api-mode-use_ha_api" class="md-nav__link">
<span class="md-ellipsis">
2) Home Assistant API mode (use_ha_api)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#common-to-both-modes" class="md-nav__link">
<span class="md-ellipsis">
Common to both modes
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="connection-modes">Connection Modes<a class="headerlink" href="#connection-modes" title="Permanent link">&para;</a></h1>
<p>The rewrite supports two panel input/output modes.</p>
<h2 id="1-mqtt-mode-default">1) MQTT mode (default)<a class="headerlink" href="#1-mqtt-mode-default" title="Permanent link">&para;</a></h2>
<p>Enabled when:</p>
<ul>
<li><code>mqtt_server</code> is configured</li>
<li><code>use_ha_api</code> is not present</li>
</ul>
<p>Behavior:</p>
<ul>
<li>Subscribes to every panel <code>panelRecvTopic</code></li>
<li>Expects JSON payload containing <code>CustomRecv</code></li>
<li>Publishes commands to <code>panelSendTopic</code></li>
</ul>
<p>Example receive payload:</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span><span class="nt">&quot;CustomRecv&quot;</span><span class="p">:</span><span class="s2">&quot;event,startup,54,eu&quot;</span><span class="p">}</span>
</code></pre></div>
<h2 id="2-home-assistant-api-mode-use_ha_api">2) Home Assistant API mode (<code>use_ha_api</code>)<a class="headerlink" href="#2-home-assistant-api-mode-use_ha_api" title="Permanent link">&para;</a></h2>
<p>Enabled when key <code>use_ha_api</code> exists in config.</p>
<p>Behavior:</p>
<ul>
<li>Subscribes to HA event <code>esphome.nspanel.data</code></li>
<li>Routes events by <code>device_id</code> (must match configured <code>panelRecvTopic</code>)</li>
<li>Sends panel commands by calling Home Assistant service:</li>
<li><code>&lt;panelSendTopic&gt;_nspanelui_api_call</code></li>
</ul>
<p>Service payload shape:</p>
<div class="highlight"><pre><span></span><code><span class="nt">data</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;...panel</span><span class="nv"> </span><span class="s">command...&quot;</span>
<span class="nt">command</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">2</span>
</code></pre></div>
<h2 id="common-to-both-modes">Common to both modes<a class="headerlink" href="#common-to-both-modes" title="Permanent link">&para;</a></h2>
<ul>
<li>Home Assistant websocket connection is used for entity state cache and service calls.</li>
<li>UI actions (button presses, sliders, mode selects) are translated to Home Assistant service calls.</li>
</ul>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-circle-arrow-up" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="m16 12-4-4-4 4M12 16V8"/></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Copyright © 2026 Johannes Braun
</div>
Made with
<a href="https://zensical.org/" target="_blank" rel="noopener">
Zensical
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"annotate":null,"base":"..","features":["navigation.indexes","navigation.sections","navigation.top","navigation.tracking","navigation.expand","search.highlight","search.share","search.suggest"],"search":"../assets/javascripts/workers/search.e2d2d235.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script>
<script src="../assets/javascripts/bundle.5fcf0de6.min.js"></script>
</body>
</html>

View File

@@ -0,0 +1,857 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Documentation for the standalone/Home Assistant add-on rewrite in nspanel-lovelace-ui.">
<meta name="author" content="Johannes Braun">
<link rel="canonical" href="https://jobr99.github.io/nspanel-lovelace-ui/standalone/entities/">
<link rel="prev" href="../cards/">
<link rel="next" href="../connection-modes/">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="zensical-0.0.23">
<title>Entities - NsPanel Lovelace UI Standalone Docs</title>
<link rel="stylesheet" href="../assets/stylesheets/modern/main.1e989742.min.css">
<link rel="stylesheet" href="../assets/stylesheets/modern/palette.dfe2e883.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=arial,+sans-serif:300,300i,400,400i,500,500i,700,700i%7Cmonospace:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"arial, sans-serif";--md-code-font:"monospace"}</style>
<link rel="stylesheet" href="../_assets/user.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,t)=>(e<<5)-e+t.charCodeAt(0)),0),__md_get=(e,t=localStorage,a=__md_scope)=>JSON.parse(t.getItem(a.pathname+"."+e)),__md_set=(e,t,a=localStorage,_=__md_scope)=>{try{a.setItem(_.pathname+"."+e,JSON.stringify(t))}catch(e){}},document.documentElement.setAttribute("data-platform",navigator.platform)</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#entities" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="./.." title="NsPanel Lovelace UI Standalone Docs" class="md-header__button md-logo" aria-label="NsPanel Lovelace UI Standalone Docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-book-open" viewBox="0 0 24 24"><path d="M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-menu" viewBox="0 0 24 24"><path d="M4 5h16M4 12h16M4 19h16"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
NsPanel Lovelace UI Standalone Docs
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Entities
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="none" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue" aria-hidden="true" type="radio" name="__palette" id="__palette_0">
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-search" viewBox="0 0 24 24"><path d="m21 21-4.34-4.34"/><circle cx="11" cy="11" r="8"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog" aria-label="Search">
<button type="button" class="md-search__button">
Search
</button>
</div>
<div class="md-header__source">
<a href="https://github.com/jobr99/nspanel-lovelace-ui" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
jobr99/nspanel-lovelace-ui
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="./.." title="NsPanel Lovelace UI Standalone Docs" class="md-nav__button md-logo" aria-label="NsPanel Lovelace UI Standalone Docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-book-open" viewBox="0 0 24 24"><path d="M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/></svg>
</a>
NsPanel Lovelace UI Standalone Docs
</label>
<div class="md-nav__source">
<a href="https://github.com/jobr99/nspanel-lovelace-ui" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
jobr99/nspanel-lovelace-ui
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="./.." class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../getting-started/" class="md-nav__link">
<span class="md-ellipsis">
Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../migration-appdaemon/" class="md-nav__link">
<span class="md-ellipsis">
Migration from AppDaemon
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../screensaver/" class="md-nav__link">
<span class="md-ellipsis">
Screensaver
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cards/" class="md-nav__link">
<span class="md-ellipsis">
Cards
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Entities
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="././" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Entities
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="On this page">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
On this page
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#entity-keys" class="md-nav__link">
<span class="md-ellipsis">
Entity keys
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#supported-home-assistant-domains" class="md-nav__link">
<span class="md-ellipsis">
Supported Home Assistant domains
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#internal-entities" class="md-nav__link">
<span class="md-ellipsis">
Internal entities
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#template-based-values" class="md-nav__link">
<span class="md-ellipsis">
Template-based values
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../connection-modes/" class="md-nav__link">
<span class="md-ellipsis">
Connection Modes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../troubleshooting/" class="md-nav__link">
<span class="md-ellipsis">
Troubleshooting
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="On this page">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
On this page
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#entity-keys" class="md-nav__link">
<span class="md-ellipsis">
Entity keys
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#supported-home-assistant-domains" class="md-nav__link">
<span class="md-ellipsis">
Supported Home Assistant domains
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#internal-entities" class="md-nav__link">
<span class="md-ellipsis">
Internal entities
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#template-based-values" class="md-nav__link">
<span class="md-ellipsis">
Template-based values
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="entities">Entities<a class="headerlink" href="#entities" title="Permanent link">&para;</a></h1>
<p>Entities are used in cards and screensaver lists.</p>
<h2 id="entity-keys">Entity keys<a class="headerlink" href="#entity-keys" title="Permanent link">&para;</a></h2>
<table>
<thead>
<tr>
<th>key</th>
<th>required</th>
<th>type</th>
<th>description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>entity</code></td>
<td>yes</td>
<td>string</td>
<td>Home Assistant entity id, or internal entity (<code>navigate.*</code>, <code>delete</code>, <code>iText.*</code>).</td>
</tr>
<tr>
<td><code>name</code></td>
<td>no</td>
<td>string</td>
<td>Display name override.</td>
</tr>
<tr>
<td><code>icon</code></td>
<td>no</td>
<td>string or map</td>
<td>Icon override (<code>mdi:*</code>), optionally per state.</td>
</tr>
<tr>
<td><code>color</code></td>
<td>no</td>
<td><code>[r,g,b]</code> or map</td>
<td>Color override, optionally per state.</td>
</tr>
<tr>
<td><code>value</code></td>
<td>no</td>
<td>string</td>
<td>Value override.</td>
</tr>
<tr>
<td><code>font</code></td>
<td>no</td>
<td>string</td>
<td>Icon font variant (<code>small</code>, <code>medium</code>, <code>medium-icon</code>, <code>large</code>).</td>
</tr>
<tr>
<td><code>status</code></td>
<td>no</td>
<td>string</td>
<td>Extra status entity for <code>navigate.*</code> items.</td>
</tr>
<tr>
<td><code>effectList</code></td>
<td>no</td>
<td>list</td>
<td>Custom light effect list for detail popup.</td>
</tr>
<tr>
<td><code>attribute</code></td>
<td>no</td>
<td>string</td>
<td>Weather attribute to display.</td>
</tr>
<tr>
<td><code>day</code></td>
<td>no</td>
<td>int</td>
<td>Weather daily forecast index.</td>
</tr>
<tr>
<td><code>hour</code></td>
<td>no</td>
<td>int</td>
<td>Weather hourly forecast index.</td>
</tr>
<tr>
<td><code>unit</code></td>
<td>no</td>
<td>string</td>
<td>Value suffix.</td>
</tr>
</tbody>
</table>
<h2 id="supported-home-assistant-domains">Supported Home Assistant domains<a class="headerlink" href="#supported-home-assistant-domains" title="Permanent link">&para;</a></h2>
<ul>
<li><code>switch</code></li>
<li><code>input_boolean</code></li>
<li><code>automation</code></li>
<li><code>lock</code></li>
<li><code>input_text</code></li>
<li><code>input_select</code></li>
<li><code>select</code></li>
<li><code>light</code></li>
<li><code>fan</code></li>
<li><code>button</code></li>
<li><code>input_button</code></li>
<li><code>scene</code></li>
<li><code>script</code></li>
<li><code>number</code></li>
<li><code>input_number</code></li>
<li><code>timer</code></li>
<li><code>alarm_control_panel</code></li>
<li><code>vacuum</code></li>
<li><code>media_player</code></li>
<li><code>sun</code></li>
<li><code>person</code></li>
<li><code>climate</code></li>
<li><code>cover</code></li>
<li><code>sensor</code></li>
<li><code>binary_sensor</code></li>
<li><code>weather</code></li>
</ul>
<h2 id="internal-entities">Internal entities<a class="headerlink" href="#internal-entities" title="Permanent link">&para;</a></h2>
<ul>
<li><code>navigate.&lt;key&gt;</code>: Navigate to card with matching <code>key</code>.</li>
<li><code>navigate.UP</code>: Navigate back.</li>
<li><code>delete</code>: Placeholder/empty slot.</li>
<li><code>iText.&lt;text&gt;</code>: Static text entry.</li>
</ul>
<h2 id="template-based-values">Template-based values<a class="headerlink" href="#template-based-values" title="Permanent link">&para;</a></h2>
<p>The rewrite supports Home Assistant template rendering for selected fields when prefixed with <code>ha:</code>:</p>
<ul>
<li><code>icon: "ha:{{ ... }}"</code></li>
<li><code>color: "ha:{{ ... }}"</code> (must evaluate to JSON RGB list)</li>
<li><code>value: "ha:{{ ... }}"</code></li>
<li><code>qrCode: "ha:{{ ... }}"</code></li>
</ul>
<p>Example:</p>
<div class="highlight"><pre><span></span><code><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">entity</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">light.kitchen</span>
<span class="w"> </span><span class="nt">icon</span><span class="p">:</span>
<span class="w"> </span><span class="s">&quot;on&quot;</span><span class="p p-Indicator">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">mdi:lightbulb</span>
<span class="w"> </span><span class="s">&quot;off&quot;</span><span class="p p-Indicator">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">mdi:lightbulb-outline</span>
<span class="w"> </span><span class="nt">color</span><span class="p">:</span>
<span class="w"> </span><span class="s">&quot;on&quot;</span><span class="p p-Indicator">:</span><span class="w"> </span><span class="p p-Indicator">[</span><span class="nv">255</span><span class="p p-Indicator">,</span><span class="w"> </span><span class="nv">210</span><span class="p p-Indicator">,</span><span class="w"> </span><span class="nv">90</span><span class="p p-Indicator">]</span>
<span class="w"> </span><span class="s">&quot;off&quot;</span><span class="p p-Indicator">:</span><span class="w"> </span><span class="p p-Indicator">[</span><span class="nv">80</span><span class="p p-Indicator">,</span><span class="w"> </span><span class="nv">120</span><span class="p p-Indicator">,</span><span class="w"> </span><span class="nv">170</span><span class="p p-Indicator">]</span>
</code></pre></div>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-circle-arrow-up" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="m16 12-4-4-4 4M12 16V8"/></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Copyright © 2026 Johannes Braun
</div>
Made with
<a href="https://zensical.org/" target="_blank" rel="noopener">
Zensical
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"annotate":null,"base":"..","features":["navigation.indexes","navigation.sections","navigation.top","navigation.tracking","navigation.expand","search.highlight","search.share","search.suggest"],"search":"../assets/javascripts/workers/search.e2d2d235.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script>
<script src="../assets/javascripts/bundle.5fcf0de6.min.js"></script>
</body>
</html>

View File

@@ -0,0 +1,766 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Documentation for the standalone/Home Assistant add-on rewrite in nspanel-lovelace-ui.">
<meta name="author" content="Johannes Braun">
<link rel="canonical" href="https://jobr99.github.io/nspanel-lovelace-ui/standalone/getting-started/">
<link rel="prev" href="./..">
<link rel="next" href="../configuration/">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="zensical-0.0.23">
<title>Getting Started - NsPanel Lovelace UI Standalone Docs</title>
<link rel="stylesheet" href="../assets/stylesheets/modern/main.1e989742.min.css">
<link rel="stylesheet" href="../assets/stylesheets/modern/palette.dfe2e883.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=arial,+sans-serif:300,300i,400,400i,500,500i,700,700i%7Cmonospace:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"arial, sans-serif";--md-code-font:"monospace"}</style>
<link rel="stylesheet" href="../_assets/user.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,t)=>(e<<5)-e+t.charCodeAt(0)),0),__md_get=(e,t=localStorage,a=__md_scope)=>JSON.parse(t.getItem(a.pathname+"."+e)),__md_set=(e,t,a=localStorage,_=__md_scope)=>{try{a.setItem(_.pathname+"."+e,JSON.stringify(t))}catch(e){}},document.documentElement.setAttribute("data-platform",navigator.platform)</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#getting-started" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="./.." title="NsPanel Lovelace UI Standalone Docs" class="md-header__button md-logo" aria-label="NsPanel Lovelace UI Standalone Docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-book-open" viewBox="0 0 24 24"><path d="M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-menu" viewBox="0 0 24 24"><path d="M4 5h16M4 12h16M4 19h16"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
NsPanel Lovelace UI Standalone Docs
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Getting Started
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="none" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue" aria-hidden="true" type="radio" name="__palette" id="__palette_0">
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-search" viewBox="0 0 24 24"><path d="m21 21-4.34-4.34"/><circle cx="11" cy="11" r="8"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog" aria-label="Search">
<button type="button" class="md-search__button">
Search
</button>
</div>
<div class="md-header__source">
<a href="https://github.com/jobr99/nspanel-lovelace-ui" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
jobr99/nspanel-lovelace-ui
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="./.." title="NsPanel Lovelace UI Standalone Docs" class="md-nav__button md-logo" aria-label="NsPanel Lovelace UI Standalone Docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-book-open" viewBox="0 0 24 24"><path d="M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/></svg>
</a>
NsPanel Lovelace UI Standalone Docs
</label>
<div class="md-nav__source">
<a href="https://github.com/jobr99/nspanel-lovelace-ui" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
jobr99/nspanel-lovelace-ui
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="./.." class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Getting Started
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="././" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Getting Started
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="On this page">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
On this page
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#home-assistant-add-on-mode" class="md-nav__link">
<span class="md-ellipsis">
Home Assistant add-on mode
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#minimal-panelsyaml" class="md-nav__link">
<span class="md-ellipsis">
Minimal panels.yaml
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#important-notes" class="md-nav__link">
<span class="md-ellipsis">
Important notes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#running-standalone-outside-ha-add-on" class="md-nav__link">
<span class="md-ellipsis">
Running standalone (outside HA add-on)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../migration-appdaemon/" class="md-nav__link">
<span class="md-ellipsis">
Migration from AppDaemon
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../screensaver/" class="md-nav__link">
<span class="md-ellipsis">
Screensaver
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cards/" class="md-nav__link">
<span class="md-ellipsis">
Cards
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../entities/" class="md-nav__link">
<span class="md-ellipsis">
Entities
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../connection-modes/" class="md-nav__link">
<span class="md-ellipsis">
Connection Modes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../troubleshooting/" class="md-nav__link">
<span class="md-ellipsis">
Troubleshooting
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="On this page">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
On this page
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#home-assistant-add-on-mode" class="md-nav__link">
<span class="md-ellipsis">
Home Assistant add-on mode
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#minimal-panelsyaml" class="md-nav__link">
<span class="md-ellipsis">
Minimal panels.yaml
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#important-notes" class="md-nav__link">
<span class="md-ellipsis">
Important notes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#running-standalone-outside-ha-add-on" class="md-nav__link">
<span class="md-ellipsis">
Running standalone (outside HA add-on)
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="getting-started">Getting Started<a class="headerlink" href="#getting-started" title="Permanent link">&para;</a></h1>
<h2 id="home-assistant-add-on-mode">Home Assistant add-on mode<a class="headerlink" href="#home-assistant-add-on-mode" title="Permanent link">&para;</a></h2>
<p>In add-on mode, the container startup script:</p>
<ul>
<li>reads MQTT credentials from Home Assistant service discovery</li>
<li>sets <code>CONFIG_FILE=/config/panels.yaml</code></li>
<li>creates <code>/config/panels.yaml</code> from the bundled example if it does not exist</li>
</ul>
<p>Relevant files:</p>
<ul>
<li><code>nspanel-lovelace-ui/rootfs/usr/bin/mqtt-manager/run.sh</code></li>
<li><code>nspanel-lovelace-ui/config.yaml</code></li>
</ul>
<h2 id="minimal-panelsyaml">Minimal <code>panels.yaml</code><a class="headerlink" href="#minimal-panelsyaml" title="Permanent link">&para;</a></h2>
<p>Start with one panel:</p>
<div class="highlight"><pre><span></span><code><span class="nt">home_assistant_address</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;http://supervisor&quot;</span>
<span class="nt">home_assistant_token</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;SUPERVISOR_TOKEN_OR_LONG_LIVED_TOKEN&quot;</span>
<span class="nt">nspanels</span><span class="p">:</span>
<span class="w"> </span><span class="nt">kitchen</span><span class="p">:</span>
<span class="w"> </span><span class="nt">panelRecvTopic</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;tele/tasmota_kitchen/RESULT&quot;</span>
<span class="w"> </span><span class="nt">panelSendTopic</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;cmnd/tasmota_kitchen/CustomSend&quot;</span>
<span class="w"> </span><span class="nt">locale</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;en_US&quot;</span>
<span class="w"> </span><span class="nt">timeZone</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;Europe/Berlin&quot;</span>
<span class="w"> </span><span class="nt">timeFormat</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;%H:%M&quot;</span>
<span class="w"> </span><span class="nt">dateFormat</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;full&quot;</span>
<span class="w"> </span><span class="nt">screensaver</span><span class="p">:</span>
<span class="w"> </span><span class="nt">entities</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">entity</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">weather.home</span>
<span class="w"> </span><span class="nt">cards</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cardEntities</span>
<span class="w"> </span><span class="nt">title</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Main</span>
<span class="w"> </span><span class="nt">entities</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">entity</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">light.kitchen</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">entity</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">switch.coffee_machine</span>
</code></pre></div>
<h2 id="important-notes">Important notes<a class="headerlink" href="#important-notes" title="Permanent link">&para;</a></h2>
<ul>
<li><code>cards</code> and <code>screensaver</code> are required per panel.</li>
<li><code>timeFormat</code>, <code>dateFormat</code>, and <code>locale</code> should be set per panel.</li>
<li><code>panelRecvTopic</code> / <code>panelSendTopic</code> are required.</li>
</ul>
<h2 id="running-standalone-outside-ha-add-on">Running standalone (outside HA add-on)<a class="headerlink" href="#running-standalone-outside-ha-add-on" title="Permanent link">&para;</a></h2>
<p>If you run this container/process outside Supervisor:</p>
<ul>
<li>provide <code>home_assistant_address</code> and <code>home_assistant_token</code> in YAML</li>
<li>provide MQTT values in YAML (<code>mqtt_server</code>, <code>mqtt_port</code>, <code>mqtt_username</code>, <code>mqtt_password</code>) or environment</li>
<li>set <code>CONFIG_FILE</code> if the config is not <code>./panels.yaml</code></li>
</ul>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-circle-arrow-up" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="m16 12-4-4-4 4M12 16V8"/></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Copyright © 2026 Johannes Braun
</div>
Made with
<a href="https://zensical.org/" target="_blank" rel="noopener">
Zensical
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"annotate":null,"base":"..","features":["navigation.indexes","navigation.sections","navigation.top","navigation.tracking","navigation.expand","search.highlight","search.share","search.suggest"],"search":"../assets/javascripts/workers/search.e2d2d235.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script>
<script src="../assets/javascripts/bundle.5fcf0de6.min.js"></script>
</body>
</html>

729
standalone/index.html Normal file
View File

@@ -0,0 +1,729 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Documentation for the standalone/Home Assistant add-on rewrite in nspanel-lovelace-ui.">
<meta name="author" content="Johannes Braun">
<link rel="canonical" href="https://jobr99.github.io/nspanel-lovelace-ui/standalone/">
<link rel="next" href="./getting-started/">
<link rel="icon" href="./assets/images/favicon.png">
<meta name="generator" content="zensical-0.0.23">
<title>Overview - NsPanel Lovelace UI Standalone Docs</title>
<link rel="stylesheet" href="./assets/stylesheets/modern/main.1e989742.min.css">
<link rel="stylesheet" href="./assets/stylesheets/modern/palette.dfe2e883.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=arial,+sans-serif:300,300i,400,400i,500,500i,700,700i%7Cmonospace:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"arial, sans-serif";--md-code-font:"monospace"}</style>
<link rel="stylesheet" href="./_assets/user.css">
<script>__md_scope=new URL(".",location),__md_hash=e=>[...e].reduce(((e,t)=>(e<<5)-e+t.charCodeAt(0)),0),__md_get=(e,t=localStorage,a=__md_scope)=>JSON.parse(t.getItem(a.pathname+"."+e)),__md_set=(e,t,a=localStorage,_=__md_scope)=>{try{a.setItem(_.pathname+"."+e,JSON.stringify(t))}catch(e){}},document.documentElement.setAttribute("data-platform",navigator.platform)</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#overview" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="./." title="NsPanel Lovelace UI Standalone Docs" class="md-header__button md-logo" aria-label="NsPanel Lovelace UI Standalone Docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-book-open" viewBox="0 0 24 24"><path d="M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-menu" viewBox="0 0 24 24"><path d="M4 5h16M4 12h16M4 19h16"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
NsPanel Lovelace UI Standalone Docs
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Overview
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="none" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue" aria-hidden="true" type="radio" name="__palette" id="__palette_0">
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-search" viewBox="0 0 24 24"><path d="m21 21-4.34-4.34"/><circle cx="11" cy="11" r="8"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog" aria-label="Search">
<button type="button" class="md-search__button">
Search
</button>
</div>
<div class="md-header__source">
<a href="https://github.com/jobr99/nspanel-lovelace-ui" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
jobr99/nspanel-lovelace-ui
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="./." title="NsPanel Lovelace UI Standalone Docs" class="md-nav__button md-logo" aria-label="NsPanel Lovelace UI Standalone Docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-book-open" viewBox="0 0 24 24"><path d="M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/></svg>
</a>
NsPanel Lovelace UI Standalone Docs
</label>
<div class="md-nav__source">
<a href="https://github.com/jobr99/nspanel-lovelace-ui" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
jobr99/nspanel-lovelace-ui
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Overview
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./." class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Overview
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="On this page">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
On this page
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#rewrite-location" class="md-nav__link">
<span class="md-ellipsis">
Rewrite location
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#what-is-supported" class="md-nav__link">
<span class="md-ellipsis">
What is supported
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#runtime-model" class="md-nav__link">
<span class="md-ellipsis">
Runtime model
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="./getting-started/" class="md-nav__link">
<span class="md-ellipsis">
Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="./configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="./migration-appdaemon/" class="md-nav__link">
<span class="md-ellipsis">
Migration from AppDaemon
</span>
</a>
</li>
<li class="md-nav__item">
<a href="./screensaver/" class="md-nav__link">
<span class="md-ellipsis">
Screensaver
</span>
</a>
</li>
<li class="md-nav__item">
<a href="./cards/" class="md-nav__link">
<span class="md-ellipsis">
Cards
</span>
</a>
</li>
<li class="md-nav__item">
<a href="./entities/" class="md-nav__link">
<span class="md-ellipsis">
Entities
</span>
</a>
</li>
<li class="md-nav__item">
<a href="./connection-modes/" class="md-nav__link">
<span class="md-ellipsis">
Connection Modes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="./troubleshooting/" class="md-nav__link">
<span class="md-ellipsis">
Troubleshooting
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="On this page">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
On this page
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#rewrite-location" class="md-nav__link">
<span class="md-ellipsis">
Rewrite location
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#what-is-supported" class="md-nav__link">
<span class="md-ellipsis">
What is supported
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#runtime-model" class="md-nav__link">
<span class="md-ellipsis">
Runtime model
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="overview">Overview<a class="headerlink" href="#overview" title="Permanent link">&para;</a></h1>
<p>This documentation covers the standalone rewrite located in <code>nspanel-lovelace-ui/</code>.</p>
<p>It is a Python backend that:</p>
<ul>
<li>receives panel input (MQTT mode or Home Assistant API mode)</li>
<li>reads Home Assistant state through the websocket API</li>
<li>renders cards and screensaver pages</li>
<li>sends panel commands back to the device</li>
</ul>
<p>This docs set is intentionally separate from the AppDaemon docs in <code>docs/</code>.</p>
<h2 id="rewrite-location">Rewrite location<a class="headerlink" href="#rewrite-location" title="Permanent link">&para;</a></h2>
<ul>
<li>Add-on package: <code>nspanel-lovelace-ui/</code></li>
<li>Runtime code: <code>nspanel-lovelace-ui/rootfs/usr/bin/mqtt-manager/</code></li>
<li>Example panel config: <code>nspanel-lovelace-ui/rootfs/usr/bin/mqtt-manager/panels.yaml.example</code></li>
</ul>
<h2 id="what-is-supported">What is supported<a class="headerlink" href="#what-is-supported" title="Permanent link">&para;</a></h2>
<ul>
<li><code>cardEntities</code></li>
<li><code>cardGrid</code> (auto-switches to <code>cardGrid2</code> when needed)</li>
<li><code>cardQR</code></li>
<li><code>cardPower</code></li>
<li><code>cardMedia</code></li>
<li><code>cardThermo</code></li>
<li><code>cardAlarm</code></li>
<li><code>cardUnlock</code></li>
<li>screensaver with status icons and weather forecast entities</li>
</ul>
<h2 id="runtime-model">Runtime model<a class="headerlink" href="#runtime-model" title="Permanent link">&para;</a></h2>
<ol>
<li>Load <code>panels.yaml</code>.</li>
<li>Resolve MQTT and Home Assistant connection settings.</li>
<li>Create one thread per panel.</li>
<li>Listen for events and state changes.</li>
<li>Re-render active pages and detail popups when relevant entities change.</li>
</ol>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-circle-arrow-up" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="m16 12-4-4-4 4M12 16V8"/></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Copyright © 2026 Johannes Braun
</div>
Made with
<a href="https://zensical.org/" target="_blank" rel="noopener">
Zensical
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"annotate":null,"base":".","features":["navigation.indexes","navigation.sections","navigation.top","navigation.tracking","navigation.expand","search.highlight","search.share","search.suggest"],"search":"./assets/javascripts/workers/search.e2d2d235.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script>
<script src="./assets/javascripts/bundle.5fcf0de6.min.js"></script>
</body>
</html>

View File

@@ -0,0 +1,956 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Documentation for the standalone/Home Assistant add-on rewrite in nspanel-lovelace-ui.">
<meta name="author" content="Johannes Braun">
<link rel="canonical" href="https://jobr99.github.io/nspanel-lovelace-ui/standalone/migration-appdaemon/">
<link rel="prev" href="../configuration/">
<link rel="next" href="../screensaver/">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="zensical-0.0.23">
<title>Migration from AppDaemon Config - NsPanel Lovelace UI Standalone Docs</title>
<link rel="stylesheet" href="../assets/stylesheets/modern/main.1e989742.min.css">
<link rel="stylesheet" href="../assets/stylesheets/modern/palette.dfe2e883.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=arial,+sans-serif:300,300i,400,400i,500,500i,700,700i%7Cmonospace:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"arial, sans-serif";--md-code-font:"monospace"}</style>
<link rel="stylesheet" href="../_assets/user.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,t)=>(e<<5)-e+t.charCodeAt(0)),0),__md_get=(e,t=localStorage,a=__md_scope)=>JSON.parse(t.getItem(a.pathname+"."+e)),__md_set=(e,t,a=localStorage,_=__md_scope)=>{try{a.setItem(_.pathname+"."+e,JSON.stringify(t))}catch(e){}},document.documentElement.setAttribute("data-platform",navigator.platform)</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#migration-from-appdaemon-config" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="./.." title="NsPanel Lovelace UI Standalone Docs" class="md-header__button md-logo" aria-label="NsPanel Lovelace UI Standalone Docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-book-open" viewBox="0 0 24 24"><path d="M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-menu" viewBox="0 0 24 24"><path d="M4 5h16M4 12h16M4 19h16"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
NsPanel Lovelace UI Standalone Docs
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Migration from AppDaemon Config
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="none" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue" aria-hidden="true" type="radio" name="__palette" id="__palette_0">
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-search" viewBox="0 0 24 24"><path d="m21 21-4.34-4.34"/><circle cx="11" cy="11" r="8"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog" aria-label="Search">
<button type="button" class="md-search__button">
Search
</button>
</div>
<div class="md-header__source">
<a href="https://github.com/jobr99/nspanel-lovelace-ui" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
jobr99/nspanel-lovelace-ui
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="./.." title="NsPanel Lovelace UI Standalone Docs" class="md-nav__button md-logo" aria-label="NsPanel Lovelace UI Standalone Docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-book-open" viewBox="0 0 24 24"><path d="M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/></svg>
</a>
NsPanel Lovelace UI Standalone Docs
</label>
<div class="md-nav__source">
<a href="https://github.com/jobr99/nspanel-lovelace-ui" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
jobr99/nspanel-lovelace-ui
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="./.." class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../getting-started/" class="md-nav__link">
<span class="md-ellipsis">
Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Migration from AppDaemon
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="././" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Migration from AppDaemon
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="On this page">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
On this page
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#file-and-structure-changes" class="md-nav__link">
<span class="md-ellipsis">
File and structure changes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#minimal-beforeafter-example" class="md-nav__link">
<span class="md-ellipsis">
Minimal before/after example
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#key-mapping" class="md-nav__link">
<span class="md-ellipsis">
Key mapping
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#connection-config-differences" class="md-nav__link">
<span class="md-ellipsis">
Connection config differences
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#entity-level-differences-to-watch" class="md-nav__link">
<span class="md-ellipsis">
Entity-level differences to watch
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#migration-checklist" class="md-nav__link">
<span class="md-ellipsis">
Migration checklist
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../screensaver/" class="md-nav__link">
<span class="md-ellipsis">
Screensaver
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cards/" class="md-nav__link">
<span class="md-ellipsis">
Cards
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../entities/" class="md-nav__link">
<span class="md-ellipsis">
Entities
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../connection-modes/" class="md-nav__link">
<span class="md-ellipsis">
Connection Modes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../troubleshooting/" class="md-nav__link">
<span class="md-ellipsis">
Troubleshooting
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="On this page">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
On this page
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#file-and-structure-changes" class="md-nav__link">
<span class="md-ellipsis">
File and structure changes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#minimal-beforeafter-example" class="md-nav__link">
<span class="md-ellipsis">
Minimal before/after example
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#key-mapping" class="md-nav__link">
<span class="md-ellipsis">
Key mapping
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#connection-config-differences" class="md-nav__link">
<span class="md-ellipsis">
Connection config differences
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#entity-level-differences-to-watch" class="md-nav__link">
<span class="md-ellipsis">
Entity-level differences to watch
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#migration-checklist" class="md-nav__link">
<span class="md-ellipsis">
Migration checklist
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="migration-from-appdaemon-config">Migration from AppDaemon Config<a class="headerlink" href="#migration-from-appdaemon-config" title="Permanent link">&para;</a></h1>
<p>This page explains how to migrate panel configuration from the legacy AppDaemon <code>apps.yaml</code> format to the standalone rewrite <code>panels.yaml</code> format.</p>
<h2 id="file-and-structure-changes">File and structure changes<a class="headerlink" href="#file-and-structure-changes" title="Permanent link">&para;</a></h2>
<p>Old (AppDaemon):</p>
<ul>
<li>panel config lived under <code>apps.yaml</code></li>
<li>MQTT and Home Assistant base connection config was split across AppDaemon files (<code>appdaemon.yaml</code>, plugin config, and app config)</li>
</ul>
<p>New (rewrite):</p>
<ul>
<li>panel config lives in one file: <code>panels.yaml</code> (usually <code>/config/panels.yaml</code>)</li>
<li>connection values are read from this file and/or environment variables</li>
</ul>
<h2 id="minimal-beforeafter-example">Minimal before/after example<a class="headerlink" href="#minimal-beforeafter-example" title="Permanent link">&para;</a></h2>
<p>Old AppDaemon (<code>apps.yaml</code>):</p>
<div class="highlight"><pre><span></span><code><span class="nt">nspanel-1</span><span class="p">:</span>
<span class="w"> </span><span class="nt">module</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">nspanel-lovelace-ui</span>
<span class="w"> </span><span class="nt">class</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">NsPanelLovelaceUIManager</span>
<span class="w"> </span><span class="nt">config</span><span class="p">:</span>
<span class="w"> </span><span class="nt">panelRecvTopic</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;tele/tasmota_panel/RESULT&quot;</span>
<span class="w"> </span><span class="nt">panelSendTopic</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;cmnd/tasmota_panel/CustomSend&quot;</span>
<span class="w"> </span><span class="nt">model</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">eu</span>
<span class="w"> </span><span class="nt">locale</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">en_US</span>
<span class="w"> </span><span class="nt">timeFormat</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;%H:%M&quot;</span>
</code></pre></div>
<p>New rewrite (<code>panels.yaml</code>):</p>
<div class="highlight"><pre><span></span><code><span class="nt">home_assistant_address</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;http://supervisor&quot;</span>
<span class="nt">home_assistant_token</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;YOUR_TOKEN&quot;</span>
<span class="nt">nspanels</span><span class="p">:</span>
<span class="w"> </span><span class="nt">panel-1</span><span class="p">:</span>
<span class="w"> </span><span class="nt">panelRecvTopic</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;tele/tasmota_panel/RESULT&quot;</span>
<span class="w"> </span><span class="nt">panelSendTopic</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;cmnd/tasmota_panel/CustomSend&quot;</span>
<span class="w"> </span><span class="nt">model</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">eu</span>
<span class="w"> </span><span class="nt">locale</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">en_US</span>
<span class="w"> </span><span class="nt">timeZone</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;Europe/Berlin&quot;</span>
<span class="w"> </span><span class="nt">timeFormat</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;%H:%M&quot;</span>
<span class="w"> </span><span class="nt">dateFormat</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;full&quot;</span>
<span class="w"> </span><span class="nt">screensaver</span><span class="p">:</span>
<span class="w"> </span><span class="nt">entities</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">entity</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">weather.home</span>
<span class="w"> </span><span class="nt">cards</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cardEntities</span>
<span class="w"> </span><span class="nt">title</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Main</span>
<span class="w"> </span><span class="nt">entities</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">entity</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">light.kitchen</span>
</code></pre></div>
<h2 id="key-mapping">Key mapping<a class="headerlink" href="#key-mapping" title="Permanent link">&para;</a></h2>
<table>
<thead>
<tr>
<th>Legacy AppDaemon key or concept</th>
<th>Standalone rewrite</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>module</code>, <code>class</code>, <code>config</code> wrapper</td>
<td>removed</td>
<td>Rewrite uses <code>nspanels.&lt;panel_name&gt;</code> directly.</td>
</tr>
<tr>
<td><code>panelRecvTopic</code></td>
<td><code>panelRecvTopic</code></td>
<td>Same meaning.</td>
</tr>
<tr>
<td><code>panelSendTopic</code></td>
<td><code>panelSendTopic</code></td>
<td>Same meaning.</td>
</tr>
<tr>
<td><code>model</code></td>
<td><code>model</code></td>
<td>Same meaning (<code>eu</code>, <code>us-p</code>, <code>us-l</code>).</td>
</tr>
<tr>
<td><code>locale</code></td>
<td><code>locale</code></td>
<td>Same meaning.</td>
</tr>
<tr>
<td><code>timeFormat</code></td>
<td><code>timeFormat</code></td>
<td>Same meaning.</td>
</tr>
<tr>
<td><code>timezone</code> (legacy docs casing)</td>
<td><code>timeZone</code></td>
<td>Use exact camelCase <code>timeZone</code>.</td>
</tr>
<tr>
<td><code>dateFormatBabel</code> / <code>dateFormat</code></td>
<td><code>dateFormat</code></td>
<td>Rewrite expects <code>dateFormat</code>.</td>
</tr>
<tr>
<td><code>cards</code></td>
<td><code>cards</code></td>
<td>Same concept.</td>
</tr>
<tr>
<td><code>hiddenCards</code></td>
<td><code>hiddenCards</code></td>
<td>Same concept.</td>
</tr>
<tr>
<td><code>screensaver</code></td>
<td><code>screensaver</code></td>
<td>Same concept; some legacy theme options are not available.</td>
</tr>
<tr>
<td><code>defaultCard</code> under screensaver usage</td>
<td><code>defaultCard</code> (panel level)</td>
<td>Use as panel-level key in rewrite.</td>
</tr>
<tr>
<td><code>temperatureUnit</code> (card-level legacy usage)</td>
<td><code>temp_unit</code> (panel level)</td>
<td>Rewrite reads panel-level <code>temp_unit</code>.</td>
</tr>
<tr>
<td><code>sleepBrightness</code> list schedule</td>
<td>not supported</td>
<td>Rewrite supports integer or entity id, not list-based schedules.</td>
</tr>
<tr>
<td><code>screenBrightness</code> list schedule</td>
<td>not supported</td>
<td>Rewrite supports integer or entity id, not list-based schedules.</td>
</tr>
<tr>
<td><code>sleepTracking</code></td>
<td><code>sleepTracking</code></td>
<td>Same concept.</td>
</tr>
<tr>
<td><code>sleepTrackingZones</code></td>
<td><code>sleepTrackingZones</code></td>
<td>Same concept.</td>
</tr>
<tr>
<td><code>sleepOverride</code></td>
<td><code>sleepOverride</code></td>
<td>Same concept.</td>
</tr>
<tr>
<td><code>updateMode</code> / OTA URL overrides (<code>displayURL-*</code>, <code>berryURL</code>)</td>
<td>not supported</td>
<td>Rewrite does not implement these legacy update keys.</td>
</tr>
<tr>
<td><code>theme</code>, <code>dateAdditionalTemplate</code>, <code>timeAdditionalTemplate</code></td>
<td>not supported</td>
<td>Not implemented in rewrite config.</td>
</tr>
</tbody>
</table>
<h2 id="connection-config-differences">Connection config differences<a class="headerlink" href="#connection-config-differences" title="Permanent link">&para;</a></h2>
<p>In AppDaemon setups, MQTT and Home Assistant connectivity was mostly configured via AppDaemon plugin settings.</p>
<p>In the rewrite, connectivity is resolved directly by the runtime:</p>
<ul>
<li>Home Assistant:</li>
<li><code>home_assistant_address</code></li>
<li><code>home_assistant_token</code></li>
<li>MQTT (for MQTT mode):</li>
<li><code>mqtt_server</code>, <code>mqtt_port</code>, <code>mqtt_username</code>, <code>mqtt_password</code></li>
<li>Optional mode switch:</li>
<li>set <code>use_ha_api</code> to use Home Assistant event mode instead of MQTT receive mode</li>
</ul>
<h2 id="entity-level-differences-to-watch">Entity-level differences to watch<a class="headerlink" href="#entity-level-differences-to-watch" title="Permanent link">&para;</a></h2>
<p>Some legacy entity config fields are not implemented in the rewrite parser/renderer:</p>
<ul>
<li><code>state</code>, <code>state_not</code>, <code>state_template</code></li>
<li>direct <code>service.*</code> action entries with custom <code>data</code></li>
<li><code>action_name</code></li>
</ul>
<p>Supported and commonly used fields in rewrite:</p>
<ul>
<li><code>entity</code>, <code>name</code>, <code>icon</code>, <code>color</code>, <code>value</code>, <code>font</code></li>
<li>weather-related: <code>attribute</code>, <code>day</code>, <code>hour</code>, <code>unit</code></li>
<li>light detail helper: <code>effectList</code></li>
<li>navigation helper: <code>status</code> for <code>navigate.*</code> entities</li>
</ul>
<h2 id="migration-checklist">Migration checklist<a class="headerlink" href="#migration-checklist" title="Permanent link">&para;</a></h2>
<ol>
<li>Create <code>/config/panels.yaml</code> from the rewrite example.</li>
<li>Move each old app entry (<code>nspanel-1</code>, <code>nspanel-2</code>, ...) into <code>nspanels</code>.</li>
<li>Remove <code>module/class/config</code> wrappers.</li>
<li>Rename <code>timezone</code> to <code>timeZone</code>.</li>
<li>Ensure each panel has <code>dateFormat</code>, <code>timeFormat</code>, <code>screensaver</code>, and <code>cards</code>.</li>
<li>Replace unsupported scheduled brightness lists with integer/entity-based values.</li>
<li>Remove unsupported legacy-only keys listed above.</li>
</ol>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-circle-arrow-up" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="m16 12-4-4-4 4M12 16V8"/></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Copyright © 2026 Johannes Braun
</div>
Made with
<a href="https://zensical.org/" target="_blank" rel="noopener">
Zensical
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"annotate":null,"base":"..","features":["navigation.indexes","navigation.sections","navigation.top","navigation.tracking","navigation.expand","search.highlight","search.share","search.suggest"],"search":"../assets/javascripts/workers/search.e2d2d235.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script>
<script src="../assets/javascripts/bundle.5fcf0de6.min.js"></script>
</body>
</html>

0
standalone/objects.inv Normal file
View File

View File

@@ -0,0 +1,796 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Documentation for the standalone/Home Assistant add-on rewrite in nspanel-lovelace-ui.">
<meta name="author" content="Johannes Braun">
<link rel="canonical" href="https://jobr99.github.io/nspanel-lovelace-ui/standalone/screensaver/">
<link rel="prev" href="../migration-appdaemon/">
<link rel="next" href="../cards/">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="zensical-0.0.23">
<title>Screensaver - NsPanel Lovelace UI Standalone Docs</title>
<link rel="stylesheet" href="../assets/stylesheets/modern/main.1e989742.min.css">
<link rel="stylesheet" href="../assets/stylesheets/modern/palette.dfe2e883.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=arial,+sans-serif:300,300i,400,400i,500,500i,700,700i%7Cmonospace:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"arial, sans-serif";--md-code-font:"monospace"}</style>
<link rel="stylesheet" href="../_assets/user.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,t)=>(e<<5)-e+t.charCodeAt(0)),0),__md_get=(e,t=localStorage,a=__md_scope)=>JSON.parse(t.getItem(a.pathname+"."+e)),__md_set=(e,t,a=localStorage,_=__md_scope)=>{try{a.setItem(_.pathname+"."+e,JSON.stringify(t))}catch(e){}},document.documentElement.setAttribute("data-platform",navigator.platform)</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#screensaver" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="./.." title="NsPanel Lovelace UI Standalone Docs" class="md-header__button md-logo" aria-label="NsPanel Lovelace UI Standalone Docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-book-open" viewBox="0 0 24 24"><path d="M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-menu" viewBox="0 0 24 24"><path d="M4 5h16M4 12h16M4 19h16"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
NsPanel Lovelace UI Standalone Docs
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Screensaver
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="none" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue" aria-hidden="true" type="radio" name="__palette" id="__palette_0">
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-search" viewBox="0 0 24 24"><path d="m21 21-4.34-4.34"/><circle cx="11" cy="11" r="8"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog" aria-label="Search">
<button type="button" class="md-search__button">
Search
</button>
</div>
<div class="md-header__source">
<a href="https://github.com/jobr99/nspanel-lovelace-ui" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
jobr99/nspanel-lovelace-ui
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="./.." title="NsPanel Lovelace UI Standalone Docs" class="md-nav__button md-logo" aria-label="NsPanel Lovelace UI Standalone Docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-book-open" viewBox="0 0 24 24"><path d="M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/></svg>
</a>
NsPanel Lovelace UI Standalone Docs
</label>
<div class="md-nav__source">
<a href="https://github.com/jobr99/nspanel-lovelace-ui" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
jobr99/nspanel-lovelace-ui
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="./.." class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../getting-started/" class="md-nav__link">
<span class="md-ellipsis">
Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../migration-appdaemon/" class="md-nav__link">
<span class="md-ellipsis">
Migration from AppDaemon
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Screensaver
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="././" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Screensaver
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="On this page">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
On this page
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#keys" class="md-nav__link">
<span class="md-ellipsis">
Keys
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#screensaver-entities" class="md-nav__link">
<span class="md-ellipsis">
Screensaver entities
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#example" class="md-nav__link">
<span class="md-ellipsis">
Example
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../cards/" class="md-nav__link">
<span class="md-ellipsis">
Cards
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../entities/" class="md-nav__link">
<span class="md-ellipsis">
Entities
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../connection-modes/" class="md-nav__link">
<span class="md-ellipsis">
Connection Modes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../troubleshooting/" class="md-nav__link">
<span class="md-ellipsis">
Troubleshooting
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="On this page">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
On this page
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#keys" class="md-nav__link">
<span class="md-ellipsis">
Keys
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#screensaver-entities" class="md-nav__link">
<span class="md-ellipsis">
Screensaver entities
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#example" class="md-nav__link">
<span class="md-ellipsis">
Example
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="screensaver">Screensaver<a class="headerlink" href="#screensaver" title="Permanent link">&para;</a></h1>
<p><code>screensaver</code> is a required object in each panel config.</p>
<h2 id="keys">Keys<a class="headerlink" href="#keys" title="Permanent link">&para;</a></h2>
<table>
<thead>
<tr>
<th>key</th>
<th>required</th>
<th>type</th>
<th>default</th>
<th>description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>type</code></td>
<td>no</td>
<td>string</td>
<td><code>screensaver</code></td>
<td>Layout type (<code>screensaver</code> / <code>screensaver2</code>).</td>
</tr>
<tr>
<td><code>entities</code></td>
<td>yes*</td>
<td>list</td>
<td>none</td>
<td>Screensaver entities.</td>
</tr>
<tr>
<td><code>entity</code></td>
<td>yes*</td>
<td>string</td>
<td>none</td>
<td>Single-entity shortcut.</td>
</tr>
<tr>
<td><code>statusIcon1</code></td>
<td>no</td>
<td>object</td>
<td>none</td>
<td>Left status icon near date.</td>
</tr>
<tr>
<td><code>statusIcon2</code></td>
<td>no</td>
<td>object</td>
<td>none</td>
<td>Right status icon near date.</td>
</tr>
<tr>
<td><code>doubleTapToUnlock</code></td>
<td>no</td>
<td>bool</td>
<td><code>false</code></td>
<td>Requires double tap when leaving screensaver.</td>
</tr>
<tr>
<td><code>sleepTimeout</code></td>
<td>no</td>
<td>int</td>
<td>panel <code>sleepTimeout</code></td>
<td>Per-screensaver timeout override.</td>
</tr>
</tbody>
</table>
<p><code>*</code> Provide at least one of <code>entity</code> or <code>entities</code>.</p>
<h2 id="screensaver-entities">Screensaver entities<a class="headerlink" href="#screensaver-entities" title="Permanent link">&para;</a></h2>
<p>Screensaver entities use the same entity format as other cards.</p>
<p>For <code>weather.&lt;entity&gt;</code> you can also use:</p>
<ul>
<li><code>attribute</code> (default <code>temperature</code>)</li>
<li><code>day</code> (daily forecast index)</li>
<li><code>hour</code> (hourly forecast index)</li>
<li><code>unit</code> (suffix, default <code>°C</code> for temperature-like attributes)</li>
</ul>
<h2 id="example">Example<a class="headerlink" href="#example" title="Permanent link">&para;</a></h2>
<div class="highlight"><pre><span></span><code><span class="nt">screensaver</span><span class="p">:</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">screensaver</span>
<span class="w"> </span><span class="nt">doubleTapToUnlock</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
<span class="w"> </span><span class="nt">sleepTimeout</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">30</span>
<span class="w"> </span><span class="nt">statusIcon1</span><span class="p">:</span>
<span class="w"> </span><span class="nt">entity</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">binary_sensor.front_door</span>
<span class="w"> </span><span class="nt">icon</span><span class="p">:</span>
<span class="w"> </span><span class="s">&quot;on&quot;</span><span class="p p-Indicator">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">mdi:door-open</span>
<span class="w"> </span><span class="s">&quot;off&quot;</span><span class="p p-Indicator">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">mdi:door-closed</span>
<span class="w"> </span><span class="nt">font</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">medium-icon</span>
<span class="w"> </span><span class="nt">statusIcon2</span><span class="p">:</span>
<span class="w"> </span><span class="nt">entity</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">sensor.outdoor_temperature</span>
<span class="w"> </span><span class="nt">icon</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">mdi:thermometer</span>
<span class="w"> </span><span class="nt">entities</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">entity</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">weather.home</span>
<span class="w"> </span><span class="nt">attribute</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">temperature</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">entity</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">weather.home</span>
<span class="w"> </span><span class="nt">day</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">1</span>
<span class="w"> </span><span class="nt">attribute</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">temperature</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">entity</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">weather.home</span>
<span class="w"> </span><span class="nt">day</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">2</span>
<span class="w"> </span><span class="nt">attribute</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">temperature</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">entity</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">sensor.indoor_temperature</span>
<span class="w"> </span><span class="nt">icon</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">mdi:home-thermometer</span>
</code></pre></div>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-circle-arrow-up" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="m16 12-4-4-4 4M12 16V8"/></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Copyright © 2026 Johannes Braun
</div>
Made with
<a href="https://zensical.org/" target="_blank" rel="noopener">
Zensical
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"annotate":null,"base":"..","features":["navigation.indexes","navigation.sections","navigation.top","navigation.tracking","navigation.expand","search.highlight","search.share","search.suggest"],"search":"../assets/javascripts/workers/search.e2d2d235.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script>
<script src="../assets/javascripts/bundle.5fcf0de6.min.js"></script>
</body>
</html>

1
standalone/search.json Normal file

File diff suppressed because one or more lines are too long

30
standalone/sitemap.xml Normal file
View File

@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://jobr99.github.io/nspanel-lovelace-ui/standalone/</loc>
</url>
<url>
<loc>https://jobr99.github.io/nspanel-lovelace-ui/standalone/getting-started/</loc>
</url>
<url>
<loc>https://jobr99.github.io/nspanel-lovelace-ui/standalone/configuration/</loc>
</url>
<url>
<loc>https://jobr99.github.io/nspanel-lovelace-ui/standalone/migration-appdaemon/</loc>
</url>
<url>
<loc>https://jobr99.github.io/nspanel-lovelace-ui/standalone/screensaver/</loc>
</url>
<url>
<loc>https://jobr99.github.io/nspanel-lovelace-ui/standalone/cards/</loc>
</url>
<url>
<loc>https://jobr99.github.io/nspanel-lovelace-ui/standalone/entities/</loc>
</url>
<url>
<loc>https://jobr99.github.io/nspanel-lovelace-ui/standalone/connection-modes/</loc>
</url>
<url>
<loc>https://jobr99.github.io/nspanel-lovelace-ui/standalone/troubleshooting/</loc>
</url>
</urlset>

View File

@@ -0,0 +1,817 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Documentation for the standalone/Home Assistant add-on rewrite in nspanel-lovelace-ui.">
<meta name="author" content="Johannes Braun">
<link rel="canonical" href="https://jobr99.github.io/nspanel-lovelace-ui/standalone/troubleshooting/">
<link rel="prev" href="../connection-modes/">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="zensical-0.0.23">
<title>Troubleshooting - NsPanel Lovelace UI Standalone Docs</title>
<link rel="stylesheet" href="../assets/stylesheets/modern/main.1e989742.min.css">
<link rel="stylesheet" href="../assets/stylesheets/modern/palette.dfe2e883.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=arial,+sans-serif:300,300i,400,400i,500,500i,700,700i%7Cmonospace:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"arial, sans-serif";--md-code-font:"monospace"}</style>
<link rel="stylesheet" href="../_assets/user.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,t)=>(e<<5)-e+t.charCodeAt(0)),0),__md_get=(e,t=localStorage,a=__md_scope)=>JSON.parse(t.getItem(a.pathname+"."+e)),__md_set=(e,t,a=localStorage,_=__md_scope)=>{try{a.setItem(_.pathname+"."+e,JSON.stringify(t))}catch(e){}},document.documentElement.setAttribute("data-platform",navigator.platform)</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#troubleshooting" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="./.." title="NsPanel Lovelace UI Standalone Docs" class="md-header__button md-logo" aria-label="NsPanel Lovelace UI Standalone Docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-book-open" viewBox="0 0 24 24"><path d="M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-menu" viewBox="0 0 24 24"><path d="M4 5h16M4 12h16M4 19h16"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
NsPanel Lovelace UI Standalone Docs
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Troubleshooting
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="none" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue" aria-hidden="true" type="radio" name="__palette" id="__palette_0">
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-search" viewBox="0 0 24 24"><path d="m21 21-4.34-4.34"/><circle cx="11" cy="11" r="8"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog" aria-label="Search">
<button type="button" class="md-search__button">
Search
</button>
</div>
<div class="md-header__source">
<a href="https://github.com/jobr99/nspanel-lovelace-ui" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
jobr99/nspanel-lovelace-ui
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="./.." title="NsPanel Lovelace UI Standalone Docs" class="md-nav__button md-logo" aria-label="NsPanel Lovelace UI Standalone Docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-book-open" viewBox="0 0 24 24"><path d="M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/></svg>
</a>
NsPanel Lovelace UI Standalone Docs
</label>
<div class="md-nav__source">
<a href="https://github.com/jobr99/nspanel-lovelace-ui" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
jobr99/nspanel-lovelace-ui
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="./.." class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../getting-started/" class="md-nav__link">
<span class="md-ellipsis">
Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../configuration/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../migration-appdaemon/" class="md-nav__link">
<span class="md-ellipsis">
Migration from AppDaemon
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../screensaver/" class="md-nav__link">
<span class="md-ellipsis">
Screensaver
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cards/" class="md-nav__link">
<span class="md-ellipsis">
Cards
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../entities/" class="md-nav__link">
<span class="md-ellipsis">
Entities
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../connection-modes/" class="md-nav__link">
<span class="md-ellipsis">
Connection Modes
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Troubleshooting
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="././" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Troubleshooting
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="On this page">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
On this page
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#config-does-not-load" class="md-nav__link">
<span class="md-ellipsis">
Config does not load
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mqtt-not-connected" class="md-nav__link">
<span class="md-ellipsis">
MQTT not connected
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#home-assistant-websocket-not-connected" class="md-nav__link">
<span class="md-ellipsis">
Home Assistant websocket not connected
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#card-does-not-open-or-navigate" class="md-nav__link">
<span class="md-ellipsis">
Card does not open or navigate
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#brightness-behaves-unexpectedly" class="md-nav__link">
<span class="md-ellipsis">
Brightness behaves unexpectedly
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#useful-logs-to-look-for" class="md-nav__link">
<span class="md-ellipsis">
Useful logs to look for
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="On this page">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
On this page
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#config-does-not-load" class="md-nav__link">
<span class="md-ellipsis">
Config does not load
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mqtt-not-connected" class="md-nav__link">
<span class="md-ellipsis">
MQTT not connected
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#home-assistant-websocket-not-connected" class="md-nav__link">
<span class="md-ellipsis">
Home Assistant websocket not connected
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#card-does-not-open-or-navigate" class="md-nav__link">
<span class="md-ellipsis">
Card does not open or navigate
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#brightness-behaves-unexpectedly" class="md-nav__link">
<span class="md-ellipsis">
Brightness behaves unexpectedly
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#useful-logs-to-look-for" class="md-nav__link">
<span class="md-ellipsis">
Useful logs to look for
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="troubleshooting">Troubleshooting<a class="headerlink" href="#troubleshooting" title="Permanent link">&para;</a></h1>
<h2 id="config-does-not-load">Config does not load<a class="headerlink" href="#config-does-not-load" title="Permanent link">&para;</a></h2>
<p>Symptoms:</p>
<ul>
<li>no panel output</li>
<li>log shows YAML parse error or file missing</li>
</ul>
<p>Checks:</p>
<ol>
<li>Confirm <code>CONFIG_FILE</code> path.</li>
<li>Validate YAML syntax.</li>
<li>Ensure required per-panel keys exist: <code>panelRecvTopic</code>, <code>panelSendTopic</code>, <code>locale</code>, <code>timeFormat</code>, <code>dateFormat</code>, <code>screensaver</code>, <code>cards</code>.</li>
</ol>
<h2 id="mqtt-not-connected">MQTT not connected<a class="headerlink" href="#mqtt-not-connected" title="Permanent link">&para;</a></h2>
<p>Symptoms:</p>
<ul>
<li>log repeats MQTT connection retry</li>
</ul>
<p>Checks:</p>
<ol>
<li>Verify <code>mqtt_server</code>, <code>mqtt_port</code>, <code>mqtt_username</code>, <code>mqtt_password</code>.</li>
<li>Verify panel publishes on the same topic as <code>panelRecvTopic</code>.</li>
<li>Verify payload includes <code>CustomRecv</code> JSON key.</li>
</ol>
<h2 id="home-assistant-websocket-not-connected">Home Assistant websocket not connected<a class="headerlink" href="#home-assistant-websocket-not-connected" title="Permanent link">&para;</a></h2>
<p>Symptoms:</p>
<ul>
<li>log repeatedly waits for websocket/auth</li>
</ul>
<p>Checks:</p>
<ol>
<li>Verify <code>home_assistant_address</code> and <code>home_assistant_token</code>.</li>
<li>In add-on mode, verify Supervisor token access is available.</li>
<li>Confirm HA is reachable from container network.</li>
</ol>
<h2 id="card-does-not-open-or-navigate">Card does not open or navigate<a class="headerlink" href="#card-does-not-open-or-navigate" title="Permanent link">&para;</a></h2>
<p>Checks:</p>
<ol>
<li>For <code>navigate.&lt;key&gt;</code>, confirm target card has matching <code>key</code>.</li>
<li>For <code>cardUnlock</code>, confirm <code>destination</code> and <code>pin</code> are set.</li>
<li>Confirm card <code>type</code> is one of the implemented types.</li>
</ol>
<h2 id="brightness-behaves-unexpectedly">Brightness behaves unexpectedly<a class="headerlink" href="#brightness-behaves-unexpectedly" title="Permanent link">&para;</a></h2>
<p>Checks:</p>
<ol>
<li>If using entity-based brightness, verify entity state is numeric.</li>
<li>Avoid list-based brightness schedules in this rewrite (not supported).</li>
<li>Review interaction between <code>sleepTracking</code>, <code>sleepTrackingZones</code>, and <code>sleepOverride</code>.</li>
</ol>
<h2 id="useful-logs-to-look-for">Useful logs to look for<a class="headerlink" href="#useful-logs-to-look-for" title="Permanent link">&para;</a></h2>
<ul>
<li><code>Config file not found</code></li>
<li><code>Error while parsing YAML file</code></li>
<li><code>Connected to MQTT Server</code></li>
<li><code>Home Assistant auth OK</code></li>
<li><code>card type ... not implemented</code></li>
<li><code>Not implemented: &lt;button action&gt;</code></li>
</ul>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-circle-arrow-up" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="m16 12-4-4-4 4M12 16V8"/></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Copyright © 2026 Johannes Braun
</div>
Made with
<a href="https://zensical.org/" target="_blank" rel="noopener">
Zensical
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"annotate":null,"base":"..","features":["navigation.indexes","navigation.sections","navigation.top","navigation.tracking","navigation.expand","search.highlight","search.share","search.suggest"],"search":"../assets/javascripts/workers/search.e2d2d235.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script>
<script src="../assets/javascripts/bundle.5fcf0de6.min.js"></script>
</body>
</html>