node-red-contrib-power-saver 3.3.2 → 3.4.2
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/.firebase/hosting.ZG9jcy8udnVlcHJlc3MvZGlzdA.cache +94 -0
- package/.firebaserc +5 -0
- package/.github/workflows/firebase-hosting-merge.yml +20 -0
- package/.github/workflows/firebase-hosting-pull-request.yml +17 -0
- package/README.md +1 -1
- package/docs/.vuepress/components/BestSaveVerificator.vue +3 -3
- package/docs/.vuepress/config.js +15 -1
- package/docs/.vuepress/dist/404.html +23 -5
- package/docs/.vuepress/dist/assets/css/896.styles.21a80cb6.css +1 -0
- package/docs/.vuepress/dist/assets/css/styles.1c48cbd0.css +10 -0
- package/docs/.vuepress/dist/assets/img/heat-capacitor-temperatureVsPrice.6e74905b.png +0 -0
- package/docs/.vuepress/dist/assets/img/node-ps-strategy-heat-capacitor-cascade-control.2e75ed9e.png +0 -0
- package/docs/.vuepress/dist/assets/img/node-ps-strategy-heat-capacitor-simple-flow-example.29d9bf59.png +0 -0
- package/docs/.vuepress/dist/assets/img/oven-setpoint-calculation.5bda0eec.png +0 -0
- package/docs/.vuepress/dist/assets/img/overshoot-time.b3b5d70e.png +0 -0
- package/docs/.vuepress/dist/assets/js/229.5c5378fa.js +1 -0
- package/docs/.vuepress/dist/assets/js/331.872104cd.js +1 -0
- package/docs/.vuepress/dist/assets/js/405.f4edd94d.js +2 -0
- package/docs/.vuepress/dist/assets/js/{619.8ba1b1f6.js.LICENSE.txt → 405.f4edd94d.js.LICENSE.txt} +0 -0
- package/docs/.vuepress/dist/assets/js/490.1e639e05.js +1 -0
- package/docs/.vuepress/dist/assets/js/{491.17a98f38.js → 491.bd938119.js} +1 -1
- package/docs/.vuepress/dist/assets/js/555.d8963d84.js +1 -0
- package/docs/.vuepress/dist/assets/js/{811.6a3392d5.js → 811.5f659592.js} +0 -0
- package/docs/.vuepress/dist/assets/js/app.dfdee6f9.js +1 -0
- package/docs/.vuepress/dist/assets/js/runtime~app.f6ac32d7.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-0607240a.0193a377.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-08683c60.52e94cb6.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-0aca7ba6.cac5d4b9.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-0b5e3c8c.18561f6e.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-1ad821fa.6697a349.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-1b3a0ab8.c6c4e19b.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-1e2b191e.07b8ab21.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-29504124.00be7399.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-30acb564.28af12af.js +1 -0
- package/docs/.vuepress/dist/assets/js/{v-3706649a.d7f73384.js → v-3706649a.c76d575b.js} +1 -1
- package/docs/.vuepress/dist/assets/js/v-4637f9e4.d334c29a.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-4c28314d.8cbb0f9d.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-510ed0d4.c04bc2e4.js +1 -0
- package/docs/.vuepress/dist/assets/js/{v-5954bcb2.937005d0.js → v-5954bcb2.dff3fc67.js} +1 -1
- package/docs/.vuepress/dist/assets/js/v-5db8da3a.e5e6d7a6.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-61f728ca.81968036.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-677dfaed.c159b0f4.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-7446a652.8fc2c591.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-7c87f26e.8ed52391.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-84304104.f3f07ed3.js +1 -0
- package/docs/.vuepress/dist/assets/js/{v-8daa1a0e.c63afc2b.js → v-8daa1a0e.ed84ca09.js} +1 -1
- package/docs/.vuepress/dist/assets/js/{v-b4a42144.733e4e7c.js → v-b4a42144.9a2a0c9f.js} +1 -1
- package/docs/.vuepress/dist/assets/js/v-e8c55052.b7d52fc6.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-fffb8e28.d09ab959.js +1 -0
- package/docs/.vuepress/dist/changelog/index.html +23 -5
- package/docs/.vuepress/dist/contribute/index.html +23 -5
- package/docs/.vuepress/dist/examples/example-cascade-temperature-control.html +304 -0
- package/docs/.vuepress/dist/examples/example-heat-capacitor.html +247 -0
- package/docs/.vuepress/dist/examples/example-next-schedule-entity.html +27 -9
- package/docs/.vuepress/dist/examples/example-nordpool-current-state.html +24 -6
- package/docs/.vuepress/dist/examples/example-nordpool-events-state.html +24 -6
- package/docs/.vuepress/dist/examples/example-tibber-mqtt.html +24 -6
- package/docs/.vuepress/dist/examples/index.html +23 -5
- package/docs/.vuepress/dist/faq/best-save-viewer.html +23 -5
- package/docs/.vuepress/dist/faq/index.html +23 -5
- package/docs/.vuepress/dist/guide/index.html +24 -6
- package/docs/.vuepress/dist/index.html +23 -5
- package/docs/.vuepress/dist/nodes/index.html +23 -5
- package/docs/.vuepress/dist/nodes/old-power-saver-doc.html +25 -7
- package/docs/.vuepress/dist/nodes/power-saver.html +23 -5
- package/docs/.vuepress/dist/nodes/ps-elvia-add-tariff.html +23 -5
- package/docs/.vuepress/dist/nodes/ps-general-add-tariff.html +23 -5
- package/docs/.vuepress/dist/nodes/ps-receive-price.html +26 -8
- package/docs/.vuepress/dist/nodes/ps-strategy-best-save.html +32 -9
- package/docs/.vuepress/dist/nodes/ps-strategy-heat-capacitor.html +260 -0
- package/docs/.vuepress/dist/nodes/ps-strategy-lowest-price.html +30 -7
- package/docs/.vuepress/dist/nodes/strategy-input.html +24 -6
- package/docs/README.md +1 -1
- package/docs/changelog/README.md +14 -0
- package/docs/contribute/README.md +8 -0
- package/docs/examples/README.md +8 -2
- package/docs/examples/example-cascade-temperature-control.md +346 -0
- package/docs/examples/example-heat-capacitor.md +271 -0
- package/docs/images/heat-capacitor-temperatureVsPrice.png +0 -0
- package/docs/images/node-ps-strategy-heat-capacitor-cascade-control.png +0 -0
- package/docs/images/node-ps-strategy-heat-capacitor-simple-flow-example.png +0 -0
- package/docs/images/node-ps-strategy-heat-capacitor.png +0 -0
- package/docs/images/oven-setpoint-calculation.png +0 -0
- package/docs/images/overshoot-time.png +0 -0
- package/docs/images/temperature-manipulation-config.png +0 -0
- package/docs/nodes/README.md +7 -1
- package/docs/nodes/ps-strategy-heat-capacitor.md +346 -0
- package/examples/add-general-tariff.json +103 -0
- package/examples/best-save-for-water-heater.json +140 -0
- package/examples/elvia-add-tariff.json +99 -0
- package/examples/elvia-get-tariff-types.json +58 -0
- package/examples/elvia-get-tariff.json +60 -0
- package/examples/heat-capacitor-for-room-heating.json +186 -0
- package/examples/lowest-price-for-heating-cables.json +159 -0
- package/firebase.json +6 -0
- package/package.json +17 -9
- package/public/404.html +33 -0
- package/public/index.html +89 -0
- package/src/elvia/elvia-tariff.js +2 -1
- package/src/handle-input.js +6 -3
- package/src/strategy-heat-capacitor-functions.js +246 -0
- package/src/strategy-heat-capacitor.html +85 -0
- package/src/strategy-heat-capacitor.js +125 -0
- package/test/data/converted-prices.json +1 -1
- package/test/data/multiple-trades.json +53 -0
- package/test/data/tibber-decreasing-24h.json +101 -0
- package/test/data/tibber-decreasing2-24h.json +101 -0
- package/test/strategy-heat-capacitor-node.test.js +183 -0
- package/test/strategy-heat-capacitor.test.js +103 -0
- package/test/strategy-lowest-price-functions.test.js +1 -1
- package/test/utils.test.js +0 -2
- package/docs/.vuepress/dist/.nojekyll +0 -0
- package/docs/.vuepress/dist/assets/css/563.styles.99f4a8aa.css +0 -1
- package/docs/.vuepress/dist/assets/css/styles.031dcf27.css +0 -9
- package/docs/.vuepress/dist/assets/js/262.cf2c57d2.js +0 -1
- package/docs/.vuepress/dist/assets/js/293.08ea5200.js +0 -1
- package/docs/.vuepress/dist/assets/js/331.15ee3c51.js +0 -1
- package/docs/.vuepress/dist/assets/js/619.8ba1b1f6.js +0 -2
- package/docs/.vuepress/dist/assets/js/app.b705176c.js +0 -1
- package/docs/.vuepress/dist/assets/js/runtime~app.47f4f812.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-0607240a.a57c2199.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-08683c60.ccafdcab.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-0aca7ba6.25903946.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-0b5e3c8c.a6a015b4.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-1ad821fa.5978386f.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-1e2b191e.88dc5555.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-29504124.4aca27d5.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-30acb564.529a3c16.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-4637f9e4.703b1d96.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-510ed0d4.7b142a81.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-5db8da3a.3de3588d.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-61f728ca.21d432fe.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-677dfaed.44a653b9.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-7446a652.74b21d0b.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-7c87f26e.ee5be992.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-e8c55052.ab0a79ec.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-fffb8e28.525be02a.js +0 -1
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en-US">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
|
+
<meta name="generator" content="VuePress 2.0.0-beta.35">
|
|
7
|
+
<style>
|
|
8
|
+
:root {
|
|
9
|
+
--c-bg: #fff;
|
|
10
|
+
}
|
|
11
|
+
html.dark {
|
|
12
|
+
--c-bg: #22272e;
|
|
13
|
+
}
|
|
14
|
+
html, body {
|
|
15
|
+
background-color: var(--c-bg);
|
|
16
|
+
}
|
|
17
|
+
</style>
|
|
18
|
+
<script>
|
|
19
|
+
const userMode = localStorage.getItem('vuepress-color-scheme');
|
|
20
|
+
const systemDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
21
|
+
if (userMode === 'dark' || (userMode !== 'light' && systemDarkMode)) {
|
|
22
|
+
document.documentElement.classList.toggle('dark', true);
|
|
23
|
+
}
|
|
24
|
+
</script>
|
|
25
|
+
<link rel="shortcut icon" type="image/x-icon" href="euro.png"><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9857859182772006" crossorigin="anonymous"></script><title>Simple heat capacitor strategy flow | Power Saver</title><meta name="description" content="A Node-RED note to save money on hourly changing power prices">
|
|
26
|
+
<link rel="preload" href="/assets/js/runtime~app.f6ac32d7.js" as="script"><link rel="preload" href="/assets/css/styles.1c48cbd0.css" as="style"><link rel="preload" href="/assets/js/405.f4edd94d.js" as="script"><link rel="preload" href="/assets/js/app.dfdee6f9.js" as="script">
|
|
27
|
+
<link rel="stylesheet" href="/assets/css/styles.1c48cbd0.css">
|
|
28
|
+
</head>
|
|
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=""><!----><span class="site-name">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="" aria-label="Nodes"><!--[--><!--]--> Nodes <!--[--><!--]--></a></div><div class="navbar-item"><a href="/examples/" class="router-link-active" 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="" aria-label="Nodes"><!--[--><!--]--> Nodes <!--[--><!--]--></a></div><div class="navbar-item"><a href="/examples/" class="router-link-active" 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">Examples <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/examples/example-nordpool-current-state.html" class="sidebar-item" aria-label="Nord Pool and current state node"><!--[--><!--]--> Nord Pool and current state node <!--[--><!--]--></a><!----></li><li><a href="/examples/example-nordpool-events-state.html" class="sidebar-item" aria-label="Nord Pool and events: state node"><!--[--><!--]--> Nord Pool and events: state node <!--[--><!--]--></a><!----></li><li><a href="/examples/example-tibber-mqtt.html" class="sidebar-item" aria-label="Tibber, a switch and MQTT"><!--[--><!--]--> Tibber, a switch and MQTT <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/examples/example-heat-capacitor.html" class="router-link-active router-link-exact-active router-link-active sidebar-item active" aria-label="Simple heat capacitor strategy flow"><!--[--><!--]--> Simple heat capacitor strategy flow <!--[--><!--]--></a><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/examples/example-heat-capacitor.html#description" class="router-link-active router-link-exact-active sidebar-item" aria-label="Description"><!--[--><!--]--> Description <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/examples/example-heat-capacitor.html#requirements" class="router-link-active router-link-exact-active sidebar-item" aria-label="Requirements"><!--[--><!--]--> Requirements <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/examples/example-heat-capacitor.html#instructions" class="router-link-active router-link-exact-active sidebar-item" aria-label="Instructions"><!--[--><!--]--> Instructions <!--[--><!--]--></a><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/examples/example-heat-capacitor.html#advanced-set-up" class="router-link-active router-link-exact-active sidebar-item" aria-label="Advanced set-up"><!--[--><!--]--> Advanced set-up <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><a aria-current="page" href="/examples/example-heat-capacitor.html#flow" class="router-link-active router-link-exact-active sidebar-item" aria-label="Flow"><!--[--><!--]--> Flow <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><li><a href="/examples/example-cascade-temperature-control.html" class="sidebar-item" aria-label="Cascade temperature control"><!--[--><!--]--> Cascade temperature control <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><!--]--></ul><!--[--><!--]--></aside><!--]--><!--[--><main class="page"><!--[--><!--]--><div class="theme-default-content"><!--[--><h1 id="simple-heat-capacitor-strategy-flow" tabindex="-1"><a class="header-anchor" href="#simple-heat-capacitor-strategy-flow" aria-hidden="true">#</a> Simple heat capacitor strategy flow</h1><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><hr><h2 id="requirements" tabindex="-1"><a class="header-anchor" href="#requirements" aria-hidden="true">#</a> Requirements</h2><blockquote><p>Home assistant integrated with Node-RED</p></blockquote><blockquote><p>Tibber node installed and correctly configured</p></blockquote><blockquote><p>A climate entity</p></blockquote><h2 id="instructions" tabindex="-1"><a class="header-anchor" href="#instructions" aria-hidden="true">#</a> Instructions</h2><blockquote><p>Create an <code>input_number</code> entity in Home Assistant named <code>setpoint</code></p></blockquote><blockquote><p>Import the flow into Node-RED</p></blockquote><blockquote><p>Configure the heat-capacitor node:</p></blockquote><ul><li>Insert an approximate time it takes to increase the temperature by 1 Centigrade (could be 90 minutes)</li><li>Insert an approximate time it takes to decrease 1 Centigrade</li><li>Insert minimum savings for a heating/cooling cycle (should not be zero, as a cycle might have a cost)</li></ul><blockquote><p>Configure the climate service to target the correct climate entity (this has to be edited in two places)</p></blockquote><ul><li>Change <code>Entity Id</code> in the properties menu</li><li>Change the <code>entity_id</code> value in the <code>Data</code> property</li></ul><blockquote><p>(optional) If the <code>input_number</code> entity was named something else than <code>setpoint</code>, change the <code>entity_id</code> of the <code>Setpoint</code> node accordingly.</p></blockquote><h3 id="advanced-set-up" tabindex="-1"><a class="header-anchor" href="#advanced-set-up" aria-hidden="true">#</a> Advanced set-up</h3><blockquote><p>Replace the <code>Set temperature</code> node with a <a href="/examples/example-cascade-temperature-control.html" class="">Cascade controller</a> to improve the heaters accuracy and response time.</p></blockquote><hr><h2 id="flow" tabindex="-1"><a class="header-anchor" href="#flow" aria-hidden="true">#</a> Flow</h2><p><img src="/assets/img/node-ps-strategy-heat-capacitor-simple-flow-example.29d9bf59.png" alt="Simple example with Tibber"></p><hr><details class="custom-container details"><summary>[Flow code]</summary><div class="language-json ext-json"><pre class="language-json"><code><span class="token punctuation">[</span>
|
|
31
|
+
<span class="token punctuation">{</span>
|
|
32
|
+
<span class="token property">"id"</span><span class="token operator">:</span> <span class="token string">"135c4e7649611314"</span><span class="token punctuation">,</span>
|
|
33
|
+
<span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"tab"</span><span class="token punctuation">,</span>
|
|
34
|
+
<span class="token property">"label"</span><span class="token operator">:</span> <span class="token string">"PowerSaver"</span><span class="token punctuation">,</span>
|
|
35
|
+
<span class="token property">"disabled"</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
|
|
36
|
+
<span class="token property">"info"</span><span class="token operator">:</span> <span class="token string">""</span><span class="token punctuation">,</span>
|
|
37
|
+
<span class="token property">"env"</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span>
|
|
38
|
+
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|
39
|
+
<span class="token punctuation">{</span>
|
|
40
|
+
<span class="token property">"id"</span><span class="token operator">:</span> <span class="token string">"cf5908a52e0aee5e"</span><span class="token punctuation">,</span>
|
|
41
|
+
<span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"ps-receive-price"</span><span class="token punctuation">,</span>
|
|
42
|
+
<span class="token property">"z"</span><span class="token operator">:</span> <span class="token string">"135c4e7649611314"</span><span class="token punctuation">,</span>
|
|
43
|
+
<span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"Price Receiver"</span><span class="token punctuation">,</span>
|
|
44
|
+
<span class="token property">"x"</span><span class="token operator">:</span> <span class="token number">400</span><span class="token punctuation">,</span>
|
|
45
|
+
<span class="token property">"y"</span><span class="token operator">:</span> <span class="token number">320</span><span class="token punctuation">,</span>
|
|
46
|
+
<span class="token property">"wires"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|
47
|
+
<span class="token punctuation">[</span>
|
|
48
|
+
<span class="token string">"b7b85590b7d28ba6"</span>
|
|
49
|
+
<span class="token punctuation">]</span>
|
|
50
|
+
<span class="token punctuation">]</span>
|
|
51
|
+
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|
52
|
+
<span class="token punctuation">{</span>
|
|
53
|
+
<span class="token property">"id"</span><span class="token operator">:</span> <span class="token string">"b08bc12bf8734c5a"</span><span class="token punctuation">,</span>
|
|
54
|
+
<span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"tibber-query"</span><span class="token punctuation">,</span>
|
|
55
|
+
<span class="token property">"z"</span><span class="token operator">:</span> <span class="token string">"135c4e7649611314"</span><span class="token punctuation">,</span>
|
|
56
|
+
<span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">""</span><span class="token punctuation">,</span>
|
|
57
|
+
<span class="token property">"active"</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
|
|
58
|
+
<span class="token property">"apiEndpointRef"</span><span class="token operator">:</span> <span class="token string">"9ea07b03b88cb526"</span><span class="token punctuation">,</span>
|
|
59
|
+
<span class="token property">"x"</span><span class="token operator">:</span> <span class="token number">230</span><span class="token punctuation">,</span>
|
|
60
|
+
<span class="token property">"y"</span><span class="token operator">:</span> <span class="token number">320</span><span class="token punctuation">,</span>
|
|
61
|
+
<span class="token property">"wires"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|
62
|
+
<span class="token punctuation">[</span>
|
|
63
|
+
<span class="token string">"cf5908a52e0aee5e"</span>
|
|
64
|
+
<span class="token punctuation">]</span>
|
|
65
|
+
<span class="token punctuation">]</span>
|
|
66
|
+
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|
67
|
+
<span class="token punctuation">{</span>
|
|
68
|
+
<span class="token property">"id"</span><span class="token operator">:</span> <span class="token string">"d0d4dd31efe67e85"</span><span class="token punctuation">,</span>
|
|
69
|
+
<span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"inject"</span><span class="token punctuation">,</span>
|
|
70
|
+
<span class="token property">"z"</span><span class="token operator">:</span> <span class="token string">"135c4e7649611314"</span><span class="token punctuation">,</span>
|
|
71
|
+
<span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">""</span><span class="token punctuation">,</span>
|
|
72
|
+
<span class="token property">"props"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|
73
|
+
<span class="token punctuation">{</span>
|
|
74
|
+
<span class="token property">"p"</span><span class="token operator">:</span> <span class="token string">"payload"</span>
|
|
75
|
+
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|
76
|
+
<span class="token punctuation">{</span>
|
|
77
|
+
<span class="token property">"p"</span><span class="token operator">:</span> <span class="token string">"topic"</span><span class="token punctuation">,</span>
|
|
78
|
+
<span class="token property">"vt"</span><span class="token operator">:</span> <span class="token string">"str"</span>
|
|
79
|
+
<span class="token punctuation">}</span>
|
|
80
|
+
<span class="token punctuation">]</span><span class="token punctuation">,</span>
|
|
81
|
+
<span class="token property">"repeat"</span><span class="token operator">:</span> <span class="token string">"60"</span><span class="token punctuation">,</span>
|
|
82
|
+
<span class="token property">"crontab"</span><span class="token operator">:</span> <span class="token string">""</span><span class="token punctuation">,</span>
|
|
83
|
+
<span class="token property">"once"</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
|
|
84
|
+
<span class="token property">"onceDelay"</span><span class="token operator">:</span> <span class="token string">"1"</span><span class="token punctuation">,</span>
|
|
85
|
+
<span class="token property">"topic"</span><span class="token operator">:</span> <span class="token string">""</span><span class="token punctuation">,</span>
|
|
86
|
+
<span class="token property">"payload"</span><span class="token operator">:</span> <span class="token string">"{ viewer { homes { currentSubscription { priceInfo { today { total startsAt } tomorrow { total startsAt } } } } } }"</span><span class="token punctuation">,</span>
|
|
87
|
+
<span class="token property">"payloadType"</span><span class="token operator">:</span> <span class="token string">"str"</span><span class="token punctuation">,</span>
|
|
88
|
+
<span class="token property">"x"</span><span class="token operator">:</span> <span class="token number">90</span><span class="token punctuation">,</span>
|
|
89
|
+
<span class="token property">"y"</span><span class="token operator">:</span> <span class="token number">320</span><span class="token punctuation">,</span>
|
|
90
|
+
<span class="token property">"wires"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|
91
|
+
<span class="token punctuation">[</span>
|
|
92
|
+
<span class="token string">"b08bc12bf8734c5a"</span>
|
|
93
|
+
<span class="token punctuation">]</span>
|
|
94
|
+
<span class="token punctuation">]</span>
|
|
95
|
+
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|
96
|
+
<span class="token punctuation">{</span>
|
|
97
|
+
<span class="token property">"id"</span><span class="token operator">:</span> <span class="token string">"4831f393a0066565"</span><span class="token punctuation">,</span>
|
|
98
|
+
<span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"api-call-service"</span><span class="token punctuation">,</span>
|
|
99
|
+
<span class="token property">"z"</span><span class="token operator">:</span> <span class="token string">"135c4e7649611314"</span><span class="token punctuation">,</span>
|
|
100
|
+
<span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"Set temperature"</span><span class="token punctuation">,</span>
|
|
101
|
+
<span class="token property">"server"</span><span class="token operator">:</span> <span class="token string">"e2dd69fb.8f70a8"</span><span class="token punctuation">,</span>
|
|
102
|
+
<span class="token property">"version"</span><span class="token operator">:</span> <span class="token number">3</span><span class="token punctuation">,</span>
|
|
103
|
+
<span class="token property">"debugenabled"</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
|
|
104
|
+
<span class="token property">"service_domain"</span><span class="token operator">:</span> <span class="token string">"climate"</span><span class="token punctuation">,</span>
|
|
105
|
+
<span class="token property">"service"</span><span class="token operator">:</span> <span class="token string">"set_temperature"</span><span class="token punctuation">,</span>
|
|
106
|
+
<span class="token property">"entityId"</span><span class="token operator">:</span> <span class="token string">"climate.my_climate"</span><span class="token punctuation">,</span>
|
|
107
|
+
<span class="token property">"data"</span><span class="token operator">:</span> <span class="token string">"{\"entity_id\":\"climate.my_climate\",\"temperature\":\"{{adj_setpoint}}\"}"</span><span class="token punctuation">,</span>
|
|
108
|
+
<span class="token property">"dataType"</span><span class="token operator">:</span> <span class="token string">"json"</span><span class="token punctuation">,</span>
|
|
109
|
+
<span class="token property">"mergecontext"</span><span class="token operator">:</span> <span class="token string">""</span><span class="token punctuation">,</span>
|
|
110
|
+
<span class="token property">"mustacheAltTags"</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
|
|
111
|
+
<span class="token property">"outputProperties"</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
|
|
112
|
+
<span class="token property">"queue"</span><span class="token operator">:</span> <span class="token string">"none"</span><span class="token punctuation">,</span>
|
|
113
|
+
<span class="token property">"x"</span><span class="token operator">:</span> <span class="token number">980</span><span class="token punctuation">,</span>
|
|
114
|
+
<span class="token property">"y"</span><span class="token operator">:</span> <span class="token number">320</span><span class="token punctuation">,</span>
|
|
115
|
+
<span class="token property">"wires"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|
116
|
+
<span class="token punctuation">[</span><span class="token punctuation">]</span>
|
|
117
|
+
<span class="token punctuation">]</span>
|
|
118
|
+
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|
119
|
+
<span class="token punctuation">{</span>
|
|
120
|
+
<span class="token property">"id"</span><span class="token operator">:</span> <span class="token string">"027f4267d969e1b8"</span><span class="token punctuation">,</span>
|
|
121
|
+
<span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"server-state-changed"</span><span class="token punctuation">,</span>
|
|
122
|
+
<span class="token property">"z"</span><span class="token operator">:</span> <span class="token string">"135c4e7649611314"</span><span class="token punctuation">,</span>
|
|
123
|
+
<span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"Setpoint"</span><span class="token punctuation">,</span>
|
|
124
|
+
<span class="token property">"server"</span><span class="token operator">:</span> <span class="token string">"e2dd69fb.8f70a8"</span><span class="token punctuation">,</span>
|
|
125
|
+
<span class="token property">"version"</span><span class="token operator">:</span> <span class="token number">3</span><span class="token punctuation">,</span>
|
|
126
|
+
<span class="token property">"exposeToHomeAssistant"</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
|
|
127
|
+
<span class="token property">"haConfig"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|
128
|
+
<span class="token punctuation">{</span>
|
|
129
|
+
<span class="token property">"property"</span><span class="token operator">:</span> <span class="token string">"name"</span><span class="token punctuation">,</span>
|
|
130
|
+
<span class="token property">"value"</span><span class="token operator">:</span> <span class="token string">""</span>
|
|
131
|
+
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|
132
|
+
<span class="token punctuation">{</span>
|
|
133
|
+
<span class="token property">"property"</span><span class="token operator">:</span> <span class="token string">"icon"</span><span class="token punctuation">,</span>
|
|
134
|
+
<span class="token property">"value"</span><span class="token operator">:</span> <span class="token string">""</span>
|
|
135
|
+
<span class="token punctuation">}</span>
|
|
136
|
+
<span class="token punctuation">]</span><span class="token punctuation">,</span>
|
|
137
|
+
<span class="token property">"entityidfilter"</span><span class="token operator">:</span> <span class="token string">"input_number.setpoint"</span><span class="token punctuation">,</span>
|
|
138
|
+
<span class="token property">"entityidfiltertype"</span><span class="token operator">:</span> <span class="token string">"exact"</span><span class="token punctuation">,</span>
|
|
139
|
+
<span class="token property">"outputinitially"</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
|
|
140
|
+
<span class="token property">"state_type"</span><span class="token operator">:</span> <span class="token string">"num"</span><span class="token punctuation">,</span>
|
|
141
|
+
<span class="token property">"haltifstate"</span><span class="token operator">:</span> <span class="token string">""</span><span class="token punctuation">,</span>
|
|
142
|
+
<span class="token property">"halt_if_type"</span><span class="token operator">:</span> <span class="token string">"str"</span><span class="token punctuation">,</span>
|
|
143
|
+
<span class="token property">"halt_if_compare"</span><span class="token operator">:</span> <span class="token string">"is"</span><span class="token punctuation">,</span>
|
|
144
|
+
<span class="token property">"outputs"</span><span class="token operator">:</span> <span class="token number">1</span><span class="token punctuation">,</span>
|
|
145
|
+
<span class="token property">"output_only_on_state_change"</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
|
|
146
|
+
<span class="token property">"for"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
|
|
147
|
+
<span class="token property">"forType"</span><span class="token operator">:</span> <span class="token string">"num"</span><span class="token punctuation">,</span>
|
|
148
|
+
<span class="token property">"forUnits"</span><span class="token operator">:</span> <span class="token string">"minutes"</span><span class="token punctuation">,</span>
|
|
149
|
+
<span class="token property">"ignorePrevStateNull"</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
|
|
150
|
+
<span class="token property">"ignorePrevStateUnknown"</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
|
|
151
|
+
<span class="token property">"ignorePrevStateUnavailable"</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
|
|
152
|
+
<span class="token property">"ignoreCurrentStateUnknown"</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
|
|
153
|
+
<span class="token property">"ignoreCurrentStateUnavailable"</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
|
|
154
|
+
<span class="token property">"outputProperties"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|
155
|
+
<span class="token punctuation">{</span>
|
|
156
|
+
<span class="token property">"property"</span><span class="token operator">:</span> <span class="token string">"payload.config.setpoint"</span><span class="token punctuation">,</span>
|
|
157
|
+
<span class="token property">"propertyType"</span><span class="token operator">:</span> <span class="token string">"msg"</span><span class="token punctuation">,</span>
|
|
158
|
+
<span class="token property">"value"</span><span class="token operator">:</span> <span class="token string">""</span><span class="token punctuation">,</span>
|
|
159
|
+
<span class="token property">"valueType"</span><span class="token operator">:</span> <span class="token string">"entityState"</span>
|
|
160
|
+
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|
161
|
+
<span class="token punctuation">{</span>
|
|
162
|
+
<span class="token property">"property"</span><span class="token operator">:</span> <span class="token string">"data"</span><span class="token punctuation">,</span>
|
|
163
|
+
<span class="token property">"propertyType"</span><span class="token operator">:</span> <span class="token string">"msg"</span><span class="token punctuation">,</span>
|
|
164
|
+
<span class="token property">"value"</span><span class="token operator">:</span> <span class="token string">""</span><span class="token punctuation">,</span>
|
|
165
|
+
<span class="token property">"valueType"</span><span class="token operator">:</span> <span class="token string">"eventData"</span>
|
|
166
|
+
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|
167
|
+
<span class="token punctuation">{</span>
|
|
168
|
+
<span class="token property">"property"</span><span class="token operator">:</span> <span class="token string">"topic"</span><span class="token punctuation">,</span>
|
|
169
|
+
<span class="token property">"propertyType"</span><span class="token operator">:</span> <span class="token string">"msg"</span><span class="token punctuation">,</span>
|
|
170
|
+
<span class="token property">"value"</span><span class="token operator">:</span> <span class="token string">""</span><span class="token punctuation">,</span>
|
|
171
|
+
<span class="token property">"valueType"</span><span class="token operator">:</span> <span class="token string">"triggerId"</span>
|
|
172
|
+
<span class="token punctuation">}</span>
|
|
173
|
+
<span class="token punctuation">]</span><span class="token punctuation">,</span>
|
|
174
|
+
<span class="token property">"x"</span><span class="token operator">:</span> <span class="token number">420</span><span class="token punctuation">,</span>
|
|
175
|
+
<span class="token property">"y"</span><span class="token operator">:</span> <span class="token number">360</span><span class="token punctuation">,</span>
|
|
176
|
+
<span class="token property">"wires"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|
177
|
+
<span class="token punctuation">[</span>
|
|
178
|
+
<span class="token string">"b7b85590b7d28ba6"</span>
|
|
179
|
+
<span class="token punctuation">]</span>
|
|
180
|
+
<span class="token punctuation">]</span>
|
|
181
|
+
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|
182
|
+
<span class="token punctuation">{</span>
|
|
183
|
+
<span class="token property">"id"</span><span class="token operator">:</span> <span class="token string">"b7b85590b7d28ba6"</span><span class="token punctuation">,</span>
|
|
184
|
+
<span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"ps-strategy-heat-capacitor"</span><span class="token punctuation">,</span>
|
|
185
|
+
<span class="token property">"z"</span><span class="token operator">:</span> <span class="token string">"135c4e7649611314"</span><span class="token punctuation">,</span>
|
|
186
|
+
<span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"Heat capacitor"</span><span class="token punctuation">,</span>
|
|
187
|
+
<span class="token property">"timeHeat1C"</span><span class="token operator">:</span> <span class="token string">"70"</span><span class="token punctuation">,</span>
|
|
188
|
+
<span class="token property">"timeCool1C"</span><span class="token operator">:</span> <span class="token number">50</span><span class="token punctuation">,</span>
|
|
189
|
+
<span class="token property">"maxTempAdjustment"</span><span class="token operator">:</span> <span class="token string">"1"</span><span class="token punctuation">,</span>
|
|
190
|
+
<span class="token property">"boostTempHeat"</span><span class="token operator">:</span> <span class="token string">"2"</span><span class="token punctuation">,</span>
|
|
191
|
+
<span class="token property">"boostTempCool"</span><span class="token operator">:</span> <span class="token string">"2"</span><span class="token punctuation">,</span>
|
|
192
|
+
<span class="token property">"minSavings"</span><span class="token operator">:</span> <span class="token number">0.08</span><span class="token punctuation">,</span>
|
|
193
|
+
<span class="token property">"setpoint"</span><span class="token operator">:</span> <span class="token number">23</span><span class="token punctuation">,</span>
|
|
194
|
+
<span class="token property">"x"</span><span class="token operator">:</span> <span class="token number">600</span><span class="token punctuation">,</span>
|
|
195
|
+
<span class="token property">"y"</span><span class="token operator">:</span> <span class="token number">320</span><span class="token punctuation">,</span>
|
|
196
|
+
<span class="token property">"wires"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|
197
|
+
<span class="token punctuation">[</span>
|
|
198
|
+
<span class="token string">"2b7cbdef3203a482"</span>
|
|
199
|
+
<span class="token punctuation">]</span><span class="token punctuation">,</span>
|
|
200
|
+
<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
|
|
201
|
+
<span class="token punctuation">[</span><span class="token punctuation">]</span>
|
|
202
|
+
<span class="token punctuation">]</span>
|
|
203
|
+
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|
204
|
+
<span class="token punctuation">{</span>
|
|
205
|
+
<span class="token property">"id"</span><span class="token operator">:</span> <span class="token string">"2b7cbdef3203a482"</span><span class="token punctuation">,</span>
|
|
206
|
+
<span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"function"</span><span class="token punctuation">,</span>
|
|
207
|
+
<span class="token property">"z"</span><span class="token operator">:</span> <span class="token string">"135c4e7649611314"</span><span class="token punctuation">,</span>
|
|
208
|
+
<span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"Adjust setpoint"</span><span class="token punctuation">,</span>
|
|
209
|
+
<span class="token property">"func"</span><span class="token operator">:</span> <span class="token string">"//In case the climate entity can only handle integers\n//Calculate rounded setpoint for the climate entity and return the msg\nmsg.adj_setpoint=Math.round(msg.payload);\nreturn msg\n"</span><span class="token punctuation">,</span>
|
|
210
|
+
<span class="token property">"outputs"</span><span class="token operator">:</span> <span class="token number">1</span><span class="token punctuation">,</span>
|
|
211
|
+
<span class="token property">"noerr"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
|
|
212
|
+
<span class="token property">"initialize"</span><span class="token operator">:</span> <span class="token string">""</span><span class="token punctuation">,</span>
|
|
213
|
+
<span class="token property">"finalize"</span><span class="token operator">:</span> <span class="token string">""</span><span class="token punctuation">,</span>
|
|
214
|
+
<span class="token property">"libs"</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
|
|
215
|
+
<span class="token property">"x"</span><span class="token operator">:</span> <span class="token number">800</span><span class="token punctuation">,</span>
|
|
216
|
+
<span class="token property">"y"</span><span class="token operator">:</span> <span class="token number">320</span><span class="token punctuation">,</span>
|
|
217
|
+
<span class="token property">"wires"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
|
218
|
+
<span class="token punctuation">[</span>
|
|
219
|
+
<span class="token string">"4831f393a0066565"</span>
|
|
220
|
+
<span class="token punctuation">]</span>
|
|
221
|
+
<span class="token punctuation">]</span>
|
|
222
|
+
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|
223
|
+
<span class="token punctuation">{</span>
|
|
224
|
+
<span class="token property">"id"</span><span class="token operator">:</span> <span class="token string">"9ea07b03b88cb526"</span><span class="token punctuation">,</span>
|
|
225
|
+
<span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"tibber-api-endpoint"</span><span class="token punctuation">,</span>
|
|
226
|
+
<span class="token property">"feedUrl"</span><span class="token operator">:</span> <span class="token string">"wss://api.tibber.com/v1-beta/gql/subscriptions"</span><span class="token punctuation">,</span>
|
|
227
|
+
<span class="token property">"queryUrl"</span><span class="token operator">:</span> <span class="token string">"https://api.tibber.com/v1-beta/gql"</span><span class="token punctuation">,</span>
|
|
228
|
+
<span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"Tibber"</span>
|
|
229
|
+
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
|
230
|
+
<span class="token punctuation">{</span>
|
|
231
|
+
<span class="token property">"id"</span><span class="token operator">:</span> <span class="token string">"e2dd69fb.8f70a8"</span><span class="token punctuation">,</span>
|
|
232
|
+
<span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"server"</span><span class="token punctuation">,</span>
|
|
233
|
+
<span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"Home Assistant"</span><span class="token punctuation">,</span>
|
|
234
|
+
<span class="token property">"version"</span><span class="token operator">:</span> <span class="token number">2</span><span class="token punctuation">,</span>
|
|
235
|
+
<span class="token property">"addon"</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
|
|
236
|
+
<span class="token property">"rejectUnauthorizedCerts"</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
|
|
237
|
+
<span class="token property">"ha_boolean"</span><span class="token operator">:</span> <span class="token string">"y|yes|true|on|home|open"</span><span class="token punctuation">,</span>
|
|
238
|
+
<span class="token property">"connectionDelay"</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
|
|
239
|
+
<span class="token property">"cacheJson"</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
|
|
240
|
+
<span class="token property">"heartbeat"</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
|
|
241
|
+
<span class="token property">"heartbeatInterval"</span><span class="token operator">:</span> <span class="token number">30</span>
|
|
242
|
+
<span class="token punctuation">}</span>
|
|
243
|
+
<span class="token punctuation">]</span>
|
|
244
|
+
</code></pre></div></details><!--]--></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="/examples/example-tibber-mqtt.html" class="" aria-label="Tibber, a switch and MQTT"><!--[--><!--]--> Tibber, a switch and MQTT <!--[--><!--]--></a></span><span class="next"><a href="/examples/example-cascade-temperature-control.html" class="" aria-label="Cascade temperature control"><!--[--><!--]--> Cascade temperature control <!--[--><!--]--></a></span></p></nav><!--[--><!--]--></main><!--]--></div><!----><!--]--></div>
|
|
245
|
+
<script src="/assets/js/runtime~app.f6ac32d7.js" defer></script><script src="/assets/js/405.f4edd94d.js" defer></script><script src="/assets/js/app.dfdee6f9.js" defer></script>
|
|
246
|
+
</body>
|
|
247
|
+
</html>
|
|
@@ -3,23 +3,41 @@
|
|
|
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.35">
|
|
7
|
+
<style>
|
|
8
|
+
:root {
|
|
9
|
+
--c-bg: #fff;
|
|
10
|
+
}
|
|
11
|
+
html.dark {
|
|
12
|
+
--c-bg: #22272e;
|
|
13
|
+
}
|
|
14
|
+
html, body {
|
|
15
|
+
background-color: var(--c-bg);
|
|
16
|
+
}
|
|
17
|
+
</style>
|
|
18
|
+
<script>
|
|
19
|
+
const userMode = localStorage.getItem('vuepress-color-scheme');
|
|
20
|
+
const systemDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
21
|
+
if (userMode === 'dark' || (userMode !== 'light' && systemDarkMode)) {
|
|
22
|
+
document.documentElement.classList.toggle('dark', true);
|
|
23
|
+
}
|
|
24
|
+
</script>
|
|
7
25
|
<link rel="shortcut icon" type="image/x-icon" href="euro.png"><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9857859182772006" crossorigin="anonymous"></script><title>Output schedule to a sensor entity | Power Saver</title><meta name="description" content="A Node-RED note to save money on hourly changing power prices">
|
|
8
|
-
<link rel="preload" href="/assets/js/runtime~app.
|
|
9
|
-
<link rel="stylesheet" href="/assets/css/styles.
|
|
26
|
+
<link rel="preload" href="/assets/js/runtime~app.f6ac32d7.js" as="script"><link rel="preload" href="/assets/css/styles.1c48cbd0.css" as="style"><link rel="preload" href="/assets/js/405.f4edd94d.js" as="script"><link rel="preload" href="/assets/js/app.dfdee6f9.js" as="script">
|
|
27
|
+
<link rel="stylesheet" href="/assets/css/styles.1c48cbd0.css">
|
|
10
28
|
</head>
|
|
11
29
|
<body>
|
|
12
|
-
<div id="app"><!--[--><div class="theme-container"><!--[--><header class="navbar"><div class="toggle-sidebar-button" title="toggle sidebar" aria-expanded="false" role="button" tabindex="0"><div class="icon" aria-hidden="true"><span></span><span></span><span></span></div></div><span><a href="/" class=""><!----><span class="site-name">Power Saver</span></a></span><div class="navbar-
|
|
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=""><!----><span class="site-name">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="" aria-label="Nodes"><!--[--><!--]--> Nodes <!--[--><!--]--></a></div><div class="navbar-item"><a href="/examples/" class="router-link-active" 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="" aria-label="Nodes"><!--[--><!--]--> Nodes <!--[--><!--]--></a></div><div class="navbar-item"><a href="/examples/" class="router-link-active" 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">Examples <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a href="/examples/example-nordpool-current-state.html" class="sidebar-item" aria-label="Nord Pool and current state node"><!--[--><!--]--> Nord Pool and current state node <!--[--><!--]--></a><!----></li><li><a href="/examples/example-nordpool-events-state.html" class="sidebar-item" aria-label="Nord Pool and events: state node"><!--[--><!--]--> Nord Pool and events: state node <!--[--><!--]--></a><!----></li><li><a href="/examples/example-tibber-mqtt.html" class="sidebar-item" aria-label="Tibber, a switch and MQTT"><!--[--><!--]--> Tibber, a switch and MQTT <!--[--><!--]--></a><!----></li><li><a href="/examples/example-heat-capacitor.html" class="sidebar-item" aria-label="Simple heat capacitor strategy flow"><!--[--><!--]--> Simple heat capacitor strategy flow <!--[--><!--]--></a><!----></li><li><a href="/examples/example-cascade-temperature-control.html" class="sidebar-item" aria-label="Cascade temperature control"><!--[--><!--]--> Cascade temperature control <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><!--]--></ul><!--[--><!--]--></aside><!--]--><!--[--><main class="page"><!--[--><!--]--><div class="theme-default-content"><!--[--><h1 id="output-schedule-to-a-sensor-entity" tabindex="-1"><a class="header-anchor" href="#output-schedule-to-a-sensor-entity" aria-hidden="true">#</a> Output schedule to a sensor entity</h1><p>This example was contributed by <a href="https://github.com/oakhill87" target="_blank" rel="noopener noreferrer">Stefan<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></p><p>Note: Requires <a href="https://github.com/zachowj/hass-node-red" target="_blank" rel="noopener noreferrer">Node-RED Companion Integration<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>.</p><p><img src="/assets/img/next-schedule-sensor.eb896bdd.png" alt="Sensor with timestamp and attributes"> <img src="/assets/img/next-schedule-flow.413ad62b.png" alt="Sensor flow"></p><p>This JavaScript code snippet can be pasted into a Function-node. When connected to the schedule-output (3) from Best Save, it will loop through the array of available hours and find the next timestamp where a power saving schedule is initated.</p><div class="language-javascript ext-js line-numbers-mode"><pre class="language-javascript"><code> <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">var</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> msg<span class="token punctuation">.</span>payload<span class="token punctuation">.</span>hours<span class="token punctuation">.</span>length<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
13
31
|
<span class="token keyword">if</span> <span class="token punctuation">(</span>msg<span class="token punctuation">.</span>payload<span class="token punctuation">.</span>hours<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>onOff <span class="token operator">!=</span> <span class="token boolean">true</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
14
|
-
<span class="token keyword">var</span> schedule <span class="token operator">=</span> <span class="token punctuation">{</span>time
|
|
32
|
+
<span class="token keyword">var</span> schedule <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token literal-property property">time</span><span class="token operator">:</span> msg<span class="token punctuation">.</span>payload<span class="token punctuation">.</span>hours<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>start<span class="token punctuation">,</span> <span class="token literal-property property">topic</span><span class="token operator">:</span> <span class="token string">"Neste spareperiode"</span><span class="token punctuation">,</span> <span class="token literal-property property">length</span><span class="token operator">:</span> msg<span class="token punctuation">.</span>payload<span class="token punctuation">.</span>config<span class="token punctuation">.</span>maxHoursToSaveInSequence<span class="token punctuation">,</span> <span class="token literal-property property">savings</span><span class="token operator">:</span> msg<span class="token punctuation">.</span>payload<span class="token punctuation">.</span>hours<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>saving<span class="token punctuation">}</span>
|
|
15
33
|
<span class="token keyword">break</span><span class="token punctuation">}</span>
|
|
16
34
|
<span class="token keyword">else</span> <span class="token punctuation">{</span>
|
|
17
|
-
<span class="token keyword">var</span> schedule <span class="token operator">=</span> <span class="token punctuation">{</span>time
|
|
35
|
+
<span class="token keyword">var</span> schedule <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token literal-property property">time</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span> <span class="token literal-property property">topic</span><span class="token operator">:</span> <span class="token string">"Ingen aksjoner"</span><span class="token punctuation">,</span> <span class="token literal-property property">length</span><span class="token operator">:</span> <span class="token string">"0"</span><span class="token punctuation">,</span> <span class="token literal-property property">savings</span><span class="token operator">:</span> <span class="token string">"0"</span><span class="token punctuation">}</span>
|
|
18
36
|
<span class="token punctuation">}</span>
|
|
19
37
|
<span class="token punctuation">}</span>
|
|
20
|
-
<span class="token keyword">var</span> schedule_array <span class="token operator">=</span> <span class="token punctuation">{</span>upcoming
|
|
38
|
+
<span class="token keyword">var</span> schedule_array <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token literal-property property">upcoming</span><span class="token operator">:</span> schedule<span class="token punctuation">}</span>
|
|
21
39
|
<span class="token keyword">return</span> <span class="token punctuation">[</span>schedule_array<span class="token punctuation">]</span>
|
|
22
|
-
</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>This will return the following:</p><ul><li>msg.upcoming.time = Timestamp if saving is scheduled - False if no schedule with the current available prices.</li><li>msg.upcoming.length = How long the next saving will last - set to 0 if no schedule.</li><li>msg.upcoming.savings = Estimated savings retrieved from the node.</li></ul><h2 id="setup" tabindex="-1"><a class="header-anchor" href="#setup" aria-hidden="true">#</a> Setup</h2><ol><li>Paste the code above into a Function node and connect it to the schedule output.</li><li>Create an entity node from the Node-RED Companion Integration, and configure it according to the steps below:</li></ol><p>The msg.topic is currently not used, but in case you'd want to specify dynamic names in the sensor instead of in the frontend, go ahead and add them as attributes using the following configuration:</p><ol><li><strong>State</strong>: msg.upcoming.time</li><li>Attribute key <strong>Duration</strong>: msg.upcoming.length</li><li>Attribute key <strong>Savings</strong>: msg.upcoming.savings</li></ol><img src="/assets/img/next-schedule-entity.4406856a.png" width="25%"><h2 id="to-do" tabindex="-1"><a class="header-anchor" href="#to-do" aria-hidden="true">#</a> To-do</h2><p>If you find any bugs, let me know, but as long as the payload doesn't change it should work.</p><!--]--></div><footer class="page-meta"><!----><div class="meta-item last-updated"><span class="meta-item-label">Last Updated: </span
|
|
23
|
-
<script src="/assets/js/runtime~app.
|
|
40
|
+
</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>This will return the following:</p><ul><li>msg.upcoming.time = Timestamp if saving is scheduled - False if no schedule with the current available prices.</li><li>msg.upcoming.length = How long the next saving will last - set to 0 if no schedule.</li><li>msg.upcoming.savings = Estimated savings retrieved from the node.</li></ul><h2 id="setup" tabindex="-1"><a class="header-anchor" href="#setup" aria-hidden="true">#</a> Setup</h2><ol><li>Paste the code above into a Function node and connect it to the schedule output.</li><li>Create an entity node from the Node-RED Companion Integration, and configure it according to the steps below:</li></ol><p>The msg.topic is currently not used, but in case you'd want to specify dynamic names in the sensor instead of in the frontend, go ahead and add them as attributes using the following configuration:</p><ol><li><strong>State</strong>: msg.upcoming.time</li><li>Attribute key <strong>Duration</strong>: msg.upcoming.length</li><li>Attribute key <strong>Savings</strong>: msg.upcoming.savings</li></ol><img src="/assets/img/next-schedule-entity.4406856a.png" width="25%"><h2 id="to-do" tabindex="-1"><a class="header-anchor" href="#to-do" aria-hidden="true">#</a> To-do</h2><p>If you find any bugs, let me know, but as long as the payload doesn't change it should work.</p><!--]--></div><footer class="page-meta"><!----><div class="meta-item last-updated"><span class="meta-item-label">Last Updated: </span><!----></div><!----></footer><!----><!--[--><!--]--></main><!--]--></div><!----><!--]--></div>
|
|
41
|
+
<script src="/assets/js/runtime~app.f6ac32d7.js" defer></script><script src="/assets/js/405.f4edd94d.js" defer></script><script src="/assets/js/app.dfdee6f9.js" defer></script>
|
|
24
42
|
</body>
|
|
25
43
|
</html>
|