node-red-contrib-power-saver 3.4.3 → 3.4.4
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/components/BestSaveVerificator.vue +17 -7
- package/docs/.vuepress/components/DonateButtons.vue +0 -1
- package/docs/.vuepress/config.js +15 -28
- package/docs/.vuepress/dist/404.html +6 -6
- package/docs/.vuepress/dist/assets/404.32f46df8.js +1 -0
- package/docs/.vuepress/dist/assets/404.html.bee13de6.js +1 -0
- package/docs/.vuepress/dist/assets/404.html.f166316b.js +1 -0
- package/docs/.vuepress/dist/assets/BestSaveVerificator.574001b7.js +1 -0
- package/docs/.vuepress/dist/assets/DonateButtons.ab660315.js +1 -0
- package/docs/.vuepress/dist/assets/Layout.1b8eeaf1.js +1 -0
- package/docs/.vuepress/dist/assets/{img/add-tariff-flow.eb700d4f.png → add-tariff-flow.9e258f5b.png} +0 -0
- package/docs/.vuepress/dist/assets/app.b3d8926b.js +8 -0
- package/docs/.vuepress/dist/assets/{img/back-to-top.8b37f773.svg → back-to-top.8efcbe56.svg} +0 -0
- package/docs/.vuepress/dist/assets/{img/best-save-config.79a2f39a.png → best-save-config.70d29386.png} +0 -0
- package/docs/.vuepress/dist/assets/best-save-viewer.html.bb64949a.js +1 -0
- package/docs/.vuepress/dist/assets/best-save-viewer.html.e897b3ac.js +1 -0
- package/docs/.vuepress/dist/assets/{img/copy-payload-best-save.b9192985.png → copy-payload-best-save.8b51cdf4.png} +0 -0
- package/docs/.vuepress/dist/assets/{img/elvia-config-no-config.b4bb972c.png → elvia-config-no-config.7ea35c3b.png} +0 -0
- package/docs/.vuepress/dist/assets/{img/elvia-config-no-tariff.3f89aba8.png → elvia-config-no-tariff.a208a0f3.png} +0 -0
- package/docs/.vuepress/dist/assets/{img/elvia-config-select-tariff.0f73fd56.png → elvia-config-select-tariff.48562d43.png} +0 -0
- package/docs/.vuepress/dist/assets/{img/elvia-config-subscription-key.8be8ab8a.png → elvia-config-subscription-key.3368b931.png} +0 -0
- package/docs/.vuepress/dist/assets/{img/elvia-flow.bae2a4d5.png → elvia-flow.a8b126d6.png} +0 -0
- package/docs/.vuepress/dist/assets/example-cascade-temperature-control.html.3632cc6c.js +272 -0
- package/docs/.vuepress/dist/assets/example-cascade-temperature-control.html.5a363ecf.js +1 -0
- package/docs/.vuepress/dist/assets/{img/example-flow-1.3ff3e23f.png → example-flow-1.971bbb87.png} +0 -0
- package/docs/.vuepress/dist/assets/{img/example-flow-2.b653b58d.png → example-flow-2.a0c62ed7.png} +0 -0
- package/docs/.vuepress/dist/assets/example-heat-capacitor.html.89cdea26.js +1 -0
- package/docs/.vuepress/dist/assets/example-heat-capacitor.html.b87ab267.js +215 -0
- package/docs/.vuepress/dist/assets/example-next-schedule-entity.html.dd06a4d6.js +11 -0
- package/docs/.vuepress/dist/assets/example-next-schedule-entity.html.fc8e9124.js +1 -0
- package/docs/.vuepress/dist/assets/example-nordpool-current-state.html.278abccb.js +1 -0
- package/docs/.vuepress/dist/assets/example-nordpool-current-state.html.8eca9b26.js +174 -0
- package/docs/.vuepress/dist/assets/example-nordpool-events-state.html.05c3331c.js +159 -0
- package/docs/.vuepress/dist/assets/example-nordpool-events-state.html.47dbda83.js +1 -0
- package/docs/.vuepress/dist/assets/example-tibber-mqtt.html.bed6459b.js +1 -0
- package/docs/.vuepress/dist/assets/example-tibber-mqtt.html.ce7f09e2.js +167 -0
- package/docs/.vuepress/dist/assets/{img/heat-capacitor-temperatureVsPrice.6e74905b.png → heat-capacitor-temperatureVsPrice.19bc8932.png} +0 -0
- package/docs/.vuepress/dist/assets/index.html.21bfa52e.js +1 -0
- package/docs/.vuepress/dist/assets/index.html.350682d1.js +38 -0
- package/docs/.vuepress/dist/assets/index.html.3bbc4fe4.js +1 -0
- package/docs/.vuepress/dist/assets/index.html.485a4abc.js +1 -0
- package/docs/.vuepress/dist/assets/index.html.49024575.js +1 -0
- package/docs/.vuepress/dist/assets/index.html.4c0ec52b.js +1 -0
- package/docs/.vuepress/dist/assets/index.html.54f6072c.js +1 -0
- package/docs/.vuepress/dist/assets/index.html.75c4e015.js +1 -0
- package/docs/.vuepress/dist/assets/index.html.7857db23.js +1 -0
- package/docs/.vuepress/dist/assets/index.html.797b027e.js +1 -0
- package/docs/.vuepress/dist/assets/index.html.88f59477.js +1 -0
- package/docs/.vuepress/dist/assets/index.html.c4e8bf36.js +1 -0
- package/docs/.vuepress/dist/assets/index.html.c98d742c.js +1 -0
- package/docs/.vuepress/dist/assets/index.html.edb1389f.js +1 -0
- package/docs/.vuepress/dist/assets/{img/lowest-price-config.6d66a8c2.png → lowest-price-config.d7043621.png} +0 -0
- package/docs/.vuepress/dist/assets/migrate-best-save.dcc20d06.js +1 -0
- package/docs/.vuepress/dist/assets/{img/migrate-best-save.f73420f6.png → migrate-best-save.ec036b00.png} +0 -0
- package/docs/.vuepress/dist/assets/{img/migrate-power-saver.aae13f9d.png → migrate-power-saver.98ee9f2e.png} +0 -0
- package/docs/.vuepress/dist/assets/mysterious-plan.687d8b75.png +0 -0
- package/docs/.vuepress/dist/assets/{img/next-schedule-entity.4406856a.png → next-schedule-entity.418ab6ec.png} +0 -0
- package/docs/.vuepress/dist/assets/{img/next-schedule-flow.413ad62b.png → next-schedule-flow.862dea60.png} +0 -0
- package/docs/.vuepress/dist/assets/{img/next-schedule-sensor.eb896bdd.png → next-schedule-sensor.87198baf.png} +0 -0
- package/docs/.vuepress/dist/assets/node-power-saver.3a115c24.js +1 -0
- package/docs/.vuepress/dist/assets/{img/node-power-saver.51ff2e5d.png → node-power-saver.feb2d4fb.png} +0 -0
- package/docs/.vuepress/dist/assets/{img/node-ps-elvia-add-tariff.94ea2b09.png → node-ps-elvia-add-tariff.0bff05a9.png} +0 -0
- package/docs/.vuepress/dist/assets/node-ps-elvia-add-tariff.57baddc7.js +1 -0
- package/docs/.vuepress/dist/assets/node-ps-general-add-tariff.17755af1.js +1 -0
- package/docs/.vuepress/dist/assets/{img/node-ps-general-add-tariff.a3cf6f06.png → node-ps-general-add-tariff.5a5c98c6.png} +0 -0
- package/docs/.vuepress/dist/assets/{img/node-ps-receive-price.76eaa418.png → node-ps-receive-price.3587e62e.png} +0 -0
- package/docs/.vuepress/dist/assets/node-ps-receive-price.dbc5e137.js +1 -0
- package/docs/.vuepress/dist/assets/{img/node-ps-strategy-best-save.392292d5.png → node-ps-strategy-best-save.13861759.png} +0 -0
- package/docs/.vuepress/dist/assets/node-ps-strategy-best-save.516d9e66.js +1 -0
- package/docs/.vuepress/dist/assets/{img/node-ps-strategy-heat-capacitor-cascade-control.2e75ed9e.png → node-ps-strategy-heat-capacitor-cascade-control.f35cce75.png} +0 -0
- package/docs/.vuepress/dist/assets/node-ps-strategy-heat-capacitor-simple-flow-example.099aa155.js +1 -0
- package/docs/.vuepress/dist/assets/{img/node-ps-strategy-heat-capacitor-simple-flow-example.29d9bf59.png → node-ps-strategy-heat-capacitor-simple-flow-example.5b712b3b.png} +0 -0
- package/docs/.vuepress/dist/assets/node-ps-strategy-heat-capacitor.e7736c9e.js +1 -0
- package/docs/.vuepress/dist/assets/{img/node-ps-strategy-lowest-price.3a4ad347.png → node-ps-strategy-lowest-price.4e5c38ee.png} +0 -0
- package/docs/.vuepress/dist/assets/node-ps-strategy-lowest-price.83209fac.js +1 -0
- package/docs/.vuepress/dist/assets/old-power-saver-doc.html.c7324541.js +1 -0
- package/docs/.vuepress/dist/assets/old-power-saver-doc.html.f428e475.js +83 -0
- package/docs/.vuepress/dist/assets/{img/oven-setpoint-calculation.5bda0eec.png → oven-setpoint-calculation.47b65429.png} +0 -0
- package/docs/.vuepress/dist/assets/{img/overshoot-time.b3b5d70e.png → overshoot-time.2c4e3929.png} +0 -0
- package/docs/.vuepress/dist/assets/plugin-vue_export-helper.21dcd24c.js +1 -0
- package/docs/.vuepress/dist/assets/{img/power-saver-nordpool-current-state.bf14afde.png → power-saver-nordpool-current-state.cbe8e48a.png} +0 -0
- package/docs/.vuepress/dist/assets/{img/power-saver-nordpool-events-state.8c392507.png → power-saver-nordpool-events-state.a764b813.png} +0 -0
- package/docs/.vuepress/dist/assets/{img/power-saver-tibber-mqtt.16891dd2.png → power-saver-tibber-mqtt.c04fb150.png} +0 -0
- package/docs/.vuepress/dist/assets/power-saver.html.4baca6ba.js +1 -0
- package/docs/.vuepress/dist/assets/power-saver.html.875a1f0e.js +1 -0
- package/docs/.vuepress/dist/assets/ps-elvia-add-tariff.html.05d3ab1b.js +1 -0
- package/docs/.vuepress/dist/assets/ps-elvia-add-tariff.html.dce36de0.js +1 -0
- package/docs/.vuepress/dist/assets/ps-general-add-tariff.html.3056f433.js +1 -0
- package/docs/.vuepress/dist/assets/ps-general-add-tariff.html.3cce3e4d.js +1 -0
- package/docs/.vuepress/dist/assets/ps-receive-price.html.0d762910.js +66 -0
- package/docs/.vuepress/dist/assets/ps-receive-price.html.53dde398.js +1 -0
- package/docs/.vuepress/dist/assets/ps-strategy-best-save.html.503ecfbe.js +1 -0
- package/docs/.vuepress/dist/assets/ps-strategy-best-save.html.9b0747bf.js +72 -0
- package/docs/.vuepress/dist/assets/ps-strategy-heat-capacitor.html.53b3383d.js +228 -0
- package/docs/.vuepress/dist/assets/ps-strategy-heat-capacitor.html.b7849bf7.js +1 -0
- package/docs/.vuepress/dist/assets/ps-strategy-lowest-price.html.1e419f56.js +92 -0
- package/docs/.vuepress/dist/assets/ps-strategy-lowest-price.html.f006d811.js +1 -0
- package/docs/.vuepress/dist/assets/strategy-input.html.6d452f16.js +26 -0
- package/docs/.vuepress/dist/assets/strategy-input.html.8a16d321.js +1 -0
- package/docs/.vuepress/dist/assets/style.a8aae67b.css +1 -0
- package/docs/.vuepress/dist/assets/temperature-manipulation-config.a0e0439b.png +0 -0
- package/docs/.vuepress/dist/changelog/index.html +6 -6
- package/docs/.vuepress/dist/contribute/index.html +6 -6
- package/docs/.vuepress/dist/examples/example-cascade-temperature-control.html +6 -6
- package/docs/.vuepress/dist/examples/example-heat-capacitor.html +6 -6
- package/docs/.vuepress/dist/examples/example-next-schedule-entity.html +7 -7
- package/docs/.vuepress/dist/examples/example-nordpool-current-state.html +6 -6
- package/docs/.vuepress/dist/examples/example-nordpool-events-state.html +6 -6
- package/docs/.vuepress/dist/examples/example-tibber-mqtt.html +6 -6
- package/docs/.vuepress/dist/examples/index.html +5 -5
- package/docs/.vuepress/dist/faq/best-save-viewer.html +6 -6
- package/docs/.vuepress/dist/faq/index.html +6 -6
- package/docs/.vuepress/dist/guide/index.html +8 -8
- package/docs/.vuepress/dist/index.html +6 -6
- package/docs/.vuepress/dist/nodes/index.html +6 -6
- package/docs/.vuepress/dist/nodes/old-power-saver-doc.html +9 -9
- package/docs/.vuepress/dist/nodes/power-saver.html +6 -6
- package/docs/.vuepress/dist/nodes/ps-elvia-add-tariff.html +6 -6
- package/docs/.vuepress/dist/nodes/ps-general-add-tariff.html +6 -6
- package/docs/.vuepress/dist/nodes/ps-receive-price.html +11 -11
- package/docs/.vuepress/dist/nodes/ps-strategy-best-save.html +12 -12
- package/docs/.vuepress/dist/nodes/ps-strategy-heat-capacitor.html +11 -11
- package/docs/.vuepress/dist/nodes/ps-strategy-lowest-price.html +11 -11
- package/docs/.vuepress/dist/nodes/strategy-input.html +6 -6
- package/docs/changelog/README.md +4 -0
- package/docs/faq/best-save-viewer.md +1 -0
- package/package.json +9 -11
- package/docs/.vuepress/dist/.nojekyll +0 -0
- package/docs/.vuepress/dist/assets/css/835.styles.c5afb22b.css +0 -1
- package/docs/.vuepress/dist/assets/css/896.styles.21a80cb6.css +0 -1
- package/docs/.vuepress/dist/assets/css/styles.1c48cbd0.css +0 -10
- package/docs/.vuepress/dist/assets/js/229.5c5378fa.js +0 -1
- package/docs/.vuepress/dist/assets/js/331.872104cd.js +0 -1
- package/docs/.vuepress/dist/assets/js/405.f4edd94d.js +0 -2
- package/docs/.vuepress/dist/assets/js/405.f4edd94d.js.LICENSE.txt +0 -8
- package/docs/.vuepress/dist/assets/js/490.1e639e05.js +0 -1
- package/docs/.vuepress/dist/assets/js/491.bd938119.js +0 -1
- package/docs/.vuepress/dist/assets/js/555.d8963d84.js +0 -1
- package/docs/.vuepress/dist/assets/js/811.5f659592.js +0 -1
- package/docs/.vuepress/dist/assets/js/app.6c6c1409.js +0 -1
- package/docs/.vuepress/dist/assets/js/runtime~app.f6ac32d7.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-0607240a.0193a377.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-08683c60.52e94cb6.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-0aca7ba6.cac5d4b9.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-0b5e3c8c.18561f6e.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-1ad821fa.6697a349.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-1b3a0ab8.c6c4e19b.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-1e2b191e.07b8ab21.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-29504124.00be7399.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-30acb564.28af12af.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-3706649a.c76d575b.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-4637f9e4.d334c29a.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-4c28314d.8cbb0f9d.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-510ed0d4.c04bc2e4.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-5954bcb2.dff3fc67.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-5db8da3a.e5e6d7a6.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-61f728ca.81968036.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-677dfaed.c159b0f4.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-7446a652.8fc2c591.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-7c87f26e.8ed52391.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-84304104.f3f07ed3.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-8daa1a0e.ed84ca09.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-b4a42144.9a2a0c9f.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-e8c55052.b7d52fc6.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-fffb8e28.d09ab959.js +0 -1
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="utf-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
|
-
<meta name="generator" content="VuePress 2.0.0-beta.
|
|
6
|
+
<meta name="generator" content="VuePress 2.0.0-beta.36">
|
|
7
7
|
<style>
|
|
8
8
|
:root {
|
|
9
9
|
--c-bg: #fff;
|
|
@@ -22,12 +22,12 @@
|
|
|
22
22
|
document.documentElement.classList.toggle('dark', true);
|
|
23
23
|
}
|
|
24
24
|
</script>
|
|
25
|
-
<link rel="shortcut icon" type="image/x-icon" href="euro.png"><
|
|
26
|
-
<link rel="
|
|
27
|
-
<link rel="stylesheet" href="/assets/
|
|
25
|
+
<link rel="shortcut icon" type="image/x-icon" href="euro.png"><title>ps-strategy-heat-capacitor Experimental | Power Saver</title><meta name="description" content="A Node-RED note to save money on hourly changing power prices">
|
|
26
|
+
<link rel="modulepreload" href="/assets/app.b3d8926b.js"><link rel="modulepreload" href="/assets/ps-strategy-heat-capacitor.html.b7849bf7.js"><link rel="modulepreload" href="/assets/ps-strategy-heat-capacitor.html.53b3383d.js"><link rel="modulepreload" href="/assets/node-ps-strategy-heat-capacitor.e7736c9e.js"><link rel="modulepreload" href="/assets/node-ps-strategy-heat-capacitor-simple-flow-example.099aa155.js"><link rel="modulepreload" href="/assets/plugin-vue_export-helper.21dcd24c.js">
|
|
27
|
+
<link rel="stylesheet" href="/assets/style.a8aae67b.css">
|
|
28
28
|
</head>
|
|
29
29
|
<body>
|
|
30
|
-
<div id="app"><!--[--><div class="theme-container"><!--[--><header ref_key="navbar" 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="/" class=""><img class="logo" src="/Ukraine-heart-shape-flag.png" alt="Power Saver"><span class="site-name can-hide">Power Saver</span></a></span><div class="navbar-items-wrapper" style=""><!--[--><!--]--><nav class="navbar-items can-hide"><!--[--><div class="navbar-item"><a href="/guide/" class="" aria-label="Guide"><!--[--><!--]--> Guide <!--[--><!--]--></a></div><div class="navbar-item"><a href="/nodes/" class="router-link-active" aria-label="Nodes"><!--[--><!--]--> Nodes <!--[--><!--]--></a></div><div class="navbar-item"><a href="/examples/" class="" aria-label="Examples"><!--[--><!--]--> Examples <!--[--><!--]--></a></div><div class="navbar-item"><a href="/faq/" class="" aria-label="FAQ"><!--[--><!--]--> FAQ <!--[--><!--]--></a></div><div class="navbar-item"><a href="/contribute/" class="" aria-label="Contribute"><!--[--><!--]--> Contribute <!--[--><!--]--></a></div><div class="navbar-item"><a href="/changelog/" class="" aria-label="Changes"><!--[--><!--]--> Changes <!--[--><!--]--></a></div><div class="navbar-item"><a class="external-link" href="https://github.com/ottopaulsen/node-red-contrib-power-saver" rel="noopener noreferrer" target="_blank" aria-label="GitHub"><!--[--><!--]--> GitHub <span><svg class="external-link-icon" 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="external-link-icon-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-items"><!--[--><div class="navbar-item"><a href="/guide/" class="" aria-label="Guide"><!--[--><!--]--> Guide <!--[--><!--]--></a></div><div class="navbar-item"><a href="/nodes/" class="router-link-active" aria-label="Nodes"><!--[--><!--]--> Nodes <!--[--><!--]--></a></div><div class="navbar-item"><a href="/examples/" class="" aria-label="Examples"><!--[--><!--]--> Examples <!--[--><!--]--></a></div><div class="navbar-item"><a href="/faq/" class="" aria-label="FAQ"><!--[--><!--]--> FAQ <!--[--><!--]--></a></div><div class="navbar-item"><a href="/contribute/" class="" aria-label="Contribute"><!--[--><!--]--> Contribute <!--[--><!--]--></a></div><div class="navbar-item"><a href="/changelog/" class="" aria-label="Changes"><!--[--><!--]--> Changes <!--[--><!--]--></a></div><div class="navbar-item"><a class="external-link" href="https://github.com/ottopaulsen/node-red-contrib-power-saver" rel="noopener noreferrer" target="_blank" aria-label="GitHub"><!--[--><!--]--> GitHub <span><svg class="external-link-icon" 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="external-link-icon-sr-only">open in new window</span></span><!--[--><!--]--></a></div><!--]--></nav><!--[--><!--]--><ul class="sidebar-items"><!--[--><li><p tabindex="0" class="sidebar-item sidebar-heading active">Nodes <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/nodes/power-saver.md" class="sidebar-item" aria-label="Power Saver"><!--[--><!--]--> Power Saver <!--[--><!--]--></a><!----></li><li><p tabindex="0" class="sidebar-item active">Strategy nodes <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/nodes/ps-strategy-best-save.html" class="sidebar-item" aria-label="ps-strategy-best-save"><!--[--><!--]--> ps-strategy-best-save <!--[--><!--]--></a><!----></li><li><a href="/nodes/ps-strategy-lowest-price.html" class="sidebar-item" aria-label="ps-strategy-lowest-price"><!--[--><!--]--> ps-strategy-lowest-price <!--[--><!--]--></a><!----></li><li><a href="/nodes/ps-strategy-heat-capacitor.md" class="sidebar-item active" aria-label="ps-strategy-heat-capacitor"><!--[--><!--]--> ps-strategy-heat-capacitor <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><p tabindex="0" class="sidebar-item">Utility nodes <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/nodes/ps-receive-price.html" class="sidebar-item" aria-label="ps-receive-price"><!--[--><!--]--> ps-receive-price <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><p tabindex="0" class="sidebar-item">Grid tariff nodes <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/nodes/ps-general-add-tariff.html" class="sidebar-item" aria-label="ps-general-add-tariff"><!--[--><!--]--> ps-general-add-tariff <!--[--><!--]--></a><!----></li><li><a href="/nodes/ps-elvia-add-tariff.html" class="sidebar-item" aria-label="ps-elvia-add-tariff"><!--[--><!--]--> ps-elvia-add-tariff <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><!--]--></ul><!--]--></li><li><p tabindex="0" class="sidebar-item sidebar-heading">Data format <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/nodes/strategy-input.html" class="sidebar-item" aria-label="Strategy input format"><!--[--><!--]--> Strategy input format <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><!--]--></ul><!--[--><!--]--></aside><!--]--><!--[--><main class="page"><!--[--><!--]--><div class="theme-default-content"><!--[--><h1 id="ps-strategy-heat-capacitor-experimental" tabindex="-1"><a class="header-anchor" href="#ps-strategy-heat-capacitor-experimental" aria-hidden="true">#</a> ps-strategy-heat-capacitor <span class="badge warning" style=""><!--[-->Experimental<!--]--></span></h1><p><img src="data:image/png;base64,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" alt="ps-strategy-lowest-price"></p><p>A strategy for moving consumption from expensive to cheap periods utilizing climate entities.</p><h2 id="description" tabindex="-1"><a class="header-anchor" href="#description" aria-hidden="true">#</a> Description</h2><p>The heat capacitor strategy utilizes a large body of mass, like your house or cabin, to procure heat at a time where electricity is cheap, and divest at a time where electricity is expensive.</p><p>This is achieved by increasing the temperature setpoint of one or several climate entities at times when electricity is cheap, and reducing it when electricity is expensive.</p><p>It is a good application for cabins/heated storage spaces, as the entity never actually shuts off the climate entities and should therefore be rather safe to apply (still at you own risk 😃). It can also be used for you house, jacuzzi, and/or pool.</p><p><img src="/assets/img/heat-capacitor-temperatureVsPrice.6e74905b.png" alt="Temperature profile vs. cost"></p><h2 id="configuration" tabindex="-1"><a class="header-anchor" href="#configuration" aria-hidden="true">#</a> Configuration</h2><p><img src="data:image/png;base64,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" alt="Node Configuration"></p><table><thead><tr><th>Value</th><th>Description</th></tr></thead><tbody><tr><td>Time + 1C</td><td>The time required to increase the temperature by 1C.</td></tr><tr><td>Time - 1C</td><td>The time required to decrease the temperature by 1C.</td></tr><tr><td>Setpoint</td><td>Ideal temperature in C</td></tr><tr><td>Max temp adj.</td><td>The number of degrees the system is allowed to increase/decrease.</td></tr><tr><td>Heating Boost [C]</td><td>An extra increase in temperature to the setpoint for the investment period</td></tr><tr><td>Cooling Boost [C]</td><td>An extra decrease in temperature to the setpoint for the divestment period</td></tr><tr><td>Min Savings</td><td>The minimum amount of savings required for a buy/sell cycle.</td></tr></tbody></table><p><img src="/assets/img/node-ps-strategy-heat-capacitor-simple-flow-example.29d9bf59.png" alt="Simple example with Tibber"></p><p>The node consumes price information and outputs $\Delta T$ on its first output and the planned schedule and benefit calculations on the second output. The $\Delta T$ is used to adjust the set-point of a climate entity.</p><h3 id="the-impact-of-time-1c" tabindex="-1"><a class="header-anchor" href="#the-impact-of-time-1c" aria-hidden="true">#</a> The impact of <strong>Time +1C</strong></h3><p>This time is used to optimize the timing of when to turn up the heat. An increase in temperature from 22 to 23C will cause an increased electricity consumption for quite some time after the change has occurred. For heat-pumps, the air is heated first, then walls, furniture etc., creating a high electricity demand in the first hour or so before the demand slowly reduces down to normal levels. The algorithm uses this time to estimate a period of increased consumption and places this at an optimum point in time.</p><p>To get started, 90 minutes can be used for air heaters. Later, one can study the temperature curves or, if available, the power consumption curves of the climate entity, to achieve a better accuracy.</p><h3 id="setpoint" tabindex="-1"><a class="header-anchor" href="#setpoint" aria-hidden="true">#</a> Setpoint</h3><p>The setpoint, $S_p$, indicates the ideal temperature.</p><h3 id="max-temperature-adjustment" tabindex="-1"><a class="header-anchor" href="#max-temperature-adjustment" aria-hidden="true">#</a> Max temperature adjustment</h3><p>A max temperature adjustment $M_{ta}$ value of $0.65~^{\circ}C$ will change the setpoint temperature by $\pm0.65~^{\circ}C$. Please note that a larger number will indicate a longer heating time (Time +1C = 60 and Max Temp Adj.= $0.75~^{\circ}C$ results in a heating time of $60\times0.75\times 2= 90$ minutes</p><h3 id="heating-boost-c" tabindex="-1"><a class="header-anchor" href="#heating-boost-c" aria-hidden="true">#</a> Heating Boost [C]</h3><p>The boost temperatures are used to ensure that a climate entity start to heat during the <code>investment period</code> (the period where the temperature increases). Some climate entities fail to respond when their setpoint is changed by a small $\Delta T$.</p><p>The heating boost, $H_b$, adds this amount of degrees to the setpoint for the investment period. In the previous example, $H_b = 2~^{\circ}C$ will set the temperature to $S_p + 2.75$ for the first 90 minutes, and then reduce it to $S_p+0.75$.</p><h3 id="cooling-boost-c" tabindex="-1"><a class="header-anchor" href="#cooling-boost-c" aria-hidden="true">#</a> Cooling Boost [C]</h3><p>Similarly to the heating boost temperature, the Cooling boost $C_b$ is used in the <code>divestment period</code> (the period where the temperature decreases).</p><p>In the scenario where one should invest at 03:00 at night, and divest at 08:00 in the morning, $M_{ta}=1~^{\circ}C$, $H_b= 2~^{\circ}C$, $C_b=1~^{\circ}C$, and investment and divestment times of 60 minutes will result in the following</p><ul><li>02:00 to 03:00: $+3~^{\circ}C$</li><li>03:00 to 08:00: $+1~^{\circ}C$</li><li>08:00 to 09:00: $-2~^{\circ}C$</li><li>09:00 and onward: $-1~^{\circ}C$</li></ul><h3 id="min-savings" tabindex="-1"><a class="header-anchor" href="#min-savings" aria-hidden="true">#</a> Min Savings</h3><p>The heating and cooling periods can be seen as buy - sell pairs. That is, heat is procured at time t, and the same heat is sold at t+dt. The savings can then be estimated as the price difference $S=price(t+dt) - price(t)$. If this saving is less that the minimum savings requirement, it will be removed. The algorithm removes these in a prioritized order, starting with the pair with the smallest gain.</p><h2 id="dynamic-config" tabindex="-1"><a class="header-anchor" href="#dynamic-config" aria-hidden="true">#</a> Dynamic config</h2><p>It is possible to change config dynamically by sending a config message to the node. The config messages has a payload with a config object like this example:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token property">"payload"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|
30
|
+
<div id="app"><!--[--><div class="theme-container"><!--[--><header ref_key="navbar" 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="/" class=""><img class="logo" src="/Ukraine-heart-shape-flag.png" alt="Power Saver"><span class="site-name can-hide">Power Saver</span></a></span><div class="navbar-items-wrapper" style=""><!--[--><!--]--><nav class="navbar-items can-hide"><!--[--><div class="navbar-item"><a href="/guide/" class="" aria-label="Guide"><!--[--><!--]--> Guide <!--[--><!--]--></a></div><div class="navbar-item"><a href="/nodes/" class="router-link-active" aria-label="Nodes"><!--[--><!--]--> Nodes <!--[--><!--]--></a></div><div class="navbar-item"><a href="/examples/" class="" aria-label="Examples"><!--[--><!--]--> Examples <!--[--><!--]--></a></div><div class="navbar-item"><a href="/faq/" class="" aria-label="FAQ"><!--[--><!--]--> FAQ <!--[--><!--]--></a></div><div class="navbar-item"><a href="/contribute/" class="" aria-label="Contribute"><!--[--><!--]--> Contribute <!--[--><!--]--></a></div><div class="navbar-item"><a href="/changelog/" class="" aria-label="Changes"><!--[--><!--]--> Changes <!--[--><!--]--></a></div><div class="navbar-item"><a class="external-link" href="https://github.com/ottopaulsen/node-red-contrib-power-saver" rel="noopener noreferrer" target="_blank" aria-label="GitHub"><!--[--><!--]--> GitHub <span><svg class="external-link-icon" 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="external-link-icon-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-items"><!--[--><div class="navbar-item"><a href="/guide/" class="" aria-label="Guide"><!--[--><!--]--> Guide <!--[--><!--]--></a></div><div class="navbar-item"><a href="/nodes/" class="router-link-active" aria-label="Nodes"><!--[--><!--]--> Nodes <!--[--><!--]--></a></div><div class="navbar-item"><a href="/examples/" class="" aria-label="Examples"><!--[--><!--]--> Examples <!--[--><!--]--></a></div><div class="navbar-item"><a href="/faq/" class="" aria-label="FAQ"><!--[--><!--]--> FAQ <!--[--><!--]--></a></div><div class="navbar-item"><a href="/contribute/" class="" aria-label="Contribute"><!--[--><!--]--> Contribute <!--[--><!--]--></a></div><div class="navbar-item"><a href="/changelog/" class="" aria-label="Changes"><!--[--><!--]--> Changes <!--[--><!--]--></a></div><div class="navbar-item"><a class="external-link" href="https://github.com/ottopaulsen/node-red-contrib-power-saver" rel="noopener noreferrer" target="_blank" aria-label="GitHub"><!--[--><!--]--> GitHub <span><svg class="external-link-icon" 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="external-link-icon-sr-only">open in new window</span></span><!--[--><!--]--></a></div><!--]--></nav><!--[--><!--]--><ul class="sidebar-items"><!--[--><li><p tabindex="0" class="sidebar-item sidebar-heading active">Nodes <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/nodes/power-saver.md" class="sidebar-item" aria-label="Power Saver"><!--[--><!--]--> Power Saver <!--[--><!--]--></a><!----></li><li><p tabindex="0" class="sidebar-item active">Strategy nodes <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/nodes/ps-strategy-best-save.html" class="sidebar-item" aria-label="ps-strategy-best-save"><!--[--><!--]--> ps-strategy-best-save <!--[--><!--]--></a><!----></li><li><a href="/nodes/ps-strategy-lowest-price.html" class="sidebar-item" aria-label="ps-strategy-lowest-price"><!--[--><!--]--> ps-strategy-lowest-price <!--[--><!--]--></a><!----></li><li><a href="/nodes/ps-strategy-heat-capacitor.md" class="sidebar-item active" aria-label="ps-strategy-heat-capacitor"><!--[--><!--]--> ps-strategy-heat-capacitor <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><p tabindex="0" class="sidebar-item">Utility nodes <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/nodes/ps-receive-price.html" class="sidebar-item" aria-label="ps-receive-price"><!--[--><!--]--> ps-receive-price <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><p tabindex="0" class="sidebar-item">Grid tariff nodes <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/nodes/ps-general-add-tariff.html" class="sidebar-item" aria-label="ps-general-add-tariff"><!--[--><!--]--> ps-general-add-tariff <!--[--><!--]--></a><!----></li><li><a href="/nodes/ps-elvia-add-tariff.html" class="sidebar-item" aria-label="ps-elvia-add-tariff"><!--[--><!--]--> ps-elvia-add-tariff <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><!--]--></ul><!--]--></li><li><p tabindex="0" class="sidebar-item sidebar-heading">Data format <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/nodes/strategy-input.html" class="sidebar-item" aria-label="Strategy input format"><!--[--><!--]--> Strategy input format <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><!--]--></ul><!--[--><!--]--></aside><!--]--><!--[--><main class="page"><!--[--><!--]--><div class="theme-default-content"><!--[--><h1 id="ps-strategy-heat-capacitor-experimental" tabindex="-1"><a class="header-anchor" href="#ps-strategy-heat-capacitor-experimental" aria-hidden="true">#</a> ps-strategy-heat-capacitor <span class="badge warning" style=""><!--[-->Experimental<!--]--></span></h1><p><img src="data:image/png;base64,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" alt="ps-strategy-lowest-price"></p><p>A strategy for moving consumption from expensive to cheap periods utilizing climate entities.</p><h2 id="description" tabindex="-1"><a class="header-anchor" href="#description" aria-hidden="true">#</a> Description</h2><p>The heat capacitor strategy utilizes a large body of mass, like your house or cabin, to procure heat at a time where electricity is cheap, and divest at a time where electricity is expensive.</p><p>This is achieved by increasing the temperature setpoint of one or several climate entities at times when electricity is cheap, and reducing it when electricity is expensive.</p><p>It is a good application for cabins/heated storage spaces, as the entity never actually shuts off the climate entities and should therefore be rather safe to apply (still at you own risk 😃). It can also be used for you house, jacuzzi, and/or pool.</p><p><img src="/assets/heat-capacitor-temperatureVsPrice.19bc8932.png" alt="Temperature profile vs. cost"></p><h2 id="configuration" tabindex="-1"><a class="header-anchor" href="#configuration" aria-hidden="true">#</a> Configuration</h2><p><img src="/assets/temperature-manipulation-config.a0e0439b.png" alt="Node Configuration"></p><table><thead><tr><th>Value</th><th>Description</th></tr></thead><tbody><tr><td>Time + 1C</td><td>The time required to increase the temperature by 1C.</td></tr><tr><td>Time - 1C</td><td>The time required to decrease the temperature by 1C.</td></tr><tr><td>Setpoint</td><td>Ideal temperature in C</td></tr><tr><td>Max temp adj.</td><td>The number of degrees the system is allowed to increase/decrease.</td></tr><tr><td>Heating Boost [C]</td><td>An extra increase in temperature to the setpoint for the investment period</td></tr><tr><td>Cooling Boost [C]</td><td>An extra decrease in temperature to the setpoint for the divestment period</td></tr><tr><td>Min Savings</td><td>The minimum amount of savings required for a buy/sell cycle.</td></tr></tbody></table><p><img src="/assets/node-ps-strategy-heat-capacitor-simple-flow-example.5b712b3b.png" alt="Simple example with Tibber"></p><p>The node consumes price information and outputs $\Delta T$ on its first output and the planned schedule and benefit calculations on the second output. The $\Delta T$ is used to adjust the set-point of a climate entity.</p><h3 id="the-impact-of-time-1c" tabindex="-1"><a class="header-anchor" href="#the-impact-of-time-1c" aria-hidden="true">#</a> The impact of <strong>Time +1C</strong></h3><p>This time is used to optimize the timing of when to turn up the heat. An increase in temperature from 22 to 23C will cause an increased electricity consumption for quite some time after the change has occurred. For heat-pumps, the air is heated first, then walls, furniture etc., creating a high electricity demand in the first hour or so before the demand slowly reduces down to normal levels. The algorithm uses this time to estimate a period of increased consumption and places this at an optimum point in time.</p><p>To get started, 90 minutes can be used for air heaters. Later, one can study the temperature curves or, if available, the power consumption curves of the climate entity, to achieve a better accuracy.</p><h3 id="setpoint" tabindex="-1"><a class="header-anchor" href="#setpoint" aria-hidden="true">#</a> Setpoint</h3><p>The setpoint, $S_p$, indicates the ideal temperature.</p><h3 id="max-temperature-adjustment" tabindex="-1"><a class="header-anchor" href="#max-temperature-adjustment" aria-hidden="true">#</a> Max temperature adjustment</h3><p>A max temperature adjustment $M_{ta}$ value of $0.65~^{\circ}C$ will change the setpoint temperature by $\pm0.65~^{\circ}C$. Please note that a larger number will indicate a longer heating time (Time +1C = 60 and Max Temp Adj.= $0.75~^{\circ}C$ results in a heating time of $60\times0.75\times 2= 90$ minutes</p><h3 id="heating-boost-c" tabindex="-1"><a class="header-anchor" href="#heating-boost-c" aria-hidden="true">#</a> Heating Boost [C]</h3><p>The boost temperatures are used to ensure that a climate entity start to heat during the <code>investment period</code> (the period where the temperature increases). Some climate entities fail to respond when their setpoint is changed by a small $\Delta T$.</p><p>The heating boost, $H_b$, adds this amount of degrees to the setpoint for the investment period. In the previous example, $H_b = 2~^{\circ}C$ will set the temperature to $S_p + 2.75$ for the first 90 minutes, and then reduce it to $S_p+0.75$.</p><h3 id="cooling-boost-c" tabindex="-1"><a class="header-anchor" href="#cooling-boost-c" aria-hidden="true">#</a> Cooling Boost [C]</h3><p>Similarly to the heating boost temperature, the Cooling boost $C_b$ is used in the <code>divestment period</code> (the period where the temperature decreases).</p><p>In the scenario where one should invest at 03:00 at night, and divest at 08:00 in the morning, $M_{ta}=1~^{\circ}C$, $H_b= 2~^{\circ}C$, $C_b=1~^{\circ}C$, and investment and divestment times of 60 minutes will result in the following</p><ul><li>02:00 to 03:00: $+3~^{\circ}C$</li><li>03:00 to 08:00: $+1~^{\circ}C$</li><li>08:00 to 09:00: $-2~^{\circ}C$</li><li>09:00 and onward: $-1~^{\circ}C$</li></ul><h3 id="min-savings" tabindex="-1"><a class="header-anchor" href="#min-savings" aria-hidden="true">#</a> Min Savings</h3><p>The heating and cooling periods can be seen as buy - sell pairs. That is, heat is procured at time t, and the same heat is sold at t+dt. The savings can then be estimated as the price difference $S=price(t+dt) - price(t)$. If this saving is less that the minimum savings requirement, it will be removed. The algorithm removes these in a prioritized order, starting with the pair with the smallest gain.</p><h2 id="dynamic-config" tabindex="-1"><a class="header-anchor" href="#dynamic-config" aria-hidden="true">#</a> Dynamic config</h2><p>It is possible to change config dynamically by sending a config message to the node. The config messages has a payload with a config object like this example:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token property">"payload"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|
31
31
|
<span class="token property">"config"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|
32
32
|
<span class="token property">"timeHeat1C"</span><span class="token operator">:</span> <span class="token number">75</span><span class="token punctuation">,</span>
|
|
33
33
|
<span class="token property">"timeCool1C"</span><span class="token operator">:</span> <span class="token number">50</span><span class="token punctuation">,</span>
|
|
@@ -38,19 +38,19 @@
|
|
|
38
38
|
<span class="token property">"minSavings"</span><span class="token operator">:</span> <span class="token number">0.08</span><span class="token punctuation">,</span>
|
|
39
39
|
<span class="token punctuation">}</span>
|
|
40
40
|
<span class="token punctuation">}</span>
|
|
41
|
-
</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></div></div><p>All the variables in the config object are optional. You can send only those you want to change.</p><p>The config sent like this will be valid until a new config is sent the same way, or until the flow is restarted. On a restart, the original config set up in the node will be used.</p><p>When a config is sent like this, and without price data, the schedule will be replanned based on the last previously received price data. If no price data has been received, no scheduling is done. You can send config and price data in the same message. Then both will be used.</p><h2 id="output" tabindex="-1"><a class="header-anchor" href="#output" aria-hidden="true">#</a> Output</h2><p>There are three outputs. You use only those you need for your purpose.</p><h3 id="output-1-temperature" tabindex="-1"><a class="header-anchor" href="#output-1-temperature" aria-hidden="true">#</a> Output 1 - Temperature</h3><p>The setpoint temperature intended to be passed to a climate entity (or a PID controller).</p><p>Example:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token punctuation">{</span>
|
|
41
|
+
</code></pre><div class="line-numbers" aria-hidden="true"><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></div></div><p>All the variables in the config object are optional. You can send only those you want to change.</p><p>The config sent like this will be valid until a new config is sent the same way, or until the flow is restarted. On a restart, the original config set up in the node will be used.</p><p>When a config is sent like this, and without price data, the schedule will be replanned based on the last previously received price data. If no price data has been received, no scheduling is done. You can send config and price data in the same message. Then both will be used.</p><h2 id="output" tabindex="-1"><a class="header-anchor" href="#output" aria-hidden="true">#</a> Output</h2><p>There are three outputs. You use only those you need for your purpose.</p><h3 id="output-1-temperature" tabindex="-1"><a class="header-anchor" href="#output-1-temperature" aria-hidden="true">#</a> Output 1 - Temperature</h3><p>The setpoint temperature intended to be passed to a climate entity (or a PID controller).</p><p>Example:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token punctuation">{</span>
|
|
42
42
|
<span class="token property">"payload"</span><span class="token operator">:</span> <span class="token number">22.5</span><span class="token punctuation">,</span>
|
|
43
43
|
<span class="token property">"topic"</span><span class="token operator">:</span> <span class="token string">"setpoint"</span><span class="token punctuation">,</span>
|
|
44
44
|
<span class="token property">"time"</span><span class="token operator">:</span> <span class="token string">"2022-02-08T00:06:06.000+01:00"</span><span class="token punctuation">,</span>
|
|
45
45
|
<span class="token property">"version"</span><span class="token operator">:</span> <span class="token string">"3.3.1"</span>
|
|
46
46
|
<span class="token punctuation">}</span>
|
|
47
|
-
</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></div></div><h3 id="output-2-delta-t" tabindex="-1"><a class="header-anchor" href="#output-2-delta-t" aria-hidden="true">#</a> Output 2 - $\Delta T$</h3><p>The number of degrees which has been added or subtracted to the setpoint</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token punctuation">{</span>
|
|
47
|
+
</code></pre><div class="line-numbers" aria-hidden="true"><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></div></div><h3 id="output-2-delta-t" tabindex="-1"><a class="header-anchor" href="#output-2-delta-t" aria-hidden="true">#</a> Output 2 - $\Delta T$</h3><p>The number of degrees which has been added or subtracted to the setpoint</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token punctuation">{</span>
|
|
48
48
|
<span class="token property">"payload"</span><span class="token operator">:</span> <span class="token number">-0.5</span><span class="token punctuation">,</span>
|
|
49
49
|
<span class="token property">"topic"</span><span class="token operator">:</span> <span class="token string">"adjustment"</span><span class="token punctuation">,</span>
|
|
50
50
|
<span class="token property">"time"</span><span class="token operator">:</span> <span class="token string">"2022-02-08T00:05:05.924+01:00"</span><span class="token punctuation">,</span>
|
|
51
51
|
<span class="token property">"version"</span><span class="token operator">:</span> <span class="token string">"3.3.1"</span>
|
|
52
52
|
<span class="token punctuation">}</span>
|
|
53
|
-
</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></div></div><h3 id="output-3" tabindex="-1"><a class="header-anchor" href="#output-3" aria-hidden="true">#</a> Output 3</h3><p>The current schedule as well as some other information. You can use this to see the plan and verify that it meets your expectations. You can also use it to display the schedule in any way you like.</p><p>The "trades" key contains a list of dictionaries indicating the trades:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token punctuation">{</span>
|
|
53
|
+
</code></pre><div class="line-numbers" aria-hidden="true"><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></div></div><h3 id="output-3" tabindex="-1"><a class="header-anchor" href="#output-3" aria-hidden="true">#</a> Output 3</h3><p>The current schedule as well as some other information. You can use this to see the plan and verify that it meets your expectations. You can also use it to display the schedule in any way you like.</p><p>The "trades" key contains a list of dictionaries indicating the trades:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token punctuation">{</span>
|
|
54
54
|
<span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"buy - sell"</span><span class="token punctuation">,</span>
|
|
55
55
|
<span class="token property">"tradeValue"</span><span class="token operator">:</span> <span class="token number">0.2558</span><span class="token punctuation">,</span>
|
|
56
56
|
<span class="token property">"buyIndex"</span><span class="token operator">:</span> <span class="token number">165</span><span class="token punctuation">,</span>
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
<span class="token property">"sellDate"</span><span class="token operator">:</span> <span class="token string">"2022-02-07T08:10:00.000+01:00"</span><span class="token punctuation">,</span>
|
|
61
61
|
<span class="token property">"sellPrice"</span><span class="token operator">:</span> <span class="token number">1.6462</span>
|
|
62
62
|
<span class="token punctuation">}</span>
|
|
63
|
-
</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></div></div><p>A trade consists of a <code>buy action</code> and a <code>sell action</code>. You buy electricity in the heating period, and sell it during the cooling period. <code>buyPrice</code> indicates the price at which the electricity is bought, while <code>sellPrice</code> indicates the price at which it is sold. This yields the <code>tradeValue</code>, which is how much is gained by moving one kWh from the expensive to the cheap period. If you run two 1kWh heaters and is able to turn it off from a 50% load for an hour, you earn 1kWh _ 2 _ 50% * 0.2558 = 0.2558.</p><p>The temperature variations from the setpoint are shown in a list at the end of the dictionary. The array has minute resolution, meaning that the first value is valid from 07.02.2022 00:00 till 00:01. As such, this is an indexed list, and the <code>buyIndex</code> and <code>sellIndex</code> values is a reference to the index in this array.</p><p>Full example:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token punctuation">{</span>
|
|
63
|
+
</code></pre><div class="line-numbers" aria-hidden="true"><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></div></div><p>A trade consists of a <code>buy action</code> and a <code>sell action</code>. You buy electricity in the heating period, and sell it during the cooling period. <code>buyPrice</code> indicates the price at which the electricity is bought, while <code>sellPrice</code> indicates the price at which it is sold. This yields the <code>tradeValue</code>, which is how much is gained by moving one kWh from the expensive to the cheap period. If you run two 1kWh heaters and is able to turn it off from a 50% load for an hour, you earn 1kWh _ 2 _ 50% * 0.2558 = 0.2558.</p><p>The temperature variations from the setpoint are shown in a list at the end of the dictionary. The array has minute resolution, meaning that the first value is valid from 07.02.2022 00:00 till 00:01. As such, this is an indexed list, and the <code>buyIndex</code> and <code>sellIndex</code> values is a reference to the index in this array.</p><p>Full example:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token punctuation">{</span>
|
|
64
64
|
<span class="token property">"payload"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|
65
65
|
<span class="token property">"startAt"</span><span class="token operator">:</span> <span class="token string">"2022-02-07T00:00:00.000+01:00"</span><span class="token punctuation">,</span>
|
|
66
66
|
<span class="token property">"maxTempAdjustment"</span><span class="token operator">:</span> <span class="token number">0.5</span><span class="token punctuation">,</span>
|
|
@@ -254,7 +254,7 @@
|
|
|
254
254
|
<span class="token number">0.5</span><span class="token punctuation">,</span> <span class="token number">0.5</span><span class="token punctuation">,</span> <span class="token number">0.5</span>
|
|
255
255
|
<span class="token punctuation">]</span>
|
|
256
256
|
<span class="token punctuation">}</span>
|
|
257
|
-
</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><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br><span class="line-number">38</span><br><span class="line-number">39</span><br><span class="line-number">40</span><br><span class="line-number">41</span><br><span class="line-number">42</span><br><span class="line-number">43</span><br><span class="line-number">44</span><br><span class="line-number">45</span><br><span class="line-number">46</span><br><span class="line-number">47</span><br><span class="line-number">48</span><br><span class="line-number">49</span><br><span class="line-number">50</span><br><span class="line-number">51</span><br><span class="line-number">52</span><br><span class="line-number">53</span><br><span class="line-number">54</span><br><span class="line-number">55</span><br><span class="line-number">56</span><br><span class="line-number">57</span><br><span class="line-number">58</span><br><span class="line-number">59</span><br><span class="line-number">60</span><br><span class="line-number">61</span><br><span class="line-number">62</span><br><span class="line-number">63</span><br><span class="line-number">64</span><br><span class="line-number">65</span><br><span class="line-number">66</span><br><span class="line-number">67</span><br><span class="line-number">68</span><br><span class="line-number">69</span><br><span class="line-number">70</span><br><span class="line-number">71</span><br><span class="line-number">72</span><br><span class="line-number">73</span><br><span class="line-number">74</span><br><span class="line-number">75</span><br><span class="line-number">76</span><br><span class="line-number">77</span><br><span class="line-number">78</span><br><span class="line-number">79</span><br><span class="line-number">80</span><br><span class="line-number">81</span><br><span class="line-number">82</span><br><span class="line-number">83</span><br><span class="line-number">84</span><br><span class="line-number">85</span><br><span class="line-number">86</span><br><span class="line-number">87</span><br><span class="line-number">88</span><br><span class="line-number">89</span><br><span class="line-number">90</span><br><span class="line-number">91</span><br><span class="line-number">92</span><br><span class="line-number">93</span><br><span class="line-number">94</span><br><span class="line-number">95</span><br><span class="line-number">96</span><br><span class="line-number">97</span><br><span class="line-number">98</span><br><span class="line-number">99</span><br><span class="line-number">100</span><br><span class="line-number">101</span><br><span class="line-number">102</span><br><span class="line-number">103</span><br><span class="line-number">104</span><br><span class="line-number">105</span><br><span class="line-number">106</span><br><span class="line-number">107</span><br><span class="line-number">108</span><br><span class="line-number">109</span><br><span class="line-number">110</span><br><span class="line-number">111</span><br><span class="line-number">112</span><br><span class="line-number">113</span><br><span class="line-number">114</span><br><span class="line-number">115</span><br><span class="line-number">116</span><br><span class="line-number">117</span><br><span class="line-number">118</span><br><span class="line-number">119</span><br><span class="line-number">120</span><br><span class="line-number">121</span><br><span class="line-number">122</span><br><span class="line-number">123</span><br><span class="line-number">124</span><br><span class="line-number">125</span><br><span class="line-number">126</span><br><span class="line-number">127</span><br><span class="line-number">128</span><br><span class="line-number">129</span><br><span class="line-number">130</span><br><span class="line-number">131</span><br><span class="line-number">132</span><br><span class="line-number">133</span><br><span class="line-number">134</span><br><span class="line-number">135</span><br><span class="line-number">136</span><br><span class="line-number">137</span><br><span class="line-number">138</span><br><span class="line-number">139</span><br><span class="line-number">140</span><br><span class="line-number">141</span><br><span class="line-number">142</span><br><span class="line-number">143</span><br><span class="line-number">144</span><br><span class="line-number">145</span><br><span class="line-number">146</span><br><span class="line-number">147</span><br><span class="line-number">148</span><br><span class="line-number">149</span><br><span class="line-number">150</span><br><span class="line-number">151</span><br><span class="line-number">152</span><br><span class="line-number">153</span><br><span class="line-number">154</span><br><span class="line-number">155</span><br><span class="line-number">156</span><br><span class="line-number">157</span><br><span class="line-number">158</span><br><span class="line-number">159</span><br><span class="line-number">160</span><br><span class="line-number">161</span><br><span class="line-number">162</span><br><span class="line-number">163</span><br><span class="line-number">164</span><br><span class="line-number">165</span><br><span class="line-number">166</span><br><span class="line-number">167</span><br><span class="line-number">168</span><br><span class="line-number">169</span><br><span class="line-number">170</span><br><span class="line-number">171</span><br><span class="line-number">172</span><br><span class="line-number">173</span><br><span class="line-number">174</span><br><span class="line-number">175</span><br><span class="line-number">176</span><br><span class="line-number">177</span><br><span class="line-number">178</span><br><span class="line-number">179</span><br><span class="line-number">180</span><br><span class="line-number">181</span><br><span class="line-number">182</span><br><span class="line-number">183</span><br><span class="line-number">184</span><br><span class="line-number">185</span><br><span class="line-number">186</span><br><span class="line-number">187</span><br><span class="line-number">188</span><br><span class="line-number">189</span><br><span class="line-number">190</span><br><span class="line-number">191</span><br><span class="line-number">192</span><br><span class="line-number">193</span><br><span class="line-number">194</span><br></div></div><!--]--></div><footer class="page-meta"><!----><div class="meta-item last-updated"><span class="meta-item-label">Last Updated: </span><!----></div><!----></footer><!----><!--[--><!--]--></main><!--]--></div><!----><!--]--></div>
|
|
258
|
-
<script
|
|
257
|
+
</code></pre><div class="line-numbers" aria-hidden="true"><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><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br><span class="line-number">38</span><br><span class="line-number">39</span><br><span class="line-number">40</span><br><span class="line-number">41</span><br><span class="line-number">42</span><br><span class="line-number">43</span><br><span class="line-number">44</span><br><span class="line-number">45</span><br><span class="line-number">46</span><br><span class="line-number">47</span><br><span class="line-number">48</span><br><span class="line-number">49</span><br><span class="line-number">50</span><br><span class="line-number">51</span><br><span class="line-number">52</span><br><span class="line-number">53</span><br><span class="line-number">54</span><br><span class="line-number">55</span><br><span class="line-number">56</span><br><span class="line-number">57</span><br><span class="line-number">58</span><br><span class="line-number">59</span><br><span class="line-number">60</span><br><span class="line-number">61</span><br><span class="line-number">62</span><br><span class="line-number">63</span><br><span class="line-number">64</span><br><span class="line-number">65</span><br><span class="line-number">66</span><br><span class="line-number">67</span><br><span class="line-number">68</span><br><span class="line-number">69</span><br><span class="line-number">70</span><br><span class="line-number">71</span><br><span class="line-number">72</span><br><span class="line-number">73</span><br><span class="line-number">74</span><br><span class="line-number">75</span><br><span class="line-number">76</span><br><span class="line-number">77</span><br><span class="line-number">78</span><br><span class="line-number">79</span><br><span class="line-number">80</span><br><span class="line-number">81</span><br><span class="line-number">82</span><br><span class="line-number">83</span><br><span class="line-number">84</span><br><span class="line-number">85</span><br><span class="line-number">86</span><br><span class="line-number">87</span><br><span class="line-number">88</span><br><span class="line-number">89</span><br><span class="line-number">90</span><br><span class="line-number">91</span><br><span class="line-number">92</span><br><span class="line-number">93</span><br><span class="line-number">94</span><br><span class="line-number">95</span><br><span class="line-number">96</span><br><span class="line-number">97</span><br><span class="line-number">98</span><br><span class="line-number">99</span><br><span class="line-number">100</span><br><span class="line-number">101</span><br><span class="line-number">102</span><br><span class="line-number">103</span><br><span class="line-number">104</span><br><span class="line-number">105</span><br><span class="line-number">106</span><br><span class="line-number">107</span><br><span class="line-number">108</span><br><span class="line-number">109</span><br><span class="line-number">110</span><br><span class="line-number">111</span><br><span class="line-number">112</span><br><span class="line-number">113</span><br><span class="line-number">114</span><br><span class="line-number">115</span><br><span class="line-number">116</span><br><span class="line-number">117</span><br><span class="line-number">118</span><br><span class="line-number">119</span><br><span class="line-number">120</span><br><span class="line-number">121</span><br><span class="line-number">122</span><br><span class="line-number">123</span><br><span class="line-number">124</span><br><span class="line-number">125</span><br><span class="line-number">126</span><br><span class="line-number">127</span><br><span class="line-number">128</span><br><span class="line-number">129</span><br><span class="line-number">130</span><br><span class="line-number">131</span><br><span class="line-number">132</span><br><span class="line-number">133</span><br><span class="line-number">134</span><br><span class="line-number">135</span><br><span class="line-number">136</span><br><span class="line-number">137</span><br><span class="line-number">138</span><br><span class="line-number">139</span><br><span class="line-number">140</span><br><span class="line-number">141</span><br><span class="line-number">142</span><br><span class="line-number">143</span><br><span class="line-number">144</span><br><span class="line-number">145</span><br><span class="line-number">146</span><br><span class="line-number">147</span><br><span class="line-number">148</span><br><span class="line-number">149</span><br><span class="line-number">150</span><br><span class="line-number">151</span><br><span class="line-number">152</span><br><span class="line-number">153</span><br><span class="line-number">154</span><br><span class="line-number">155</span><br><span class="line-number">156</span><br><span class="line-number">157</span><br><span class="line-number">158</span><br><span class="line-number">159</span><br><span class="line-number">160</span><br><span class="line-number">161</span><br><span class="line-number">162</span><br><span class="line-number">163</span><br><span class="line-number">164</span><br><span class="line-number">165</span><br><span class="line-number">166</span><br><span class="line-number">167</span><br><span class="line-number">168</span><br><span class="line-number">169</span><br><span class="line-number">170</span><br><span class="line-number">171</span><br><span class="line-number">172</span><br><span class="line-number">173</span><br><span class="line-number">174</span><br><span class="line-number">175</span><br><span class="line-number">176</span><br><span class="line-number">177</span><br><span class="line-number">178</span><br><span class="line-number">179</span><br><span class="line-number">180</span><br><span class="line-number">181</span><br><span class="line-number">182</span><br><span class="line-number">183</span><br><span class="line-number">184</span><br><span class="line-number">185</span><br><span class="line-number">186</span><br><span class="line-number">187</span><br><span class="line-number">188</span><br><span class="line-number">189</span><br><span class="line-number">190</span><br><span class="line-number">191</span><br><span class="line-number">192</span><br><span class="line-number">193</span><br><span class="line-number">194</span><br></div></div><!--]--></div><footer class="page-meta"><!----><div class="meta-item last-updated"><span class="meta-item-label">Last Updated: </span><!----></div><!----></footer><!----><!--[--><!--]--></main><!--]--></div><!----><!--]--></div>
|
|
258
|
+
<script type="module" src="/assets/app.b3d8926b.js" defer></script>
|
|
259
259
|
</body>
|
|
260
260
|
</html>
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="utf-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
|
-
<meta name="generator" content="VuePress 2.0.0-beta.
|
|
6
|
+
<meta name="generator" content="VuePress 2.0.0-beta.36">
|
|
7
7
|
<style>
|
|
8
8
|
:root {
|
|
9
9
|
--c-bg: #fff;
|
|
@@ -22,12 +22,12 @@
|
|
|
22
22
|
document.documentElement.classList.toggle('dark', true);
|
|
23
23
|
}
|
|
24
24
|
</script>
|
|
25
|
-
<link rel="shortcut icon" type="image/x-icon" href="euro.png"><
|
|
26
|
-
<link rel="
|
|
27
|
-
<link rel="stylesheet" href="/assets/
|
|
25
|
+
<link rel="shortcut icon" type="image/x-icon" href="euro.png"><title>ps-strategy-lowest-price | Power Saver</title><meta name="description" content="A Node-RED note to save money on hourly changing power prices">
|
|
26
|
+
<link rel="modulepreload" href="/assets/app.b3d8926b.js"><link rel="modulepreload" href="/assets/ps-strategy-lowest-price.html.f006d811.js"><link rel="modulepreload" href="/assets/ps-strategy-lowest-price.html.1e419f56.js"><link rel="modulepreload" href="/assets/node-ps-strategy-lowest-price.83209fac.js"><link rel="modulepreload" href="/assets/plugin-vue_export-helper.21dcd24c.js">
|
|
27
|
+
<link rel="stylesheet" href="/assets/style.a8aae67b.css">
|
|
28
28
|
</head>
|
|
29
29
|
<body>
|
|
30
|
-
<div id="app"><!--[--><div class="theme-container"><!--[--><header ref_key="navbar" 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="/" class=""><img class="logo" src="/Ukraine-heart-shape-flag.png" alt="Power Saver"><span class="site-name can-hide">Power Saver</span></a></span><div class="navbar-items-wrapper" style=""><!--[--><!--]--><nav class="navbar-items can-hide"><!--[--><div class="navbar-item"><a href="/guide/" class="" aria-label="Guide"><!--[--><!--]--> Guide <!--[--><!--]--></a></div><div class="navbar-item"><a href="/nodes/" class="router-link-active" aria-label="Nodes"><!--[--><!--]--> Nodes <!--[--><!--]--></a></div><div class="navbar-item"><a href="/examples/" class="" aria-label="Examples"><!--[--><!--]--> Examples <!--[--><!--]--></a></div><div class="navbar-item"><a href="/faq/" class="" aria-label="FAQ"><!--[--><!--]--> FAQ <!--[--><!--]--></a></div><div class="navbar-item"><a href="/contribute/" class="" aria-label="Contribute"><!--[--><!--]--> Contribute <!--[--><!--]--></a></div><div class="navbar-item"><a href="/changelog/" class="" aria-label="Changes"><!--[--><!--]--> Changes <!--[--><!--]--></a></div><div class="navbar-item"><a class="external-link" href="https://github.com/ottopaulsen/node-red-contrib-power-saver" rel="noopener noreferrer" target="_blank" aria-label="GitHub"><!--[--><!--]--> GitHub <span><svg class="external-link-icon" 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="external-link-icon-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-items"><!--[--><div class="navbar-item"><a href="/guide/" class="" aria-label="Guide"><!--[--><!--]--> Guide <!--[--><!--]--></a></div><div class="navbar-item"><a href="/nodes/" class="router-link-active" aria-label="Nodes"><!--[--><!--]--> Nodes <!--[--><!--]--></a></div><div class="navbar-item"><a href="/examples/" class="" aria-label="Examples"><!--[--><!--]--> Examples <!--[--><!--]--></a></div><div class="navbar-item"><a href="/faq/" class="" aria-label="FAQ"><!--[--><!--]--> FAQ <!--[--><!--]--></a></div><div class="navbar-item"><a href="/contribute/" class="" aria-label="Contribute"><!--[--><!--]--> Contribute <!--[--><!--]--></a></div><div class="navbar-item"><a href="/changelog/" class="" aria-label="Changes"><!--[--><!--]--> Changes <!--[--><!--]--></a></div><div class="navbar-item"><a class="external-link" href="https://github.com/ottopaulsen/node-red-contrib-power-saver" rel="noopener noreferrer" target="_blank" aria-label="GitHub"><!--[--><!--]--> GitHub <span><svg class="external-link-icon" 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="external-link-icon-sr-only">open in new window</span></span><!--[--><!--]--></a></div><!--]--></nav><!--[--><!--]--><ul class="sidebar-items"><!--[--><li><p tabindex="0" class="sidebar-item sidebar-heading active">Nodes <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/nodes/power-saver.md" class="sidebar-item" aria-label="Power Saver"><!--[--><!--]--> Power Saver <!--[--><!--]--></a><!----></li><li><p tabindex="0" class="sidebar-item active">Strategy nodes <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/nodes/ps-strategy-best-save.html" class="sidebar-item" aria-label="ps-strategy-best-save"><!--[--><!--]--> ps-strategy-best-save <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/nodes/ps-strategy-lowest-price.html" class="router-link-active router-link-exact-active router-link-active sidebar-item active" aria-label="ps-strategy-lowest-price"><!--[--><!--]--> ps-strategy-lowest-price <!--[--><!--]--></a><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/nodes/ps-strategy-lowest-price.html#description" class="router-link-active router-link-exact-active sidebar-item" aria-label="Description"><!--[--><!--]--> Description <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/nodes/ps-strategy-lowest-price.html#configuration" class="router-link-active router-link-exact-active sidebar-item" aria-label="Configuration"><!--[--><!--]--> Configuration <!--[--><!--]--></a><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/nodes/ps-strategy-lowest-price.html#dynamic-config" class="router-link-active router-link-exact-active sidebar-item" aria-label="Dynamic config"><!--[--><!--]--> Dynamic config <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/nodes/ps-strategy-lowest-price.html#dynamic-commands" class="router-link-active router-link-exact-active sidebar-item" aria-label="Dynamic commands"><!--[--><!--]--> Dynamic commands <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><a aria-current="page" href="/nodes/ps-strategy-lowest-price.html#input" class="router-link-active router-link-exact-active sidebar-item" aria-label="Input"><!--[--><!--]--> Input <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/nodes/ps-strategy-lowest-price.html#output" class="router-link-active router-link-exact-active sidebar-item" aria-label="Output"><!--[--><!--]--> Output <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/nodes/ps-strategy-lowest-price.html#tips-tricks" class="router-link-active router-link-exact-active sidebar-item" aria-label="Tips & tricks"><!--[--><!--]--> Tips & tricks <!--[--><!--]--></a><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/nodes/ps-strategy-lowest-price.html#multiple-nodes-works-together" class="router-link-active router-link-exact-active sidebar-item" aria-label="Multiple nodes works together"><!--[--><!--]--> Multiple nodes works together <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/nodes/ps-strategy-lowest-price.html#highest-price" class="router-link-active router-link-exact-active sidebar-item" aria-label="Highest price"><!--[--><!--]--> Highest price <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><!--]--></ul><!--]--></li><li><a href="/nodes/ps-strategy-heat-capacitor.md" class="sidebar-item" aria-label="ps-strategy-heat-capacitor"><!--[--><!--]--> ps-strategy-heat-capacitor <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><p tabindex="0" class="sidebar-item">Utility nodes <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/nodes/ps-receive-price.html" class="sidebar-item" aria-label="ps-receive-price"><!--[--><!--]--> ps-receive-price <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><p tabindex="0" class="sidebar-item">Grid tariff nodes <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/nodes/ps-general-add-tariff.html" class="sidebar-item" aria-label="ps-general-add-tariff"><!--[--><!--]--> ps-general-add-tariff <!--[--><!--]--></a><!----></li><li><a href="/nodes/ps-elvia-add-tariff.html" class="sidebar-item" aria-label="ps-elvia-add-tariff"><!--[--><!--]--> ps-elvia-add-tariff <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><!--]--></ul><!--]--></li><li><p tabindex="0" class="sidebar-item sidebar-heading">Data format <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/nodes/strategy-input.html" class="sidebar-item" aria-label="Strategy input format"><!--[--><!--]--> Strategy input format <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><!--]--></ul><!--[--><!--]--></aside><!--]--><!--[--><main class="page"><!--[--><!--]--><div class="theme-default-content"><!--[--><h1 id="ps-strategy-lowest-price" tabindex="-1"><a class="header-anchor" href="#ps-strategy-lowest-price" aria-hidden="true">#</a> ps-strategy-lowest-price</h1><p><img src="/assets/img/node-ps-strategy-lowest-price.3a4ad347.png" alt="ps-strategy-lowest-price"></p><p>Strategy node to turn on power the hours when the price is lowest during a given period, and turn off the other hours.</p><h2 id="description" tabindex="-1"><a class="header-anchor" href="#description" aria-hidden="true">#</a> Description</h2><p>The node can work on a specific period from 1 to 24 hours during a 24 hour period. Inside this period, you can decide how many hours that shall be on. The rest of the period will be off. Outside the period, you can select that the output shall be either on or off. You can also decide that the hours on shall be consecutive (one continuous period) or spread around in multiple on-periods.</p><h2 id="configuration" tabindex="-1"><a class="header-anchor" href="#configuration" aria-hidden="true">#</a> Configuration</h2><p><img src="/assets/img/lowest-price-config.6d66a8c2.png" alt="Node Configuration"></p><table><thead><tr><th>Value</th><th>Description</th></tr></thead><tbody><tr><td>From Time</td><td>The start time of the selected period.</td></tr><tr><td>To Time</td><td>The end time of the selected period.</td></tr><tr><td>Hours On</td><td>The number of hours that shall be turned on.</td></tr><tr><td>Consecutive On-Period</td><td>Check this if you need the on-period to be consecutive.</td></tr><tr><td>Send When Rescheduling</td><td>Check this to make sure on or off output is sent immediately after rescheduling.</td></tr><tr><td>If No Schedule, Send</td><td>What to do if there is no valid schedule any more (turn on or off).</td></tr><tr><td>Outside Period, Send</td><td>Select the value to send outside the selected period.</td></tr></tbody></table><p>If you want to use a period of 24 hours, set the From Time and To Time to the same value. The time you select is significant in the way that it decides which 24 hours that are considered when finding the hours with lowest price.</p><div class="custom-container tip"><p class="custom-container-title">Example with Consecutive On-Period</p><p>One example to need a consecutive on-period can be if you want to control the washing machine. Let's say it needs 3 hours, and you want it to run between 22:00 and 06:00. Set <code>From Time = 22:00</code>, <code>To Time = 06:00</code> and check the <code>Consecutive On-Period</code> flag. This will turn on the cheapest 3-hour period from 22:00 to 06:00.</p><p>NB! It is not recommended to run the washing machine when you are sleeping or away.</p></div><div class="custom-container tip"><p class="custom-container-title">Example with non-consecutive on-period</p><p>If you have heating cables in the driveway, you may need them to be on only for a few hours every day, for example 4 hours, but it may not be important when this is. Then set <code>From Time = 00:00</code>, <code>To Time = 00:00</code> and <strong>un-check</strong> the <code>Consecutive On-Period</code> flag. This will turn on the 4 cheapest hours during the whole day, and off the rest.</p><p>You can use any time for start and end, but it is a good idea to use <code>00:00</code>, since the prices normally comes for this period.</p></div><div class="custom-container warning"><p class="custom-container-title">Outside Period, Send</p><p>Unless the period you select is 24 hours (<code>From Time</code> and <code>To Time</code> are the same), it is important what value you choose for <code>Outside Period, Send</code>. This decides whether the output is on or off during the period that is outside the selected period.</p></div><div class="custom-container danger"><p class="custom-container-title">Schedule not calculated</p><p>If you select a period for example from 10:00 to 02:00, it may not be possible to calculate before the period starts. This is because electricity prices for the next day (in the Nord Pool area) normally are received around 13:00. The node cannot calculate the period until it has price data for the whole period.</p></div><h3 id="dynamic-config" tabindex="-1"><a class="header-anchor" href="#dynamic-config" aria-hidden="true">#</a> Dynamic config</h3><p>It is possible to change config dynamically by sending a config message to the node. The config messages has a payload with a config object like this example:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token property">"payload"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|
30
|
+
<div id="app"><!--[--><div class="theme-container"><!--[--><header ref_key="navbar" 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="/" class=""><img class="logo" src="/Ukraine-heart-shape-flag.png" alt="Power Saver"><span class="site-name can-hide">Power Saver</span></a></span><div class="navbar-items-wrapper" style=""><!--[--><!--]--><nav class="navbar-items can-hide"><!--[--><div class="navbar-item"><a href="/guide/" class="" aria-label="Guide"><!--[--><!--]--> Guide <!--[--><!--]--></a></div><div class="navbar-item"><a href="/nodes/" class="router-link-active" aria-label="Nodes"><!--[--><!--]--> Nodes <!--[--><!--]--></a></div><div class="navbar-item"><a href="/examples/" class="" aria-label="Examples"><!--[--><!--]--> Examples <!--[--><!--]--></a></div><div class="navbar-item"><a href="/faq/" class="" aria-label="FAQ"><!--[--><!--]--> FAQ <!--[--><!--]--></a></div><div class="navbar-item"><a href="/contribute/" class="" aria-label="Contribute"><!--[--><!--]--> Contribute <!--[--><!--]--></a></div><div class="navbar-item"><a href="/changelog/" class="" aria-label="Changes"><!--[--><!--]--> Changes <!--[--><!--]--></a></div><div class="navbar-item"><a class="external-link" href="https://github.com/ottopaulsen/node-red-contrib-power-saver" rel="noopener noreferrer" target="_blank" aria-label="GitHub"><!--[--><!--]--> GitHub <span><svg class="external-link-icon" 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="external-link-icon-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-items"><!--[--><div class="navbar-item"><a href="/guide/" class="" aria-label="Guide"><!--[--><!--]--> Guide <!--[--><!--]--></a></div><div class="navbar-item"><a href="/nodes/" class="router-link-active" aria-label="Nodes"><!--[--><!--]--> Nodes <!--[--><!--]--></a></div><div class="navbar-item"><a href="/examples/" class="" aria-label="Examples"><!--[--><!--]--> Examples <!--[--><!--]--></a></div><div class="navbar-item"><a href="/faq/" class="" aria-label="FAQ"><!--[--><!--]--> FAQ <!--[--><!--]--></a></div><div class="navbar-item"><a href="/contribute/" class="" aria-label="Contribute"><!--[--><!--]--> Contribute <!--[--><!--]--></a></div><div class="navbar-item"><a href="/changelog/" class="" aria-label="Changes"><!--[--><!--]--> Changes <!--[--><!--]--></a></div><div class="navbar-item"><a class="external-link" href="https://github.com/ottopaulsen/node-red-contrib-power-saver" rel="noopener noreferrer" target="_blank" aria-label="GitHub"><!--[--><!--]--> GitHub <span><svg class="external-link-icon" 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="external-link-icon-sr-only">open in new window</span></span><!--[--><!--]--></a></div><!--]--></nav><!--[--><!--]--><ul class="sidebar-items"><!--[--><li><p tabindex="0" class="sidebar-item sidebar-heading active">Nodes <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/nodes/power-saver.md" class="sidebar-item" aria-label="Power Saver"><!--[--><!--]--> Power Saver <!--[--><!--]--></a><!----></li><li><p tabindex="0" class="sidebar-item active">Strategy nodes <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/nodes/ps-strategy-best-save.html" class="sidebar-item" aria-label="ps-strategy-best-save"><!--[--><!--]--> ps-strategy-best-save <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/nodes/ps-strategy-lowest-price.html" class="router-link-active router-link-exact-active router-link-active sidebar-item active" aria-label="ps-strategy-lowest-price"><!--[--><!--]--> ps-strategy-lowest-price <!--[--><!--]--></a><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/nodes/ps-strategy-lowest-price.html#description" class="router-link-active router-link-exact-active sidebar-item" aria-label="Description"><!--[--><!--]--> Description <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/nodes/ps-strategy-lowest-price.html#configuration" class="router-link-active router-link-exact-active sidebar-item" aria-label="Configuration"><!--[--><!--]--> Configuration <!--[--><!--]--></a><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/nodes/ps-strategy-lowest-price.html#dynamic-config" class="router-link-active router-link-exact-active sidebar-item" aria-label="Dynamic config"><!--[--><!--]--> Dynamic config <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/nodes/ps-strategy-lowest-price.html#dynamic-commands" class="router-link-active router-link-exact-active sidebar-item" aria-label="Dynamic commands"><!--[--><!--]--> Dynamic commands <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><a aria-current="page" href="/nodes/ps-strategy-lowest-price.html#input" class="router-link-active router-link-exact-active sidebar-item" aria-label="Input"><!--[--><!--]--> Input <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/nodes/ps-strategy-lowest-price.html#output" class="router-link-active router-link-exact-active sidebar-item" aria-label="Output"><!--[--><!--]--> Output <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/nodes/ps-strategy-lowest-price.html#tips-tricks" class="router-link-active router-link-exact-active sidebar-item" aria-label="Tips & tricks"><!--[--><!--]--> Tips & tricks <!--[--><!--]--></a><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/nodes/ps-strategy-lowest-price.html#multiple-nodes-works-together" class="router-link-active router-link-exact-active sidebar-item" aria-label="Multiple nodes works together"><!--[--><!--]--> Multiple nodes works together <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/nodes/ps-strategy-lowest-price.html#highest-price" class="router-link-active router-link-exact-active sidebar-item" aria-label="Highest price"><!--[--><!--]--> Highest price <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><!--]--></ul><!--]--></li><li><a href="/nodes/ps-strategy-heat-capacitor.md" class="sidebar-item" aria-label="ps-strategy-heat-capacitor"><!--[--><!--]--> ps-strategy-heat-capacitor <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><p tabindex="0" class="sidebar-item">Utility nodes <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/nodes/ps-receive-price.html" class="sidebar-item" aria-label="ps-receive-price"><!--[--><!--]--> ps-receive-price <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><p tabindex="0" class="sidebar-item">Grid tariff nodes <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/nodes/ps-general-add-tariff.html" class="sidebar-item" aria-label="ps-general-add-tariff"><!--[--><!--]--> ps-general-add-tariff <!--[--><!--]--></a><!----></li><li><a href="/nodes/ps-elvia-add-tariff.html" class="sidebar-item" aria-label="ps-elvia-add-tariff"><!--[--><!--]--> ps-elvia-add-tariff <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><!--]--></ul><!--]--></li><li><p tabindex="0" class="sidebar-item sidebar-heading">Data format <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/nodes/strategy-input.html" class="sidebar-item" aria-label="Strategy input format"><!--[--><!--]--> Strategy input format <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><!--]--></ul><!--[--><!--]--></aside><!--]--><!--[--><main class="page"><!--[--><!--]--><div class="theme-default-content"><!--[--><h1 id="ps-strategy-lowest-price" tabindex="-1"><a class="header-anchor" href="#ps-strategy-lowest-price" aria-hidden="true">#</a> ps-strategy-lowest-price</h1><p><img src="/assets/node-ps-strategy-lowest-price.4e5c38ee.png" alt="ps-strategy-lowest-price"></p><p>Strategy node to turn on power the hours when the price is lowest during a given period, and turn off the other hours.</p><h2 id="description" tabindex="-1"><a class="header-anchor" href="#description" aria-hidden="true">#</a> Description</h2><p>The node can work on a specific period from 1 to 24 hours during a 24 hour period. Inside this period, you can decide how many hours that shall be on. The rest of the period will be off. Outside the period, you can select that the output shall be either on or off. You can also decide that the hours on shall be consecutive (one continuous period) or spread around in multiple on-periods.</p><h2 id="configuration" tabindex="-1"><a class="header-anchor" href="#configuration" aria-hidden="true">#</a> Configuration</h2><p><img src="/assets/lowest-price-config.d7043621.png" alt="Node Configuration"></p><table><thead><tr><th>Value</th><th>Description</th></tr></thead><tbody><tr><td>From Time</td><td>The start time of the selected period.</td></tr><tr><td>To Time</td><td>The end time of the selected period.</td></tr><tr><td>Hours On</td><td>The number of hours that shall be turned on.</td></tr><tr><td>Consecutive On-Period</td><td>Check this if you need the on-period to be consecutive.</td></tr><tr><td>Send When Rescheduling</td><td>Check this to make sure on or off output is sent immediately after rescheduling.</td></tr><tr><td>If No Schedule, Send</td><td>What to do if there is no valid schedule any more (turn on or off).</td></tr><tr><td>Outside Period, Send</td><td>Select the value to send outside the selected period.</td></tr></tbody></table><p>If you want to use a period of 24 hours, set the From Time and To Time to the same value. The time you select is significant in the way that it decides which 24 hours that are considered when finding the hours with lowest price.</p><div class="custom-container tip"><p class="custom-container-title">Example with Consecutive On-Period</p><p>One example to need a consecutive on-period can be if you want to control the washing machine. Let's say it needs 3 hours, and you want it to run between 22:00 and 06:00. Set <code>From Time = 22:00</code>, <code>To Time = 06:00</code> and check the <code>Consecutive On-Period</code> flag. This will turn on the cheapest 3-hour period from 22:00 to 06:00.</p><p>NB! It is not recommended to run the washing machine when you are sleeping or away.</p></div><div class="custom-container tip"><p class="custom-container-title">Example with non-consecutive on-period</p><p>If you have heating cables in the driveway, you may need them to be on only for a few hours every day, for example 4 hours, but it may not be important when this is. Then set <code>From Time = 00:00</code>, <code>To Time = 00:00</code> and <strong>un-check</strong> the <code>Consecutive On-Period</code> flag. This will turn on the 4 cheapest hours during the whole day, and off the rest.</p><p>You can use any time for start and end, but it is a good idea to use <code>00:00</code>, since the prices normally comes for this period.</p></div><div class="custom-container warning"><p class="custom-container-title">Outside Period, Send</p><p>Unless the period you select is 24 hours (<code>From Time</code> and <code>To Time</code> are the same), it is important what value you choose for <code>Outside Period, Send</code>. This decides whether the output is on or off during the period that is outside the selected period.</p></div><div class="custom-container danger"><p class="custom-container-title">Schedule not calculated</p><p>If you select a period for example from 10:00 to 02:00, it may not be possible to calculate before the period starts. This is because electricity prices for the next day (in the Nord Pool area) normally are received around 13:00. The node cannot calculate the period until it has price data for the whole period.</p></div><h3 id="dynamic-config" tabindex="-1"><a class="header-anchor" href="#dynamic-config" aria-hidden="true">#</a> Dynamic config</h3><p>It is possible to change config dynamically by sending a config message to the node. The config messages has a payload with a config object like this example:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token property">"payload"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|
31
31
|
<span class="token property">"config"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|
32
32
|
<span class="token property">"fromTime"</span> <span class="token operator">:</span> <span class="token number">10</span><span class="token punctuation">,</span>
|
|
33
33
|
<span class="token property">"toTime"</span> <span class="token operator">:</span> <span class="token number">16</span><span class="token punctuation">,</span>
|
|
@@ -38,22 +38,22 @@
|
|
|
38
38
|
<span class="token property">"outputOutsidePeriod"</span><span class="token operator">:</span> <span class="token boolean">false</span>
|
|
39
39
|
<span class="token punctuation">}</span>
|
|
40
40
|
<span class="token punctuation">}</span>
|
|
41
|
-
</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></div></div><p>All the variables in the config object are optional. You can send only those you want to change.</p><p>The config sent like this will be valid until a new config is sent the same way, or until the flow is restarted. On a restart, the original config set up in the node will be used.</p><p>When a config is sent like this, and without price data, the schedule will be replanned based on the last previously received price data. If no price data has been received, no scheduling is done.</p><p>However, you can send config and price data in the same message. Then both will be used .</p><h3 id="dynamic-commands" tabindex="-1"><a class="header-anchor" href="#dynamic-commands" aria-hidden="true">#</a> Dynamic commands</h3><p>You can dynamically send some commands to the node via its input, by using a <code>commands</code> object in the payload as described below.</p><p>Commands can be sent together with config and/or price data, but the exact behavior is not defined.</p><h4 id="sendschedule" tabindex="-1"><a class="header-anchor" href="#sendschedule" aria-hidden="true">#</a> sendSchedule</h4><p>You can get the schedule sent to output 3 any time by sending a message like this to the node:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token property">"payload"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|
41
|
+
</code></pre><div class="line-numbers" aria-hidden="true"><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></div></div><p>All the variables in the config object are optional. You can send only those you want to change.</p><p>The config sent like this will be valid until a new config is sent the same way, or until the flow is restarted. On a restart, the original config set up in the node will be used.</p><p>When a config is sent like this, and without price data, the schedule will be replanned based on the last previously received price data. If no price data has been received, no scheduling is done.</p><p>However, you can send config and price data in the same message. Then both will be used .</p><h3 id="dynamic-commands" tabindex="-1"><a class="header-anchor" href="#dynamic-commands" aria-hidden="true">#</a> Dynamic commands</h3><p>You can dynamically send some commands to the node via its input, by using a <code>commands</code> object in the payload as described below.</p><p>Commands can be sent together with config and/or price data, but the exact behavior is not defined.</p><h4 id="sendschedule" tabindex="-1"><a class="header-anchor" href="#sendschedule" aria-hidden="true">#</a> sendSchedule</h4><p>You can get the schedule sent to output 3 any time by sending a message like this to the node:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token property">"payload"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|
42
42
|
<span class="token property">"commands"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|
43
43
|
<span class="token property">"sendSchedule"</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
|
|
44
44
|
<span class="token punctuation">}</span>
|
|
45
45
|
<span class="token punctuation">}</span>
|
|
46
|
-
</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></div></div><p>When you do this, the current schedule is actually recalculated based on the last received data, and then sent to output 3 the same way as when it was originally planned.</p><h4 id="sendoutput" tabindex="-1"><a class="header-anchor" href="#sendoutput" aria-hidden="true">#</a> sendOutput</h4><p>You can get the node to send the current output to output 1 or 2 any time by sending a message like this to the node:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token property">"payload"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|
46
|
+
</code></pre><div class="line-numbers" aria-hidden="true"><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></div></div><p>When you do this, the current schedule is actually recalculated based on the last received data, and then sent to output 3 the same way as when it was originally planned.</p><h4 id="sendoutput" tabindex="-1"><a class="header-anchor" href="#sendoutput" aria-hidden="true">#</a> sendOutput</h4><p>You can get the node to send the current output to output 1 or 2 any time by sending a message like this to the node:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token property">"payload"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|
47
47
|
<span class="token property">"commands"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|
48
48
|
<span class="token property">"sendOutput"</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
|
|
49
49
|
<span class="token punctuation">}</span>
|
|
50
50
|
<span class="token punctuation">}</span>
|
|
51
|
-
</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></div></div><p>When you do this, the current schedule is actually recalculated based on the last received data. The current output is sent to output 1 or 2, and the schedule is sent to output 3.</p><h4 id="reset" tabindex="-1"><a class="header-anchor" href="#reset" aria-hidden="true">#</a> reset</h4><p>You can reset data the node has saved in context by sending this message:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token property">"payload"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|
51
|
+
</code></pre><div class="line-numbers" aria-hidden="true"><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></div></div><p>When you do this, the current schedule is actually recalculated based on the last received data. The current output is sent to output 1 or 2, and the schedule is sent to output 3.</p><h4 id="reset" tabindex="-1"><a class="header-anchor" href="#reset" aria-hidden="true">#</a> reset</h4><p>You can reset data the node has saved in context by sending this message:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token property">"payload"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|
52
52
|
<span class="token property">"commands"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
|
53
53
|
<span class="token property">"reset"</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
|
|
54
54
|
<span class="token punctuation">}</span>
|
|
55
55
|
<span class="token punctuation">}</span>
|
|
56
|
-
</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></div></div><p>When you do this, all historical data the node has saved is deleted, including the current schedule, so the result will be that the node shows status "No price data". When new price data is received, a schedule is calculated without considering any history.</p><p>The nodes config is not deleted, as the node depends on it to work.</p><div class="custom-container warning"><p class="custom-container-title">WARNING</p><p>This operation cannot be undone.</p><p>However, it is normally not a big loss, as you can just feed the node with new price data and start from scratch.</p></div><h2 id="input" tabindex="-1"><a class="header-anchor" href="#input" aria-hidden="true">#</a> Input</h2><p>The input is the <a href="/nodes/strategy-input.html" class="">common strategy input format</a></p><h2 id="output" tabindex="-1"><a class="header-anchor" href="#output" aria-hidden="true">#</a> Output</h2><p>When a valid input is received, and the schedule is recalculated, the resulting schedule, as well as some other information, is sent to output 3. You can use this to see the plan and verify that it meets your expectations. You can also use it to display the schedule in any way you like.</p><p>Example of output:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token punctuation">{</span>
|
|
56
|
+
</code></pre><div class="line-numbers" aria-hidden="true"><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></div></div><p>When you do this, all historical data the node has saved is deleted, including the current schedule, so the result will be that the node shows status "No price data". When new price data is received, a schedule is calculated without considering any history.</p><p>The nodes config is not deleted, as the node depends on it to work.</p><div class="custom-container warning"><p class="custom-container-title">WARNING</p><p>This operation cannot be undone.</p><p>However, it is normally not a big loss, as you can just feed the node with new price data and start from scratch.</p></div><h2 id="input" tabindex="-1"><a class="header-anchor" href="#input" aria-hidden="true">#</a> Input</h2><p>The input is the <a href="/nodes/strategy-input.html" class="">common strategy input format</a></p><h2 id="output" tabindex="-1"><a class="header-anchor" href="#output" aria-hidden="true">#</a> Output</h2><p>When a valid input is received, and the schedule is recalculated, the resulting schedule, as well as some other information, is sent to output 3. You can use this to see the plan and verify that it meets your expectations. You can also use it to display the schedule in any way you like.</p><p>Example of output:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token punctuation">{</span>
|
|
57
57
|
<span class="token property">"schedule"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|
58
58
|
<span class="token punctuation">{</span>
|
|
59
59
|
<span class="token property">"time"</span><span class="token operator">:</span> <span class="token string">"2021-12-10T00:00:00.000+01:00"</span><span class="token punctuation">,</span>
|
|
@@ -118,7 +118,7 @@
|
|
|
118
118
|
<span class="token property">"time"</span><span class="token operator">:</span> <span class="token string">"2021-09-30T23:45:12.123+02:00"</span><span class="token punctuation">,</span>
|
|
119
119
|
<span class="token property">"version"</span><span class="token operator">:</span> <span class="token string">"3.1.2"</span>
|
|
120
120
|
<span class="token punctuation">}</span>
|
|
121
|
-
</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><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br><span class="line-number">38</span><br><span class="line-number">39</span><br><span class="line-number">40</span><br><span class="line-number">41</span><br><span class="line-number">42</span><br><span class="line-number">43</span><br><span class="line-number">44</span><br><span class="line-number">45</span><br><span class="line-number">46</span><br><span class="line-number">47</span><br><span class="line-number">48</span><br><span class="line-number">49</span><br><span class="line-number">50</span><br><span class="line-number">51</span><br><span class="line-number">52</span><br><span class="line-number">53</span><br><span class="line-number">54</span><br><span class="line-number">55</span><br><span class="line-number">56</span><br><span class="line-number">57</span><br><span class="line-number">58</span><br><span class="line-number">59</span><br><span class="line-number">60</span><br><span class="line-number">61</span><br><span class="line-number">62</span><br><span class="line-number">63</span><br><span class="line-number">64</span><br><span class="line-number">65</span><br></div></div><p>The <code>schedule</code> array shows every time the switch is turned on or off. The <code>hours</code> array shows values per hour containing the price (received as input), whether that hour is on or off, the start time of the hour and the amount per kWh that is saved on hours that are turned off, compared to the next hour that is on.</p><h2 id="tips-tricks" tabindex="-1"><a class="header-anchor" href="#tips-tricks" aria-hidden="true">#</a> Tips & tricks</h2><h3 id="multiple-nodes-works-together" tabindex="-1"><a class="header-anchor" href="#multiple-nodes-works-together" aria-hidden="true">#</a> Multiple nodes works together</h3><p>You can use multiple nodes simultanously, for different periods, if you want more hours on one part of the day than another part, or to make sure there are at least some hours on during each period.</p><h3 id="highest-price" tabindex="-1"><a class="header-anchor" href="#highest-price" aria-hidden="true">#</a> Highest price</h3><p>If you want to find the <code>x</code> hours with the highest prices, do as follows:</p><ol><li>Calculate <code>y</code> as the total number of hours in the period. For example, if the period is from <code>08:00</code> to <code>20:00</code>, then <code>y = 12</code>.</li><li>Configure <code>Hours On = y - x</code>, so if <code>x = 4</code>, then <code>Hours On = 12 - 4 = 8</code>.</li><li>Use <strong>Output 2</strong> to get a signal when you have the hours with the highest prices. Just remember that the value sent to output 2 is <code>false</code>, not <code>true</code> as it is on output 1.</li></ol><!--]--></div><footer class="page-meta"><!----><div class="meta-item last-updated"><span class="meta-item-label">Last Updated: </span><!----></div><!----></footer><nav class="page-nav"><p class="inner"><span class="prev"><a href="/nodes/ps-strategy-best-save.html" class="" aria-label="ps-strategy-best-save"><!--[--><!--]--> ps-strategy-best-save <!--[--><!--]--></a></span><span class="next"><a href="/nodes/ps-receive-price.html" class="" aria-label="ps-receive-price"><!--[--><!--]--> ps-receive-price <!--[--><!--]--></a></span></p></nav><!--[--><!--]--></main><!--]--></div><!----><!--]--></div>
|
|
122
|
-
<script
|
|
121
|
+
</code></pre><div class="line-numbers" aria-hidden="true"><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><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br><span class="line-number">38</span><br><span class="line-number">39</span><br><span class="line-number">40</span><br><span class="line-number">41</span><br><span class="line-number">42</span><br><span class="line-number">43</span><br><span class="line-number">44</span><br><span class="line-number">45</span><br><span class="line-number">46</span><br><span class="line-number">47</span><br><span class="line-number">48</span><br><span class="line-number">49</span><br><span class="line-number">50</span><br><span class="line-number">51</span><br><span class="line-number">52</span><br><span class="line-number">53</span><br><span class="line-number">54</span><br><span class="line-number">55</span><br><span class="line-number">56</span><br><span class="line-number">57</span><br><span class="line-number">58</span><br><span class="line-number">59</span><br><span class="line-number">60</span><br><span class="line-number">61</span><br><span class="line-number">62</span><br><span class="line-number">63</span><br><span class="line-number">64</span><br><span class="line-number">65</span><br></div></div><p>The <code>schedule</code> array shows every time the switch is turned on or off. The <code>hours</code> array shows values per hour containing the price (received as input), whether that hour is on or off, the start time of the hour and the amount per kWh that is saved on hours that are turned off, compared to the next hour that is on.</p><h2 id="tips-tricks" tabindex="-1"><a class="header-anchor" href="#tips-tricks" aria-hidden="true">#</a> Tips & tricks</h2><h3 id="multiple-nodes-works-together" tabindex="-1"><a class="header-anchor" href="#multiple-nodes-works-together" aria-hidden="true">#</a> Multiple nodes works together</h3><p>You can use multiple nodes simultanously, for different periods, if you want more hours on one part of the day than another part, or to make sure there are at least some hours on during each period.</p><h3 id="highest-price" tabindex="-1"><a class="header-anchor" href="#highest-price" aria-hidden="true">#</a> Highest price</h3><p>If you want to find the <code>x</code> hours with the highest prices, do as follows:</p><ol><li>Calculate <code>y</code> as the total number of hours in the period. For example, if the period is from <code>08:00</code> to <code>20:00</code>, then <code>y = 12</code>.</li><li>Configure <code>Hours On = y - x</code>, so if <code>x = 4</code>, then <code>Hours On = 12 - 4 = 8</code>.</li><li>Use <strong>Output 2</strong> to get a signal when you have the hours with the highest prices. Just remember that the value sent to output 2 is <code>false</code>, not <code>true</code> as it is on output 1.</li></ol><!--]--></div><footer class="page-meta"><!----><div class="meta-item last-updated"><span class="meta-item-label">Last Updated: </span><!----></div><!----></footer><nav class="page-nav"><p class="inner"><span class="prev"><a href="/nodes/ps-strategy-best-save.html" class="" aria-label="ps-strategy-best-save"><!--[--><!--]--> ps-strategy-best-save <!--[--><!--]--></a></span><span class="next"><a href="/nodes/ps-receive-price.html" class="" aria-label="ps-receive-price"><!--[--><!--]--> ps-receive-price <!--[--><!--]--></a></span></p></nav><!--[--><!--]--></main><!--]--></div><!----><!--]--></div>
|
|
122
|
+
<script type="module" src="/assets/app.b3d8926b.js" defer></script>
|
|
123
123
|
</body>
|
|
124
124
|
</html>
|