node-red-contrib-power-saver 3.0.7 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/.vuepress/config.js +10 -2
- package/docs/.vuepress/dist/404.html +4 -4
- package/docs/.vuepress/dist/assets/img/best-save-config.93fa3c21.png +0 -0
- package/docs/.vuepress/dist/assets/img/lowest-price-config.6d66a8c2.png +0 -0
- package/docs/.vuepress/dist/assets/img/next-schedule-entity.4406856a.png +0 -0
- package/docs/.vuepress/dist/assets/img/next-schedule-flow.413ad62b.png +0 -0
- package/docs/.vuepress/dist/assets/img/next-schedule-sensor.eb896bdd.png +0 -0
- package/docs/.vuepress/dist/assets/js/app.5cf39ea6.js +1 -0
- package/docs/.vuepress/dist/assets/js/runtime~app.61982ee8.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-0607240a.661e1808.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-08683c60.844b04c7.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-0aca7ba6.b42fad7f.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-0b5e3c8c.34230e16.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-1ad821fa.6e2194d0.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-30acb564.f2fcd69f.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-4637f9e4.38f66bbb.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-510ed0d4.67ecc9be.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-5954bcb2.182daf70.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-5db8da3a.f2de6cb9.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-61f728ca.6fdbbb92.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-677dfaed.0013f083.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-7c87f26e.1127dcf5.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-8daa1a0e.1f821c07.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-b4a42144.9e5f9728.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-e8c55052.cf8b0764.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-fffb8e28.cc5c1c74.js +1 -0
- package/docs/.vuepress/dist/changelog/index.html +4 -4
- package/docs/.vuepress/dist/contribute/index.html +4 -4
- package/docs/.vuepress/dist/examples/example-next-schedule-entity.html +25 -0
- package/docs/.vuepress/dist/examples/example-nordpool-current-state.html +177 -157
- package/docs/.vuepress/dist/examples/example-nordpool-events-state.html +5 -5
- package/docs/.vuepress/dist/examples/example-tibber-mqtt.html +5 -5
- package/docs/.vuepress/dist/examples/index.html +4 -4
- package/docs/.vuepress/dist/guide/index.html +5 -5
- package/docs/.vuepress/dist/index.html +4 -4
- package/docs/.vuepress/dist/logo.png +0 -0
- package/docs/.vuepress/dist/nodes/index.html +4 -4
- package/docs/.vuepress/dist/nodes/old-power-saver-doc.html +6 -6
- package/docs/.vuepress/dist/nodes/power-saver.html +4 -4
- package/docs/.vuepress/dist/nodes/ps-elvia-add-tariff.html +4 -4
- package/docs/.vuepress/dist/nodes/ps-receive-price.html +7 -7
- package/docs/.vuepress/dist/nodes/ps-strategy-best-save.html +5 -5
- package/docs/.vuepress/dist/nodes/ps-strategy-lowest-price.html +5 -5
- package/docs/.vuepress/dist/nodes/strategy-input.html +5 -5
- package/docs/.vuepress/public/logo.png +0 -0
- package/docs/README.md +7 -5
- package/docs/changelog/README.md +22 -5
- package/docs/contribute/README.md +1 -1
- package/docs/examples/README.md +4 -0
- package/docs/examples/example-next-schedule-entity.md +41 -0
- package/docs/examples/example-nordpool-current-state.md +172 -152
- package/docs/faq/README.md +23 -0
- package/docs/guide/README.md +16 -15
- package/docs/images/add-tariff-flow.png +0 -0
- package/docs/images/logo copy.png +0 -0
- package/docs/images/logo.png +0 -0
- package/docs/images/logo.psd +0 -0
- package/docs/images/mysterious-plan.png +0 -0
- package/docs/images/next-schedule-entity.png +0 -0
- package/docs/images/next-schedule-flow.png +0 -0
- package/docs/images/next-schedule-sensor.png +0 -0
- package/docs/images/node-ps-general-add-tariff.png +0 -0
- package/docs/images/node-red-icon-2.svg +30 -0
- package/docs/nodes/README.md +6 -0
- package/docs/nodes/old-power-saver-doc.md +6 -6
- package/docs/nodes/ps-elvia-add-tariff.md +1 -1
- package/docs/nodes/ps-general-add-tariff.md +49 -0
- package/docs/nodes/ps-receive-price.md +9 -5
- package/docs/nodes/ps-strategy-best-save.md +5 -1
- package/docs/nodes/ps-strategy-lowest-price.md +3 -3
- package/docs/nodes/strategy-input.md +1 -1
- package/package.json +3 -2
- package/src/elvia/elvia-add-tariff.js +7 -6
- package/src/general-add-tariff-functions.js +46 -0
- package/src/general-add-tariff.html +186 -0
- package/src/general-add-tariff.js +35 -0
- package/src/receive-price-functions.js +8 -0
- package/src/strategy-lowest-price.js +2 -1
- package/test/data/lowest-price-input-missing-end.json +197 -0
- package/test/data/lowest-price-result-missing-end.json +319 -0
- package/test/data/nordpool-3-days-prices.json +197 -0
- package/test/data/nordpool-3-days-result.json +439 -0
- package/test/data/nordpool-prices-in-payload.json +287 -0
- package/test/elvia.test.js +16 -2
- package/test/general-add-tariff-functions.test.js +104 -0
- package/test/general-add-tariff.test.js +183 -0
- package/test/receive-price.test.js +22 -0
- package/test/strategy-lowest-price.test.js +33 -0
- package/docs/.vuepress/dist/assets/js/app.342dc054.js +0 -1
- package/docs/.vuepress/dist/assets/js/runtime~app.0d53f24f.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-08683c60.07fe8291.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-0aca7ba6.aec5ba75.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-0b5e3c8c.d008d8bc.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-1ad821fa.85407071.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-30acb564.73b8e29f.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-4637f9e4.22ab9413.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-510ed0d4.129ef915.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-5954bcb2.be07962c.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-5db8da3a.ac192f35.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-61f728ca.802ab15e.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-677dfaed.9bbbd037.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-7c87f26e.457a1a60.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-8daa1a0e.db8b59c6.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-b4a42144.6e0c5aa0.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-e8c55052.5f85b6cd.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-fffb8e28.e815e852.js +0 -1
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
<meta charset="utf-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
6
|
<meta name="generator" content="VuePress 2.0.0-beta.27">
|
|
7
|
-
<
|
|
8
|
-
<link rel="preload" href="/node-red-contrib-power-saver/assets/js/runtime~app.
|
|
7
|
+
<link rel="icon" href="/euro.png"><title>Strategy input format | Power Saver</title><meta name="description" content="A Node-RED note to save money on hourly changing power prices">
|
|
8
|
+
<link rel="preload" href="/node-red-contrib-power-saver/assets/js/runtime~app.61982ee8.js" as="script"><link rel="preload" href="/node-red-contrib-power-saver/assets/css/styles.e835bef6.css" as="style"><link rel="preload" href="/node-red-contrib-power-saver/assets/js/812.79dad458.js" as="script"><link rel="preload" href="/node-red-contrib-power-saver/assets/js/app.5cf39ea6.js" as="script">
|
|
9
9
|
<link rel="stylesheet" href="/node-red-contrib-power-saver/assets/css/styles.e835bef6.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
|
12
|
-
<div id="app"><!--[--><div class="theme-container"><!--[--><header class="navbar"><div class="toggle-sidebar-button" title="toggle sidebar" aria-expanded="false" role="button" tabindex="0"><div class="icon" aria-hidden="true"><span></span><span></span><span></span></div></div><span><a href="/node-red-contrib-power-saver/" class=""><!----><span class="site-name">Power Saver</span></a></span><div class="navbar-links-wrapper" style=""><!--[--><!--]--><nav class="navbar-links can-hide"><!--[--><div class="navbar-links-item"><a href="/node-red-contrib-power-saver/guide/" class="nav-link" aria-label="Guide"><!--[--><!--]--> Guide <!--[--><!--]--></a></div><div class="navbar-links-item"><a href="/node-red-contrib-power-saver/nodes/" class="nav-link router-link-active" aria-label="Nodes"><!--[--><!--]--> Nodes <!--[--><!--]--></a></div><div class="navbar-links-item"><a href="/node-red-contrib-power-saver/examples/" class="nav-link" aria-label="Examples"><!--[--><!--]--> Examples <!--[--><!--]--></a></div><div class="navbar-links-item"><a href="/node-red-contrib-power-saver/contribute/" class="nav-link" aria-label="Contribute"><!--[--><!--]--> Contribute <!--[--><!--]--></a></div><div class="navbar-links-item"><a href="/node-red-contrib-power-saver/changelog/" class="nav-link" aria-label="Changes"><!--[--><!--]--> Changes <!--[--><!--]--></a></div><!--]--></nav><!--[--><!--]--><button class="toggle-dark-button" title="toggle dark mode"><svg style="" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg style="display:none;" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button><!----></div></header><!--]--><div class="sidebar-mask"></div><!--[--><aside class="sidebar"><nav class="navbar-links"><!--[--><div class="navbar-links-item"><a href="/node-red-contrib-power-saver/guide/" class="nav-link" aria-label="Guide"><!--[--><!--]--> Guide <!--[--><!--]--></a></div><div class="navbar-links-item"><a href="/node-red-contrib-power-saver/nodes/" class="nav-link router-link-active" aria-label="Nodes"><!--[--><!--]--> Nodes <!--[--><!--]--></a></div><div class="navbar-links-item"><a href="/node-red-contrib-power-saver/examples/" class="nav-link" aria-label="Examples"><!--[--><!--]--> Examples <!--[--><!--]--></a></div><div class="navbar-links-item"><a href="/node-red-contrib-power-saver/contribute/" class="nav-link" aria-label="Contribute"><!--[--><!--]--> Contribute <!--[--><!--]--></a></div><div class="navbar-links-item"><a href="/node-red-contrib-power-saver/changelog/" class="nav-link" aria-label="Changes"><!--[--><!--]--> Changes <!--[--><!--]--></a></div><!--]--></nav><!--[--><!--]--><ul class="sidebar-links"><!--[--><!--[--><p class="sidebar-heading sidebar-item">Nodes</p><ul class=""><li><!--[--><a href="/node-red-contrib-power-saver/nodes/power-saver.md" class="nav-link sidebar-item" aria-label="Power Saver"><!--[--><!--]--> Power Saver <!--[--><!--]--></a><!----><!--]--></li><li><!--[--><p class="sidebar-item">Strategy nodes</p><ul class="sidebar-sub-items"><li><!--[--><a href="/node-red-contrib-power-saver/nodes/ps-strategy-best-save.html" class="nav-link sidebar-item" aria-label="ps-strategy-best-save"><!--[--><!--]--> ps-strategy-best-save <!--[--><!--]--></a><!----><!--]--></li><li><!--[--><a href="/node-red-contrib-power-saver/nodes/ps-strategy-lowest-price.html" class="nav-link sidebar-item" aria-label="ps-strategy-lowest-price"><!--[--><!--]--> ps-strategy-lowest-price <!--[--><!--]--></a><!----><!--]--></li></ul><!--]--></li><li><!--[--><p class="sidebar-item">Utility nodes</p><ul class="sidebar-sub-items"><li><!--[--><a href="/node-red-contrib-power-saver/nodes/ps-receive-price.html" class="nav-link sidebar-item" aria-label="ps-receive-price"><!--[--><!--]--> ps-receive-price <!--[--><!--]--></a><!----><!--]--></li></ul><!--]--></li><li><!--[--><p class="sidebar-item">Grid tariff nodes</p><ul class="sidebar-sub-items"><li><!--[--><a href="/node-red-contrib-power-saver/nodes/ps-elvia-add-tariff.html" class="nav-link sidebar-item" aria-label="ps-elvia-add-tariff"><!--[--><!--]--> ps-elvia-add-tariff <!--[--><!--]--></a><!----><!--]--></li></ul><!--]--></li></ul><!--]--><!--[--><p class="sidebar-heading sidebar-item active">Data format</p><ul class=""><li><!--[--><a aria-current="page" href="/node-red-contrib-power-saver/nodes/strategy-input.html" class="router-link-active router-link-exact-active nav-link router-link-active sidebar-item active" aria-label="Strategy input format"><!--[--><!--]--> Strategy input format <!--[--><!--]--></a><!----><!--]--></li></ul><!--]--><!--]--></ul><!--[--><!--]--></aside><!--]--><!--[--><main class="page"><!--[--><!--]--><div class="theme-default-content"><!--[--><h1 id="strategy-input-format" tabindex="-1"><a class="header-anchor" href="#strategy-input-format" aria-hidden="true">#</a> Strategy input format</h1><p>The common input for strategy nodes is a payload with a <code>priceData</code> array containing an object for each hour. Each object has a <code>value</code>
|
|
12
|
+
<div id="app"><!--[--><div class="theme-container"><!--[--><header class="navbar"><div class="toggle-sidebar-button" title="toggle sidebar" aria-expanded="false" role="button" tabindex="0"><div class="icon" aria-hidden="true"><span></span><span></span><span></span></div></div><span><a href="/node-red-contrib-power-saver/" class=""><!----><span class="site-name">Power Saver</span></a></span><div class="navbar-links-wrapper" style=""><!--[--><!--]--><nav class="navbar-links can-hide"><!--[--><div class="navbar-links-item"><a href="/node-red-contrib-power-saver/guide/" class="nav-link" aria-label="Guide"><!--[--><!--]--> Guide <!--[--><!--]--></a></div><div class="navbar-links-item"><a href="/node-red-contrib-power-saver/nodes/" class="nav-link router-link-active" aria-label="Nodes"><!--[--><!--]--> Nodes <!--[--><!--]--></a></div><div class="navbar-links-item"><a href="/node-red-contrib-power-saver/examples/" class="nav-link" aria-label="Examples"><!--[--><!--]--> Examples <!--[--><!--]--></a></div><div class="navbar-links-item"><a href="/node-red-contrib-power-saver/contribute/" class="nav-link" aria-label="Contribute"><!--[--><!--]--> Contribute <!--[--><!--]--></a></div><div class="navbar-links-item"><a href="/node-red-contrib-power-saver/changelog/" class="nav-link" aria-label="Changes"><!--[--><!--]--> Changes <!--[--><!--]--></a></div><div class="navbar-links-item"><a class="nav-link external" href="https://github.com/ottopaulsen/node-red-contrib-power-saver" rel="noopener noreferrer" target="_blank" aria-label="GitHub"><!--[--><!--]--> GitHub <span><svg class="icon outbound" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><!--[--><span class="sr-only">open in new window</span><!--]--></span><!--[--><!--]--></a></div><!--]--></nav><!--[--><!--]--><button class="toggle-dark-button" title="toggle dark mode"><svg style="" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg style="display:none;" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button><!----></div></header><!--]--><div class="sidebar-mask"></div><!--[--><aside class="sidebar"><nav class="navbar-links"><!--[--><div class="navbar-links-item"><a href="/node-red-contrib-power-saver/guide/" class="nav-link" aria-label="Guide"><!--[--><!--]--> Guide <!--[--><!--]--></a></div><div class="navbar-links-item"><a href="/node-red-contrib-power-saver/nodes/" class="nav-link router-link-active" aria-label="Nodes"><!--[--><!--]--> Nodes <!--[--><!--]--></a></div><div class="navbar-links-item"><a href="/node-red-contrib-power-saver/examples/" class="nav-link" aria-label="Examples"><!--[--><!--]--> Examples <!--[--><!--]--></a></div><div class="navbar-links-item"><a href="/node-red-contrib-power-saver/contribute/" class="nav-link" aria-label="Contribute"><!--[--><!--]--> Contribute <!--[--><!--]--></a></div><div class="navbar-links-item"><a href="/node-red-contrib-power-saver/changelog/" class="nav-link" aria-label="Changes"><!--[--><!--]--> Changes <!--[--><!--]--></a></div><div class="navbar-links-item"><a class="nav-link external" href="https://github.com/ottopaulsen/node-red-contrib-power-saver" rel="noopener noreferrer" target="_blank" aria-label="GitHub"><!--[--><!--]--> GitHub <span><svg class="icon outbound" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><!--[--><span class="sr-only">open in new window</span><!--]--></span><!--[--><!--]--></a></div><!--]--></nav><!--[--><!--]--><ul class="sidebar-links"><!--[--><!--[--><p class="sidebar-heading sidebar-item">Nodes</p><ul class=""><li><!--[--><a href="/node-red-contrib-power-saver/nodes/power-saver.md" class="nav-link sidebar-item" aria-label="Power Saver"><!--[--><!--]--> Power Saver <!--[--><!--]--></a><!----><!--]--></li><li><!--[--><p class="sidebar-item">Strategy nodes</p><ul class="sidebar-sub-items"><li><!--[--><a href="/node-red-contrib-power-saver/nodes/ps-strategy-best-save.html" class="nav-link sidebar-item" aria-label="ps-strategy-best-save"><!--[--><!--]--> ps-strategy-best-save <!--[--><!--]--></a><!----><!--]--></li><li><!--[--><a href="/node-red-contrib-power-saver/nodes/ps-strategy-lowest-price.html" class="nav-link sidebar-item" aria-label="ps-strategy-lowest-price"><!--[--><!--]--> ps-strategy-lowest-price <!--[--><!--]--></a><!----><!--]--></li></ul><!--]--></li><li><!--[--><p class="sidebar-item">Utility nodes</p><ul class="sidebar-sub-items"><li><!--[--><a href="/node-red-contrib-power-saver/nodes/ps-receive-price.html" class="nav-link sidebar-item" aria-label="ps-receive-price"><!--[--><!--]--> ps-receive-price <!--[--><!--]--></a><!----><!--]--></li></ul><!--]--></li><li><!--[--><p class="sidebar-item">Grid tariff nodes</p><ul class="sidebar-sub-items"><li><!--[--><a href="/node-red-contrib-power-saver/nodes/ps-elvia-add-tariff.html" class="nav-link sidebar-item" aria-label="ps-elvia-add-tariff"><!--[--><!--]--> ps-elvia-add-tariff <!--[--><!--]--></a><!----><!--]--></li></ul><!--]--></li></ul><!--]--><!--[--><p class="sidebar-heading sidebar-item active">Data format</p><ul class=""><li><!--[--><a aria-current="page" href="/node-red-contrib-power-saver/nodes/strategy-input.html" class="router-link-active router-link-exact-active nav-link router-link-active sidebar-item active" aria-label="Strategy input format"><!--[--><!--]--> Strategy input format <!--[--><!--]--></a><!----><!--]--></li></ul><!--]--><!--]--></ul><!--[--><!--]--></aside><!--]--><!--[--><main class="page"><!--[--><!--]--><div class="theme-default-content"><!--[--><h1 id="strategy-input-format" tabindex="-1"><a class="header-anchor" href="#strategy-input-format" aria-hidden="true">#</a> Strategy input format</h1><p>The common input for strategy nodes is a payload with a <code>priceData</code> array containing an object for each hour. Each object has a <code>value</code> which is the price, and a <code>start</code> which is the start time for the hour.</p><p>Example:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token punctuation">{</span>
|
|
13
13
|
<span class="token property">"priceData"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|
14
14
|
<span class="token punctuation">{</span>
|
|
15
15
|
<span class="token property">"value"</span><span class="token operator">:</span> <span class="token number">0.9544</span><span class="token punctuation">,</span>
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
<span class="token comment">// ... normally 24 or 48 hours</span>
|
|
35
35
|
<span class="token punctuation">]</span>
|
|
36
36
|
<span class="token punctuation">}</span>
|
|
37
|
-
</code></pre><div class="line-numbers"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br></div></div><p>This format is used for:</p><ul><li>Output of the <code>ps-receive-price</code> node</li><li>Input and output of the <code>ps-xxx-add-tariff</code> nodes</li><li>Input for the strategy nodes (<code>ps-strategy-xxx-xxx</code>)</li></ul><!--]--></div><footer class="page-meta"><!----><div class="meta-item last-updated"><span class="meta-item-label">Last Updated: </span><span class="meta-item-info">12/
|
|
38
|
-
<script src="/node-red-contrib-power-saver/assets/js/runtime~app.
|
|
37
|
+
</code></pre><div class="line-numbers"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br></div></div><p>This format is used for:</p><ul><li>Output of the <code>ps-receive-price</code> node</li><li>Input and output of the <code>ps-xxx-add-tariff</code> nodes</li><li>Input for the strategy nodes (<code>ps-strategy-xxx-xxx</code>)</li></ul><!--]--></div><footer class="page-meta"><!----><div class="meta-item last-updated"><span class="meta-item-label">Last Updated: </span><span class="meta-item-info">12/20/2021, 10:10:18 PM</span></div><!----></footer><!----><!--[--><!--]--></main><!--]--></div><!----><!--]--></div>
|
|
38
|
+
<script src="/node-red-contrib-power-saver/assets/js/runtime~app.61982ee8.js" defer></script><script src="/node-red-contrib-power-saver/assets/js/812.79dad458.js" defer></script><script src="/node-red-contrib-power-saver/assets/js/app.5cf39ea6.js" defer></script>
|
|
39
39
|
</body>
|
|
40
40
|
</html>
|
|
Binary file
|
package/docs/README.md
CHANGED
|
@@ -3,7 +3,7 @@ home: true
|
|
|
3
3
|
heroImage: /logo.png
|
|
4
4
|
heroAlt: Power Saver
|
|
5
5
|
heroText: node-red-contrib-power-saver
|
|
6
|
-
tagline:
|
|
6
|
+
tagline: A collection of nodes to Node-RED that automates saving money on variable electricity prices
|
|
7
7
|
actions:
|
|
8
8
|
- text: Guide
|
|
9
9
|
link: /guide
|
|
@@ -18,11 +18,11 @@ features:
|
|
|
18
18
|
- title: Automatic scheduling
|
|
19
19
|
details: Automatically calculate best plan and send signal to turn on and off.
|
|
20
20
|
- title: Best Save Strategy
|
|
21
|
-
details: Postpone power consumption when there is most to save.
|
|
21
|
+
details: Postpone power consumption when there is most to save, perfect for the water heater.
|
|
22
22
|
- title: Lowest Price Strategy
|
|
23
|
-
details: Turn on power when the prices are the lowest
|
|
24
|
-
- title:
|
|
25
|
-
details:
|
|
23
|
+
details: Turn on power when the prices are the lowest, perfect for smart charging or heating.
|
|
24
|
+
- title: Add variable grid tariff
|
|
25
|
+
details: Automatically add values that varies on fixed hours, or use API to get grid tariff from Elvia.
|
|
26
26
|
- title: Perfect with Home Assistant
|
|
27
27
|
details: Use Home Assistant with Node-RED and control switches via service calls.
|
|
28
28
|
- title: Tibber and Nord Pool
|
|
@@ -30,3 +30,5 @@ features:
|
|
|
30
30
|
footer: Created by Otto Paulsen<br/><br/><a href="https://www.patreon.com/bePatron?u=65948417" data-patreon-widget-type="become-patron-button">Become a Patron!</a>
|
|
31
31
|
footerHtml: true
|
|
32
32
|
---
|
|
33
|
+
|
|
34
|
+
This is a collection of nodes for the popular [Node-RED](https://nodered.org/) that you can use to save money on variable electricity prices. Node-RED is a widely used low-code programming tool that can be used together with many smart home solutions to create automations.
|
package/docs/changelog/README.md
CHANGED
|
@@ -6,13 +6,30 @@ sidebar: "auto"
|
|
|
6
6
|
|
|
7
7
|
List the most significant changes, starting in version 1.0.9.
|
|
8
8
|
|
|
9
|
+
## 3.1.0
|
|
10
|
+
|
|
11
|
+
- New node `ps-general-add-tariff` to add values that varies af fixed times during the day.
|
|
12
|
+
|
|
13
|
+
## 3.0.10
|
|
14
|
+
|
|
15
|
+
- Fix bug in ps-elvia-add-tariff so it connects to API.
|
|
16
|
+
|
|
17
|
+
## 3.0.9
|
|
18
|
+
|
|
19
|
+
- Fix Nord Pool input for current state node, to read data when payload is set to entity.
|
|
20
|
+
|
|
21
|
+
## 3.0.8
|
|
22
|
+
|
|
23
|
+
- Fix bug in Lowest Price node when period goes over midnight.
|
|
24
|
+
- Fix documentation - lots of pages were failing.
|
|
25
|
+
|
|
9
26
|
## 3.0.7
|
|
10
27
|
|
|
11
28
|
- Fix Nord Pool current state node input.
|
|
12
29
|
|
|
13
30
|
## 3.0.6
|
|
14
31
|
|
|
15
|
-
- Remove non-
|
|
32
|
+
- Remove non-existent node from package.json.
|
|
16
33
|
|
|
17
34
|
## 3.0.5
|
|
18
35
|
|
|
@@ -20,7 +37,7 @@ List the most significant changes, starting in version 1.0.9.
|
|
|
20
37
|
|
|
21
38
|
## 3.0.4
|
|
22
39
|
|
|
23
|
-
- Remove `null`-values from
|
|
40
|
+
- Remove `null`-values from Nord Pool data for `tomorrow`.
|
|
24
41
|
|
|
25
42
|
## 3.0.3
|
|
26
43
|
|
|
@@ -34,7 +51,7 @@ List the most significant changes, starting in version 1.0.9.
|
|
|
34
51
|
|
|
35
52
|
## 3.0.1
|
|
36
53
|
|
|
37
|
-
- Fix so elvia
|
|
54
|
+
- Fix so elvia subscription key is stored as credential
|
|
38
55
|
- Fix bug on config for strategy nodes. Config was not saved properly.
|
|
39
56
|
- Remove double output bug, and better handling when hoursOn > period
|
|
40
57
|
|
|
@@ -44,7 +61,7 @@ List the most significant changes, starting in version 1.0.9.
|
|
|
44
61
|
- New node `ps-strategy-best-save` is replacing old node `Power Saver` together with the new `ps-receive-price` node.
|
|
45
62
|
- Add new strategy node: `ps-strategy-lowest-price`.
|
|
46
63
|
- Add new node: `ps-receive-price`.
|
|
47
|
-
- Add
|
|
64
|
+
- Add grid tariff for Elvia customers, using the `ps-elvia-add-tariff` node.
|
|
48
65
|
- New documentation.
|
|
49
66
|
- Change node category to Power Saver.
|
|
50
67
|
|
|
@@ -68,7 +85,7 @@ List the most significant changes, starting in version 1.0.9.
|
|
|
68
85
|
|
|
69
86
|
## 2.0.2
|
|
70
87
|
|
|
71
|
-
- Fix so
|
|
88
|
+
- Fix so Nord Pool data can be read directly from the current state node
|
|
72
89
|
|
|
73
90
|
## 2.0.1
|
|
74
91
|
|
|
@@ -32,7 +32,7 @@ It would be very nice to get more examples into the documentation. If you have m
|
|
|
32
32
|
|
|
33
33
|
## Bug reports
|
|
34
34
|
|
|
35
|
-
If you find a bug, please describe it
|
|
35
|
+
If you find a bug, please describe it thoroughly and make a [GitHub issue](https://github.com/ottopaulsen/node-red-contrib-power-saver/issues). If the bug is related to the scheduling, **please provide the full output from output 3** on the strategy node.
|
|
36
36
|
|
|
37
37
|
## Ideas
|
|
38
38
|
|
package/docs/examples/README.md
CHANGED
|
@@ -3,3 +3,7 @@
|
|
|
3
3
|
[Nord Pool and `current state` node in HA](./example-nordpool-current-state)
|
|
4
4
|
[Nord Pool and `events: state` node in HA](./example-nordpool-events-state)
|
|
5
5
|
[Tibber and mqtt](./example-tibber-mqtt)
|
|
6
|
+
|
|
7
|
+
## User provided examples
|
|
8
|
+
|
|
9
|
+
[Output schedule to a sensor entity](./example-next-schedule-entity.md) (by Stefan)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Output schedule to a sensor entity
|
|
2
|
+
This example was contributed by [Stefan](https://github.com/oakhill87)
|
|
3
|
+
|
|
4
|
+
Note: Requires [Node-RED Companion Integration](https://github.com/zachowj/hass-node-red).
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
 
|
|
8
|
+
|
|
9
|
+
This JavaScript code snippet can be pasted into a Function-node. When connected to the schedule-output (3) from Best Save, it will loop through the array of available hours and find the next timestamp where a power saving schedule is initated.
|
|
10
|
+
```js
|
|
11
|
+
for (var i = 0; i < msg.payload.hours.length; i++) {
|
|
12
|
+
if (msg.payload.hours[i].onOff != true) {
|
|
13
|
+
var schedule = {time: msg.payload.hours[i].start, topic: "Neste spareperiode", length: msg.payload.config.maxHoursToSaveInSequence, savings: msg.payload.hours[i].saving}
|
|
14
|
+
break}
|
|
15
|
+
else {
|
|
16
|
+
var schedule = {time: false, topic: "Ingen aksjoner", length: "0", savings: "0"}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
var schedule_array = {upcoming: schedule}
|
|
20
|
+
return [schedule_array]
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
This will return the following:
|
|
24
|
+
- msg.upcoming.time = Timestamp if saving is scheduled - False if no schedule with the current available prices.
|
|
25
|
+
- msg.upcoming.length = How long the next saving will last - set to 0 if no schedule.
|
|
26
|
+
- msg.upcoming.savings = Estimated savings retrieved from the node.
|
|
27
|
+
|
|
28
|
+
## Setup
|
|
29
|
+
1. Paste the code above into a Function node and connect it to the schedule output.
|
|
30
|
+
2. Create an entity node from the Node-RED Companion Integration, and configure it according to the steps below:
|
|
31
|
+
|
|
32
|
+
The msg.topic is currently not used, but in case you'd want to specify dynamic names in the sensor instead of in the frontend, go ahead and add them as attributes using the following configuration:
|
|
33
|
+
|
|
34
|
+
1. **State**: msg.upcoming.time
|
|
35
|
+
2. Attribute key **Duration**: msg.upcoming.length
|
|
36
|
+
3. Attribute key **Savings**: msg.upcoming.savings
|
|
37
|
+
|
|
38
|
+
<img src="../images/next-schedule-entity.png" width="25%">
|
|
39
|
+
|
|
40
|
+
## To-do
|
|
41
|
+
If you find any bugs, let me know, but as long as the payload doesn't change it should work.
|
|
@@ -10,157 +10,177 @@ In this example, data is read from the Nord Pool sensor in HA via the `current s
|
|
|
10
10
|
|
|
11
11
|
```json:no-line-numbers
|
|
12
12
|
[
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
13
|
+
{
|
|
14
|
+
"id": "e2578f6a.210a8",
|
|
15
|
+
"type": "debug",
|
|
16
|
+
"z": "d938c47f.3398f8",
|
|
17
|
+
"name": "Nord Pool result",
|
|
18
|
+
"active": false,
|
|
19
|
+
"tosidebar": true,
|
|
20
|
+
"console": false,
|
|
21
|
+
"tostatus": false,
|
|
22
|
+
"complete": "true",
|
|
23
|
+
"targetType": "full",
|
|
24
|
+
"statusVal": "",
|
|
25
|
+
"statusType": "auto",
|
|
26
|
+
"x": 820,
|
|
27
|
+
"y": 440,
|
|
28
|
+
"wires": []
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"id": "48bcdcca.fe42a4",
|
|
32
|
+
"type": "api-current-state",
|
|
33
|
+
"z": "d938c47f.3398f8",
|
|
34
|
+
"name": "Read Nord Pool",
|
|
35
|
+
"server": "ec4a12a1.b2be9",
|
|
36
|
+
"version": 2,
|
|
37
|
+
"outputs": 1,
|
|
38
|
+
"halt_if": "",
|
|
39
|
+
"halt_if_type": "str",
|
|
40
|
+
"halt_if_compare": "is",
|
|
41
|
+
"entity_id": "sensor.nordpool_kwh_trheim_nok_3_095_025",
|
|
42
|
+
"state_type": "str",
|
|
43
|
+
"blockInputOverrides": false,
|
|
44
|
+
"outputProperties": [
|
|
45
|
+
{
|
|
46
|
+
"property": "payload",
|
|
47
|
+
"propertyType": "msg",
|
|
48
|
+
"value": "",
|
|
49
|
+
"valueType": "entity"
|
|
50
|
+
}
|
|
51
|
+
],
|
|
52
|
+
"x": 280,
|
|
53
|
+
"y": 380,
|
|
54
|
+
"wires": [
|
|
55
|
+
[
|
|
56
|
+
"428d7c7ca88db95f"
|
|
57
|
+
]
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"id": "97cc8e58.4247a",
|
|
62
|
+
"type": "inject",
|
|
63
|
+
"z": "d938c47f.3398f8",
|
|
64
|
+
"name": "",
|
|
65
|
+
"props": [
|
|
66
|
+
{
|
|
67
|
+
"p": "payload"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"p": "topic",
|
|
71
|
+
"vt": "str"
|
|
72
|
+
}
|
|
73
|
+
],
|
|
74
|
+
"repeat": "3600",
|
|
75
|
+
"crontab": "",
|
|
76
|
+
"once": true,
|
|
77
|
+
"onceDelay": 0.1,
|
|
78
|
+
"topic": "",
|
|
79
|
+
"payloadType": "date",
|
|
80
|
+
"x": 110,
|
|
81
|
+
"y": 380,
|
|
82
|
+
"wires": [
|
|
83
|
+
[
|
|
84
|
+
"48bcdcca.fe42a4"
|
|
85
|
+
]
|
|
86
|
+
]
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"id": "a6f2769b.1a62a8",
|
|
90
|
+
"type": "api-call-service",
|
|
91
|
+
"z": "d938c47f.3398f8",
|
|
92
|
+
"name": "Turn on VVB",
|
|
93
|
+
"server": "ec4a12a1.b2be9",
|
|
94
|
+
"version": 3,
|
|
95
|
+
"debugenabled": false,
|
|
96
|
+
"service_domain": "switch",
|
|
97
|
+
"service": "turn_on",
|
|
98
|
+
"entityId": "switch.varmtvannsbereder_switch",
|
|
99
|
+
"data": "",
|
|
100
|
+
"dataType": "jsonata",
|
|
101
|
+
"mergecontext": "",
|
|
102
|
+
"mustacheAltTags": false,
|
|
103
|
+
"outputProperties": [],
|
|
104
|
+
"queue": "none",
|
|
105
|
+
"x": 810,
|
|
106
|
+
"y": 340,
|
|
107
|
+
"wires": [
|
|
108
|
+
[]
|
|
109
|
+
]
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"id": "9fc75126.65dd3",
|
|
113
|
+
"type": "api-call-service",
|
|
114
|
+
"z": "d938c47f.3398f8",
|
|
115
|
+
"name": "Turn off VVB",
|
|
116
|
+
"server": "ec4a12a1.b2be9",
|
|
117
|
+
"version": 3,
|
|
118
|
+
"debugenabled": true,
|
|
119
|
+
"service_domain": "switch",
|
|
120
|
+
"service": "turn_off",
|
|
121
|
+
"entityId": "switch.varmtvannsbereder_switch",
|
|
122
|
+
"data": "",
|
|
123
|
+
"dataType": "json",
|
|
124
|
+
"mergecontext": "",
|
|
125
|
+
"mustacheAltTags": false,
|
|
126
|
+
"outputProperties": [],
|
|
127
|
+
"queue": "none",
|
|
128
|
+
"x": 810,
|
|
129
|
+
"y": 380,
|
|
130
|
+
"wires": [
|
|
131
|
+
[]
|
|
132
|
+
]
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"id": "428d7c7ca88db95f",
|
|
136
|
+
"type": "ps-receive-price",
|
|
137
|
+
"z": "d938c47f.3398f8",
|
|
138
|
+
"name": "Price Receiver",
|
|
139
|
+
"x": 460,
|
|
140
|
+
"y": 380,
|
|
141
|
+
"wires": [
|
|
142
|
+
[
|
|
143
|
+
"4147bf0b99fe626f"
|
|
144
|
+
]
|
|
145
|
+
]
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"id": "4147bf0b99fe626f",
|
|
149
|
+
"type": "ps-strategy-best-save",
|
|
150
|
+
"z": "d938c47f.3398f8",
|
|
151
|
+
"name": "Best Save",
|
|
152
|
+
"maxHoursToSaveInSequence": "4",
|
|
153
|
+
"minHoursOnAfterMaxSequenceSaved": "1",
|
|
154
|
+
"minSaving": "0.03",
|
|
155
|
+
"sendCurrentValueWhenRescheduling": true,
|
|
156
|
+
"outputIfNoSchedule": "true",
|
|
157
|
+
"scheduleOnlyFromCurrentTime": "false",
|
|
158
|
+
"x": 630,
|
|
159
|
+
"y": 380,
|
|
160
|
+
"wires": [
|
|
161
|
+
[
|
|
162
|
+
"a6f2769b.1a62a8"
|
|
163
|
+
],
|
|
164
|
+
[
|
|
165
|
+
"9fc75126.65dd3"
|
|
166
|
+
],
|
|
167
|
+
[
|
|
168
|
+
"e2578f6a.210a8"
|
|
169
|
+
]
|
|
170
|
+
]
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
"id": "ec4a12a1.b2be9",
|
|
174
|
+
"type": "server",
|
|
175
|
+
"name": "Home Assistant",
|
|
176
|
+
"version": 2,
|
|
177
|
+
"addon": true,
|
|
178
|
+
"rejectUnauthorizedCerts": true,
|
|
179
|
+
"ha_boolean": "y|yes|true|on|home|open",
|
|
180
|
+
"connectionDelay": true,
|
|
181
|
+
"cacheJson": true,
|
|
182
|
+
"heartbeat": false,
|
|
183
|
+
"heartbeatInterval": 30
|
|
184
|
+
}
|
|
165
185
|
]
|
|
166
186
|
```
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# FAQ
|
|
2
|
+
|
|
3
|
+
## Why does the Best Save node not turn off the most expensive hours?
|
|
4
|
+
|
|
5
|
+
Here is an example:
|
|
6
|
+
|
|
7
|
+

|
|
8
|
+
|
|
9
|
+
The purple strokes shows the savings. The Best Save node is configured to save up to 5 hours in a sequence, and only when saving is more than 0.05 NOK.
|
|
10
|
+
|
|
11
|
+
Why does it not save the most expensive period?
|
|
12
|
+
|
|
13
|
+
If you move the saving-period 4-5 hours earlier, the most expensive hours would have been saved. Why is this not better?
|
|
14
|
+
|
|
15
|
+
Remember that the power that is not used during the saving-period, will be used immediately after. At least, that is the idea, and the normal behaviour if the power consumer is a water heater or another heater controlled by a thermostat. So, then the power would be used one of the blue hours in stead of the green cheaper hour.
|
|
16
|
+
|
|
17
|
+
Also remember that when saving, you do not save the full price. You only save what is the difference between the price during the saved hours and the price the hour immediately after.
|
|
18
|
+
|
|
19
|
+
So the best saving is found where this difference is the largest, and that is not always by turning off the most expensive hours. In the case above, the difference is largest when you turn off the hours marked wit a purple stroke, so this is the best saving you can get.
|
|
20
|
+
|
|
21
|
+
Of course, if you expand the saving period from 5 to 10 hours you would save even more, but that would be a different case, and you can do that if it is ok for you to turn off for that long time.
|
|
22
|
+
|
|
23
|
+
Another alternative is to reduce the minimum saving from 0.05 to 0.001. Then the 3 first red hours would be turned off, but the last red would have to be on, in order to get one hour on until the next 5-hour period off. This would however not save you for much money, since the hour that is on is almost as expensive as the hours you would turn off.
|