mirror of
https://github.com/jpawlowski/hass.tibber_prices.git
synced 2026-03-30 05:13:40 +00:00
371 lines
No EOL
119 KiB
HTML
371 lines
No EOL
119 KiB
HTML
<!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&family=Space+Grotesk:wght@500;600;700&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 & Support" class="categoryLinkLabel_W154">🔧 Help & 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'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'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'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 "best" just because they'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) - "Only show if prices are CHEAP/EXPENSIVE (not just below/above average)"</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 (>30%) is rarely useful. <strong>Recommendation:</strong> Start with 15-20% and enable relaxation – it adapts automatically to each day'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 (>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> "Only notify me when prices are objectively cheap/expensive"</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 < 10%, MEDIUM < 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'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 "mediocre" 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> "Don't split periods just because one interval isn't perfectly CHEAP"</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'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'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 >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 "mediocre" (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 (>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't increase flexibility to >30% manually</strong> → Use relaxation instead
|
||
❌ <strong>Don't combine high distance (>10%) with strict level filter</strong> → Too restrictive
|
||
❌ <strong>Don't disable relaxation with strict filters</strong> → You'll get zero periods on some days
|
||
❌ <strong>Don'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'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'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 "best price" periods that aren't really cheap</li>
|
||
<li class="">You'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'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">"on"</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 "on"</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 "on" (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">"2025-11-11T02:00:00+01:00"</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">"2025-11-11T05:00:00+01:00"</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">"LOW"</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">"price_diff_18.0%+level_any"</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 "mediocre" 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'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 (< 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 (< 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">"Dishwasher - Best Price (High Volatility Only)"</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">"on"</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 > 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">"Heat Water - Cheap Enough"</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">"on"</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: < 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">"EV Charging - Volatility-Aware"</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">"on"</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'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">></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('binary_sensor.tibber_home_best_price_period', 'day_volatility_%') | float(0) > 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'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: "Is the classification meaningful on this particular day?"</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> |