hass.tibber_prices/user/period-calculation.html
github-actions[bot] e9aea64a2e deploy: 6898c126e3
2025-12-06 01:42:39 +00:00

371 lines
No EOL
119 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-period-calculation" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.9.2">
<title data-rh="true">Period Calculation | Tibber Prices Integration</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://jpawlowski.github.io/hass.tibber_prices/user/img/social-card.png"><meta data-rh="true" name="twitter:image" content="https://jpawlowski.github.io/hass.tibber_prices/user/img/social-card.png"><meta data-rh="true" property="og:url" content="https://jpawlowski.github.io/hass.tibber_prices/user/period-calculation"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Period Calculation | Tibber Prices Integration"><meta data-rh="true" name="description" content="Learn how Best Price and Peak Price periods work, and how to configure them for your needs."><meta data-rh="true" property="og:description" content="Learn how Best Price and Peak Price periods work, and how to configure them for your needs."><link data-rh="true" rel="icon" href="/hass.tibber_prices/user/img/logo.svg"><link data-rh="true" rel="canonical" href="https://jpawlowski.github.io/hass.tibber_prices/user/period-calculation"><link data-rh="true" rel="alternate" href="https://jpawlowski.github.io/hass.tibber_prices/user/period-calculation" hreflang="en"><link data-rh="true" rel="alternate" href="https://jpawlowski.github.io/hass.tibber_prices/user/period-calculation" hreflang="x-default"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Period Calculation","item":"https://jpawlowski.github.io/hass.tibber_prices/user/period-calculation"}]}</script><link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&amp;family=Space+Grotesk:wght@500;600;700&amp;display=swap"><link rel="stylesheet" href="/hass.tibber_prices/user/assets/css/styles.be4f3d68.css">
<script src="/hass.tibber_prices/user/assets/js/runtime~main.624760e0.js" defer="defer"></script>
<script src="/hass.tibber_prices/user/assets/js/main.0445d6e2.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")),document.documentElement.setAttribute("data-theme-choice",t||"system")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><link rel="preload" as="image" href="/hass.tibber_prices/user/img/logo.svg"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/hass.tibber_prices/user/"><div class="navbar__logo"><img src="/hass.tibber_prices/user/img/logo.svg" alt="Tibber Prices Integration Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/hass.tibber_prices/user/img/logo.svg" alt="Tibber Prices Integration Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><b class="navbar__title text--truncate">Tibber Prices HA</b></a><a class="navbar__item navbar__link" href="/hass.tibber_prices/user/intro">User Guide</a><a href="https://jpawlowski.github.io/hass.tibber_prices/developer/" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Developer Docs<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/hass.tibber_prices/user/period-calculation">Next 🚧</a><a href="https://github.com/jpawlowski/hass.tibber_prices" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="system mode" aria-label="Switch between dark and light mode (currently system mode)"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP systemToggleIcon_QzmC"><path fill="currentColor" d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"></path></svg></button></div><div class="navbarSearchContainer_Bca1"><div class="navbar__search"><span aria-label="expand searchbar" role="button" class="search-icon" tabindex="0"></span><input id="search_input_react" type="search" placeholder="Loading..." aria-label="Search" class="navbar__search-input search-bar" disabled=""></div></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper_z2l0"><div class="docsWrapper_hBAB"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docRoot_UBD9"><aside class="theme-doc-sidebar-container docSidebarContainer_YfHR"><div class="sidebarViewport_aRkj"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/hass.tibber_prices/user/intro"><span title="User Documentation" class="linkLabel_WmDU">User Documentation</span></a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="true" href="/hass.tibber_prices/user/installation"><span title="🚀 Getting Started" class="categoryLinkLabel_W154">🚀 Getting Started</span></a></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/hass.tibber_prices/user/installation"><span title="Installation" class="linkLabel_WmDU">Installation</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/hass.tibber_prices/user/configuration"><span title="Configuration" class="linkLabel_WmDU">Configuration</span></a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="true" href="/hass.tibber_prices/user/concepts"><span title="📖 Core Concepts" class="categoryLinkLabel_W154">📖 Core Concepts</span></a></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/hass.tibber_prices/user/concepts"><span title="Core Concepts" class="linkLabel_WmDU">Core Concepts</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/hass.tibber_prices/user/glossary"><span title="Glossary" class="linkLabel_WmDU">Glossary</span></a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" role="button" aria-expanded="true" href="/hass.tibber_prices/user/sensors"><span title="📊 Features" class="categoryLinkLabel_W154">📊 Features</span></a></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/hass.tibber_prices/user/sensors"><span title="Sensors" class="linkLabel_WmDU">Sensors</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/hass.tibber_prices/user/period-calculation"><span title="Period Calculation" class="linkLabel_WmDU">Period Calculation</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/hass.tibber_prices/user/dynamic-icons"><span title="Dynamic Icons" class="linkLabel_WmDU">Dynamic Icons</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/hass.tibber_prices/user/icon-colors"><span title="Dynamic Icon Colors" class="linkLabel_WmDU">Dynamic Icon Colors</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/hass.tibber_prices/user/actions"><span title="Actions (Services)" class="linkLabel_WmDU">Actions (Services)</span></a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="true" href="/hass.tibber_prices/user/dashboard-examples"><span title="🎨 Visualization" class="categoryLinkLabel_W154">🎨 Visualization</span></a></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/hass.tibber_prices/user/dashboard-examples"><span title="Dashboard Examples" class="linkLabel_WmDU">Dashboard Examples</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/hass.tibber_prices/user/chart-examples"><span title="Chart Examples" class="linkLabel_WmDU">Chart Examples</span></a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="true" href="/hass.tibber_prices/user/automation-examples"><span title="🤖 Automation" class="categoryLinkLabel_W154">🤖 Automation</span></a></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/hass.tibber_prices/user/automation-examples"><span title="Automation Examples" class="linkLabel_WmDU">Automation Examples</span></a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="true" href="/hass.tibber_prices/user/faq"><span title="🔧 Help &amp; Support" class="categoryLinkLabel_W154">🔧 Help &amp; Support</span></a></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/hass.tibber_prices/user/faq"><span title="FAQ - Frequently Asked Questions" class="linkLabel_WmDU">FAQ - Frequently Asked Questions</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/hass.tibber_prices/user/troubleshooting"><span title="Troubleshooting" class="linkLabel_WmDU">Troubleshooting</span></a></li></ul></li></ul></nav><button type="button" title="Collapse sidebar" aria-label="Collapse sidebar" class="button button--secondary button--outline collapseSidebarButton_PEFL"><svg width="20" height="20" aria-hidden="true" class="collapseSidebarButtonIcon_kv0_"><g fill="#7a7a7a"><path d="M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"></path><path d="M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"></path></g></svg></button></div></div></aside><main class="docMainContainer_TBSr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="theme-doc-version-banner alert alert--warning margin-bottom--md" role="alert"><div>This is unreleased documentation for <!-- -->Tibber Prices Integration<!-- --> <b>Next 🚧</b> version.</div><div class="margin-top--md">For up-to-date documentation, see the <b><a href="/hass.tibber_prices/user/period-calculation">latest version</a></b> (<!-- -->Next 🚧<!-- -->).</div></div><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/hass.tibber_prices/user/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">📊 Features</span></li><li class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link">Period Calculation</span></li></ul></nav><span class="theme-doc-version-badge badge badge--secondary">Version: Next 🚧</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Period Calculation</h1></header>
<p>Learn how Best Price and Peak Price periods work, and how to configure them for your needs.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="table-of-contents">Table of Contents<a href="#table-of-contents" class="hash-link" aria-label="Direct link to Table of Contents" title="Direct link to Table of Contents" translate="no"></a></h2>
<ul>
<li class=""><a href="#quick-start" class="">Quick Start</a></li>
<li class=""><a href="#how-it-works" class="">How It Works</a></li>
<li class=""><a href="#configuration-guide" class="">Configuration Guide</a></li>
<li class=""><a href="#understanding-relaxation" class="">Understanding Relaxation</a></li>
<li class=""><a href="#common-scenarios" class="">Common Scenarios</a></li>
<li class=""><a href="#troubleshooting" class="">Troubleshooting</a>
<ul>
<li class=""><a href="#no-periods-found" class="">No Periods Found</a></li>
<li class=""><a href="#periods-split-into-small-pieces" class="">Periods Split Into Small Pieces</a></li>
<li class=""><a href="#midnight-price-classification-changes" class="">Midnight Price Classification Changes</a></li>
</ul>
</li>
<li class=""><a href="#advanced-topics" class="">Advanced Topics</a></li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="quick-start">Quick Start<a href="#quick-start" class="hash-link" aria-label="Direct link to Quick Start" title="Direct link to Quick Start" translate="no"></a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-are-price-periods">What Are Price Periods?<a href="#what-are-price-periods" class="hash-link" aria-label="Direct link to What Are Price Periods?" title="Direct link to What Are Price Periods?" translate="no"></a></h3>
<p>The integration finds time windows when electricity is especially <strong>cheap</strong> (Best Price) or <strong>expensive</strong> (Peak Price):</p>
<ul>
<li class=""><strong>Best Price Periods</strong> 🟢 - When to run your dishwasher, charge your EV, or heat water</li>
<li class=""><strong>Peak Price Periods</strong> 🔴 - When to reduce consumption or defer non-essential loads</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="default-behavior">Default Behavior<a href="#default-behavior" class="hash-link" aria-label="Direct link to Default Behavior" title="Direct link to Default Behavior" translate="no"></a></h3>
<p>Out of the box, the integration:</p>
<ol>
<li class=""><strong>Best Price</strong>: Finds cheapest 1-hour+ windows that are at least 5% below the daily average</li>
<li class=""><strong>Peak Price</strong>: Finds most expensive 30-minute+ windows that are at least 5% above the daily average</li>
<li class=""><strong>Relaxation</strong>: Automatically loosens filters if not enough periods are found</li>
</ol>
<p><strong>Most users don&#x27;t need to change anything!</strong> The defaults work well for typical use cases.</p>
<details class="details_lb9f alert alert--info details_b_Ee" data-collapsed="true"><summary> Why do Best Price and Peak Price have different defaults?</summary><div><div class="collapsibleContent_i85q"><p>The integration sets different <strong>initial defaults</strong> because the features serve different purposes:</p><p><strong>Best Price (60 min, 15% flex):</strong></p><ul>
<li class="">Longer duration ensures appliances can complete their cycles</li>
<li class="">Stricter flex (15%) focuses on genuinely cheap times</li>
<li class="">Use case: Running dishwasher, EV charging, water heating</li>
</ul><p><strong>Peak Price (30 min, 20% flex):</strong></p><ul>
<li class="">Shorter duration acceptable for early warnings</li>
<li class="">More flexible (20%) catches price spikes earlier</li>
<li class="">Use case: Alerting to expensive periods, even brief ones</li>
</ul><p><strong>You can adjust all these values</strong> in the configuration if the defaults don&#x27;t fit your use case. The asymmetric defaults simply provide good starting points for typical scenarios.</p></div></div></details>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="example-timeline">Example Timeline<a href="#example-timeline" class="hash-link" aria-label="Direct link to Example Timeline" title="Direct link to Example Timeline" translate="no"></a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">00:00 ████████████████ Best Price Period (cheap prices)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">04:00 ░░░░░░░░░░░░░░░░ Normal</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">08:00 ████████████████ Peak Price Period (expensive prices)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">12:00 ░░░░░░░░░░░░░░░░ Normal</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">16:00 ████████████████ Peak Price Period (expensive prices)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">20:00 ████████████████ Best Price Period (cheap prices)</span><br></span></code></pre></div></div>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-it-works">How It Works<a href="#how-it-works" class="hash-link" aria-label="Direct link to How It Works" title="Direct link to How It Works" translate="no"></a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-basic-idea">The Basic Idea<a href="#the-basic-idea" class="hash-link" aria-label="Direct link to The Basic Idea" title="Direct link to The Basic Idea" translate="no"></a></h3>
<p>Each day, the integration analyzes all 96 quarter-hourly price intervals and identifies <strong>continuous time ranges</strong> that meet specific criteria.</p>
<p>Think of it like this:</p>
<ol>
<li class=""><strong>Find potential windows</strong> - Times close to the daily MIN (Best Price) or MAX (Peak Price)</li>
<li class=""><strong>Filter by quality</strong> - Ensure they&#x27;re meaningfully different from average</li>
<li class=""><strong>Check duration</strong> - Must be long enough to be useful</li>
<li class=""><strong>Apply preferences</strong> - Optional: only show stable prices, avoid mediocre times</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-by-step-process">Step-by-Step Process<a href="#step-by-step-process" class="hash-link" aria-label="Direct link to Step-by-Step Process" title="Direct link to Step-by-Step Process" translate="no"></a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-define-the-search-range-flexibility">1. Define the Search Range (Flexibility)<a href="#1-define-the-search-range-flexibility" class="hash-link" aria-label="Direct link to 1. Define the Search Range (Flexibility)" title="Direct link to 1. Define the Search Range (Flexibility)" translate="no"></a></h4>
<p><strong>Best Price:</strong> How much MORE than the daily minimum can a price be?</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Daily MIN: 20 ct/kWh</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Flexibility: 15% (default)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ Search for times ≤ 23 ct/kWh (20 + 15%)</span><br></span></code></pre></div></div>
<p><strong>Peak Price:</strong> How much LESS than the daily maximum can a price be?</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Daily MAX: 40 ct/kWh</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Flexibility: -15% (default)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ Search for times ≥ 34 ct/kWh (40 - 15%)</span><br></span></code></pre></div></div>
<p><strong>Why flexibility?</strong> Prices rarely stay at exactly MIN/MAX. Flexibility lets you capture realistic time windows.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-ensure-quality-distance-from-average">2. Ensure Quality (Distance from Average)<a href="#2-ensure-quality-distance-from-average" class="hash-link" aria-label="Direct link to 2. Ensure Quality (Distance from Average)" title="Direct link to 2. Ensure Quality (Distance from Average)" translate="no"></a></h4>
<p>Periods must be meaningfully different from the daily average:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Daily AVG: 30 ct/kWh</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Minimum distance: 5% (default)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Best Price: Must be ≤ 28.5 ct/kWh (30 - 5%)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Peak Price: Must be ≥ 31.5 ct/kWh (30 + 5%)</span><br></span></code></pre></div></div>
<p><strong>Why?</strong> This prevents marking mediocre times as &quot;best&quot; just because they&#x27;re slightly below average.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-check-duration">3. Check Duration<a href="#3-check-duration" class="hash-link" aria-label="Direct link to 3. Check Duration" title="Direct link to 3. Check Duration" translate="no"></a></h4>
<p>Periods must be long enough to be practical:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Default: 60 minutes minimum</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">45-minute period → Discarded</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">90-minute period → Kept ✓</span><br></span></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-apply-optional-filters">4. Apply Optional Filters<a href="#4-apply-optional-filters" class="hash-link" aria-label="Direct link to 4. Apply Optional Filters" title="Direct link to 4. Apply Optional Filters" translate="no"></a></h4>
<p>You can optionally require:</p>
<ul>
<li class=""><strong>Absolute quality</strong> (level filter) - &quot;Only show if prices are CHEAP/EXPENSIVE (not just below/above average)&quot;</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-automatic-price-spike-smoothing">5. Automatic Price Spike Smoothing<a href="#5-automatic-price-spike-smoothing" class="hash-link" aria-label="Direct link to 5. Automatic Price Spike Smoothing" title="Direct link to 5. Automatic Price Spike Smoothing" translate="no"></a></h4>
<p>Isolated price spikes are automatically detected and smoothed to prevent unnecessary period fragmentation:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Original prices: 18, 19, 35, 20, 19 ct ← 35 ct is an isolated outlier</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Smoothed: 18, 19, 19, 20, 19 ct ← Spike replaced with trend prediction</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Result: Continuous period 00:00-01:15 instead of split periods</span><br></span></code></pre></div></div>
<p><strong>Important:</strong></p>
<ul>
<li class="">Original prices are always preserved (min/max/avg show real values)</li>
<li class="">Smoothing only affects which intervals are combined into periods</li>
<li class="">The attribute <code>period_interval_smoothed_count</code> shows if smoothing was active</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="visual-example">Visual Example<a href="#visual-example" class="hash-link" aria-label="Direct link to Visual Example" title="Direct link to Visual Example" translate="no"></a></h3>
<p><strong>Timeline for a typical day:</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Hour: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Price: 18 19 20 28 29 30 35 34 33 32 30 28 25 24 26 28 30 32 31 22 21 20 19 18</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Daily MIN: 18 ct | Daily MAX: 35 ct | Daily AVG: 26 ct</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Best Price (15% flex = ≤20.7 ct):</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> ████████ ████████████████</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> 00:00-03:00 (3h) 19:00-24:00 (5h)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Peak Price (-15% flex = ≥29.75 ct):</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> ████████████████████████</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> 06:00-11:00 (5h)</span><br></span></code></pre></div></div>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="configuration-guide">Configuration Guide<a href="#configuration-guide" class="hash-link" aria-label="Direct link to Configuration Guide" title="Direct link to Configuration Guide" translate="no"></a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="basic-settings">Basic Settings<a href="#basic-settings" class="hash-link" aria-label="Direct link to Basic Settings" title="Direct link to Basic Settings" translate="no"></a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="flexibility">Flexibility<a href="#flexibility" class="hash-link" aria-label="Direct link to Flexibility" title="Direct link to Flexibility" translate="no"></a></h4>
<p><strong>What:</strong> How far from MIN/MAX to search for periods
<strong>Default:</strong> 15% (Best Price), -15% (Peak Price)
<strong>Range:</strong> 0-100%</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">best_price_flex</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">15</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Can be up to 15% more expensive than daily MIN</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">peak_price_flex</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">-15</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Can be up to 15% less expensive than daily MAX</span><br></span></code></pre></div></div>
<p><strong>When to adjust:</strong></p>
<ul>
<li class=""><strong>Increase (20-25%)</strong> → Find more/longer periods</li>
<li class=""><strong>Decrease (5-10%)</strong> → Find only the very best/worst times</li>
</ul>
<p><strong>💡 Tip:</strong> Very high flexibility (&gt;30%) is rarely useful. <strong>Recommendation:</strong> Start with 15-20% and enable relaxation it adapts automatically to each day&#x27;s price pattern.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="minimum-period-length">Minimum Period Length<a href="#minimum-period-length" class="hash-link" aria-label="Direct link to Minimum Period Length" title="Direct link to Minimum Period Length" translate="no"></a></h4>
<p><strong>What:</strong> How long a period must be to show it
<strong>Default:</strong> 60 minutes (Best Price), 30 minutes (Peak Price)
<strong>Range:</strong> 15-240 minutes</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">best_price_min_period_length</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">60</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">peak_price_min_period_length</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">30</span><br></span></code></pre></div></div>
<p><strong>When to adjust:</strong></p>
<ul>
<li class=""><strong>Increase (90-120 min)</strong> → Only show longer periods (e.g., for heat pump cycles)</li>
<li class=""><strong>Decrease (30-45 min)</strong> → Show shorter windows (e.g., for quick tasks)</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="distance-from-average">Distance from Average<a href="#distance-from-average" class="hash-link" aria-label="Direct link to Distance from Average" title="Direct link to Distance from Average" translate="no"></a></h4>
<p><strong>What:</strong> How much better than average a period must be
<strong>Default:</strong> 5%
<strong>Range:</strong> 0-20%</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">best_price_min_distance_from_avg</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">peak_price_min_distance_from_avg</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><br></span></code></pre></div></div>
<p><strong>When to adjust:</strong></p>
<ul>
<li class=""><strong>Increase (5-10%)</strong> → Only show clearly better times</li>
<li class=""><strong>Decrease (0-1%)</strong> → Show any time below/above average</li>
</ul>
<p><strong> Note:</strong> Both flexibility and distance filters must be satisfied. When using high flexibility values (&gt;30%), the distance filter may become the limiting factor. For best results, use moderate flexibility (15-20%) with relaxation enabled.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="optional-filters">Optional Filters<a href="#optional-filters" class="hash-link" aria-label="Direct link to Optional Filters" title="Direct link to Optional Filters" translate="no"></a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="level-filter-absolute-quality">Level Filter (Absolute Quality)<a href="#level-filter-absolute-quality" class="hash-link" aria-label="Direct link to Level Filter (Absolute Quality)" title="Direct link to Level Filter (Absolute Quality)" translate="no"></a></h4>
<p><strong>What:</strong> Only show periods with CHEAP/EXPENSIVE intervals (not just below/above average)
<strong>Default:</strong> <code>any</code> (disabled)
<strong>Options:</strong> <code>any</code> | <code>cheap</code> | <code>very_cheap</code> (Best Price) | <code>expensive</code> | <code>very_expensive</code> (Peak Price)</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">best_price_max_level</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> any </span><span class="token comment" style="color:#999988;font-style:italic"># Show any period below average</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">best_price_max_level</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> cheap </span><span class="token comment" style="color:#999988;font-style:italic"># Only show if at least one interval is CHEAP</span><br></span></code></pre></div></div>
<p><strong>Use case:</strong> &quot;Only notify me when prices are objectively cheap/expensive&quot;</p>
<p><strong> Volatility Thresholds:</strong> The level filter also supports volatility-based levels (<code>volatility_low</code>, <code>volatility_medium</code>, <code>volatility_high</code>). These use <strong>fixed internal thresholds</strong> (LOW &lt; 10%, MEDIUM &lt; 20%, HIGH ≥ 20%) that are separate from the sensor volatility thresholds you configure in the UI. This separation ensures that changing sensor display preferences doesn&#x27;t affect period calculation behavior.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="gap-tolerance-for-level-filter">Gap Tolerance (for Level Filter)<a href="#gap-tolerance-for-level-filter" class="hash-link" aria-label="Direct link to Gap Tolerance (for Level Filter)" title="Direct link to Gap Tolerance (for Level Filter)" translate="no"></a></h4>
<p><strong>What:</strong> Allow some &quot;mediocre&quot; intervals within an otherwise good period
<strong>Default:</strong> 0 (strict)
<strong>Range:</strong> 0-10</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">best_price_max_level</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> cheap</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">best_price_max_level_gap_count</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Allow up to 2 NORMAL intervals per period</span><br></span></code></pre></div></div>
<p><strong>Use case:</strong> &quot;Don&#x27;t split periods just because one interval isn&#x27;t perfectly CHEAP&quot;</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="tweaking-strategy-what-to-adjust-first">Tweaking Strategy: What to Adjust First?<a href="#tweaking-strategy-what-to-adjust-first" class="hash-link" aria-label="Direct link to Tweaking Strategy: What to Adjust First?" title="Direct link to Tweaking Strategy: What to Adjust First?" translate="no"></a></h3>
<p>When you&#x27;re not happy with the default behavior, adjust settings in this order:</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-start-with-relaxation-easiest">1. <strong>Start with Relaxation (Easiest)</strong><a href="#1-start-with-relaxation-easiest" class="hash-link" aria-label="Direct link to 1-start-with-relaxation-easiest" title="Direct link to 1-start-with-relaxation-easiest" translate="no"></a></h4>
<p>If you&#x27;re not finding enough periods:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">enable_min_periods_best</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#36acaa">true</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Already default!</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">min_periods_best</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Already default!</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">relaxation_attempts_best</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">11</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Already default!</span><br></span></code></pre></div></div>
<p><strong>Why start here?</strong> Relaxation automatically finds the right balance for each day. Much easier than manual tuning.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-adjust-period-length-simple">2. <strong>Adjust Period Length (Simple)</strong><a href="#2-adjust-period-length-simple" class="hash-link" aria-label="Direct link to 2-adjust-period-length-simple" title="Direct link to 2-adjust-period-length-simple" translate="no"></a></h4>
<p>If periods are too short/long for your use case:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">best_price_min_period_length</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">90</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Increase from 60 for longer periods</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># OR</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">best_price_min_period_length</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">45</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Decrease from 60 for shorter periods</span><br></span></code></pre></div></div>
<p><strong>Safe to change:</strong> This only affects duration, not price selection logic.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-fine-tune-flexibility-moderate">3. <strong>Fine-tune Flexibility (Moderate)</strong><a href="#3-fine-tune-flexibility-moderate" class="hash-link" aria-label="Direct link to 3-fine-tune-flexibility-moderate" title="Direct link to 3-fine-tune-flexibility-moderate" translate="no"></a></h4>
<p>If you consistently want more/fewer periods:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">best_price_flex</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">20</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Increase from 15% for more periods</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># OR</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">best_price_flex</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">10</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Decrease from 15% for stricter selection</span><br></span></code></pre></div></div>
<p><strong>⚠️ Watch out:</strong> Values &gt;25% may conflict with distance filter. Use relaxation instead.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-adjust-distance-from-average-advanced">4. <strong>Adjust Distance from Average (Advanced)</strong><a href="#4-adjust-distance-from-average-advanced" class="hash-link" aria-label="Direct link to 4-adjust-distance-from-average-advanced" title="Direct link to 4-adjust-distance-from-average-advanced" translate="no"></a></h4>
<p>Only if periods seem &quot;mediocre&quot; (not really cheap/expensive):</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">best_price_min_distance_from_avg</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">10</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Increase from 5% for stricter quality</span><br></span></code></pre></div></div>
<p><strong>⚠️ Careful:</strong> High values (&gt;10%) can make it impossible to find periods on flat price days.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-enable-level-filter-expert">5. <strong>Enable Level Filter (Expert)</strong><a href="#5-enable-level-filter-expert" class="hash-link" aria-label="Direct link to 5-enable-level-filter-expert" title="Direct link to 5-enable-level-filter-expert" translate="no"></a></h4>
<p>Only if you want absolute quality requirements:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">best_price_max_level</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> cheap </span><span class="token comment" style="color:#999988;font-style:italic"># Only show objectively CHEAP periods</span><br></span></code></pre></div></div>
<p><strong>⚠️ Very strict:</strong> Many days may have zero qualifying periods. <strong>Always enable relaxation when using this!</strong></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="common-mistakes-to-avoid">Common Mistakes to Avoid<a href="#common-mistakes-to-avoid" class="hash-link" aria-label="Direct link to Common Mistakes to Avoid" title="Direct link to Common Mistakes to Avoid" translate="no"></a></h3>
<p><strong>Don&#x27;t increase flexibility to &gt;30% manually</strong> → Use relaxation instead
<strong>Don&#x27;t combine high distance (&gt;10%) with strict level filter</strong> → Too restrictive
<strong>Don&#x27;t disable relaxation with strict filters</strong> → You&#x27;ll get zero periods on some days
<strong>Don&#x27;t change all settings at once</strong> → Adjust one at a time and observe results</p>
<p><strong>Do use defaults + relaxation</strong> → Works for 90% of cases
<strong>Do adjust one setting at a time</strong> → Easier to understand impact
<strong>Do check sensor attributes</strong> → Shows why periods were/weren&#x27;t found</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="understanding-relaxation">Understanding Relaxation<a href="#understanding-relaxation" class="hash-link" aria-label="Direct link to Understanding Relaxation" title="Direct link to Understanding Relaxation" translate="no"></a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-relaxation">What Is Relaxation?<a href="#what-is-relaxation" class="hash-link" aria-label="Direct link to What Is Relaxation?" title="Direct link to What Is Relaxation?" translate="no"></a></h3>
<p>Sometimes, strict filters find too few periods (or none). <strong>Relaxation automatically loosens filters</strong> until a minimum number of periods is found.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-to-enable">How to Enable<a href="#how-to-enable" class="hash-link" aria-label="Direct link to How to Enable" title="Direct link to How to Enable" translate="no"></a></h3>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">enable_min_periods_best</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#36acaa">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">min_periods_best</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Try to find at least 2 periods per day</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">relaxation_attempts_best</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">11</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Flex levels to test (default: 11 steps = 22 filter combinations)</span><br></span></code></pre></div></div>
<p><strong> Good news:</strong> Relaxation is <strong>enabled by default</strong> with sensible settings. Most users don&#x27;t need to change anything here!</p>
<p>Set the matching <code>relaxation_attempts_peak</code> value when tuning Peak Price periods. Both sliders accept 1-12 attempts, and the default of 11 flex levels translates to 22 filter-combination tries (11 flex levels × 2 filter combos) for each of Best and Peak calculations. Lower it for quick feedback, or raise it when either sensor struggles to hit the minimum-period target on volatile days.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-relaxation-is-better-than-manual-tweaking">Why Relaxation Is Better Than Manual Tweaking<a href="#why-relaxation-is-better-than-manual-tweaking" class="hash-link" aria-label="Direct link to Why Relaxation Is Better Than Manual Tweaking" title="Direct link to Why Relaxation Is Better Than Manual Tweaking" translate="no"></a></h3>
<p><strong>Problem with manual settings:</strong></p>
<ul>
<li class="">You set flex to 25% → Works great on Monday (volatile prices)</li>
<li class="">Same 25% flex on Tuesday (flat prices) → Finds &quot;best price&quot; periods that aren&#x27;t really cheap</li>
<li class="">You&#x27;re stuck with one setting for all days</li>
</ul>
<p><strong>Solution with relaxation:</strong></p>
<ul>
<li class="">Monday (volatile): Uses flex 15% (original) → Finds 2 perfect periods ✓</li>
<li class="">Tuesday (flat): Escalates to flex 21% → Finds 2 decent periods ✓</li>
<li class="">Wednesday (mixed): Uses flex 18% → Finds 2 good periods ✓</li>
</ul>
<p><strong>Each day gets exactly the flexibility it needs!</strong></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-it-works-adaptive-matrix">How It Works (Adaptive Matrix)<a href="#how-it-works-adaptive-matrix" class="hash-link" aria-label="Direct link to How It Works (Adaptive Matrix)" title="Direct link to How It Works (Adaptive Matrix)" translate="no"></a></h3>
<p>Relaxation uses a <strong>matrix approach</strong> - trying <em>N</em> flexibility levels (your configured <strong>relaxation attempts</strong>) with 2 filter combinations per level. With the default of 11 attempts, that means 11 flex levels × 2 filter combinations = <strong>22 total filter-combination tries per day</strong>; fewer attempts mean fewer flex increases, while more attempts extend the search further before giving up.</p>
<p><strong>Important:</strong> The flexibility increment is <strong>fixed at 3% per step</strong> (hard-coded for reliability). This means:</p>
<ul>
<li class="">Base flex 15% → 18% → 21% → 24% → ... → 48% (with 11 attempts)</li>
<li class="">Base flex 20% → 23% → 26% → 29% → ... → 50% (with 11 attempts)</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="phase-matrix">Phase Matrix<a href="#phase-matrix" class="hash-link" aria-label="Direct link to Phase Matrix" title="Direct link to Phase Matrix" translate="no"></a></h4>
<p>For each day, the system tries:</p>
<p><strong>Flexibility Levels (Attempts):</strong></p>
<ol>
<li class="">Attempt 1 = Original flex (e.g., 15%)</li>
<li class="">Attempt 2 = +3% step (18%)</li>
<li class="">Attempt 3 = +3% step (21%)</li>
<li class="">Attempt 4 = +3% step (24%)</li>
<li class="">… Attempts 5-11 (default) continue adding +3% each time</li>
<li class="">… Additional attempts keep extending the same pattern up to the 12-attempt maximum (up to 51%)</li>
</ol>
<p><strong>2 Filter Combinations (per flexibility level):</strong></p>
<ol>
<li class="">Original filters (your configured level filter)</li>
<li class="">Remove level filter (level=any)</li>
</ol>
<p><strong>Example progression:</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Flex 15% + Original filters → Not enough periods</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Flex 15% + Level=any → Not enough periods</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Flex 18% + Original filters → Not enough periods</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Flex 18% + Level=any → SUCCESS! Found 2 periods ✓</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">(stops here - no need to try more)</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="choosing-the-number-of-attempts">Choosing the Number of Attempts<a href="#choosing-the-number-of-attempts" class="hash-link" aria-label="Direct link to Choosing the Number of Attempts" title="Direct link to Choosing the Number of Attempts" translate="no"></a></h3>
<ul>
<li class=""><strong>Default (11 attempts)</strong> balances speed and completeness for most grids (22 combinations per day for both Best and Peak)</li>
<li class=""><strong>Lower (4-8 attempts)</strong> if you only want mild relaxation and keep processing time minimal (reaches ~27-39% flex)</li>
<li class=""><strong>Higher (12 attempts)</strong> for extremely volatile days when you must reach near the 50% maximum (24 combinations)</li>
<li class="">Remember: each additional attempt adds two more filter combinations because every new flex level still runs both filter overrides (original + level=any)</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="per-day-independence">Per-Day Independence<a href="#per-day-independence" class="hash-link" aria-label="Direct link to Per-Day Independence" title="Direct link to Per-Day Independence" translate="no"></a></h4>
<p><strong>Critical:</strong> Each day relaxes <strong>independently</strong>:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Day 1: Finds 2 periods with flex 15% (original) → No relaxation needed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Day 2: Needs flex 21% + level=any → Uses relaxed settings</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Day 3: Finds 2 periods with flex 15% (original) → No relaxation needed</span><br></span></code></pre></div></div>
<p><strong>Why?</strong> Price patterns vary daily. Some days have clear cheap/expensive windows (strict filters work), others don&#x27;t (relaxation needed).</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="common-scenarios">Common Scenarios<a href="#common-scenarios" class="hash-link" aria-label="Direct link to Common Scenarios" title="Direct link to Common Scenarios" translate="no"></a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="scenario-1-simple-best-price-default">Scenario 1: Simple Best Price (Default)<a href="#scenario-1-simple-best-price-default" class="hash-link" aria-label="Direct link to Scenario 1: Simple Best Price (Default)" title="Direct link to Scenario 1: Simple Best Price (Default)" translate="no"></a></h3>
<p><strong>Goal:</strong> Find the cheapest time each day to run dishwasher</p>
<p><strong>Configuration:</strong></p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Use defaults - no configuration needed!</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">best_price_flex</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">15</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># (default)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">best_price_min_period_length</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">60</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># (default)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">best_price_min_distance_from_avg</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># (default)</span><br></span></code></pre></div></div>
<p><strong>What you get:</strong></p>
<ul>
<li class="">1-3 periods per day with prices ≤ MIN + 15%</li>
<li class="">Each period at least 1 hour long</li>
<li class="">All periods at least 5% cheaper than daily average</li>
</ul>
<p><strong>Automation example:</strong></p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">automation</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">trigger</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">platform</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> state</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">entity_id</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> binary_sensor.tibber_home_best_price_period</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">to</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;on&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">action</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">service</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> switch.turn_on</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">target</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">entity_id</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> switch.dishwasher</span><br></span></code></pre></div></div>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="troubleshooting">Troubleshooting<a href="#troubleshooting" class="hash-link" aria-label="Direct link to Troubleshooting" title="Direct link to Troubleshooting" translate="no"></a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="no-periods-found">No Periods Found<a href="#no-periods-found" class="hash-link" aria-label="Direct link to No Periods Found" title="Direct link to No Periods Found" translate="no"></a></h3>
<p><strong>Symptom:</strong> <code>binary_sensor.tibber_home_best_price_period</code> never turns &quot;on&quot;</p>
<p><strong>Common Solutions:</strong></p>
<ol>
<li class="">
<p><strong>Check if relaxation is enabled</strong></p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">enable_min_periods_best</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#36acaa">true</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Should be true (default)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">min_periods_best</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Try to find at least 2 periods</span><br></span></code></pre></div></div>
</li>
<li class="">
<p><strong>If still no periods, check filters</strong></p>
<ul>
<li class="">Look at sensor attributes: <code>relaxation_active</code> and <code>relaxation_level</code></li>
<li class="">If relaxation exhausted all attempts: Filters too strict or flat price day</li>
</ul>
</li>
<li class="">
<p><strong>Try increasing flexibility slightly</strong></p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">best_price_flex</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">20</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Increase from default 15%</span><br></span></code></pre></div></div>
</li>
<li class="">
<p><strong>Or reduce period length requirement</strong></p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">best_price_min_period_length</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">45</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Reduce from default 60 minutes</span><br></span></code></pre></div></div>
</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="periods-split-into-small-pieces">Periods Split Into Small Pieces<a href="#periods-split-into-small-pieces" class="hash-link" aria-label="Direct link to Periods Split Into Small Pieces" title="Direct link to Periods Split Into Small Pieces" translate="no"></a></h3>
<p><strong>Symptom:</strong> Many short periods instead of one long period</p>
<p><strong>Common Solutions:</strong></p>
<ol>
<li class="">
<p><strong>If using level filter, add gap tolerance</strong></p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">best_price_max_level</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> cheap</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">best_price_max_level_gap_count</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Allow 2 NORMAL intervals</span><br></span></code></pre></div></div>
</li>
<li class="">
<p><strong>Slightly increase flexibility</strong></p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">best_price_flex</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">20</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># From 15% → captures wider price range</span><br></span></code></pre></div></div>
</li>
<li class="">
<p><strong>Check for price spikes</strong></p>
<ul>
<li class="">Automatic smoothing should handle this</li>
<li class="">Check attribute: <code>period_interval_smoothed_count</code></li>
<li class="">If 0: Not isolated spikes, but real price levels</li>
</ul>
</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="understanding-sensor-attributes">Understanding Sensor Attributes<a href="#understanding-sensor-attributes" class="hash-link" aria-label="Direct link to Understanding Sensor Attributes" title="Direct link to Understanding Sensor Attributes" translate="no"></a></h3>
<p><strong>Key attributes to check:</strong></p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Entity: binary_sensor.tibber_home_best_price_period</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># When &quot;on&quot; (period active):</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">start</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;2025-11-11T02:00:00+01:00&quot;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Period start time</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">end</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;2025-11-11T05:00:00+01:00&quot;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Period end time</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">duration_minutes</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">180</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Duration in minutes</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">price_avg</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">18.5</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Average price in the period</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">rating_level</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;LOW&quot;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># All intervals have LOW rating</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Relaxation info (shows if filter loosening was needed):</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">relaxation_active</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#36acaa">true</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># This day needed relaxation</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">relaxation_level</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;price_diff_18.0%+level_any&quot;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Found at 18% flex, level filter removed</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Optional (only shown when relevant):</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">period_interval_smoothed_count</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Number of price spikes smoothed</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">period_interval_level_gap_count</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Number of &quot;mediocre&quot; intervals tolerated</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="midnight-price-classification-changes">Midnight Price Classification Changes<a href="#midnight-price-classification-changes" class="hash-link" aria-label="Direct link to Midnight Price Classification Changes" title="Direct link to Midnight Price Classification Changes" translate="no"></a></h3>
<p><strong>Symptom:</strong> A Best Price period at 23:45 suddenly changes to Peak Price at 00:00 (or vice versa), even though the absolute price barely changed.</p>
<p><strong>Why This Happens:</strong></p>
<p>This is <strong>mathematically correct behavior</strong> caused by how electricity prices are set in the day-ahead market:</p>
<p><strong>Market Timing:</strong></p>
<ul>
<li class="">The EPEX SPOT Day-Ahead auction closes at <strong>12:00 CET</strong> each day</li>
<li class=""><strong>All prices</strong> for the next day (00:00-23:45) are set at this moment</li>
<li class="">Late-day intervals (23:45) are priced <strong>~36 hours before delivery</strong></li>
<li class="">Early-day intervals (00:00) are priced <strong>~12 hours before delivery</strong></li>
</ul>
<p><strong>Why Prices Jump at Midnight:</strong></p>
<ol>
<li class=""><strong>Forecast Uncertainty:</strong> Weather, demand, and renewable generation forecasts are more uncertain 36 hours ahead than 12 hours ahead</li>
<li class=""><strong>Risk Buffer:</strong> Late-day prices include a risk premium for this uncertainty</li>
<li class=""><strong>Independent Days:</strong> Each day has its own min/max/avg calculated from its 96 intervals</li>
<li class=""><strong>Relative Classification:</strong> Periods are classified based on their <strong>position within the day&#x27;s price range</strong>, not absolute prices</li>
</ol>
<p><strong>Example:</strong></p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Day 1 (low volatility, narrow range)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">Price range</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> 18</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">22 ct/kWh (4 ct span)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">Daily average</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> 20 ct/kWh</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">23:45</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> 18.5 ct/kWh → 7.5% below average → BEST PRICE ✅</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Day 2 (low volatility, narrow range)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">Price range</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> 17</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">21 ct/kWh (4 ct span)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">Daily average</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> 19 ct/kWh</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">00:00</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> 18.6 ct/kWh → 2.1% below average → PEAK PRICE ❌</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Observation: Absolute price barely changed (18.5 → 18.6 ct)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># But relative position changed dramatically:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># - Day 1: Near the bottom of the range</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># - Day 2: Near the middle/top of the range</span><br></span></code></pre></div></div>
<p><strong>When This Occurs:</strong></p>
<ul>
<li class=""><strong>Low-volatility days:</strong> When price span is narrow (&lt; 5 ct/kWh)</li>
<li class=""><strong>Stable weather:</strong> Similar conditions across multiple days</li>
<li class=""><strong>Market transitions:</strong> Switching between high/low demand seasons</li>
</ul>
<p><strong>How to Detect:</strong></p>
<p>Check the volatility sensors to understand if a period flip is meaningful:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Check daily volatility (available in integration)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">sensor.tibber_home_volatility_today</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> 8.2% </span><span class="token comment" style="color:#999988;font-style:italic"># Low volatility</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">sensor.tibber_home_volatility_tomorrow</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> 7.9% </span><span class="token comment" style="color:#999988;font-style:italic"># Also low</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Low volatility (&lt; 15%) means:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># - Small absolute price differences between periods</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># - Classification changes may not be economically significant</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># - Consider ignoring period classification on such days</span><br></span></code></pre></div></div>
<p><strong>Handling in Automations:</strong></p>
<p>You can make your automations volatility-aware:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Option 1: Only act on high-volatility days</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">automation</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">alias</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;Dishwasher - Best Price (High Volatility Only)&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">trigger</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">platform</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> state</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">entity_id</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> binary_sensor.tibber_home_best_price_period</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">to</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;on&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">condition</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">condition</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> numeric_state</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">entity_id</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> sensor.tibber_home_volatility_today</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">above</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">15</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Only act if volatility &gt; 15%</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">action</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">service</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> switch.turn_on</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">entity_id</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> switch.dishwasher</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Option 2: Check absolute price, not just classification</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">automation</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">alias</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;Heat Water - Cheap Enough&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">trigger</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">platform</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> state</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">entity_id</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> binary_sensor.tibber_home_best_price_period</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">to</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;on&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">condition</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">condition</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> numeric_state</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">entity_id</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> sensor.tibber_home_current_interval_price_ct</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">below</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">20</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Absolute threshold: &lt; 20 ct/kWh</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">action</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">service</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> switch.turn_on</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">entity_id</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> switch.water_heater</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Option 3: Use per-period day volatility (available on period sensors)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">automation</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">alias</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;EV Charging - Volatility-Aware&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">trigger</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">platform</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> state</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">entity_id</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> binary_sensor.tibber_home_best_price_period</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">to</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;on&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">condition</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Check if the period&#x27;s day has meaningful volatility</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">condition</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> template</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">value_template</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">&gt;</span><span class="token scalar string" style="color:#e3116c"></span><br></span><span class="token-line" style="color:#393A34"><span class="token scalar string" style="color:#e3116c"> {{ state_attr(&#x27;binary_sensor.tibber_home_best_price_period&#x27;, &#x27;day_volatility_%&#x27;) | float(0) &gt; 15 }}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">action</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">service</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> switch.turn_on</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">entity_id</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> switch.ev_charger</span><br></span></code></pre></div></div>
<p><strong>Available Per-Period Attributes:</strong></p>
<p>Each period sensor exposes day volatility and price statistics:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">binary_sensor.tibber_home_best_price_period</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">day_volatility_%</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">8.2</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Volatility % of the period&#x27;s day</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">day_price_min</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1800.0</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Minimum price of the day (ct/kWh)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">day_price_max</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2200.0</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Maximum price of the day (ct/kWh)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">day_price_span</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">400.0</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Difference (max - min) in ct</span><br></span></code></pre></div></div>
<p>These attributes allow automations to check: &quot;Is the classification meaningful on this particular day?&quot;</p>
<p><strong>Summary:</strong></p>
<ul>
<li class=""><strong>Expected behavior:</strong> Periods are evaluated per-day, midnight is a natural boundary</li>
<li class=""><strong>Market reality:</strong> Late-day prices have more uncertainty than early-day prices</li>
<li class=""><strong>Solution:</strong> Use volatility sensors, absolute price thresholds, or per-period day volatility attributes</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="advanced-topics">Advanced Topics<a href="#advanced-topics" class="hash-link" aria-label="Direct link to Advanced Topics" title="Direct link to Advanced Topics" translate="no"></a></h2>
<p>For advanced configuration patterns and technical deep-dive, see:</p>
<ul>
<li class=""><a class="" href="/hass.tibber_prices/user/automation-examples">Automation Examples</a> - Real-world automation patterns</li>
<li class=""><a class="" href="/hass.tibber_prices/user/actions">Actions</a> - Using the <code>tibber_prices.get_chartdata</code> action for custom visualizations</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="quick-reference">Quick Reference<a href="#quick-reference" class="hash-link" aria-label="Direct link to Quick Reference" title="Direct link to Quick Reference" translate="no"></a></h3>
<p><strong>Configuration Parameters:</strong></p>
<table><thead><tr><th>Parameter</th><th>Default</th><th>Range</th><th>Purpose</th></tr></thead><tbody><tr><td><code>best_price_flex</code></td><td>15%</td><td>0-100%</td><td>Search range from daily MIN</td></tr><tr><td><code>best_price_min_period_length</code></td><td>60 min</td><td>15-240</td><td>Minimum duration</td></tr><tr><td><code>best_price_min_distance_from_avg</code></td><td>5%</td><td>0-20%</td><td>Quality threshold</td></tr><tr><td><code>best_price_max_level</code></td><td>any</td><td>any/cheap/vcheap</td><td>Absolute quality</td></tr><tr><td><code>best_price_max_level_gap_count</code></td><td>0</td><td>0-10</td><td>Gap tolerance</td></tr><tr><td><code>enable_min_periods_best</code></td><td>true</td><td>true/false</td><td>Enable relaxation</td></tr><tr><td><code>min_periods_best</code></td><td>2</td><td>1-10</td><td>Target periods per day</td></tr><tr><td><code>relaxation_attempts_best</code></td><td>11</td><td>1-12</td><td>Flex levels (attempts) per day</td></tr></tbody></table>
<p><strong>Peak Price:</strong> Same parameters with <code>peak_price_*</code> prefix (defaults: flex=-15%, same otherwise)</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="price-levels-reference">Price Levels Reference<a href="#price-levels-reference" class="hash-link" aria-label="Direct link to Price Levels Reference" title="Direct link to Price Levels Reference" translate="no"></a></h3>
<p>The Tibber API provides price levels for each 15-minute interval:</p>
<p><strong>Levels (based on trailing 24h average):</strong></p>
<ul>
<li class=""><code>VERY_CHEAP</code> - Significantly below average</li>
<li class=""><code>CHEAP</code> - Below average</li>
<li class=""><code>NORMAL</code> - Around average</li>
<li class=""><code>EXPENSIVE</code> - Above average</li>
<li class=""><code>VERY_EXPENSIVE</code> - Significantly above average</li>
</ul>
<hr>
<p><strong>Last updated:</strong> November 20, 2025
<strong>Integration version:</strong> 2.0+</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_WFHX"><a href="https://github.com/jpawlowski/hass.tibber_prices/tree/main/docs/user/docs/period-calculation.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_JAkA"><span class="theme-last-updated">Last updated<!-- --> on <b><time datetime="2025-12-06T01:37:06.000Z" itemprop="dateModified">Dec 6, 2025</time></b></span></div></div></footer><div style="margin-top:3rem"></div></article><nav class="docusaurus-mt-lg pagination-nav" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/hass.tibber_prices/user/sensors"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Sensors</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/hass.tibber_prices/user/dynamic-icons"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Dynamic Icons</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#table-of-contents" class="table-of-contents__link toc-highlight">Table of Contents</a></li><li><a href="#quick-start" class="table-of-contents__link toc-highlight">Quick Start</a><ul><li><a href="#what-are-price-periods" class="table-of-contents__link toc-highlight">What Are Price Periods?</a></li><li><a href="#default-behavior" class="table-of-contents__link toc-highlight">Default Behavior</a></li><li><a href="#example-timeline" class="table-of-contents__link toc-highlight">Example Timeline</a></li></ul></li><li><a href="#how-it-works" class="table-of-contents__link toc-highlight">How It Works</a><ul><li><a href="#the-basic-idea" class="table-of-contents__link toc-highlight">The Basic Idea</a></li><li><a href="#step-by-step-process" class="table-of-contents__link toc-highlight">Step-by-Step Process</a></li><li><a href="#visual-example" class="table-of-contents__link toc-highlight">Visual Example</a></li></ul></li><li><a href="#configuration-guide" class="table-of-contents__link toc-highlight">Configuration Guide</a><ul><li><a href="#basic-settings" class="table-of-contents__link toc-highlight">Basic Settings</a></li><li><a href="#optional-filters" class="table-of-contents__link toc-highlight">Optional Filters</a></li><li><a href="#tweaking-strategy-what-to-adjust-first" class="table-of-contents__link toc-highlight">Tweaking Strategy: What to Adjust First?</a></li><li><a href="#common-mistakes-to-avoid" class="table-of-contents__link toc-highlight">Common Mistakes to Avoid</a></li></ul></li><li><a href="#understanding-relaxation" class="table-of-contents__link toc-highlight">Understanding Relaxation</a><ul><li><a href="#what-is-relaxation" class="table-of-contents__link toc-highlight">What Is Relaxation?</a></li><li><a href="#how-to-enable" class="table-of-contents__link toc-highlight">How to Enable</a></li><li><a href="#why-relaxation-is-better-than-manual-tweaking" class="table-of-contents__link toc-highlight">Why Relaxation Is Better Than Manual Tweaking</a></li><li><a href="#how-it-works-adaptive-matrix" class="table-of-contents__link toc-highlight">How It Works (Adaptive Matrix)</a></li><li><a href="#choosing-the-number-of-attempts" class="table-of-contents__link toc-highlight">Choosing the Number of Attempts</a></li></ul></li><li><a href="#common-scenarios" class="table-of-contents__link toc-highlight">Common Scenarios</a><ul><li><a href="#scenario-1-simple-best-price-default" class="table-of-contents__link toc-highlight">Scenario 1: Simple Best Price (Default)</a></li></ul></li><li><a href="#troubleshooting" class="table-of-contents__link toc-highlight">Troubleshooting</a><ul><li><a href="#no-periods-found" class="table-of-contents__link toc-highlight">No Periods Found</a></li><li><a href="#periods-split-into-small-pieces" class="table-of-contents__link toc-highlight">Periods Split Into Small Pieces</a></li><li><a href="#understanding-sensor-attributes" class="table-of-contents__link toc-highlight">Understanding Sensor Attributes</a></li><li><a href="#midnight-price-classification-changes" class="table-of-contents__link toc-highlight">Midnight Price Classification Changes</a></li></ul></li><li><a href="#advanced-topics" class="table-of-contents__link toc-highlight">Advanced Topics</a><ul><li><a href="#quick-reference" class="table-of-contents__link toc-highlight">Quick Reference</a></li><li><a href="#price-levels-reference" class="table-of-contents__link toc-highlight">Price Levels Reference</a></li></ul></li></ul></div></div></div></div></main></div></div></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/hass.tibber_prices/user/intro">User Guide</a></li><li class="footer__item"><a href="https://jpawlowski.github.io/hass.tibber_prices/developer/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Developer Guide<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://github.com/jpawlowski/hass.tibber_prices/issues" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub Issues<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://community.home-assistant.io/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Home Assistant Community<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://github.com/jpawlowski/hass.tibber_prices" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://github.com/jpawlowski/hass.tibber_prices/releases" target="_blank" rel="noopener noreferrer" class="footer__link-item">Release Notes<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Not affiliated with Tibber AS. Community-maintained custom integration. Built with Docusaurus.</div></div></div></footer></div>
</body>
</html>