node-red-contrib-power-saver 3.0.9 → 3.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/.vuepress/config.js +4 -0
- package/docs/.vuepress/dist/404.html +2 -2
- package/docs/.vuepress/dist/assets/img/best-save-config.93fa3c21.png +0 -0
- package/docs/.vuepress/dist/assets/img/lowest-price-config.6d66a8c2.png +0 -0
- package/docs/.vuepress/dist/assets/js/app.3cfedce6.js +1 -0
- package/docs/.vuepress/dist/assets/js/runtime~app.f1d7fab8.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-0b5e3c8c.163b80fb.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-4637f9e4.60300b77.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-510ed0d4.b76b84de.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-5954bcb2.9e6d2df1.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-61f728ca.64fa763c.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-677dfaed.b84f09f5.js +1 -0
- package/docs/.vuepress/dist/assets/js/{v-7c87f26e.457a1a60.js → v-7c87f26e.91c245da.js} +1 -1
- package/docs/.vuepress/dist/assets/js/v-8daa1a0e.66c9dbce.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-b4a42144.d1856a24.js +1 -0
- package/docs/.vuepress/dist/assets/js/v-fffb8e28.9e0579a1.js +1 -0
- package/docs/.vuepress/dist/changelog/index.html +3 -3
- package/docs/.vuepress/dist/contribute/index.html +3 -3
- package/docs/.vuepress/dist/examples/example-nordpool-current-state.html +175 -155
- package/docs/.vuepress/dist/examples/example-nordpool-events-state.html +2 -2
- package/docs/.vuepress/dist/examples/example-tibber-mqtt.html +2 -2
- package/docs/.vuepress/dist/examples/index.html +2 -2
- package/docs/.vuepress/dist/guide/index.html +4 -4
- package/docs/.vuepress/dist/index.html +3 -3
- package/docs/.vuepress/dist/logo.png +0 -0
- package/docs/.vuepress/dist/nodes/index.html +2 -2
- package/docs/.vuepress/dist/nodes/old-power-saver-doc.html +5 -5
- package/docs/.vuepress/dist/nodes/power-saver.html +2 -2
- package/docs/.vuepress/dist/nodes/ps-elvia-add-tariff.html +2 -2
- package/docs/.vuepress/dist/nodes/ps-receive-price.html +5 -5
- package/docs/.vuepress/dist/nodes/ps-strategy-best-save.html +4 -4
- package/docs/.vuepress/dist/nodes/ps-strategy-lowest-price.html +4 -4
- package/docs/.vuepress/dist/nodes/strategy-input.html +4 -4
- package/docs/.vuepress/public/logo.png +0 -0
- package/docs/README.md +5 -3
- package/docs/changelog/README.md +9 -5
- package/docs/contribute/README.md +1 -1
- package/docs/guide/README.md +12 -10
- package/docs/images/logo copy.png +0 -0
- package/docs/images/logo.png +0 -0
- package/docs/images/logo.psd +0 -0
- package/docs/images/node-red-icon-2.svg +30 -0
- package/docs/nodes/old-power-saver-doc.md +6 -6
- package/docs/nodes/ps-receive-price.md +5 -5
- package/docs/nodes/ps-strategy-best-save.md +5 -1
- package/docs/nodes/ps-strategy-lowest-price.md +3 -3
- package/docs/nodes/strategy-input.md +1 -1
- package/package.json +1 -1
- package/src/elvia/elvia-add-tariff.js +7 -6
- package/test/elvia.test.js +16 -2
- package/docs/.vuepress/dist/assets/js/app.190d977f.js +0 -1
- package/docs/.vuepress/dist/assets/js/runtime~app.36bc5048.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-0b5e3c8c.d008d8bc.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-4637f9e4.22ab9413.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-510ed0d4.01d07aab.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-5954bcb2.be07962c.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-61f728ca.802ab15e.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-677dfaed.9bbbd037.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-8daa1a0e.db8b59c6.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-b4a42144.6e0c5aa0.js +0 -1
- package/docs/.vuepress/dist/assets/js/v-fffb8e28.e815e852.js +0 -1
package/docs/.vuepress/config.js
CHANGED
|
@@ -25,6 +25,10 @@ module.exports = {
|
|
|
25
25
|
text: "Changes",
|
|
26
26
|
link: "/changelog/",
|
|
27
27
|
},
|
|
28
|
+
{
|
|
29
|
+
text: "GitHub",
|
|
30
|
+
link: "https://github.com/ottopaulsen/node-red-contrib-power-saver",
|
|
31
|
+
},
|
|
28
32
|
],
|
|
29
33
|
sidebar: {
|
|
30
34
|
"/guide/": [{ text: "Guide", children: ["/guide/README.md"] }],
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
6
|
<meta name="generator" content="VuePress 2.0.0-beta.27">
|
|
7
7
|
<link rel="icon" href="/euro.png"><title>Power Saver</title><meta name="description" content="A Node-RED note to save money on hourly changing power prices">
|
|
8
|
-
<link rel="preload" href="/node-red-contrib-power-saver/assets/js/runtime~app.
|
|
8
|
+
<link rel="preload" href="/node-red-contrib-power-saver/assets/js/runtime~app.f1d7fab8.js" as="script"><link rel="preload" href="/node-red-contrib-power-saver/assets/css/styles.e835bef6.css" as="style"><link rel="preload" href="/node-red-contrib-power-saver/assets/js/812.79dad458.js" as="script"><link rel="preload" href="/node-red-contrib-power-saver/assets/js/app.3cfedce6.js" as="script">
|
|
9
9
|
<link rel="stylesheet" href="/node-red-contrib-power-saver/assets/css/styles.e835bef6.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
|
12
12
|
<div id="app"><!--[--><div class="theme-container"><div class="theme-default-content"><h1>404</h1><blockquote>Looks like we've got some broken links.</blockquote><a href="/node-red-contrib-power-saver/" class="">Take me home</a></div></div><!----><!--]--></div>
|
|
13
|
-
<script src="/node-red-contrib-power-saver/assets/js/runtime~app.
|
|
13
|
+
<script src="/node-red-contrib-power-saver/assets/js/runtime~app.f1d7fab8.js" defer></script><script src="/node-red-contrib-power-saver/assets/js/812.79dad458.js" defer></script><script src="/node-red-contrib-power-saver/assets/js/app.3cfedce6.js" defer></script>
|
|
14
14
|
</body>
|
|
15
15
|
</html>
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunknode_red_contrib_power_saver=self.webpackChunknode_red_contrib_power_saver||[]).push([[143],{3131:(e,t,n)=>{n.d(t,{g:()=>s});var a=n(2009),d=n(6971),o=n(1598);const s=[a.Z,d.Z,o.Z]},9947:(e,t,n)=>{n.d(t,{p:()=>a});const a=[n(3051).Z]},4611:(e,t,n)=>{n.d(t,{l:()=>s});var a=n(8866),d=n(1263),o=n(6243);const s=[a.Z,d.Z,o.Z]},4150:(e,t,n)=>{n.d(t,{Z:()=>d});var a=n(6252);const d={404:(0,a.RC)((()=>n.e(491).then(n.bind(n,8491)))),Layout:(0,a.RC)((()=>n.e(293).then(n.bind(n,3293))))}},6056:(e,t,n)=>{n.d(t,{b:()=>d});var a=n(6252);const d={"v-8daa1a0e":(0,a.RC)((()=>n.e(509).then(n.bind(n,7354)))),"v-510ed0d4":(0,a.RC)((()=>n.e(495).then(n.bind(n,4814)))),"v-7c87f26e":(0,a.RC)((()=>n.e(889).then(n.bind(n,9704)))),"v-0aca7ba6":(0,a.RC)((()=>n.e(27).then(n.bind(n,1701)))),"v-61f728ca":(0,a.RC)((()=>n.e(283).then(n.bind(n,6314)))),"v-30acb564":(0,a.RC)((()=>n.e(901).then(n.bind(n,2870)))),"v-5db8da3a":(0,a.RC)((()=>n.e(625).then(n.bind(n,3350)))),"v-fffb8e28":(0,a.RC)((()=>n.e(807).then(n.bind(n,8999)))),"v-e8c55052":(0,a.RC)((()=>n.e(651).then(n.bind(n,4493)))),"v-b4a42144":(0,a.RC)((()=>n.e(407).then(n.bind(n,2047)))),"v-1ad821fa":(0,a.RC)((()=>n.e(22).then(n.bind(n,8718)))),"v-08683c60":(0,a.RC)((()=>n.e(332).then(n.bind(n,6250)))),"v-677dfaed":(0,a.RC)((()=>n.e(745).then(n.bind(n,546)))),"v-0b5e3c8c":(0,a.RC)((()=>n.e(363).then(n.bind(n,3701)))),"v-4637f9e4":(0,a.RC)((()=>n.e(418).then(n.bind(n,4004)))),"v-5954bcb2":(0,a.RC)((()=>n.e(317).then(n.bind(n,886)))),"v-3706649a":(0,a.RC)((()=>n.e(88).then(n.bind(n,8109))))}},9706:(e,t,n)=>{n.d(t,{T:()=>a});const a={"v-8daa1a0e":()=>n.e(509).then(n.bind(n,6464)).then((({data:e})=>e)),"v-510ed0d4":()=>n.e(495).then(n.bind(n,3707)).then((({data:e})=>e)),"v-7c87f26e":()=>n.e(889).then(n.bind(n,9459)).then((({data:e})=>e)),"v-0aca7ba6":()=>n.e(27).then(n.bind(n,7726)).then((({data:e})=>e)),"v-61f728ca":()=>n.e(283).then(n.bind(n,4773)).then((({data:e})=>e)),"v-30acb564":()=>n.e(901).then(n.bind(n,8835)).then((({data:e})=>e)),"v-5db8da3a":()=>n.e(625).then(n.bind(n,8682)).then((({data:e})=>e)),"v-fffb8e28":()=>n.e(807).then(n.bind(n,9570)).then((({data:e})=>e)),"v-e8c55052":()=>n.e(651).then(n.bind(n,3029)).then((({data:e})=>e)),"v-b4a42144":()=>n.e(407).then(n.bind(n,7952)).then((({data:e})=>e)),"v-1ad821fa":()=>n.e(22).then(n.bind(n,2336)).then((({data:e})=>e)),"v-08683c60":()=>n.e(332).then(n.bind(n,5845)).then((({data:e})=>e)),"v-677dfaed":()=>n.e(745).then(n.bind(n,7951)).then((({data:e})=>e)),"v-0b5e3c8c":()=>n.e(363).then(n.bind(n,3594)).then((({data:e})=>e)),"v-4637f9e4":()=>n.e(418).then(n.bind(n,3959)).then((({data:e})=>e)),"v-5954bcb2":()=>n.e(317).then(n.bind(n,1535)).then((({data:e})=>e)),"v-3706649a":()=>n.e(88).then(n.bind(n,1801)).then((({data:e})=>e))}},4634:(e,t,n)=>{n.d(t,{g:()=>d});var a=n(4802);const d=[["v-8daa1a0e","/","",["/index.html","/README.md"]],["v-510ed0d4","/changelog/","Change Log",["/changelog/index.html","/changelog/README.md"]],["v-7c87f26e","/contribute/","Contribute",["/contribute/index.html","/contribute/README.md"]],["v-0aca7ba6","/examples/","Examples",["/examples/index.html","/examples/README.md"]],["v-61f728ca","/examples/example-nordpool-current-state.html","Nord Pool and current state node",["/examples/example-nordpool-current-state","/examples/example-nordpool-current-state.md"]],["v-30acb564","/examples/example-nordpool-events-state.html","Nord Pool and events: state node",["/examples/example-nordpool-events-state","/examples/example-nordpool-events-state.md"]],["v-5db8da3a","/examples/example-tibber-mqtt.html","Tibber, a switch and MQTT",["/examples/example-tibber-mqtt","/examples/example-tibber-mqtt.md"]],["v-fffb8e28","/guide/","Guide",["/guide/index.html","/guide/README.md"]],["v-e8c55052","/nodes/","Nodes",["/nodes/index.html","/nodes/README.md"]],["v-b4a42144","/nodes/old-power-saver-doc.html","node-red-contrib-power-saver v2 (deprecated)",["/nodes/old-power-saver-doc","/nodes/old-power-saver-doc.md"]],["v-1ad821fa","/nodes/power-saver.html","power-saver",["/nodes/power-saver","/nodes/power-saver.md"]],["v-08683c60","/nodes/ps-elvia-add-tariff.html","ps-elvia-add-tariff",["/nodes/ps-elvia-add-tariff","/nodes/ps-elvia-add-tariff.md"]],["v-677dfaed","/nodes/ps-receive-price.html","ps-receive-price",["/nodes/ps-receive-price","/nodes/ps-receive-price.md"]],["v-0b5e3c8c","/nodes/ps-strategy-best-save.html","ps-strategy-best-save",["/nodes/ps-strategy-best-save","/nodes/ps-strategy-best-save.md"]],["v-4637f9e4","/nodes/ps-strategy-lowest-price.html","ps-strategy-lowest-price",["/nodes/ps-strategy-lowest-price","/nodes/ps-strategy-lowest-price.md"]],["v-5954bcb2","/nodes/strategy-input.html","Strategy input format",["/nodes/strategy-input","/nodes/strategy-input.md"]],["v-3706649a","/404.html","",["/404"]]].reduce(((e,[t,n,d,o])=>(e.push({name:t,path:n,component:a.Y,meta:{title:d}},...o.map((e=>({path:e,redirect:n})))),e)),[{name:"404",path:"/:catchAll(.*)",component:a.Y}])},5220:(e,t,n)=>{n.d(t,{H:()=>a});const a={base:"/node-red-contrib-power-saver/",lang:"en-US",title:"Power Saver",description:"A Node-RED note to save money on hourly changing power prices",head:[["link",{rel:"icon",href:"/euro.png"}]],locales:{}}},2232:(e,t,n)=>{n.d(t,{f:()=>a});const a={navbar:[{text:"Guide",link:"/guide/"},{text:"Nodes",link:"/nodes/"},{text:"Examples",link:"/examples/"},{text:"Contribute",link:"/contribute/"},{text:"Changes",link:"/changelog/"}],sidebar:{"/guide/":[{text:"Guide",children:["/guide/README.md"]}],"/nodes/":[{text:"Nodes",children:[{text:"Power Saver",link:"/nodes/power-saver.md"},{text:"Strategy nodes",children:["/nodes/ps-strategy-best-save.md","/nodes/ps-strategy-lowest-price.md"]},{text:"Utility nodes",children:["/nodes/ps-receive-price.md"]},{text:"Grid tariff nodes",children:["/nodes/ps-elvia-add-tariff.md"]}]},{text:"Data format",children:["/nodes/strategy-input.md"]}],"/examples/":[{text:"Examples",children:["/examples/example-nordpool-current-state.md","/examples/example-nordpool-events-state.md","/examples/example-tibber-mqtt.md"]}],"/contribute/":"auto","/changelog/":"auto"},locales:{"/":{selectLanguageName:"English"}},logo:null,darkMode:!0,repo:null,selectLanguageText:"Languages",selectLanguageAriaLabel:"Select language",sidebarDepth:2,editLink:!0,editLinkText:"Edit this page",lastUpdated:!0,lastUpdatedText:"Last Updated",contributors:!0,contributorsText:"Contributors",notFound:["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],backToHome:"Take me home",openInNewWindow:"open in new window",toggleDarkMode:"toggle dark mode",toggleSidebar:"toggle sidebar"}}},e=>{e.O(0,[460,812],(()=>(5698,e(e.s=5698)))),e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(()=>{"use strict";var e,r,t,a={},o={};function n(e){var r=o[e];if(void 0!==r)return r.exports;var t=o[e]={exports:{}};return a[e].call(t.exports,t,t.exports,n),t.exports}n.m=a,e=[],n.O=(r,t,a,o)=>{if(!t){var d=1/0;for(s=0;s<e.length;s++){for(var[t,a,o]=e[s],i=!0,c=0;c<t.length;c++)(!1&o||d>=o)&&Object.keys(n.O).every((e=>n.O[e](t[c])))?t.splice(c--,1):(i=!1,o<d&&(d=o));if(i){e.splice(s--,1);var f=a();void 0!==f&&(r=f)}}return r}o=o||0;for(var s=e.length;s>0&&e[s-1][2]>o;s--)e[s]=e[s-1];e[s]=[t,a,o]},n.d=(e,r)=>{for(var t in r)n.o(r,t)&&!n.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},n.f={},n.e=e=>Promise.all(Object.keys(n.f).reduce(((r,t)=>(n.f[t](e,r),r)),[])),n.u=e=>"assets/js/"+({22:"v-1ad821fa",27:"v-0aca7ba6",88:"v-3706649a",283:"v-61f728ca",317:"v-5954bcb2",332:"v-08683c60",363:"v-0b5e3c8c",407:"v-b4a42144",418:"v-4637f9e4",495:"v-510ed0d4",509:"v-8daa1a0e",625:"v-5db8da3a",651:"v-e8c55052",745:"v-677dfaed",807:"v-fffb8e28",889:"v-7c87f26e",901:"v-30acb564"}[e]||e)+"."+{22:"85407071",27:"aec5ba75",88:"d7f73384",283:"64fa763c",293:"5e967839",317:"9e6d2df1",332:"07fe8291",363:"163b80fb",407:"d1856a24",418:"60300b77",491:"c183eba3",495:"b76b84de",509:"66c9dbce",625:"ac192f35",651:"5f85b6cd",745:"b84f09f5",807:"9e0579a1",889:"91c245da",901:"73b8e29f"}[e]+".js",n.miniCssF=e=>{},n.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),r={},t="node-red-contrib-power-saver:",n.l=(e,a,o,d)=>{if(r[e])r[e].push(a);else{var i,c;if(void 0!==o)for(var f=document.getElementsByTagName("script"),s=0;s<f.length;s++){var v=f[s];if(v.getAttribute("src")==e||v.getAttribute("data-webpack")==t+o){i=v;break}}i||(c=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,n.nc&&i.setAttribute("nonce",n.nc),i.setAttribute("data-webpack",t+o),i.src=e),r[e]=[a];var l=(t,a)=>{i.onerror=i.onload=null,clearTimeout(b);var o=r[e];if(delete r[e],i.parentNode&&i.parentNode.removeChild(i),o&&o.forEach((e=>e(a))),t)return t(a)},b=setTimeout(l.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=l.bind(null,i.onerror),i.onload=l.bind(null,i.onload),c&&document.head.appendChild(i)}},n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.p="/node-red-contrib-power-saver/",(()=>{var e={523:0,460:0};n.f.j=(r,t)=>{var a=n.o(e,r)?e[r]:void 0;if(0!==a)if(a)t.push(a[2]);else if(/^(460|523)$/.test(r))e[r]=0;else{var o=new Promise(((t,o)=>a=e[r]=[t,o]));t.push(a[2]=o);var d=n.p+n.u(r),i=new Error;n.l(d,(t=>{if(n.o(e,r)&&(0!==(a=e[r])&&(e[r]=void 0),a)){var o=t&&("load"===t.type?"missing":t.type),d=t&&t.target&&t.target.src;i.message="Loading chunk "+r+" failed.\n("+o+": "+d+")",i.name="ChunkLoadError",i.type=o,i.request=d,a[1](i)}}),"chunk-"+r,r)}},n.O.j=r=>0===e[r];var r=(r,t)=>{var a,o,[d,i,c]=t,f=0;if(d.some((r=>0!==e[r]))){for(a in i)n.o(i,a)&&(n.m[a]=i[a]);if(c)var s=c(n)}for(r&&r(t);f<d.length;f++)o=d[f],n.o(e,o)&&e[o]&&e[o][0](),e[d[f]]=0;return n.O(s)},t=self.webpackChunknode_red_contrib_power_saver=self.webpackChunknode_red_contrib_power_saver||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})()})();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunknode_red_contrib_power_saver=self.webpackChunknode_red_contrib_power_saver||[]).push([[363],{3594:(e,n,s)=>{s.r(n),s.d(n,{data:()=>a});const a={key:"v-0b5e3c8c",path:"/nodes/ps-strategy-best-save.html",title:"ps-strategy-best-save",lang:"en-US",frontmatter:{},excerpt:"",headers:[{level:2,title:"Description",slug:"description",children:[]},{level:2,title:"Configuration",slug:"configuration",children:[{level:3,title:"Dynamic config",slug:"dynamic-config",children:[]}]},{level:2,title:"Input",slug:"input",children:[]},{level:2,title:"Output",slug:"output",children:[{level:3,title:"Output 1",slug:"output-1",children:[]},{level:3,title:"Output 2",slug:"output-2",children:[]},{level:3,title:"Output 3",slug:"output-3",children:[]}]},{level:2,title:"Algorithm",slug:"algorithm",children:[]},{level:2,title:"Integration with MagicMirror",slug:"integration-with-magicmirror",children:[]}],filePathRelative:"nodes/ps-strategy-best-save.md",git:{updatedTime:1640034618e3,contributors:[{name:"Otto Paulsen",email:"ottpau@gmail.com",commits:2}]}}},3701:(e,n,s)=>{s.r(n),s.d(n,{default:()=>pe});var a=s(6252),t=s(7188),o=s(5442);const r=(0,a._)("h1",{id:"ps-strategy-best-save",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#ps-strategy-best-save","aria-hidden":"true"},"#"),(0,a.Uk)(" ps-strategy-best-save")],-1),l=(0,a._)("p",null,[(0,a._)("img",{src:t,alt:"ps-strategy-best-save"})],-1),i=(0,a._)("p",null,"Strategy node to postpone power consumption until the price is lower.",-1),u=(0,a._)("h2",{id:"description",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#description","aria-hidden":"true"},"#"),(0,a.Uk)(" Description")],-1),p=(0,a._)("p",null,"This strategy turns off the hours where the price difference is largest compared to the next hour that is on. The idea is that the power you are not using when the switch is turned off, will be used immediately when the switch is turned on. This would fit well for turning off a water heater or another thermostat controlled heater.",-1),c=(0,a._)("p",null,[(0,a.Uk)("The picture at the bottom of the page, under "),(0,a._)("a",{href:"#integration-with-magicmirror"},"Integration with MagicMirror"),(0,a.Uk)(", illustrates this by the purple strokes, taking the price from the top of the price curve to the level of the first hour after the save-period.")],-1),_=(0,a._)("h2",{id:"configuration",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#configuration","aria-hidden":"true"},"#"),(0,a.Uk)(" Configuration")],-1),h=(0,a._)("p",null,[(0,a._)("img",{src:o,alt:"Best Save Config"})],-1),k=(0,a._)("table",null,[(0,a._)("thead",null,[(0,a._)("tr",null,[(0,a._)("th",null,"Value"),(0,a._)("th",null,"Description")])]),(0,a._)("tbody",null,[(0,a._)("tr",null,[(0,a._)("td",null,"Max per sequence"),(0,a._)("td",null,"Maximum number of hours to turn off in a sequence.")]),(0,a._)("tr",null,[(0,a._)("td",null,"Min recover"),(0,a._)("td",null,"Minimum hours to turn on immediately after a period when turned off the maximum number of hours that is allowed to be turned off")]),(0,a._)("tr",null,[(0,a._)("td",null,"Min saving"),(0,a._)("td",null,"Minimum amount to save per kWh in order to bother turning it off. It is recommended to have some amount here, e.g. 2 cents / 2 øre. No point in saving 0.001, is it?")]),(0,a._)("tr",null,[(0,a._)("td",null,"Schedule for"),(0,a._)("td",null,"Select to schedule for the whole data set or only from the current hour.")]),(0,a._)("tr",null,[(0,a._)("td",null,"Send when rescheduling"),(0,a._)("td",null,"Check this to make sure on or off output is sent immediately after rescheduling")]),(0,a._)("tr",null,[(0,a._)("td",null,"If no schedule, send"),(0,a._)("td",null,"What to do if there is no valid schedule any more (turn on or off).")])])],-1),d=(0,a._)("div",{class:"custom-container warning"},[(0,a._)("p",{class:"custom-container-title"},"Min recover"),(0,a._)("p",null,[(0,a.Uk)("NB! The "),(0,a._)("code",null,"Min recover"),(0,a.Uk)(" only has effect if the previous save-period is of length "),(0,a._)("code",null,"Max per sequence"),(0,a.Uk)(". If the save-period is shorter, the following on-period may be as short as one hour.")])],-1),b={class:"custom-container tip"},m=(0,a._)("p",{class:"custom-container-title"},"Legionella",-1),g=(0,a.Uk)("Many people ask if there is a danger that legionella bacteria will grow and become dangerous when the temperature of the water heater is lowered. As long as the water is heated to at least 65 °C every day, or at least every week, the risk of infection is not considered significant, according to the norwegian "),f={href:"https://www.fhi.no/nettpub/legionellaveilederen/",target:"_blank",rel:"noopener noreferrer"},U=(0,a.Uk)("FHI"),y=(0,a.Uk)("."),v=(0,a._)("h3",{id:"dynamic-config",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#dynamic-config","aria-hidden":"true"},"#"),(0,a.Uk)(" Dynamic config")],-1),w=(0,a._)("p",null,"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:",-1),M=(0,a._)("div",{class:"language-json ext-json line-numbers-mode"},[(0,a._)("pre",{class:"language-json"},[(0,a._)("code",null,[(0,a._)("span",{class:"token property"},'"payload"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token punctuation"},"{"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"config"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token punctuation"},"{"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"maxHoursToSaveInSequence"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token number"},"4"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"minHoursOnAfterMaxSequenceSaved"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token number"},"2"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"minSaving"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token number"},"0.02"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"sendCurrentValueWhenRescheduling"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token boolean"},"true"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"outputIfNoSchedule"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token boolean"},"true"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"scheduleOnlyFromCurrentTime"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token boolean"},"false"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"}"),(0,a.Uk)("\n"),(0,a._)("span",{class:"token punctuation"},"}"),(0,a.Uk)("\n")])]),(0,a._)("div",{class:"line-numbers"},[(0,a._)("span",{class:"line-number"},"1"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"2"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"3"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"4"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"5"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"6"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"7"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"8"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"9"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"10"),(0,a._)("br")])],-1),x=(0,a._)("p",null,"All the variables in the config object are optional. You can send only those you want to change.",-1),T=(0,a._)("p",null,"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.",-1),I=(0,a._)("p",null,"When a config is sent like this, the schedule will be replanned based on the last previously received price data. If no price data has been received, no scheduling is done.",-1),q=(0,a._)("h2",{id:"input",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#input","aria-hidden":"true"},"#"),(0,a.Uk)(" Input")],-1),S=(0,a.Uk)("The input is the "),O=(0,a.Uk)("common strategy input format"),W=(0,a._)("h2",{id:"output",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#output","aria-hidden":"true"},"#"),(0,a.Uk)(" Output")],-1),A=(0,a._)("p",null,"There are three outputs. You use only those you need for your purpose.",-1),C=(0,a._)("h3",{id:"output-1",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#output-1","aria-hidden":"true"},"#"),(0,a.Uk)(" Output 1")],-1),j=(0,a._)("p",null,[(0,a.Uk)("A payload with the word "),(0,a._)("code",null,"true"),(0,a.Uk)(" is sent to output 1 whenever the power / switch shall be turned on.")],-1),D=(0,a._)("h3",{id:"output-2",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#output-2","aria-hidden":"true"},"#"),(0,a.Uk)(" Output 2")],-1),H=(0,a._)("p",null,[(0,a.Uk)("A payload with the word "),(0,a._)("code",null,"false"),(0,a.Uk)(" is sent to output 2 whenever the power / switch shall be turned off.")],-1),N=(0,a._)("h3",{id:"output-3",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#output-3","aria-hidden":"true"},"#"),(0,a.Uk)(" Output 3")],-1),R=(0,a._)("p",null,"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.",-1),Y=(0,a._)("p",null,"Example of output:",-1),L=(0,a._)("div",{class:"language-json ext-json line-numbers-mode"},[(0,a._)("pre",{class:"language-json"},[(0,a._)("code",null,[(0,a._)("span",{class:"token punctuation"},"{"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"schedule"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token punctuation"},"["),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"{"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"time"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"2021-09-30T00:00:00.000+02:00"'),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"value"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token boolean"},"false"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"}"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"{"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"time"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"2021-09-30T01:00:00.000+02:00"'),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"value"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token boolean"},"true"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"}"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"]"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"hours"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token punctuation"},"["),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"{"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"price"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token number"},"1.2584"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"onOff"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token boolean"},"false"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"start"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"2021-09-30T00:00:00.000+02:00"'),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"saving"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token number"},"0.2034"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"}"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"{"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"price"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token number"},"1.055"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"onOff"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token boolean"},"true"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"start"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"2021-09-30T01:00:00.000+02:00"'),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"saving"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token null keyword"},"null"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"}"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"{"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"price"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token number"},"1.2054"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"onOff"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token boolean"},"true"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"start"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"2021-09-30T02:00:00.000+02:00"'),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"saving"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token null keyword"},"null"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"}"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"]"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"source"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"Nord Pool"'),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"config"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token punctuation"},"{"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"maxHoursToSaveInSequence"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token number"},"3"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"minHoursOnAfterMaxSequenceSaved"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"1"'),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"minSaving"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token number"},"0.001"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"sendCurrentValueWhenRescheduling"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token boolean"},"true"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"outputIfNoSchedule"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token boolean"},"false"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"}"),(0,a.Uk)("\n"),(0,a._)("span",{class:"token punctuation"},"}"),(0,a.Uk)("\n")])]),(0,a._)("div",{class:"line-numbers"},[(0,a._)("span",{class:"line-number"},"1"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"2"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"3"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"4"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"5"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"6"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"7"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"8"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"9"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"10"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"11"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"12"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"13"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"14"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"15"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"16"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"17"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"18"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"19"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"20"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"21"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"22"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"23"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"24"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"25"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"26"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"27"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"28"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"29"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"30"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"31"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"32"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"33"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"34"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"35"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"36"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"37"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"38"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"39"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"40"),(0,a._)("br")])],-1),P=(0,a._)("p",null,[(0,a.Uk)("The "),(0,a._)("code",null,"schedule"),(0,a.Uk)(" array shows every time the switch is turned on or off. The "),(0,a._)("code",null,"hours"),(0,a.Uk)(" 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.")],-1),V=(0,a._)("h2",{id:"algorithm",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#algorithm","aria-hidden":"true"},"#"),(0,a.Uk)(" Algorithm")],-1),B=(0,a._)("p",null,"The calculation that decides what hours to turn off works as follows:",-1),F=(0,a._)("ol",null,[(0,a._)("li",null,"A matrix (x * y) is created where x is the number of hours we have price information for, and y is the configured maximum number of hours to turn off in a sequence."),(0,a._)("li",null,"The matrix is filled with how much you save by turning off hour x for y hours."),(0,a._)("li",null,"The matrix is processed calculating all possibilities for turning off a number of hours in a sequence and by that saving money. In this process all non-saving sequences are discarded. Also, if the average saving per hour is less than what you have configured as minimum amount to save per kWh, the sequence is discarded."),(0,a._)("li",null,"The remaining sequences are sorted by how much that is saved, in descending order."),(0,a._)("li",null,'Next, a table with one value per hour is created, with all hours in state "on".'),(0,a._)("li",null,"Then the saving sequences is applied one by one, turning off the hours in each sequence, discarding sequences that lead to any violation of the rules set by the config."),(0,a._)("li",null,"When all sequences are processed, the resulting table shows a pretty good savings plan, that in most cases would be the optimal plan.")],-1),Z=(0,a._)("p",null,'I say "in most cases", because there is a chance that a group of two or more sequences combined can give a better plan than a single sequence preceeding those two, but where the selection of the one sequence causes the group to be discarded. If anyone encounters this situation, I would be happy to receive the price data set, and try to improve the algorithm even further.',-1),E=(0,a._)("h2",{id:"integration-with-magicmirror",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#integration-with-magicmirror","aria-hidden":"true"},"#"),(0,a.Uk)(" Integration with MagicMirror")],-1),z=(0,a.Uk)("Are you using "),G={href:"https://magicmirror.builders/",target:"_blank",rel:"noopener noreferrer"},J=(0,a.Uk)("MagicMirror"),K=(0,a.Uk)("? Are you also using "),Q={href:"https://tibber.com/",target:"_blank",rel:"noopener noreferrer"},X=(0,a.Uk)("Tibber"),$=(0,a.Uk)("? If so, there is a module for MM called "),ee={href:"https://github.com/ottopaulsen/MMM-Tibber",target:"_blank",rel:"noopener noreferrer"},ne=(0,a.Uk)("MMM-Tibber"),se=(0,a.Uk)(", that easily can be used to show savings from this node."),ae=(0,a._)("p",null,[(0,a._)("img",{src:"https://github.com/ottopaulsen/MMM-Tibber/blob/master/doc/MMM-Tibber-screenshot-savings-graph.png?raw=true",alt:"Show savings in MMM-Tibber"})],-1),te=(0,a._)("p",null,"The purple lines show savings per kWh.",-1),oe=(0,a.Uk)("Read more about this in the "),re={href:"https://github.com/ottopaulsen/MMM-Tibber#show-savings",target:"_blank",rel:"noopener noreferrer"},le=(0,a.Uk)("MMM-Tibber documentation"),ie=(0,a.Uk)("."),ue={},pe=(0,s(3744).Z)(ue,[["render",function(e,n){const s=(0,a.up)("OutboundLink"),t=(0,a.up)("RouterLink");return(0,a.wg)(),(0,a.iD)(a.HY,null,[r,l,i,u,p,c,_,h,k,d,(0,a._)("div",b,[m,(0,a._)("p",null,[g,(0,a._)("a",f,[U,(0,a.Wm)(s)]),y])]),v,w,M,x,T,I,q,(0,a._)("p",null,[S,(0,a.Wm)(t,{to:"/nodes/strategy-input.html"},{default:(0,a.w5)((()=>[O])),_:1})]),W,A,C,j,D,H,N,R,Y,L,P,V,B,F,Z,E,(0,a._)("p",null,[z,(0,a._)("a",G,[J,(0,a.Wm)(s)]),K,(0,a._)("a",Q,[X,(0,a.Wm)(s)]),$,(0,a._)("a",ee,[ne,(0,a.Wm)(s)]),se]),ae,te,(0,a._)("p",null,[oe,(0,a._)("a",re,[le,(0,a.Wm)(s)]),ie])],64)}]])},3744:(e,n)=>{n.Z=(e,n)=>{const s=e.__vccOpts||e;for(const[e,a]of n)s[e]=a;return s}},5442:(e,n,s)=>{e.exports=s.p+"assets/img/best-save-config.93fa3c21.png"},7188:(e,n,s)=>{e.exports=s.p+"assets/img/node-ps-strategy-best-save.392292d5.png"}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunknode_red_contrib_power_saver=self.webpackChunknode_red_contrib_power_saver||[]).push([[418],{3959:(n,s,e)=>{e.r(s),e.d(s,{data:()=>a});const a={key:"v-4637f9e4",path:"/nodes/ps-strategy-lowest-price.html",title:"ps-strategy-lowest-price",lang:"en-US",frontmatter:{next:"./ps-receive-price.md"},excerpt:"",headers:[{level:2,title:"Description",slug:"description",children:[]},{level:2,title:"Configuration",slug:"configuration",children:[{level:3,title:"Dynamic config",slug:"dynamic-config",children:[]}]},{level:2,title:"Input",slug:"input",children:[]},{level:2,title:"Output",slug:"output",children:[]},{level:2,title:"Tips & tricks",slug:"tips-tricks",children:[{level:3,title:"Multiple nodes works together",slug:"multiple-nodes-works-together",children:[]},{level:3,title:"Highest price",slug:"highest-price",children:[]}]}],filePathRelative:"nodes/ps-strategy-lowest-price.md",git:{updatedTime:1640034618e3,contributors:[{name:"Otto Paulsen",email:"ottpau@gmail.com",commits:2}]}}},4004:(n,s,e)=>{e.r(s),e.d(s,{default:()=>V});var a=e(6252),t=e(6110),o=e(3981);const l=(0,a._)("h1",{id:"ps-strategy-lowest-price",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#ps-strategy-lowest-price","aria-hidden":"true"},"#"),(0,a.Uk)(" ps-strategy-lowest-price")],-1),r=(0,a._)("p",null,[(0,a._)("img",{src:t,alt:"ps-strategy-lowest-price"})],-1),p=(0,a._)("p",null,"Strategy node to turn on power the hours when the price is lowest during a given period, and turn off the other hours.",-1),c=(0,a._)("h2",{id:"description",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#description","aria-hidden":"true"},"#"),(0,a.Uk)(" Description")],-1),i=(0,a._)("p",null,"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.",-1),u=(0,a._)("h2",{id:"configuration",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#configuration","aria-hidden":"true"},"#"),(0,a.Uk)(" Configuration")],-1),_=(0,a._)("p",null,[(0,a._)("img",{src:o,alt:"Node Configuration"})],-1),k=(0,a._)("table",null,[(0,a._)("thead",null,[(0,a._)("tr",null,[(0,a._)("th",null,"Value"),(0,a._)("th",null,"Description")])]),(0,a._)("tbody",null,[(0,a._)("tr",null,[(0,a._)("td",null,"From Time"),(0,a._)("td",null,"The start time of the selected period.")]),(0,a._)("tr",null,[(0,a._)("td",null,"To Time"),(0,a._)("td",null,"The end time of the selected period.")]),(0,a._)("tr",null,[(0,a._)("td",null,"Hours On"),(0,a._)("td",null,"The number of hours that shall be turned on.")]),(0,a._)("tr",null,[(0,a._)("td",null,"Consecutive On-Period"),(0,a._)("td",null,"Check this if you need the on-period to be consecutive.")]),(0,a._)("tr",null,[(0,a._)("td",null,"Send When Rescheduling"),(0,a._)("td",null,"Check this to make sure on or off output is sent immediately after rescheduling.")]),(0,a._)("tr",null,[(0,a._)("td",null,"If No Schedule, Send"),(0,a._)("td",null,"What to do if there is no valid schedule any more (turn on or off).")]),(0,a._)("tr",null,[(0,a._)("td",null,"Outside Period, Send"),(0,a._)("td",null,"Select the value to send outside the selected period.")])])],-1),d=(0,a._)("p",null,"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.",-1),h=(0,a._)("div",{class:"custom-container tip"},[(0,a._)("p",{class:"custom-container-title"},"Example with Consecutive On-Period"),(0,a._)("p",null,[(0,a.Uk)("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 "),(0,a._)("code",null,"From Time = 22:00"),(0,a.Uk)(", "),(0,a._)("code",null,"To Time = 06:00"),(0,a.Uk)(" and check the "),(0,a._)("code",null,"Consecutive On-Period"),(0,a.Uk)(" flag. This will turn on the cheapest 3-hour period from 22:00 to 06:00.")]),(0,a._)("p",null,"NB! It is not recommended to run the washing machine when you are sleeping or away.")],-1),b=(0,a._)("div",{class:"custom-container tip"},[(0,a._)("p",{class:"custom-container-title"},"Example with non-consecutive on-period"),(0,a._)("p",null,[(0,a.Uk)("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 "),(0,a._)("code",null,"From Time = 00:00"),(0,a.Uk)(", "),(0,a._)("code",null,"To Time = 00:00"),(0,a.Uk)(" and "),(0,a._)("strong",null,"un-check"),(0,a.Uk)(" the "),(0,a._)("code",null,"Consecutive On-Period"),(0,a.Uk)(" flag. This will turn on the 4 cheapest hours during the whole day, and off the rest.")]),(0,a._)("p",null,[(0,a.Uk)("You can use any time for start and end, but it is a good idea to use "),(0,a._)("code",null,"00:00"),(0,a.Uk)(", since the prices normally comes for this period.")])],-1),m=(0,a._)("div",{class:"custom-container warning"},[(0,a._)("p",{class:"custom-container-title"},"Outside Period, Send"),(0,a._)("p",null,[(0,a.Uk)("Unless the period you select is 24 hours ("),(0,a._)("code",null,"From Time"),(0,a.Uk)(" and "),(0,a._)("code",null,"To Time"),(0,a.Uk)(" are the same), it is important what value you choose for "),(0,a._)("code",null,"Outside Period, Send"),(0,a.Uk)(". This decides whether the output is on or off during the period that is outside the selected period.")])],-1),U=(0,a._)("div",{class:"custom-container danger"},[(0,a._)("p",{class:"custom-container-title"},"Schedule not calculated"),(0,a._)("p",null,"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.")],-1),g=(0,a._)("h3",{id:"dynamic-config",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#dynamic-config","aria-hidden":"true"},"#"),(0,a.Uk)(" Dynamic config")],-1),f=(0,a._)("p",null,"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:",-1),y=(0,a._)("div",{class:"language-json ext-json line-numbers-mode"},[(0,a._)("pre",{class:"language-json"},[(0,a._)("code",null,[(0,a._)("span",{class:"token property"},'"payload"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token punctuation"},"{"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"config"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token punctuation"},"{"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"fromTime"'),(0,a.Uk)(),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token number"},"10"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"toTime"'),(0,a.Uk)(),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token number"},"16"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"hoursOn"'),(0,a.Uk)(),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token number"},"3"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"doNotSplit"'),(0,a.Uk)(),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token boolean"},"false"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"sendCurrentValueWhenRescheduling"'),(0,a.Uk)(),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token boolean"},"true"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"outputIfNoSchedule"'),(0,a.Uk)(),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token boolean"},"false"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"outputOutsidePeriod"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token boolean"},"false"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"}"),(0,a.Uk)("\n"),(0,a._)("span",{class:"token punctuation"},"}"),(0,a.Uk)("\n")])]),(0,a._)("div",{class:"line-numbers"},[(0,a._)("span",{class:"line-number"},"1"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"2"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"3"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"4"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"5"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"6"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"7"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"8"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"9"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"10"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"11"),(0,a._)("br")])],-1),w=(0,a._)("p",null,"All the variables in the config object are optional. You can send only those you want to change.",-1),v=(0,a._)("p",null,"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.",-1),T=(0,a._)("p",null,"When a config is sent like this, the schedule will be replanned based on the last previously received price data. If no price data has been received, no scheduling is done.",-1),x=(0,a._)("h2",{id:"input",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#input","aria-hidden":"true"},"#"),(0,a.Uk)(" Input")],-1),O=(0,a.Uk)("The input is the "),C=(0,a.Uk)("common strategy input format"),S=(0,a._)("h2",{id:"output",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#output","aria-hidden":"true"},"#"),(0,a.Uk)(" Output")],-1),I=(0,a._)("p",null,"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.",-1),P=(0,a._)("p",null,"Example of output:",-1),j=(0,a._)("div",{class:"language-json ext-json line-numbers-mode"},[(0,a._)("pre",{class:"language-json"},[(0,a._)("code",null,[(0,a._)("span",{class:"token punctuation"},"{"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"schedule"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token punctuation"},"["),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"{"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"time"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"2021-12-10T00:00:00.000+01:00"'),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"value"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"true"'),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"}"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"{"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"time"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"2021-12-10T04:00:00.000+01:00"'),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"value"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token boolean"},"true"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"}"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"{"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"time"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"2021-12-10T10:00:00.000+01:00"'),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"value"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token boolean"},"false"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"}"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"{"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"time"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"2021-12-10T18:00:00.000+01:00"'),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"value"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"true"'),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"}"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"{"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"time"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"2021-12-11T04:00:00.000+01:00"'),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"value"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token boolean"},"true"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"}"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"{"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"time"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"2021-12-11T10:00:00.000+01:00"'),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"value"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token boolean"},"false"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"}"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"{"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"time"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"2021-12-11T18:00:00.000+01:00"'),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"value"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"true"'),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"}"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"]"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"hours"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token punctuation"},"["),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"{"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"price"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token number"},"0.4778"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"onOff"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"true"'),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"start"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"2021-12-10T00:00:00.000+01:00"'),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"saving"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token null keyword"},"null"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"}"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"{"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"price"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token number"},"0.4828"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"onOff"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"true"'),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"start"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"2021-12-10T01:00:00.000+01:00"'),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"saving"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token null keyword"},"null"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"}"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token comment"},"//..."),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"{"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"price"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token number"},"0.6514"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"onOff"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"true"'),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"start"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"2021-12-11T23:00:00.000+01:00"'),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"saving"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token null keyword"},"null"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"}"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"]"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"source"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"Tibber"'),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"config"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token punctuation"},"{"),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"fromTime"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"04"'),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"toTime"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"18"'),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"hoursOn"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"06"'),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"doNotSplit"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token boolean"},"false"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"sendCurrentValueWhenRescheduling"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token boolean"},"true"),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"outputIfNoSchedule"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"true"'),(0,a._)("span",{class:"token punctuation"},","),(0,a.Uk)("\n "),(0,a._)("span",{class:"token property"},'"outputOutsidePeriod"'),(0,a._)("span",{class:"token operator"},":"),(0,a.Uk)(),(0,a._)("span",{class:"token string"},'"true"'),(0,a.Uk)("\n "),(0,a._)("span",{class:"token punctuation"},"}"),(0,a.Uk)("\n"),(0,a._)("span",{class:"token punctuation"},"}"),(0,a.Uk)("\n")])]),(0,a._)("div",{class:"line-numbers"},[(0,a._)("span",{class:"line-number"},"1"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"2"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"3"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"4"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"5"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"6"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"7"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"8"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"9"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"10"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"11"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"12"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"13"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"14"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"15"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"16"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"17"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"18"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"19"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"20"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"21"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"22"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"23"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"24"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"25"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"26"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"27"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"28"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"29"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"30"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"31"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"32"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"33"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"34"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"35"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"36"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"37"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"38"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"39"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"40"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"41"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"42"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"43"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"44"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"45"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"46"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"47"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"48"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"49"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"50"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"51"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"52"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"53"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"54"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"55"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"56"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"57"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"58"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"59"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"60"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"61"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"62"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"63"),(0,a._)("br")])],-1),N=(0,a._)("p",null,[(0,a.Uk)("The "),(0,a._)("code",null,"schedule"),(0,a.Uk)(" array shows every time the switch is turned on or off. The "),(0,a._)("code",null,"hours"),(0,a.Uk)(" 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.")],-1),W=(0,a._)("h2",{id:"tips-tricks",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#tips-tricks","aria-hidden":"true"},"#"),(0,a.Uk)(" Tips & tricks")],-1),Y=(0,a._)("h3",{id:"multiple-nodes-works-together",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#multiple-nodes-works-together","aria-hidden":"true"},"#"),(0,a.Uk)(" Multiple nodes works together")],-1),D=(0,a._)("p",null,"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.",-1),F=(0,a._)("h3",{id:"highest-price",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#highest-price","aria-hidden":"true"},"#"),(0,a.Uk)(" Highest price")],-1),H=(0,a._)("p",null,[(0,a.Uk)("If you want to find the "),(0,a._)("code",null,"x"),(0,a.Uk)(" hours with the highest prices, do as follows:")],-1),R=(0,a._)("ol",null,[(0,a._)("li",null,[(0,a.Uk)("Calculate "),(0,a._)("code",null,"y"),(0,a.Uk)(" as the total number of hours in the period. For example, if the period is from "),(0,a._)("code",null,"08:00"),(0,a.Uk)(" to "),(0,a._)("code",null,"20:00"),(0,a.Uk)(", then "),(0,a._)("code",null,"y = 12"),(0,a.Uk)(".")]),(0,a._)("li",null,[(0,a.Uk)("Configure "),(0,a._)("code",null,"Hours On = y - x"),(0,a.Uk)(", so if "),(0,a._)("code",null,"x = 4"),(0,a.Uk)(", then "),(0,a._)("code",null,"Hours On = 12 - 4 = 8"),(0,a.Uk)(".")]),(0,a._)("li",null,[(0,a.Uk)("Use "),(0,a._)("strong",null,"Output 2"),(0,a.Uk)(" to get a signal when you have the hours with the highest prices. Just remember that the value sent to output 2 is "),(0,a._)("code",null,"false"),(0,a.Uk)(", not "),(0,a._)("code",null,"true"),(0,a.Uk)(" as it is on output 1.")])],-1),E={},V=(0,e(3744).Z)(E,[["render",function(n,s){const e=(0,a.up)("RouterLink");return(0,a.wg)(),(0,a.iD)(a.HY,null,[l,r,p,c,i,u,_,k,d,h,b,m,U,g,f,y,w,v,T,x,(0,a._)("p",null,[O,(0,a.Wm)(e,{to:"/nodes/strategy-input.html"},{default:(0,a.w5)((()=>[C])),_:1})]),S,I,P,j,N,W,Y,D,F,H,R],64)}]])},3744:(n,s)=>{s.Z=(n,s)=>{const e=n.__vccOpts||n;for(const[n,a]of s)e[n]=a;return e}},3981:(n,s,e)=>{n.exports=e.p+"assets/img/lowest-price-config.6d66a8c2.png"},6110:(n,s,e)=>{n.exports=e.p+"assets/img/node-ps-strategy-lowest-price.3a4ad347.png"}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunknode_red_contrib_power_saver=self.webpackChunknode_red_contrib_power_saver||[]).push([[495],{3707:(e,i,l)=>{l.r(i),l.d(i,{data:()=>a});const a={key:"v-510ed0d4",path:"/changelog/",title:"Change Log",lang:"en-US",frontmatter:{sidebar:"auto"},excerpt:"",headers:[{level:2,title:"3.0.9",slug:"_3-0-9",children:[]},{level:2,title:"3.0.8",slug:"_3-0-8",children:[]},{level:2,title:"3.0.7",slug:"_3-0-7",children:[]},{level:2,title:"3.0.6",slug:"_3-0-6",children:[]},{level:2,title:"3.0.5",slug:"_3-0-5",children:[]},{level:2,title:"3.0.4",slug:"_3-0-4",children:[]},{level:2,title:"3.0.3",slug:"_3-0-3",children:[]},{level:2,title:"3.0.2",slug:"_3-0-2",children:[]},{level:2,title:"3.0.1",slug:"_3-0-1",children:[]},{level:2,title:"3.0.0",slug:"_3-0-0",children:[]},{level:2,title:"2.1.0",slug:"_2-1-0",children:[]},{level:2,title:"2.0.5",slug:"_2-0-5",children:[]},{level:2,title:"2.0.4",slug:"_2-0-4",children:[]},{level:2,title:"2.0.3",slug:"_2-0-3",children:[]},{level:2,title:"2.0.2",slug:"_2-0-2",children:[]},{level:2,title:"2.0.1",slug:"_2-0-1",children:[]},{level:2,title:"2.0.0",slug:"_2-0-0",children:[]},{level:2,title:"1.0.9",slug:"_1-0-9",children:[]}],filePathRelative:"changelog/README.md",git:{updatedTime:1640034618e3,contributors:[{name:"Otto Paulsen",email:"ottpau@gmail.com",commits:8},{name:"Otto Paulsen",email:"otto.paulsen@itema.no",commits:3}]}}},4814:(e,i,l)=>{l.r(i),l.d(i,{default:()=>d});const a=(0,l(6252).uE)('<h1 id="change-log" tabindex="-1"><a class="header-anchor" href="#change-log" aria-hidden="true">#</a> Change Log</h1><p>List the most significant changes, starting in version 1.0.9.</p><h2 id="_3-0-9" tabindex="-1"><a class="header-anchor" href="#_3-0-9" aria-hidden="true">#</a> 3.0.9</h2><ul><li>Fix Nord Pool input for current state node, to read data when payload is set to entity.</li></ul><h2 id="_3-0-8" tabindex="-1"><a class="header-anchor" href="#_3-0-8" aria-hidden="true">#</a> 3.0.8</h2><ul><li>Fix bug in Lowest Price node when period goes over midnight.</li><li>Fix documentation - lots of pages were failing.</li></ul><h2 id="_3-0-7" tabindex="-1"><a class="header-anchor" href="#_3-0-7" aria-hidden="true">#</a> 3.0.7</h2><ul><li>Fix Nord Pool current state node input.</li></ul><h2 id="_3-0-6" tabindex="-1"><a class="header-anchor" href="#_3-0-6" aria-hidden="true">#</a> 3.0.6</h2><ul><li>Remove non-existent node from package.json.</li></ul><h2 id="_3-0-5" tabindex="-1"><a class="header-anchor" href="#_3-0-5" aria-hidden="true">#</a> 3.0.5</h2><ul><li>Move dependencies to correct section (node_fetch and lodash.cloneDeep).</li></ul><h2 id="_3-0-4" tabindex="-1"><a class="header-anchor" href="#_3-0-4" aria-hidden="true">#</a> 3.0.4</h2><ul><li>Remove <code>null</code>-values from Nord Pool data for <code>tomorrow</code>.</li></ul><h2 id="_3-0-3" tabindex="-1"><a class="header-anchor" href="#_3-0-3" aria-hidden="true">#</a> 3.0.3</h2><ul><li>Fix bug in lowest price strategy, when period ends at midnight.</li><li>Fix labels for hours on, so they do not have leading zero.</li><li>Fix so source should be visible in output 3.</li></ul><h2 id="_3-0-2" tabindex="-1"><a class="header-anchor" href="#_3-0-2" aria-hidden="true">#</a> 3.0.2</h2><ul><li>Bugfix in Lowest Price node (not successful)</li></ul><h2 id="_3-0-1" tabindex="-1"><a class="header-anchor" href="#_3-0-1" aria-hidden="true">#</a> 3.0.1</h2><ul><li>Fix so elvia subscription key is stored as credential</li><li>Fix bug on config for strategy nodes. Config was not saved properly.</li><li>Remove double output bug, and better handling when hoursOn > period</li></ul><h2 id="_3-0-0" tabindex="-1"><a class="header-anchor" href="#_3-0-0" aria-hidden="true">#</a> 3.0.0</h2><ul><li>Deprecating old Power Saver node, adding multiple new nodes.</li><li>New node <code>ps-strategy-best-save</code> is replacing old node <code>Power Saver</code> together with the new <code>ps-receive-price</code> node.</li><li>Add new strategy node: <code>ps-strategy-lowest-price</code>.</li><li>Add new node: <code>ps-receive-price</code>.</li><li>Add grid tariff for Elvia customers, using the <code>ps-elvia-add-tariff</code> node.</li><li>New documentation.</li><li>Change node category to Power Saver.</li></ul><h2 id="_2-1-0" tabindex="-1"><a class="header-anchor" href="#_2-1-0" aria-hidden="true">#</a> 2.1.0</h2><ul><li>Accept config as input, making it possible to dynamically change config</li><li>Fix dropdown for config value for selecting output when there is no schedule</li><li>Improve config screen and documentation</li></ul><h2 id="_2-0-5" tabindex="-1"><a class="header-anchor" href="#_2-0-5" aria-hidden="true">#</a> 2.0.5</h2><ul><li>Update links to examples</li></ul><h2 id="_2-0-4" tabindex="-1"><a class="header-anchor" href="#_2-0-4" aria-hidden="true">#</a> 2.0.4</h2><ul><li>Update doc and add examples</li></ul><h2 id="_2-0-3" tabindex="-1"><a class="header-anchor" href="#_2-0-3" aria-hidden="true">#</a> 2.0.3</h2><ul><li>Bugfix</li></ul><h2 id="_2-0-2" tabindex="-1"><a class="header-anchor" href="#_2-0-2" aria-hidden="true">#</a> 2.0.2</h2><ul><li>Fix so Nord Pool data can be read directly from the current state node</li></ul><h2 id="_2-0-1" tabindex="-1"><a class="header-anchor" href="#_2-0-1" aria-hidden="true">#</a> 2.0.1</h2><ul><li>Fix bug that caused no schedule</li><li>Add config to output</li></ul><h2 id="_2-0-0" tabindex="-1"><a class="header-anchor" href="#_2-0-0" aria-hidden="true">#</a> 2.0.0</h2><ul><li>New and better algorithm to calculate savings, resulting in a better schedule.</li><li>Removed possibility to configure maximum hours to save per day, as this does not really make much sense.</li><li>Round savings to 4 decimals.</li><li>Set last savings hour to null when 0.</li></ul><h2 id="_1-0-9" tabindex="-1"><a class="header-anchor" href="#_1-0-9" aria-hidden="true">#</a> 1.0.9</h2><ul><li>Fix bug in saving last hour of the day.</li></ul>',38),t={},d=(0,l(3744).Z)(t,[["render",function(e,i){return a}]])},3744:(e,i)=>{i.Z=(e,i)=>{const l=e.__vccOpts||e;for(const[e,a]of i)l[e]=a;return l}}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunknode_red_contrib_power_saver=self.webpackChunknode_red_contrib_power_saver||[]).push([[317],{1535:(n,s,a)=>{a.r(s),a.d(s,{data:()=>t});const t={key:"v-5954bcb2",path:"/nodes/strategy-input.html",title:"Strategy input format",lang:"en-US",frontmatter:{},excerpt:"",headers:[],filePathRelative:"nodes/strategy-input.md",git:{updatedTime:1640034618e3,contributors:[{name:"Otto Paulsen",email:"ottpau@gmail.com",commits:2}]}}},886:(n,s,a)=>{a.r(s),a.d(s,{default:()=>e});const t=(0,a(6252).uE)('<h1 id="strategy-input-format" tabindex="-1"><a class="header-anchor" href="#strategy-input-format" aria-hidden="true">#</a> Strategy input format</h1><p>The common input for strategy nodes is a payload with a <code>priceData</code> array containing an object for each hour. Each object has a <code>value</code> which is the price, and a <code>start</code> which is the start time for the hour.</p><p>Example:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token punctuation">{</span>\n <span class="token property">"priceData"</span><span class="token operator">:</span> <span class="token punctuation">[</span>\n <span class="token punctuation">{</span>\n <span class="token property">"value"</span><span class="token operator">:</span> <span class="token number">0.9544</span><span class="token punctuation">,</span>\n <span class="token property">"start"</span><span class="token operator">:</span> <span class="token string">"2021-12-07T00:00:00.000+01:00"</span>\n <span class="token punctuation">}</span><span class="token punctuation">,</span>\n <span class="token punctuation">{</span>\n <span class="token property">"value"</span><span class="token operator">:</span> <span class="token number">0.8973</span><span class="token punctuation">,</span>\n <span class="token property">"start"</span><span class="token operator">:</span> <span class="token string">"2021-12-07T01:00:00.000+01:00"</span>\n <span class="token punctuation">}</span><span class="token punctuation">,</span>\n <span class="token punctuation">{</span>\n <span class="token property">"value"</span><span class="token operator">:</span> <span class="token number">0.8668</span><span class="token punctuation">,</span>\n <span class="token property">"start"</span><span class="token operator">:</span> <span class="token string">"2021-12-07T02:00:00.000+01:00"</span>\n <span class="token punctuation">}</span><span class="token punctuation">,</span>\n <span class="token punctuation">{</span>\n <span class="token property">"value"</span><span class="token operator">:</span> <span class="token number">0.8683</span><span class="token punctuation">,</span>\n <span class="token property">"start"</span><span class="token operator">:</span> <span class="token string">"2021-12-07T03:00:00.000+01:00"</span>\n <span class="token punctuation">}</span><span class="token punctuation">,</span>\n <span class="token punctuation">{</span>\n <span class="token property">"value"</span><span class="token operator">:</span> <span class="token number">0.8942</span><span class="token punctuation">,</span>\n <span class="token property">"start"</span><span class="token operator">:</span> <span class="token string">"2021-12-07T04:00:00.000+01:00"</span>\n <span class="token punctuation">}</span>\n <span class="token comment">// ... normally 24 or 48 hours</span>\n <span class="token punctuation">]</span>\n<span class="token punctuation">}</span>\n</code></pre><div class="line-numbers"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br></div></div><p>This format is used for:</p><ul><li>Output of the <code>ps-receive-price</code> node</li><li>Input and output of the <code>ps-xxx-add-tariff</code> nodes</li><li>Input for the strategy nodes (<code>ps-strategy-xxx-xxx</code>)</li></ul>',6),p={},e=(0,a(3744).Z)(p,[["render",function(n,s){return t}]])},3744:(n,s)=>{s.Z=(n,s)=>{const a=n.__vccOpts||n;for(const[n,t]of s)a[n]=t;return a}}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunknode_red_contrib_power_saver=self.webpackChunknode_red_contrib_power_saver||[]).push([[283],{4773:(n,s,a)=>{a.r(s),a.d(s,{data:()=>t});const t={key:"v-61f728ca",path:"/examples/example-nordpool-current-state.html",title:"Nord Pool and current state node",lang:"en-US",frontmatter:{},excerpt:"",headers:[{level:2,title:"Description",slug:"description",children:[]},{level:2,title:"Flow",slug:"flow",children:[]}],filePathRelative:"examples/example-nordpool-current-state.md",git:{updatedTime:1639944519e3,contributors:[{name:"Otto Paulsen",email:"ottpau@gmail.com",commits:2}]}}},6314:(n,s,a)=>{a.r(s),a.d(s,{default:()=>u});var t=a(6252),o=a(3590);const p=(0,t._)("h1",{id:"nord-pool-and-current-state-node",tabindex:"-1"},[(0,t._)("a",{class:"header-anchor",href:"#nord-pool-and-current-state-node","aria-hidden":"true"},"#"),(0,t.Uk)(" Nord Pool and current state node")],-1),e=(0,t._)("h2",{id:"description",tabindex:"-1"},[(0,t._)("a",{class:"header-anchor",href:"#description","aria-hidden":"true"},"#"),(0,t.Uk)(" Description")],-1),k=(0,t._)("p",null,[(0,t.Uk)("In this example, data is read from the Nord Pool sensor in HA via the "),(0,t._)("code",null,"current state"),(0,t.Uk)(" node. The "),(0,t._)("code",null,"ps-best-save"),(0,t.Uk)(" node is used to control a water heater via a switch, controlled by "),(0,t._)("code",null,"call service"),(0,t.Uk)(" nodes in Home Assistant. The schedule is printed to a debug node. An "),(0,t._)("code",null,"inject"),(0,t.Uk)(" node is used to trigger the reading of the Nord Pool sensor every hour.")],-1),c=(0,t._)("p",null,[(0,t._)("img",{src:o,alt:"Example with Tibber and MQTT"})],-1),r=(0,t._)("h2",{id:"flow",tabindex:"-1"},[(0,t._)("a",{class:"header-anchor",href:"#flow","aria-hidden":"true"},"#"),(0,t.Uk)(" Flow")],-1),l=(0,t._)("div",{class:"language-json ext-json"},[(0,t._)("pre",{class:"language-json"},[(0,t._)("code",null,[(0,t._)("span",{class:"token punctuation"},"["),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"{"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"id"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"e2578f6a.210a8"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"type"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"debug"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"z"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"d938c47f.3398f8"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"name"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"Nord Pool result"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"active"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token boolean"},"false"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"tosidebar"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token boolean"},"true"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"console"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token boolean"},"false"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"tostatus"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token boolean"},"false"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"complete"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"true"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"targetType"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"full"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"statusVal"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'""'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"statusType"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"auto"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"x"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token number"},"820"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"y"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token number"},"440"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"wires"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token punctuation"},"["),(0,t._)("span",{class:"token punctuation"},"]"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"}"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"{"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"id"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"48bcdcca.fe42a4"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"type"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"api-current-state"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"z"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"d938c47f.3398f8"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"name"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"Read Nord Pool"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"server"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"ec4a12a1.b2be9"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"version"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token number"},"2"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"outputs"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token number"},"1"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"halt_if"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'""'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"halt_if_type"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"str"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"halt_if_compare"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"is"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"entity_id"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"sensor.nordpool_kwh_trheim_nok_3_095_025"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"state_type"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"str"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"blockInputOverrides"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token boolean"},"false"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"outputProperties"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token punctuation"},"["),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"{"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"property"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"payload"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"propertyType"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"msg"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"value"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'""'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"valueType"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"entity"'),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"}"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"]"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"x"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token number"},"280"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"y"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token number"},"380"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"wires"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token punctuation"},"["),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"["),(0,t.Uk)("\n "),(0,t._)("span",{class:"token string"},'"428d7c7ca88db95f"'),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"]"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"]"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"}"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"{"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"id"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"97cc8e58.4247a"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"type"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"inject"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"z"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"d938c47f.3398f8"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"name"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'""'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"props"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token punctuation"},"["),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"{"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"p"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"payload"'),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"}"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"{"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"p"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"topic"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"vt"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"str"'),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"}"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"]"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"repeat"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"3600"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"crontab"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'""'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"once"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token boolean"},"true"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"onceDelay"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token number"},"0.1"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"topic"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'""'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"payloadType"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"date"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"x"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token number"},"110"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"y"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token number"},"380"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"wires"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token punctuation"},"["),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"["),(0,t.Uk)("\n "),(0,t._)("span",{class:"token string"},'"48bcdcca.fe42a4"'),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"]"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"]"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"}"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"{"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"id"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"a6f2769b.1a62a8"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"type"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"api-call-service"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"z"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"d938c47f.3398f8"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"name"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"Turn on VVB"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"server"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"ec4a12a1.b2be9"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"version"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token number"},"3"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"debugenabled"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token boolean"},"false"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"service_domain"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"switch"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"service"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"turn_on"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"entityId"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"switch.varmtvannsbereder_switch"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"data"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'""'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"dataType"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"jsonata"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"mergecontext"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'""'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"mustacheAltTags"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token boolean"},"false"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"outputProperties"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token punctuation"},"["),(0,t._)("span",{class:"token punctuation"},"]"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"queue"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"none"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"x"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token number"},"810"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"y"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token number"},"340"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"wires"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token punctuation"},"["),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"["),(0,t._)("span",{class:"token punctuation"},"]"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"]"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"}"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"{"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"id"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"9fc75126.65dd3"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"type"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"api-call-service"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"z"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"d938c47f.3398f8"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"name"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"Turn off VVB"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"server"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"ec4a12a1.b2be9"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"version"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token number"},"3"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"debugenabled"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token boolean"},"true"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"service_domain"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"switch"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"service"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"turn_off"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"entityId"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"switch.varmtvannsbereder_switch"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"data"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'""'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"dataType"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"json"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"mergecontext"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'""'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"mustacheAltTags"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token boolean"},"false"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"outputProperties"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token punctuation"},"["),(0,t._)("span",{class:"token punctuation"},"]"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"queue"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"none"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"x"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token number"},"810"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"y"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token number"},"380"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"wires"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token punctuation"},"["),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"["),(0,t._)("span",{class:"token punctuation"},"]"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"]"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"}"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"{"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"id"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"428d7c7ca88db95f"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"type"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"ps-receive-price"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"z"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"d938c47f.3398f8"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"name"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"Price Receiver"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"x"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token number"},"460"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"y"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token number"},"380"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"wires"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token punctuation"},"["),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"["),(0,t.Uk)("\n "),(0,t._)("span",{class:"token string"},'"4147bf0b99fe626f"'),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"]"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"]"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"}"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"{"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"id"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"4147bf0b99fe626f"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"type"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"ps-strategy-best-save"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"z"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"d938c47f.3398f8"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"name"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"Best Save"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"maxHoursToSaveInSequence"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"4"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"minHoursOnAfterMaxSequenceSaved"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"1"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"minSaving"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"0.03"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"sendCurrentValueWhenRescheduling"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token boolean"},"true"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"outputIfNoSchedule"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"true"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"scheduleOnlyFromCurrentTime"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"false"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"x"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token number"},"630"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"y"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token number"},"380"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"wires"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token punctuation"},"["),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"["),(0,t.Uk)("\n "),(0,t._)("span",{class:"token string"},'"a6f2769b.1a62a8"'),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"]"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"["),(0,t.Uk)("\n "),(0,t._)("span",{class:"token string"},'"9fc75126.65dd3"'),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"]"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"["),(0,t.Uk)("\n "),(0,t._)("span",{class:"token string"},'"e2578f6a.210a8"'),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"]"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"]"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"}"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"{"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"id"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"ec4a12a1.b2be9"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"type"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"server"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"name"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"Home Assistant"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"version"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token number"},"2"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"addon"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token boolean"},"true"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"rejectUnauthorizedCerts"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token boolean"},"true"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"ha_boolean"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"y|yes|true|on|home|open"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"connectionDelay"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token boolean"},"true"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"cacheJson"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token boolean"},"true"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"heartbeat"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token boolean"},"false"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"heartbeatInterval"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token number"},"30"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"}"),(0,t.Uk)("\n"),(0,t._)("span",{class:"token punctuation"},"]"),(0,t.Uk)("\n")])])],-1),_={},u=(0,a(3744).Z)(_,[["render",function(n,s){return(0,t.wg)(),(0,t.iD)(t.HY,null,[p,e,k,c,r,l],64)}]])},3744:(n,s)=>{s.Z=(n,s)=>{const a=n.__vccOpts||n;for(const[n,t]of s)a[n]=t;return a}},3590:(n,s,a)=>{n.exports=a.p+"assets/img/power-saver-nordpool-current-state.bf14afde.png"}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunknode_red_contrib_power_saver=self.webpackChunknode_red_contrib_power_saver||[]).push([[745],{7951:(e,n,s)=>{s.r(n),s.d(n,{data:()=>t});const t={key:"v-677dfaed",path:"/nodes/ps-receive-price.html",title:"ps-receive-price",lang:"en-US",frontmatter:{prev:"./ps-strategy-lowest-price.md"},excerpt:"",headers:[{level:2,title:"Description",slug:"description",children:[]},{level:2,title:"Configuration",slug:"configuration",children:[]},{level:2,title:"Input",slug:"input",children:[{level:3,title:"Tibber input",slug:"tibber-input",children:[]},{level:3,title:"Nord Pool input",slug:"nord-pool-input",children:[]},{level:3,title:"Other input",slug:"other-input",children:[]}]},{level:2,title:"Output",slug:"output",children:[]}],filePathRelative:"nodes/ps-receive-price.md",git:{updatedTime:1640034618e3,contributors:[{name:"Otto Paulsen",email:"ottpau@gmail.com",commits:3}]}}},546:(e,n,s)=>{s.r(n),s.d(n,{default:()=>de});var t=s(6252),r=s(3301);const a=(0,t._)("h1",{id:"ps-receive-price",tabindex:"-1"},[(0,t._)("a",{class:"header-anchor",href:"#ps-receive-price","aria-hidden":"true"},"#"),(0,t.Uk)(" ps-receive-price")],-1),l=(0,t._)("p",null,[(0,t._)("img",{src:r,alt:"ps-receive-price"})],-1),o=(0,t._)("h2",{id:"description",tabindex:"-1"},[(0,t._)("a",{class:"header-anchor",href:"#description","aria-hidden":"true"},"#"),(0,t.Uk)(" Description")],-1),i=(0,t._)("p",null,[(0,t.Uk)("The "),(0,t._)("code",null,"ps-receive-price"),(0,t.Uk)(" node is used to convert prices from Tibber or Nord Pool to the format used by the strategy nodes. It takes its input directly from the output of the following nodes (see details below):")],-1),u=(0,t._)("ul",null,[(0,t._)("li",null,[(0,t._)("code",null,"tibber-query"),(0,t.Uk)(" node from Tibber ("),(0,t._)("code",null,"node-red-contrib-tibber-api"),(0,t.Uk)(")")]),(0,t._)("li",null,[(0,t._)("code",null,"current state"),(0,t.Uk)(" node in Home Assistant")]),(0,t._)("li",null,[(0,t._)("code",null,"events: state"),(0,t.Uk)(" node in Home Assistant")])],-1),p=(0,t._)("p",null,[(0,t.Uk)("Output can be sent directly to the strategy nodes (for example "),(0,t._)("code",null,"strategy-best-save"),(0,t.Uk)(" or "),(0,t._)("code",null,"strategy-lowest-price"),(0,t.Uk)("), or it can be sent via another node to add grid tariff or other additional costs before the calculation is done.")],-1),c=(0,t._)("div",{class:"custom-container warning"},[(0,t._)("p",{class:"custom-container-title"},"Note"),(0,t._)("p",null,[(0,t.Uk)("In version 2 of "),(0,t._)("code",null,"node-red-contrib-power-saver"),(0,t.Uk)(", prices were received directly by the Power Saver node. This made it hard to add grid tariff before the calculation was done. That is why this is now a separate node.")])],-1),_=(0,t._)("h2",{id:"configuration",tabindex:"-1"},[(0,t._)("a",{class:"header-anchor",href:"#configuration","aria-hidden":"true"},"#"),(0,t.Uk)(" Configuration")],-1),b=(0,t._)("p",null,"There is no configuration except from node name.",-1),d=(0,t._)("h2",{id:"input",tabindex:"-1"},[(0,t._)("a",{class:"header-anchor",href:"#input","aria-hidden":"true"},"#"),(0,t.Uk)(" Input")],-1),h=(0,t._)("h3",{id:"tibber-input",tabindex:"-1"},[(0,t._)("a",{class:"header-anchor",href:"#tibber-input","aria-hidden":"true"},"#"),(0,t.Uk)(" Tibber input")],-1),m=(0,t.Uk)("If you are a Tibber customer, you can use the "),k=(0,t._)("code",null,"tibber-query",-1),g=(0,t.Uk)(" node from the "),f={href:"https://flows.nodered.org/node/node-red-contrib-tibber-api",target:"_blank",rel:"noopener noreferrer"},U=(0,t._)("code",null,"node-red-contrib-tibber-api",-1),y=(0,t.Uk)(". Set it up with the following query:"),v=(0,t._)("div",{class:"language-gql ext-gql line-numbers-mode"},[(0,t._)("pre",{class:"language-gql"},[(0,t._)("code",null,"{\n viewer {\n homes {\n currentSubscription {\n priceInfo {\n today {\n total\n startsAt\n }\n tomorrow {\n total\n startsAt\n }\n }\n }\n }\n }\n}\n")]),(0,t._)("div",{class:"line-numbers"},[(0,t._)("span",{class:"line-number"},"1"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"2"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"3"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"4"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"5"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"6"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"7"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"8"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"9"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"10"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"11"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"12"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"13"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"14"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"15"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"16"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"17"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"18"),(0,t._)("br")])],-1),w=(0,t._)("p",null,[(0,t.Uk)("Send the result from the "),(0,t._)("code",null,"tibber-query"),(0,t.Uk)(" node with the query above directly to the "),(0,t._)("code",null,"ps-receive-price"),(0,t.Uk)(" node. Make sure it is refreshed when new prices are ready. Prices for the next day are normally ready at 13:00, but refreshing every hour can be a good idea.")],-1),x=(0,t.Uk)("See example with Tibber, a switch and MQTT"),T=(0,t._)("div",{class:"custom-container danger"},[(0,t._)("p",{class:"custom-container-title"},"Warning"),(0,t._)("p",null,"The query above returns an array with all houses you have in your Tibber account. It will work only if the house you want is the first house in the array, for example if you have only one house. If that is not the case, you must use the query below.")],-1),q=(0,t._)("p",null,[(0,t._)("strong",null,"Tibber query for a specific house")],-1),I=(0,t._)("p",null,"If the above query does not give you the house you want as the first in the result array, you can use the following method. In this method you need run one query in order to find the id of the house you want the prices for first, and then use the id in the real query.",-1),P=(0,t.Uk)("Go to the "),N={href:"https://developer.tibber.com/",target:"_blank",rel:"noopener noreferrer"},S=(0,t.Uk)("Tibber Developer pages"),O=(0,t.Uk)(", sign in, and go to the "),W={href:"https://developer.tibber.com/explorer",target:"_blank",rel:"noopener noreferrer"},A=(0,t.Uk)("API Explorer"),C=(0,t.Uk)(". Load your personal token, then run the following query:"),D=(0,t._)("div",{class:"language-gql ext-gql line-numbers-mode"},[(0,t._)("pre",{class:"language-gql"},[(0,t._)("code",null,"{\n viewer {\n homes {\n id\n address {\n address1\n address2\n address3\n postalCode\n city\n country\n }\n }\n }\n}\n")]),(0,t._)("div",{class:"line-numbers"},[(0,t._)("span",{class:"line-number"},"1"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"2"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"3"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"4"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"5"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"6"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"7"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"8"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"9"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"10"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"11"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"12"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"13"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"14"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"15"),(0,t._)("br")])],-1),H=(0,t._)("p",null,[(0,t.Uk)("Then copy the "),(0,t._)("code",null,"id"),(0,t.Uk)(" of the house you want to use prices for. It may look like this:")],-1),j=(0,t._)("div",{class:"language-text ext-text line-numbers-mode"},[(0,t._)("pre",{class:"language-text"},[(0,t._)("code",null,"NB! This is just an example:\n142c1670-ab43-2ab3-ba6d-723703a551e2\n")]),(0,t._)("div",{class:"line-numbers"},[(0,t._)("span",{class:"line-number"},"1"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"2"),(0,t._)("br")])],-1),L=(0,t._)("p",null,"Then use the id in the following query, replacing the id with the one you found in the previous query:",-1),M=(0,t._)("div",{class:"language-gql ext-gql line-numbers-mode"},[(0,t._)("pre",{class:"language-gql"},[(0,t._)("code",null,'{\n viewer {\n home(id: "142c1670-ab43-2ab3-ba6d-723703a551e2") {\n currentSubscription{\n priceInfo{\n today {\n total\n startsAt\n }\n tomorrow {\n total\n startsAt\n }\n }\n }\n }\n }\n}\n')]),(0,t._)("div",{class:"highlight-lines"},[(0,t._)("br"),(0,t._)("br"),(0,t._)("div",{class:"highlight-line"}," "),(0,t._)("br"),(0,t._)("br"),(0,t._)("br"),(0,t._)("br"),(0,t._)("br"),(0,t._)("br"),(0,t._)("br"),(0,t._)("br"),(0,t._)("br"),(0,t._)("br"),(0,t._)("br"),(0,t._)("br"),(0,t._)("br"),(0,t._)("br"),(0,t._)("br")]),(0,t._)("div",{class:"line-numbers"},[(0,t._)("span",{class:"line-number"},"1"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"2"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"3"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"4"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"5"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"6"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"7"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"8"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"9"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"10"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"11"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"12"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"13"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"14"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"15"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"16"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"17"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"18"),(0,t._)("br")])],-1),R=(0,t._)("p",null,[(0,t.Uk)("This is the query you shall put in the "),(0,t._)("code",null,"tibber-query"),(0,t.Uk)(" node.")],-1),Z=(0,t._)("h3",{id:"nord-pool-input",tabindex:"-1"},[(0,t._)("a",{class:"header-anchor",href:"#nord-pool-input","aria-hidden":"true"},"#"),(0,t.Uk)(" Nord Pool input")],-1),B=(0,t.Uk)("This is especially designed to work for Home Assistant (HA), and the "),E={href:"https://github.com/custom-components/nordpool",target:"_blank",rel:"noopener noreferrer"},G=(0,t.Uk)("Nord Pool custom component"),J=(0,t.Uk)(". The Nord Pool component provides a "),Q=(0,t._)("em",null,"sensor",-1),Y=(0,t.Uk)(" that gives price per hour for today and tomorrow (after 13:00). Send the output from this sensor directly to the "),z=(0,t._)("code",null,"ps-receive-price",-1),F=(0,t.Uk)(" node. Make sure this is done whenever the node is updated, as well as when the system starts up."),K=(0,t._)("p",null,[(0,t.Uk)("Data can be sent from both the "),(0,t._)("code",null,"current state"),(0,t.Uk)(" node or the "),(0,t._)("code",null,"events: state"),(0,t.Uk)(" node.")],-1),V=(0,t._)("div",{class:"custom-container tip"},[(0,t._)("p",{class:"custom-container-title"},"Output properties"),(0,t._)("p",null,[(0,t.Uk)("When using the "),(0,t._)("code",null,"current state"),(0,t.Uk)(" node, configure the output properties to set "),(0,t._)("code",null,"msg.payload"),(0,t.Uk)(" to "),(0,t._)("code",null,"entity"),(0,t.Uk)(".")])],-1),X=(0,t.Uk)("See example with Nord Pool and "),$=(0,t._)("code",null,"current state",-1),ee=(0,t.Uk)(" node"),ne=(0,t.Uk)("See example with Nord Pool and "),se=(0,t._)("code",null,"events: state",-1),te=(0,t.Uk)(" node"),re=(0,t._)("h3",{id:"other-input",tabindex:"-1"},[(0,t._)("a",{class:"header-anchor",href:"#other-input","aria-hidden":"true"},"#"),(0,t.Uk)(" Other input")],-1),ae=(0,t._)("p",null,"If you cannot use any of the two above (Tibber or Nord Pool), create the input to the node with the payload containing JSON like this:",-1),le=(0,t._)("div",{class:"language-json ext-json line-numbers-mode"},[(0,t._)("pre",{class:"language-json"},[(0,t._)("code",null,[(0,t._)("span",{class:"token punctuation"},"{"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"today"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token punctuation"},"["),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"{"),(0,t.Uk)(),(0,t._)("span",{class:"token property"},'"value"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token number"},"1"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)(),(0,t._)("span",{class:"token property"},'"start"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"2021-06-21T00:00:00+02:00"'),(0,t.Uk)(),(0,t._)("span",{class:"token punctuation"},"}"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"{"),(0,t.Uk)(),(0,t._)("span",{class:"token property"},'"value"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token number"},"2"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)(),(0,t._)("span",{class:"token property"},'"start"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"2021-06-21T01:00:00+02:00"'),(0,t.Uk)(),(0,t._)("span",{class:"token punctuation"},"}"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token comment"},"//..."),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"]"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"tomorrow"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token punctuation"},"["),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"{"),(0,t.Uk)(),(0,t._)("span",{class:"token property"},'"value"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token number"},"3"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)(),(0,t._)("span",{class:"token property"},'"start"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"2021-06-22T00:00:00+02:00"'),(0,t.Uk)(),(0,t._)("span",{class:"token punctuation"},"}"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"{"),(0,t.Uk)(),(0,t._)("span",{class:"token property"},'"value"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token number"},"4"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)(),(0,t._)("span",{class:"token property"},'"start"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"2021-06-22T01:00:00+02:00"'),(0,t.Uk)(),(0,t._)("span",{class:"token punctuation"},"}"),(0,t.Uk)("\n "),(0,t._)("span",{class:"token comment"},"//..."),(0,t.Uk)("\n "),(0,t._)("span",{class:"token punctuation"},"]"),(0,t.Uk)("\n"),(0,t._)("span",{class:"token punctuation"},"}"),(0,t.Uk)("\n")])]),(0,t._)("div",{class:"line-numbers"},[(0,t._)("span",{class:"line-number"},"1"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"2"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"3"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"4"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"5"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"6"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"7"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"8"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"9"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"10"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"11"),(0,t._)("br"),(0,t._)("span",{class:"line-number"},"12"),(0,t._)("br")])],-1),oe=(0,t._)("h2",{id:"output",tabindex:"-1"},[(0,t._)("a",{class:"header-anchor",href:"#output","aria-hidden":"true"},"#"),(0,t.Uk)(" Output")],-1),ie=(0,t.Uk)("The output is the "),ue=(0,t.Uk)("common strategy input format"),pe=(0,t.Uk)(", so it can be sent directly to the strategy nodes, or via any "),ce=(0,t._)("code",null,"ps-xxx-add-tariff",-1),_e=(0,t.Uk)(" node."),be={},de=(0,s(3744).Z)(be,[["render",function(e,n){const s=(0,t.up)("OutboundLink"),r=(0,t.up)("RouterLink");return(0,t.wg)(),(0,t.iD)(t.HY,null,[a,l,o,i,u,p,c,_,b,d,h,(0,t._)("p",null,[m,k,g,(0,t._)("a",f,[U,(0,t.Wm)(s)]),y]),v,w,(0,t._)("p",null,[(0,t.Wm)(r,{to:"/examples/example-tibber-mqtt.html"},{default:(0,t.w5)((()=>[x])),_:1})]),T,q,I,(0,t._)("p",null,[P,(0,t._)("a",N,[S,(0,t.Wm)(s)]),O,(0,t._)("a",W,[A,(0,t.Wm)(s)]),C]),D,H,j,L,M,R,Z,(0,t._)("p",null,[B,(0,t._)("a",E,[G,(0,t.Wm)(s)]),J,Q,Y,z,F]),K,V,(0,t._)("p",null,[(0,t.Wm)(r,{to:"/examples/example-nordpool-current-state.html"},{default:(0,t.w5)((()=>[X,$,ee])),_:1})]),(0,t._)("p",null,[(0,t.Wm)(r,{to:"/examples/example-nordpool-events-state.html"},{default:(0,t.w5)((()=>[ne,se,te])),_:1})]),re,ae,le,oe,(0,t._)("p",null,[ie,(0,t.Wm)(r,{to:"/nodes/strategy-input.html"},{default:(0,t.w5)((()=>[ue])),_:1}),pe,ce,_e])],64)}]])},3744:(e,n)=>{n.Z=(e,n)=>{const s=e.__vccOpts||e;for(const[e,t]of n)s[e]=t;return s}},3301:(e,n,s)=>{e.exports=s.p+"assets/img/node-ps-receive-price.76eaa418.png"}}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";(self.webpackChunknode_red_contrib_power_saver=self.webpackChunknode_red_contrib_power_saver||[]).push([[889],{9459:(e,t,o)=>{o.r(t),o.d(t,{data:()=>r});const r={key:"v-7c87f26e",path:"/contribute/",title:"Contribute",lang:"en-US",frontmatter:{sidebar:"auto"},excerpt:"",headers:[{level:2,title:"Patreon",slug:"patreon",children:[]},{level:2,title:"Code",slug:"code",children:[]},{level:2,title:"Examples",slug:"examples",children:[]},{level:2,title:"Bug reports",slug:"bug-reports",children:[]},{level:2,title:"Ideas",slug:"ideas",children:[]}],filePathRelative:"contribute/README.md",git:{updatedTime:
|
|
1
|
+
"use strict";(self.webpackChunknode_red_contrib_power_saver=self.webpackChunknode_red_contrib_power_saver||[]).push([[889],{9459:(e,t,o)=>{o.r(t),o.d(t,{data:()=>r});const r={key:"v-7c87f26e",path:"/contribute/",title:"Contribute",lang:"en-US",frontmatter:{sidebar:"auto"},excerpt:"",headers:[{level:2,title:"Patreon",slug:"patreon",children:[]},{level:2,title:"Code",slug:"code",children:[]},{level:2,title:"Examples",slug:"examples",children:[]},{level:2,title:"Bug reports",slug:"bug-reports",children:[]},{level:2,title:"Ideas",slug:"ideas",children:[]}],filePathRelative:"contribute/README.md",git:{updatedTime:1640034618e3,contributors:[{name:"Otto Paulsen",email:"ottpau@gmail.com",commits:3}]}}},9704:(e,t,o)=>{o.r(t),o.d(t,{default:()=>_});var r=o(6252);const a=(0,r.uE)('<h1 id="contribute" tabindex="-1"><a class="header-anchor" href="#contribute" aria-hidden="true">#</a> Contribute</h1><h2 id="patreon" tabindex="-1"><a class="header-anchor" href="#patreon" aria-hidden="true">#</a> Patreon</h2><p>Developing software is time consuming. This solution has taken the better part of all my free time for about 3 quarters of a year. Getting something back would make it easier to also spend future time on this.</p><p>I am trying out Patreon to see if it is possible to get something back for the work I do. The software is open source, and you can use it for free, but if you feel it has value, you can support the development by becoming a patron, paying a monthly fee of your choice.</p><p><a href="https://www.patreon.com/bePatron?u=65948417" data-patreon-widget-type="become-patron-button">Become a Patron!</a></p><h2 id="code" tabindex="-1"><a class="header-anchor" href="#code" aria-hidden="true">#</a> Code</h2><p>It would be very nice to get more developers on board, and become a team. If you satisfy the following criteria, I would be happy to get help on developing this further:</p><ul><li>Professional or experienced developer</li><li>Know JavaScript</li><li>Write automated tests for your code</li><li>Use <code>node-red-contrib-power-saver</code></li><li>Want to collaborate on further development</li></ul><p>Please contact me, for example by making a [GitHub issue(https://github.com/ottopaulsen/node-red-contrib-power-saver/issues)] explaining what you would like to do.</p><p>The first and most important task now, is to make support for getting grid tariff from all suppliers.</p><h2 id="examples" tabindex="-1"><a class="header-anchor" href="#examples" aria-hidden="true">#</a> Examples</h2>',11),i=(0,r.Uk)("It would be very nice to get more examples into the documentation. If you have made something smart, please describe in a markdown-file and either send me, or preferably make a pull request on "),n={href:"https://github.com/ottopaulsen/node-red-contrib-power-saver/pulls",target:"_blank",rel:"noopener noreferrer"},s=(0,r.Uk)("GitHub"),l=(0,r.Uk)("."),d=(0,r._)("h2",{id:"bug-reports",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#bug-reports","aria-hidden":"true"},"#"),(0,r.Uk)(" Bug reports")],-1),u=(0,r.Uk)("If you find a bug, please describe it thoroughly and make a "),p={href:"https://github.com/ottopaulsen/node-red-contrib-power-saver/issues",target:"_blank",rel:"noopener noreferrer"},h=(0,r.Uk)("GitHub issue"),c=(0,r.Uk)(". If the bug is related to the scheduling, "),b=(0,r._)("strong",null,"please provide the full output from output 3",-1),f=(0,r.Uk)(" on the strategy node."),m=(0,r._)("h2",{id:"ideas",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#ideas","aria-hidden":"true"},"#"),(0,r.Uk)(" Ideas")],-1),g=(0,r.Uk)("If you have ideas for new features, please make a "),k={href:"https://github.com/ottopaulsen/node-red-contrib-power-saver/issues",target:"_blank",rel:"noopener noreferrer"},v=(0,r.Uk)("GitHub issue"),w=(0,r.Uk)(" and describe it as detailed as possible."),y={},_=(0,o(3744).Z)(y,[["render",function(e,t){const o=(0,r.up)("OutboundLink");return(0,r.wg)(),(0,r.iD)(r.HY,null,[a,(0,r._)("p",null,[i,(0,r._)("a",n,[s,(0,r.Wm)(o)]),l]),d,(0,r._)("p",null,[u,(0,r._)("a",p,[h,(0,r.Wm)(o)]),c,b,f]),m,(0,r._)("p",null,[g,(0,r._)("a",k,[v,(0,r.Wm)(o)]),w])],64)}]])},3744:(e,t)=>{t.Z=(e,t)=>{const o=e.__vccOpts||e;for(const[e,r]of t)o[e]=r;return o}}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunknode_red_contrib_power_saver=self.webpackChunknode_red_contrib_power_saver||[]).push([[509],{6464:(e,t,o)=>{o.r(t),o.d(t,{data:()=>r});const r={key:"v-8daa1a0e",path:"/",title:"",lang:"en-US",frontmatter:{home:!0,heroImage:"/logo.png",heroAlt:"Power Saver",heroText:"node-red-contrib-power-saver",tagline:"A collection of nodes to Node-RED that automates saving money on variable electricity prices",actions:[{text:"Guide",link:"/guide",type:"primary"},{text:"Nodes",link:"/nodes/",type:"primary"},{text:"Examples",link:"/examples/",type:"primary"}],features:[{title:"Automatic scheduling",details:"Automatically calculate best plan and send signal to turn on and off."},{title:"Best Save Strategy",details:"Postpone power consumption when there is most to save, perfect for the water heater."},{title:"Lowest Price Strategy",details:"Turn on power when the prices are the lowest, perfect for smart charging or heating."},{title:"Integrate with grid tariff APIs",details:"Elvia grid tariff API already supported. Others are easy to add."},{title:"Perfect with Home Assistant",details:"Use Home Assistant with Node-RED and control switches via service calls."},{title:"Tibber and Nord Pool",details:"Painlessly use prices received from Tibber or Nord Pool."}],footer:'Created by Otto Paulsen<br/><br/><a href="https://www.patreon.com/bePatron?u=65948417" data-patreon-widget-type="become-patron-button">Become a Patron!</a>',footerHtml:!0},excerpt:"",headers:[],filePathRelative:"README.md",git:{updatedTime:1640034618e3,contributors:[{name:"Otto Paulsen",email:"ottpau@gmail.com",commits:2}]}}},7354:(e,t,o)=>{o.r(t),o.d(t,{default:()=>d});var r=o(6252);const a=(0,r.Uk)("This is a collection of nodes for the popular "),i={href:"https://nodered.org/",target:"_blank",rel:"noopener noreferrer"},n=(0,r.Uk)("Node-RED"),s=(0,r.Uk)(" that you can use to save money on variable electricity prices. Node-RED is a widely used low-code programming tool that can be used together with many smart home solutions to create automations."),l={},d=(0,o(3744).Z)(l,[["render",function(e,t){const o=(0,r.up)("OutboundLink");return(0,r.wg)(),(0,r.iD)("p",null,[a,(0,r._)("a",i,[n,(0,r.Wm)(o)]),s])}]])},3744:(e,t)=>{t.Z=(e,t)=>{const o=e.__vccOpts||e;for(const[e,r]of t)o[e]=r;return o}}}]);
|