node-red-contrib-power-saver 3.0.9 → 3.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/docs/.vuepress/config.js +9 -1
  2. package/docs/.vuepress/dist/404.html +3 -3
  3. package/docs/.vuepress/dist/assets/img/add-tariff-flow.eb700d4f.png +0 -0
  4. package/docs/.vuepress/dist/assets/img/best-save-config.93fa3c21.png +0 -0
  5. package/docs/.vuepress/dist/assets/img/lowest-price-config.6d66a8c2.png +0 -0
  6. package/docs/.vuepress/dist/assets/img/next-schedule-entity.4406856a.png +0 -0
  7. package/docs/.vuepress/dist/assets/img/next-schedule-flow.413ad62b.png +0 -0
  8. package/docs/.vuepress/dist/assets/img/next-schedule-sensor.eb896bdd.png +0 -0
  9. package/docs/.vuepress/dist/assets/img/node-ps-general-add-tariff.a3cf6f06.png +0 -0
  10. package/docs/.vuepress/dist/assets/js/app.6090e276.js +1 -0
  11. package/docs/.vuepress/dist/assets/js/runtime~app.c30fcb3d.js +1 -0
  12. package/docs/.vuepress/dist/assets/js/v-0607240a.661e1808.js +1 -0
  13. package/docs/.vuepress/dist/assets/js/v-08683c60.a6b9cf5b.js +1 -0
  14. package/docs/.vuepress/dist/assets/js/v-0aca7ba6.b42fad7f.js +1 -0
  15. package/docs/.vuepress/dist/assets/js/v-0b5e3c8c.34230e16.js +1 -0
  16. package/docs/.vuepress/dist/assets/js/v-1ad821fa.6e2194d0.js +1 -0
  17. package/docs/.vuepress/dist/assets/js/v-1e2b191e.50b8fa18.js +1 -0
  18. package/docs/.vuepress/dist/assets/js/v-30acb564.f2fcd69f.js +1 -0
  19. package/docs/.vuepress/dist/assets/js/v-4637f9e4.38f66bbb.js +1 -0
  20. package/docs/.vuepress/dist/assets/js/v-510ed0d4.f8668033.js +1 -0
  21. package/docs/.vuepress/dist/assets/js/v-5954bcb2.182daf70.js +1 -0
  22. package/docs/.vuepress/dist/assets/js/v-5db8da3a.f2de6cb9.js +1 -0
  23. package/docs/.vuepress/dist/assets/js/v-61f728ca.6fdbbb92.js +1 -0
  24. package/docs/.vuepress/dist/assets/js/v-677dfaed.0013f083.js +1 -0
  25. package/docs/.vuepress/dist/assets/js/v-7446a652.d05e2648.js +1 -0
  26. package/docs/.vuepress/dist/assets/js/v-7c87f26e.1127dcf5.js +1 -0
  27. package/docs/.vuepress/dist/assets/js/v-8daa1a0e.dde202c9.js +1 -0
  28. package/docs/.vuepress/dist/assets/js/v-b4a42144.9e5f9728.js +1 -0
  29. package/docs/.vuepress/dist/assets/js/v-e8c55052.8384b053.js +1 -0
  30. package/docs/.vuepress/dist/assets/js/v-fffb8e28.3406fd88.js +1 -0
  31. package/docs/.vuepress/dist/changelog/index.html +3 -3
  32. package/docs/.vuepress/dist/contribute/index.html +3 -3
  33. package/docs/.vuepress/dist/examples/example-next-schedule-entity.html +25 -0
  34. package/docs/.vuepress/dist/examples/example-nordpool-current-state.html +176 -156
  35. package/docs/.vuepress/dist/examples/example-nordpool-events-state.html +4 -4
  36. package/docs/.vuepress/dist/examples/example-tibber-mqtt.html +4 -4
  37. package/docs/.vuepress/dist/examples/index.html +3 -3
  38. package/docs/.vuepress/dist/faq/index.html +15 -0
  39. package/docs/.vuepress/dist/guide/index.html +4 -4
  40. package/docs/.vuepress/dist/index.html +3 -3
  41. package/docs/.vuepress/dist/logo.png +0 -0
  42. package/docs/.vuepress/dist/nodes/index.html +3 -3
  43. package/docs/.vuepress/dist/nodes/old-power-saver-doc.html +5 -5
  44. package/docs/.vuepress/dist/nodes/power-saver.html +3 -3
  45. package/docs/.vuepress/dist/nodes/ps-elvia-add-tariff.html +3 -3
  46. package/docs/.vuepress/dist/nodes/ps-general-add-tariff.html +15 -0
  47. package/docs/.vuepress/dist/nodes/ps-receive-price.html +6 -6
  48. package/docs/.vuepress/dist/nodes/ps-strategy-best-save.html +4 -4
  49. package/docs/.vuepress/dist/nodes/ps-strategy-lowest-price.html +4 -4
  50. package/docs/.vuepress/dist/nodes/strategy-input.html +4 -4
  51. package/docs/.vuepress/public/logo.png +0 -0
  52. package/docs/README.md +7 -5
  53. package/docs/changelog/README.md +22 -5
  54. package/docs/contribute/README.md +1 -1
  55. package/docs/examples/README.md +4 -0
  56. package/docs/examples/example-next-schedule-entity.md +41 -0
  57. package/docs/faq/README.md +23 -0
  58. package/docs/guide/README.md +16 -15
  59. package/docs/images/add-tariff-flow.png +0 -0
  60. package/docs/images/logo copy.png +0 -0
  61. package/docs/images/logo.png +0 -0
  62. package/docs/images/logo.psd +0 -0
  63. package/docs/images/mysterious-plan.png +0 -0
  64. package/docs/images/next-schedule-entity.png +0 -0
  65. package/docs/images/next-schedule-flow.png +0 -0
  66. package/docs/images/next-schedule-sensor.png +0 -0
  67. package/docs/images/node-ps-general-add-tariff.png +0 -0
  68. package/docs/images/node-red-icon-2.svg +30 -0
  69. package/docs/nodes/README.md +6 -0
  70. package/docs/nodes/old-power-saver-doc.md +6 -6
  71. package/docs/nodes/ps-elvia-add-tariff.md +1 -1
  72. package/docs/nodes/ps-general-add-tariff.md +49 -0
  73. package/docs/nodes/ps-receive-price.md +5 -5
  74. package/docs/nodes/ps-strategy-best-save.md +5 -1
  75. package/docs/nodes/ps-strategy-lowest-price.md +3 -3
  76. package/docs/nodes/strategy-input.md +1 -1
  77. package/package.json +3 -2
  78. package/src/elvia/elvia-add-tariff.js +7 -6
  79. package/src/general-add-tariff-functions.js +46 -0
  80. package/src/general-add-tariff.html +186 -0
  81. package/src/general-add-tariff.js +35 -0
  82. package/src/handle-input.js +6 -2
  83. package/src/power-saver.js +1 -1
  84. package/src/strategy-lowest-price.js +6 -6
  85. package/test/data/nordpool-3-days-prices.json +293 -0
  86. package/test/data/nordpool-3-days-result.json +444 -0
  87. package/test/data/tibber-result-end-0-24h.json +3 -1
  88. package/test/data/tibber-result-end-0.json +3 -1
  89. package/test/elvia.test.js +16 -2
  90. package/test/general-add-tariff-functions.test.js +104 -0
  91. package/test/general-add-tariff.test.js +183 -0
  92. package/test/strategy-lowest-price-3days.test.js +88 -0
  93. package/test/strategy-lowest-price.test.js +5 -0
  94. package/docs/.vuepress/dist/assets/js/app.190d977f.js +0 -1
  95. package/docs/.vuepress/dist/assets/js/runtime~app.36bc5048.js +0 -1
  96. package/docs/.vuepress/dist/assets/js/v-08683c60.07fe8291.js +0 -1
  97. package/docs/.vuepress/dist/assets/js/v-0aca7ba6.aec5ba75.js +0 -1
  98. package/docs/.vuepress/dist/assets/js/v-0b5e3c8c.d008d8bc.js +0 -1
  99. package/docs/.vuepress/dist/assets/js/v-1ad821fa.85407071.js +0 -1
  100. package/docs/.vuepress/dist/assets/js/v-30acb564.73b8e29f.js +0 -1
  101. package/docs/.vuepress/dist/assets/js/v-4637f9e4.22ab9413.js +0 -1
  102. package/docs/.vuepress/dist/assets/js/v-510ed0d4.01d07aab.js +0 -1
  103. package/docs/.vuepress/dist/assets/js/v-5954bcb2.be07962c.js +0 -1
  104. package/docs/.vuepress/dist/assets/js/v-5db8da3a.ac192f35.js +0 -1
  105. package/docs/.vuepress/dist/assets/js/v-61f728ca.802ab15e.js +0 -1
  106. package/docs/.vuepress/dist/assets/js/v-677dfaed.9bbbd037.js +0 -1
  107. package/docs/.vuepress/dist/assets/js/v-7c87f26e.457a1a60.js +0 -1
  108. package/docs/.vuepress/dist/assets/js/v-8daa1a0e.db8b59c6.js +0 -1
  109. package/docs/.vuepress/dist/assets/js/v-b4a42144.6e0c5aa0.js +0 -1
  110. package/docs/.vuepress/dist/assets/js/v-e8c55052.5f85b6cd.js +0 -1
  111. package/docs/.vuepress/dist/assets/js/v-fffb8e28.e815e852.js +0 -1
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunknode_red_contrib_power_saver=self.webpackChunknode_red_contrib_power_saver||[]).push([[625],{8682:(s,n,a)=>{a.r(n),a.d(n,{data:()=>t});const t={key:"v-5db8da3a",path:"/examples/example-tibber-mqtt.html",title:"Tibber, a switch and MQTT",lang:"en-US",frontmatter:{},excerpt:"",headers:[{level:2,title:"Description",slug:"description",children:[]},{level:2,title:"Flow",slug:"flow",children:[]}],filePathRelative:"examples/example-tibber-mqtt.md",git:{updatedTime:1639315027e3}}},3350:(s,n,a)=>{a.r(n),a.d(n,{default:()=>d});var t=a(6252),o=a(3837);const p=(0,t._)("h1",{id:"tibber-a-switch-and-mqtt",tabindex:"-1"},[(0,t._)("a",{class:"header-anchor",href:"#tibber-a-switch-and-mqtt","aria-hidden":"true"},"#"),(0,t.Uk)(" Tibber, a switch and MQTT")],-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),c=(0,t.Uk)("In this example, data is read from Tibber and used to turn on/off a switch, scheduled by the "),k=(0,t._)("code",null,"ps-best-save",-1),r=(0,t.Uk)(" node to be off up to 5 hours in a row, but only if at least 5 cents/øre is saved per kWh. Data is also sent to MQTT, for example to be displayed on "),l={href:"https://magicmirror.builders/",target:"_blank",rel:"noopener noreferrer"},_=(0,t.Uk)("Magic Mirror"),u=(0,t.Uk)("."),i=(0,t._)("p",null,[(0,t._)("img",{src:o,alt:"Example with Tibber and MQTT"})],-1),U=(0,t._)("h2",{id:"flow",tabindex:"-1"},[(0,t._)("a",{class:"header-anchor",href:"#flow","aria-hidden":"true"},"#"),(0,t.Uk)(" Flow")],-1),y=(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"},'"467a5fe.d0bbba"'),(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"},'"mqtt out"'),(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"},'"Send switch to MM"'),(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"},'"powersaver/switch"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"qos"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"0"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"retain"'),(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"},'"broker"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"24fbcfb5.569ea"'),(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"},"730"),(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"},"120"),(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"},'"ab2d599a.077738"'),(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"},'"tibber-query"'),(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"},'"Get Tibber prices"'),(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"},"true"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"apiEndpointRef"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"b70ec5d0.6f8f08"'),(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"},"470"),(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"},"100"),(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._)("span",{class:"token string"},'"0ef929fde193cf4d"'),(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"},'"4f11b5ae.4cc22c"'),(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"},'"Refresh"'),(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.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 string"},'"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"},'"payload"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"{ viewer { homes { currentSubscription{ priceInfo{ today { total startsAt } tomorrow { total startsAt } } } } } }"'),(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"},'"str"'),(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"},"100"),(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._)("span",{class:"token string"},'"ab2d599a.077738"'),(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"},'"42d8b632.402e38"'),(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"},'"mqtt out"'),(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"},'"Send schedule to MM"'),(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"},'"powersaver/plan"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"qos"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"0"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"retain"'),(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"},'"broker"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"24fbcfb5.569ea"'),(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"},"740"),(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"},"240"),(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"},'"5e485ff7.db156"'),(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"},"710"),(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"},"60"),(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._)("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"},'"9c978d1c.ee76"'),(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"},"710"),(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"},"180"),(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._)("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"},'"5b6be1568744c6cf"'),(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"},'"5"'),(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.05"'),(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"},"490"),(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"},"160"),(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._)("span",{class:"token string"},'"467a5fe.d0bbba"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"5e485ff7.db156"'),(0,t._)("span",{class:"token punctuation"},"]"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)(),(0,t._)("span",{class:"token punctuation"},"["),(0,t._)("span",{class:"token string"},'"9c978d1c.ee76"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"467a5fe.d0bbba"'),(0,t._)("span",{class:"token punctuation"},"]"),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)(),(0,t._)("span",{class:"token punctuation"},"["),(0,t._)("span",{class:"token string"},'"42d8b632.402e38"'),(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"},'"0ef929fde193cf4d"'),(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"},"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"},"160"),(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._)("span",{class:"token string"},'"5b6be1568744c6cf"'),(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"},'"24fbcfb5.569ea"'),(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"},'"mqtt-broker"'),(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"},'"MQTT"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"broker"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"10.0.0.15"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"port"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"1883"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"clientid"'),(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"},'"usetls"'),(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"},'"compatmode"'),(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"},'"keepalive"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"60"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"cleansession"'),(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"},'"birthTopic"'),(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"},'"birthQos"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"0"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"birthPayload"'),(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"},'"closeTopic"'),(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"},'"closeQos"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"0"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"closePayload"'),(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"},'"willTopic"'),(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"},'"willQos"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"0"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"willPayload"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'""'),(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"},'"b70ec5d0.6f8f08"'),(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"},'"tibber-api-endpoint"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"feedUrl"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"wss://api.tibber.com/v1-beta/gql/subscriptions"'),(0,t._)("span",{class:"token punctuation"},","),(0,t.Uk)("\n "),(0,t._)("span",{class:"token property"},'"queryUrl"'),(0,t._)("span",{class:"token operator"},":"),(0,t.Uk)(),(0,t._)("span",{class:"token string"},'"https://api.tibber.com/v1-beta/gql"'),(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"},'"Tibber API"'),(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),b={},d=(0,a(3744).Z)(b,[["render",function(s,n){const a=(0,t.up)("OutboundLink");return(0,t.wg)(),(0,t.iD)(t.HY,null,[p,e,(0,t._)("p",null,[c,k,r,(0,t._)("a",l,[_,(0,t.Wm)(a)]),u]),i,U,y],64)}]])},3744:(s,n)=>{n.Z=(s,n)=>{const a=s.__vccOpts||s;for(const[s,t]of n)a[s]=t;return a}},3837:(s,n,a)=>{s.exports=a.p+"assets/img/power-saver-tibber-mqtt.16891dd2.png"}}]);
@@ -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}}},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:()=>r});const r={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}}},546:(e,n,s)=>{s.r(n),s.d(n,{default:()=>de});var r=s(6252),t=s(3301);const a=(0,r._)("h1",{id:"ps-receive-price",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#ps-receive-price","aria-hidden":"true"},"#"),(0,r.Uk)(" ps-receive-price")],-1),l=(0,r._)("p",null,[(0,r._)("img",{src:t,alt:"ps-receive-price"})],-1),o=(0,r._)("h2",{id:"description",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#description","aria-hidden":"true"},"#"),(0,r.Uk)(" Description")],-1),i=(0,r._)("p",null,[(0,r.Uk)("The "),(0,r._)("code",null,"ps-receive-price"),(0,r.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,r._)("ul",null,[(0,r._)("li",null,[(0,r._)("code",null,"tibber-query"),(0,r.Uk)(" node from Tibber ("),(0,r._)("code",null,"node-red-contrib-tibber-api"),(0,r.Uk)(")")]),(0,r._)("li",null,[(0,r._)("code",null,"current state"),(0,r.Uk)(" node in Home Assistant")]),(0,r._)("li",null,[(0,r._)("code",null,"events: state"),(0,r.Uk)(" node in Home Assistant")])],-1),p=(0,r._)("p",null,[(0,r.Uk)("Output can be sent directly to the strategy nodes (for example "),(0,r._)("code",null,"strategy-best-save"),(0,r.Uk)(" or "),(0,r._)("code",null,"strategy-lowest-price"),(0,r.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,r._)("div",{class:"custom-container warning"},[(0,r._)("p",{class:"custom-container-title"},"Note"),(0,r._)("p",null,[(0,r.Uk)("In version 2 of "),(0,r._)("code",null,"node-red-contrib-power-saver"),(0,r.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,r._)("h2",{id:"configuration",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#configuration","aria-hidden":"true"},"#"),(0,r.Uk)(" Configuration")],-1),b=(0,r._)("p",null,"There is no configuration except from node name.",-1),d=(0,r._)("h2",{id:"input",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#input","aria-hidden":"true"},"#"),(0,r.Uk)(" Input")],-1),h=(0,r._)("h3",{id:"tibber-input",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#tibber-input","aria-hidden":"true"},"#"),(0,r.Uk)(" Tibber input")],-1),m=(0,r.Uk)("If you are a Tibber customer, you can use the "),k=(0,r._)("code",null,"tibber-query",-1),g=(0,r.Uk)(" node from the "),f={href:"https://flows.nodered.org/node/node-red-contrib-tibber-api",target:"_blank",rel:"noopener noreferrer"},U=(0,r._)("code",null,"node-red-contrib-tibber-api",-1),y=(0,r.Uk)(". Set it up with the following query:"),v=(0,r._)("div",{class:"language-gql ext-gql line-numbers-mode"},[(0,r._)("pre",{class:"language-gql"},[(0,r._)("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,r._)("div",{class:"line-numbers"},[(0,r._)("span",{class:"line-number"},"1"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"2"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"3"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"4"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"5"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"6"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"7"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"8"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"9"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"10"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"11"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"12"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"13"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"14"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"15"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"16"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"17"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"18"),(0,r._)("br")])],-1),w=(0,r._)("p",null,[(0,r.Uk)("Send the result from the "),(0,r._)("code",null,"tibber-query"),(0,r.Uk)(" node with the query above directly to the "),(0,r._)("code",null,"ps-receive-price"),(0,r.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,r.Uk)("See example with Tibber, a switch and MQTT"),T=(0,r._)("div",{class:"custom-container danger"},[(0,r._)("p",{class:"custom-container-title"},"Warning"),(0,r._)("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,r._)("p",null,[(0,r._)("strong",null,"Tibber query for a specific house")],-1),I=(0,r._)("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,r.Uk)("Go to the "),N={href:"https://developer.tibber.com/",target:"_blank",rel:"noopener noreferrer"},S=(0,r.Uk)("Tibber Developer pages"),W=(0,r.Uk)(", sign in, and go to the "),A={href:"https://developer.tibber.com/explorer",target:"_blank",rel:"noopener noreferrer"},O=(0,r.Uk)("API Explorer"),C=(0,r.Uk)(". Load your personal token, then run the following query:"),D=(0,r._)("div",{class:"language-gql ext-gql line-numbers-mode"},[(0,r._)("pre",{class:"language-gql"},[(0,r._)("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,r._)("div",{class:"line-numbers"},[(0,r._)("span",{class:"line-number"},"1"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"2"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"3"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"4"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"5"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"6"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"7"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"8"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"9"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"10"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"11"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"12"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"13"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"14"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"15"),(0,r._)("br")])],-1),H=(0,r._)("p",null,[(0,r.Uk)("Then copy the "),(0,r._)("code",null,"id"),(0,r.Uk)(" of the house you want to use prices for. It may look like this:")],-1),j=(0,r._)("div",{class:"language-text ext-text line-numbers-mode"},[(0,r._)("pre",{class:"language-text"},[(0,r._)("code",null,"NB! This is just an example:\n142c1670-ab43-2ab3-ba6d-723703a551e2\n")]),(0,r._)("div",{class:"line-numbers"},[(0,r._)("span",{class:"line-number"},"1"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"2"),(0,r._)("br")])],-1),L=(0,r._)("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,r._)("div",{class:"language-gql ext-gql line-numbers-mode"},[(0,r._)("pre",{class:"language-gql"},[(0,r._)("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,r._)("div",{class:"highlight-lines"},[(0,r._)("br"),(0,r._)("br"),(0,r._)("div",{class:"highlight-line"}," "),(0,r._)("br"),(0,r._)("br"),(0,r._)("br"),(0,r._)("br"),(0,r._)("br"),(0,r._)("br"),(0,r._)("br"),(0,r._)("br"),(0,r._)("br"),(0,r._)("br"),(0,r._)("br"),(0,r._)("br"),(0,r._)("br"),(0,r._)("br"),(0,r._)("br")]),(0,r._)("div",{class:"line-numbers"},[(0,r._)("span",{class:"line-number"},"1"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"2"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"3"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"4"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"5"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"6"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"7"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"8"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"9"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"10"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"11"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"12"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"13"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"14"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"15"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"16"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"17"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"18"),(0,r._)("br")])],-1),R=(0,r._)("p",null,[(0,r.Uk)("This is the query you shall put in the "),(0,r._)("code",null,"tibber-query"),(0,r.Uk)(" node.")],-1),Z=(0,r._)("h3",{id:"nord-pool-input",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#nord-pool-input","aria-hidden":"true"},"#"),(0,r.Uk)(" Nord Pool input")],-1),B=(0,r.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,r.Uk)("Nord Pool custom component"),J=(0,r.Uk)(". The Nord Pool component provides a "),Q=(0,r._)("em",null,"sensor",-1),Y=(0,r.Uk)(" that gives price per hour for today and tomorrow (after 13:00). Send the output from this sensor directly to the "),z=(0,r._)("code",null,"ps-receive-price",-1),F=(0,r.Uk)(" node. Make sure this is done whenever the node is updated, as well as when the system starts up."),K=(0,r._)("p",null,[(0,r.Uk)("Data can be sent from both the "),(0,r._)("code",null,"current state"),(0,r.Uk)(" node or the "),(0,r._)("code",null,"events: state"),(0,r.Uk)(" node.")],-1),V=(0,r._)("div",{class:"custom-container tip"},[(0,r._)("p",{class:"custom-container-title"},"Output properties"),(0,r._)("p",null,[(0,r.Uk)("When using the "),(0,r._)("code",null,"current state"),(0,r.Uk)(" node, configure the output properties to set "),(0,r._)("code",null,"msg.payload"),(0,r.Uk)(" to "),(0,r._)("code",null,"entity"),(0,r.Uk)(".")])],-1),X=(0,r.Uk)("See example with Nord Pool and "),$=(0,r._)("code",null,"current state",-1),ee=(0,r.Uk)(" node"),ne=(0,r.Uk)("See example with Nord Pool and "),se=(0,r._)("code",null,"events: state",-1),re=(0,r.Uk)(" node"),te=(0,r._)("h3",{id:"other-input",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#other-input","aria-hidden":"true"},"#"),(0,r.Uk)(" Other input")],-1),ae=(0,r._)("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,r._)("div",{class:"language-json ext-json line-numbers-mode"},[(0,r._)("pre",{class:"language-json"},[(0,r._)("code",null,[(0,r._)("span",{class:"token punctuation"},"{"),(0,r.Uk)("\n "),(0,r._)("span",{class:"token property"},'"today"'),(0,r._)("span",{class:"token operator"},":"),(0,r.Uk)(),(0,r._)("span",{class:"token punctuation"},"["),(0,r.Uk)("\n "),(0,r._)("span",{class:"token punctuation"},"{"),(0,r.Uk)(),(0,r._)("span",{class:"token property"},'"value"'),(0,r._)("span",{class:"token operator"},":"),(0,r.Uk)(),(0,r._)("span",{class:"token number"},"1"),(0,r._)("span",{class:"token punctuation"},","),(0,r.Uk)(),(0,r._)("span",{class:"token property"},'"start"'),(0,r._)("span",{class:"token operator"},":"),(0,r.Uk)(),(0,r._)("span",{class:"token string"},'"2021-06-21T00:00:00+02:00"'),(0,r.Uk)(),(0,r._)("span",{class:"token punctuation"},"}"),(0,r._)("span",{class:"token punctuation"},","),(0,r.Uk)("\n "),(0,r._)("span",{class:"token punctuation"},"{"),(0,r.Uk)(),(0,r._)("span",{class:"token property"},'"value"'),(0,r._)("span",{class:"token operator"},":"),(0,r.Uk)(),(0,r._)("span",{class:"token number"},"2"),(0,r._)("span",{class:"token punctuation"},","),(0,r.Uk)(),(0,r._)("span",{class:"token property"},'"start"'),(0,r._)("span",{class:"token operator"},":"),(0,r.Uk)(),(0,r._)("span",{class:"token string"},'"2021-06-21T01:00:00+02:00"'),(0,r.Uk)(),(0,r._)("span",{class:"token punctuation"},"}"),(0,r.Uk)("\n "),(0,r._)("span",{class:"token comment"},"//..."),(0,r.Uk)("\n "),(0,r._)("span",{class:"token punctuation"},"]"),(0,r._)("span",{class:"token punctuation"},","),(0,r.Uk)("\n "),(0,r._)("span",{class:"token property"},'"tomorrow"'),(0,r._)("span",{class:"token operator"},":"),(0,r.Uk)(),(0,r._)("span",{class:"token punctuation"},"["),(0,r.Uk)("\n "),(0,r._)("span",{class:"token punctuation"},"{"),(0,r.Uk)(),(0,r._)("span",{class:"token property"},'"value"'),(0,r._)("span",{class:"token operator"},":"),(0,r.Uk)(),(0,r._)("span",{class:"token number"},"3"),(0,r._)("span",{class:"token punctuation"},","),(0,r.Uk)(),(0,r._)("span",{class:"token property"},'"start"'),(0,r._)("span",{class:"token operator"},":"),(0,r.Uk)(),(0,r._)("span",{class:"token string"},'"2021-06-22T00:00:00+02:00"'),(0,r.Uk)(),(0,r._)("span",{class:"token punctuation"},"}"),(0,r._)("span",{class:"token punctuation"},","),(0,r.Uk)("\n "),(0,r._)("span",{class:"token punctuation"},"{"),(0,r.Uk)(),(0,r._)("span",{class:"token property"},'"value"'),(0,r._)("span",{class:"token operator"},":"),(0,r.Uk)(),(0,r._)("span",{class:"token number"},"4"),(0,r._)("span",{class:"token punctuation"},","),(0,r.Uk)(),(0,r._)("span",{class:"token property"},'"start"'),(0,r._)("span",{class:"token operator"},":"),(0,r.Uk)(),(0,r._)("span",{class:"token string"},'"2021-06-22T01:00:00+02:00"'),(0,r.Uk)(),(0,r._)("span",{class:"token punctuation"},"}"),(0,r.Uk)("\n "),(0,r._)("span",{class:"token comment"},"//..."),(0,r.Uk)("\n "),(0,r._)("span",{class:"token punctuation"},"]"),(0,r.Uk)("\n"),(0,r._)("span",{class:"token punctuation"},"}"),(0,r.Uk)("\n")])]),(0,r._)("div",{class:"line-numbers"},[(0,r._)("span",{class:"line-number"},"1"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"2"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"3"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"4"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"5"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"6"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"7"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"8"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"9"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"10"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"11"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"12"),(0,r._)("br")])],-1),oe=(0,r._)("h2",{id:"output",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#output","aria-hidden":"true"},"#"),(0,r.Uk)(" Output")],-1),ie=(0,r.Uk)("The output is the "),ue=(0,r.Uk)("common strategy input format"),pe=(0,r.Uk)(", so it can be sent directly to the strategy nodes, or via any "),ce=(0,r._)("code",null,"ps-xxx-add-tariff",-1),_e=(0,r.Uk)(" node."),be={},de=(0,s(3744).Z)(be,[["render",function(e,n){const s=(0,r.up)("OutboundLink"),t=(0,r.up)("RouterLink");return(0,r.wg)(),(0,r.iD)(r.HY,null,[a,l,o,i,u,p,c,_,b,d,h,(0,r._)("p",null,[m,k,g,(0,r._)("a",f,[U,(0,r.Wm)(s)]),y]),v,w,(0,r._)("p",null,[(0,r.Wm)(t,{to:"/examples/example-tibber-mqtt.html"},{default:(0,r.w5)((()=>[x])),_:1})]),T,q,I,(0,r._)("p",null,[P,(0,r._)("a",N,[S,(0,r.Wm)(s)]),W,(0,r._)("a",A,[O,(0,r.Wm)(s)]),C]),D,H,j,L,M,R,Z,(0,r._)("p",null,[B,(0,r._)("a",E,[G,(0,r.Wm)(s)]),J,Q,Y,z,F]),K,V,(0,r._)("p",null,[(0,r.Wm)(t,{to:"/examples/example-nordpool-current-state.html"},{default:(0,r.w5)((()=>[X,$,ee])),_:1})]),(0,r._)("p",null,[(0,r.Wm)(t,{to:"/examples/example-nordpool-events-state.html"},{default:(0,r.w5)((()=>[ne,se,re])),_:1})]),te,ae,le,oe,(0,r._)("p",null,[ie,(0,r.Wm)(t,{to:"/nodes/strategy-input.html"},{default:(0,r.w5)((()=>[ue])),_:1}),pe,ce,_e])],64)}]])},3744:(e,n)=>{n.Z=(e,n)=>{const s=e.__vccOpts||e;for(const[e,r]of n)s[e]=r;return s}},3301:(e,n,s)=>{e.exports=s.p+"assets/img/node-ps-receive-price.76eaa418.png"}}]);
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunknode_red_contrib_power_saver=self.webpackChunknode_red_contrib_power_saver||[]).push([[969],{4129:(e,A,t)=>{t.r(A),t.d(A,{data:()=>s});const s={key:"v-7446a652",path:"/faq/",title:"FAQ",lang:"en-US",frontmatter:{},excerpt:"",headers:[{level:2,title:"Why does the Best Save node not turn off the most expensive hours?",slug:"why-does-the-best-save-node-not-turn-off-the-most-expensive-hours",children:[]}],filePathRelative:"faq/README.md",git:{updatedTime:1641408133e3}}},3580:(e,A,t)=>{t.r(A),t.d(A,{default:()=>f});var s=t(6252),h=t(2041);const o=(0,s._)("h1",{id:"faq",tabindex:"-1"},[(0,s._)("a",{class:"header-anchor",href:"#faq","aria-hidden":"true"},"#"),(0,s.Uk)(" FAQ")],-1),n=(0,s._)("h2",{id:"why-does-the-best-save-node-not-turn-off-the-most-expensive-hours",tabindex:"-1"},[(0,s._)("a",{class:"header-anchor",href:"#why-does-the-best-save-node-not-turn-off-the-most-expensive-hours","aria-hidden":"true"},"#"),(0,s.Uk)(" Why does the Best Save node not turn off the most expensive hours?")],-1),I=(0,s._)("p",null,"Here is an example:",-1),a=(0,s._)("p",null,[(0,s._)("img",{src:h,alt:"Mysterious saving"})],-1),i=(0,s._)("p",null,"The purple strokes shows the savings. The Best Save node is configured to save up to 5 hours in a sequence, and only when saving is more than 0.05 NOK.",-1),r=(0,s._)("p",null,"Why does it not save the most expensive period?",-1),C=(0,s._)("p",null,"If you move the saving-period 4-5 hours earlier, the most expensive hours would have been saved. Why is this not better?",-1),Q=(0,s._)("p",null,"Remember that the power that is not used during the saving-period, will be used immediately after. At least, that is the idea, and the normal behaviour if the power consumer is a water heater or another heater controlled by a thermostat. So, then the power would be used one of the blue hours in stead of the green cheaper hour.",-1),d=(0,s._)("p",null,"Also remember that when saving, you do not save the full price. You only save what is the difference between the price during the saved hours and the price the hour immediately after.",-1),g=(0,s._)("p",null,"So the best saving is found where this difference is the largest, and that is not always by turning off the most expensive hours. In the case above, the difference is largest when you turn off the hours marked wit a purple stroke, so this is the best saving you can get.",-1),l=(0,s._)("p",null,"Of course, if you expand the saving period from 5 to 10 hours you would save even more, but that would be a different case, and you can do that if it is ok for you to turn off for that long time.",-1),u=(0,s._)("p",null,"Another alternative is to reduce the minimum saving from 0.05 to 0.001. Then the 3 first red hours would be turned off, but the last red would have to be on, in order to get one hour on until the next 5-hour period off. This would however not save you for much money, since the hour that is on is almost as expensive as the hours you would turn off.",-1),k={},f=(0,t(3744).Z)(k,[["render",function(e,A){return(0,s.wg)(),(0,s.iD)(s.HY,null,[o,n,I,a,i,r,C,Q,d,g,l,u],64)}]])},3744:(e,A)=>{A.Z=(e,A)=>{const t=e.__vccOpts||e;for(const[e,s]of A)t[e]=s;return t}},2041:e=>{e.exports="data:image/png;base64,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"}}]);
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunknode_red_contrib_power_saver=self.webpackChunknode_red_contrib_power_saver||[]).push([[889],{9459:(e,t,r)=>{r.r(t),r.d(t,{data:()=>o});const o={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}}},9704:(e,t,r)=>{r.r(t),r.d(t,{default:()=>_});var o=r(6252);const a=(0,o.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,o.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,o.Uk)("GitHub"),l=(0,o.Uk)("."),d=(0,o._)("h2",{id:"bug-reports",tabindex:"-1"},[(0,o._)("a",{class:"header-anchor",href:"#bug-reports","aria-hidden":"true"},"#"),(0,o.Uk)(" Bug reports")],-1),u=(0,o.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,o.Uk)("GitHub issue"),c=(0,o.Uk)(". If the bug is related to the scheduling, "),b=(0,o._)("strong",null,"please provide the full output from output 3",-1),f=(0,o.Uk)(" on the strategy node."),m=(0,o._)("h2",{id:"ideas",tabindex:"-1"},[(0,o._)("a",{class:"header-anchor",href:"#ideas","aria-hidden":"true"},"#"),(0,o.Uk)(" Ideas")],-1),g=(0,o.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,o.Uk)("GitHub issue"),w=(0,o.Uk)(" and describe it as detailed as possible."),y={},_=(0,r(3744).Z)(y,[["render",function(e,t){const r=(0,o.up)("OutboundLink");return(0,o.wg)(),(0,o.iD)(o.HY,null,[a,(0,o._)("p",null,[i,(0,o._)("a",n,[s,(0,o.Wm)(r)]),l]),d,(0,o._)("p",null,[u,(0,o._)("a",p,[h,(0,o.Wm)(r)]),c,b,f]),m,(0,o._)("p",null,[g,(0,o._)("a",k,[v,(0,o.Wm)(r)]),w])],64)}]])},3744:(e,t)=>{t.Z=(e,t)=>{const r=e.__vccOpts||e;for(const[e,o]of t)r[e]=o;return r}}}]);
@@ -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:"Add variable grid tariff",details:"Automatically add values that varies on fixed hours, or use API to get grid tariff from Elvia."},{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:1641408133e3}}},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}}}]);
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunknode_red_contrib_power_saver=self.webpackChunknode_red_contrib_power_saver||[]).push([[407],{7952:(n,e,s)=>{s.r(e),s.d(e,{data:()=>a});const a={key:"v-b4a42144",path:"/nodes/old-power-saver-doc.html",title:"node-red-contrib-power-saver v2 (deprecated)",lang:"en-US",frontmatter:{},excerpt:"",headers:[{level:2,title:"Installation",slug:"installation",children:[]},{level:2,title:"Input",slug:"input",children:[{level:3,title:"Tibber input",slug:"tibber-input",children:[]},{level:3,title:"Nordpool input",slug:"nordpool-input",children:[]},{level:3,title:"Other input",slug:"other-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:"Configuration",slug:"configuration",children:[{level:3,title:"Dynamic config",slug:"dynamic-config",children:[]}]},{level:2,title:"Algorithm",slug:"algorithm",children:[]},{level:2,title:"Integration with MagicMirror",slug:"integration-with-magicmirror",children:[]},{level:2,title:"Change Log",slug:"change-log",children:[]},{level:2,title:"Contribute",slug:"contribute",children:[]}],filePathRelative:"nodes/old-power-saver-doc.md",git:{updatedTime:1640034618e3}}},2047:(n,e,s)=>{s.r(e),s.d(e,{default:()=>tn});var a=s(6252);const t=(0,a.uE)('<h1 id="node-red-contrib-power-saver-v2-deprecated" tabindex="-1"><a class="header-anchor" href="#node-red-contrib-power-saver-v2-deprecated" aria-hidden="true">#</a> node-red-contrib-power-saver v2 (deprecated)</h1><p>A Node-RED node to save money when power prices are changing. Saving is done by postponing power consumption until the price is lower.</p><p>You can configure maximum number of hours to save in a sequence, and minimum time to recover after a maximum saving period.</p><p><img src="https://github.com/ottopaulsen/node-red-contrib-power-saver/blob/main/doc/node-red-contrib-power-saver-flow.png?raw=true" alt="Normal flow"></p><p>You can use it to control for example a heater, a water heater or any other power consumer that is acceptable to turn off now and then.</p><p>The node takes power prices per hour as input, and sends output to turn a switch on or off based on the power price. It also outputs the schedule that is planned, as well as how much you save per kWh for each of the hours that are turned off, assuming that the same power is used as soon as the power is turned on.</p><p>Power prices may be received from Tibber, Nord Pool or any other source that gives price per hour for today and optionally tomorrow. It is primarily made to be used together with Home Assistant (HA), but there is no dependency to HA, so it can just as well be used by itself.</p><p>The node can also be used in combination with MagicMirror with the MMM-MQTT and MMM-Tibber modules, in order to get the savings displayed on the MM screen in the MMM-Tibber module.</p><p><strong>NB! WIP</strong></p><p>This node is currently rather new, and has been tried for a few weeks, enough to come in a version two with improved savings plan.</p>',10),o=(0,a.Uk)("Feel free to try it, and report back problems or ideas as "),r={href:"https://github.com/ottopaulsen/node-red-contrib-power-saver/issues",target:"_blank",rel:"noopener noreferrer"},p=(0,a.Uk)("Github issues"),l=(0,a.Uk)("."),i=(0,a.uE)('<h2 id="installation" tabindex="-1"><a class="header-anchor" href="#installation" aria-hidden="true">#</a> Installation</h2><p>Install in Node-RED via the Manage Palette menu.</p><p>May also be installed via npm:</p><p><code>npm install node-red-contrib-power-saver</code></p><p>Make sure that you upgrade now and then to get the latest version. See <a href="CHANGELOG">changelog</a> for changes.</p><h2 id="input" tabindex="-1"><a class="header-anchor" href="#input" aria-hidden="true">#</a> Input</h2><p>3 different types of input are accepted:</p><ul><li>Tibber</li><li>Nordpool</li><li>Other sources in a specific JSON format</li></ul><p>Choose the one that fits you best. Of course, all inputs are JSON, but the Tibber and Nord Pool alternatives are designed to connect directly to those sources with a minimum effort.</p><p>From version 2.1.0, you can also send a config object as input for dynamically changing the node config.</p><h3 id="tibber-input" tabindex="-1"><a class="header-anchor" href="#tibber-input" aria-hidden="true">#</a> Tibber input</h3>',11),u=(0,a.Uk)("If you are a Tibber customer, you can use the "),c=(0,a._)("code",null,"tibber-query",-1),h=(0,a.Uk)(" node from the "),d={href:"https://flows.nodered.org/node/node-red-contrib-tibber-api",target:"_blank",rel:"noopener noreferrer"},b=(0,a._)("code",null,"node-red-contrib-tibber-api",-1),m=(0,a.Uk)(" node"),k=(0,a.Uk)(". Set it up with the following query:"),g=(0,a.uE)('<div class="language-gql ext-gql line-numbers-mode"><pre class="language-gql"><code>{\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</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></div></div><p>Send the result from the <code>tibber-query</code> node with the query above directly to the <code>power-saver</code> 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.</p>',2),f=(0,a.Uk)("See example with Tibber, a switch and MQTT"),y=(0,a._)("h3",{id:"nordpool-input",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#nordpool-input","aria-hidden":"true"},"#"),(0,a.Uk)(" Nordpool input")],-1),w=(0,a.Uk)("This is especially designed to work for Home Assistant (HA), and the "),q={href:"https://github.com/custom-components/nordpool",target:"_blank",rel:"noopener noreferrer"},v=(0,a.Uk)("Nord Pool custom component"),_=(0,a.Uk)(". The Nord Pool component provides a "),M=(0,a._)("em",null,"sensor",-1),T=(0,a.Uk)(" that gives price per hour for today and tomorrow (after 13:00). Send the output from this sensor directly to the "),x=(0,a._)("code",null,"power-saver",-1),U=(0,a.Uk)(" node. Make sure this is done whenever the node is updated, as well as when the system starts up."),S=(0,a._)("p",null,[(0,a.Uk)("Data can be sent from both the "),(0,a._)("code",null,"current state"),(0,a.Uk)(" node or the "),(0,a._)("code",null,"events: state"),(0,a.Uk)(" node.")],-1),O=(0,a.Uk)("See example with Nord Pool and "),I=(0,a._)("code",null,"current state",-1),N=(0,a.Uk)(" node"),W=(0,a.Uk)("See example with Nord Pool and "),A=(0,a._)("code",null,"events: state",-1),C=(0,a.Uk)(" node"),j=(0,a.uE)('<h3 id="other-input" tabindex="-1"><a class="header-anchor" href="#other-input" aria-hidden="true">#</a> Other input</h3><p>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:</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">&quot;today&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>\n <span class="token punctuation">{</span> <span class="token property">&quot;value&quot;</span><span class="token operator">:</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token property">&quot;start&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2021-06-21T00:00:00+02:00&quot;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>\n <span class="token punctuation">{</span> <span class="token property">&quot;value&quot;</span><span class="token operator">:</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token property">&quot;start&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2021-06-21T01:00:00+02:00&quot;</span> <span class="token punctuation">}</span>\n <span class="token comment">//...</span>\n <span class="token punctuation">]</span><span class="token punctuation">,</span>\n <span class="token property">&quot;tomorrow&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>\n <span class="token punctuation">{</span> <span class="token property">&quot;value&quot;</span><span class="token operator">:</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token property">&quot;start&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2021-06-22T00:00:00+02:00&quot;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>\n <span class="token punctuation">{</span> <span class="token property">&quot;value&quot;</span><span class="token operator">:</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token property">&quot;start&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2021-06-22T01:00:00+02:00&quot;</span> <span class="token punctuation">}</span>\n <span class="token comment">//...</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></div></div><h2 id="output" tabindex="-1"><a class="header-anchor" href="#output" aria-hidden="true">#</a> Output</h2><h3 id="output-1" tabindex="-1"><a class="header-anchor" href="#output-1" aria-hidden="true">#</a> Output 1</h3><p>A payload with the word <code>true</code> is sent to output 1 whenever the power / switch shall be turned on.</p><h3 id="output-2" tabindex="-1"><a class="header-anchor" href="#output-2" aria-hidden="true">#</a> Output 2</h3><p>A payload with the word <code>false</code> is sent to output 2 whenever the power / switch shall be turned off.</p><h3 id="output-3" tabindex="-1"><a class="header-anchor" href="#output-3" aria-hidden="true">#</a> Output 3</h3><p>When a valid input is received, and the schedule is recalculated, the resulting schedule, as well as some other information, is sent to output 3. You can use this to see the plan and verify that it meets your expectations. You can also use it to display the schedule in any way you like.</p><p>Example of output:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token punctuation">{</span>\n <span class="token property">&quot;schedule&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>\n <span class="token punctuation">{</span>\n <span class="token property">&quot;time&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2021-09-30T00:00:00.000+02:00&quot;</span><span class="token punctuation">,</span>\n <span class="token property">&quot;value&quot;</span><span class="token operator">:</span> <span class="token boolean">false</span>\n <span class="token punctuation">}</span><span class="token punctuation">,</span>\n <span class="token punctuation">{</span>\n <span class="token property">&quot;time&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2021-09-30T01:00:00.000+02:00&quot;</span><span class="token punctuation">,</span>\n <span class="token property">&quot;value&quot;</span><span class="token operator">:</span> <span class="token boolean">true</span>\n <span class="token punctuation">}</span>\n <span class="token comment">//...</span>\n <span class="token punctuation">]</span><span class="token punctuation">,</span>\n <span class="token property">&quot;hours&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>\n <span class="token punctuation">{</span>\n <span class="token property">&quot;price&quot;</span><span class="token operator">:</span> <span class="token number">1.2584</span><span class="token punctuation">,</span>\n <span class="token property">&quot;onOff&quot;</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>\n <span class="token property">&quot;start&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2021-09-30T00:00:00.000+02:00&quot;</span><span class="token punctuation">,</span>\n <span class="token property">&quot;saving&quot;</span><span class="token operator">:</span> <span class="token number">0.2034</span>\n <span class="token punctuation">}</span><span class="token punctuation">,</span>\n <span class="token punctuation">{</span>\n <span class="token property">&quot;price&quot;</span><span class="token operator">:</span> <span class="token number">1.055</span><span class="token punctuation">,</span>\n <span class="token property">&quot;onOff&quot;</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>\n <span class="token property">&quot;start&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2021-09-30T01:00:00.000+02:00&quot;</span><span class="token punctuation">,</span>\n <span class="token property">&quot;saving&quot;</span><span class="token operator">:</span> <span class="token null keyword">null</span>\n <span class="token punctuation">}</span><span class="token punctuation">,</span>\n <span class="token punctuation">{</span>\n <span class="token property">&quot;price&quot;</span><span class="token operator">:</span> <span class="token number">1.2054</span><span class="token punctuation">,</span>\n <span class="token property">&quot;onOff&quot;</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>\n <span class="token property">&quot;start&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2021-09-30T02:00:00.000+02:00&quot;</span><span class="token punctuation">,</span>\n <span class="token property">&quot;saving&quot;</span><span class="token operator">:</span> <span class="token null keyword">null</span>\n <span class="token punctuation">}</span>\n <span class="token comment">//...</span>\n <span class="token punctuation">]</span><span class="token punctuation">,</span>\n <span class="token property">&quot;source&quot;</span><span class="token operator">:</span> <span class="token string">&quot;Nordpool&quot;</span><span class="token punctuation">,</span>\n <span class="token property">&quot;config&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>\n <span class="token property">&quot;maxHoursToSaveInSequence&quot;</span><span class="token operator">:</span> <span class="token number">3</span><span class="token punctuation">,</span>\n <span class="token property">&quot;minHoursOnAfterMaxSequenceSaved&quot;</span><span class="token operator">:</span> <span class="token string">&quot;1&quot;</span><span class="token punctuation">,</span>\n <span class="token property">&quot;minSaving&quot;</span><span class="token operator">:</span> <span class="token number">0.001</span><span class="token punctuation">,</span>\n <span class="token property">&quot;sendCurrentValueWhenRescheduling&quot;</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>\n <span class="token property">&quot;outputIfNoSchedule&quot;</span><span class="token operator">:</span> <span class="token boolean">false</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><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br><span class="line-number">38</span><br><span class="line-number">39</span><br><span class="line-number">40</span><br><span class="line-number">41</span><br><span class="line-number">42</span><br></div></div><p>The <code>schedule</code> array shows every time the switch is turned on or off. The <code>hours</code> array shows values per hour containing the price (received as input), whether that hour is on or off, the start time of the hour and the amount per kWh that is saved on hours that are turned off, compared to the next hour that is on.</p><h2 id="configuration" tabindex="-1"><a class="header-anchor" href="#configuration" aria-hidden="true">#</a> Configuration</h2><p>Currently there is only one strategy for saving. This is the <em>mostSaved</em> strategy. 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 of a water heater or another thermostat controlled heater.</p><p>You can configure the following:</p><ul><li>Maximum number of hours to turn off in a sequence.</li><li>Minimum hours to turn on immediately after a period when turned off the maximum number of hours that is allowed to be turned off.</li><li>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?</li><li>Wether to send on/off just after a reschedule is done without waiting until the next scheduled switch.</li><li>What to do if there is no valid schedule any more (turn on or off).</li></ul><h3 id="dynamic-config" tabindex="-1"><a class="header-anchor" href="#dynamic-config" aria-hidden="true">#</a> Dynamic config</h3><p>It is possible to change config dynamically by sending a config message to the node. The config messages has a payload with a config object like this example:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token property">&quot;payload&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>\n <span class="token property">&quot;config&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>\n <span class="token property">&quot;maxHoursToSaveInSequence&quot;</span><span class="token operator">:</span> <span class="token number">4</span><span class="token punctuation">,</span>\n <span class="token property">&quot;minHoursOnAfterMaxSequenceSaved&quot;</span><span class="token operator">:</span> <span class="token number">2</span><span class="token punctuation">,</span>\n <span class="token property">&quot;minSaving&quot;</span><span class="token operator">:</span> <span class="token number">0.02</span><span class="token punctuation">,</span>\n <span class="token property">&quot;sendCurrentValueWhenRescheduling&quot;</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>\n <span class="token property">&quot;outputIfNoSchedule&quot;</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>\n <span class="token property">&quot;scheduleOnlyFromCurrentTime&quot;</span><span class="token operator">:</span> <span class="token boolean">false</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></div></div><p>All the variables in the config object are optional. You can send only those you want to change.</p><p>The config sent like this will be valid until a new config is sent the same way, or until the flow is restarted. On a restart, the original config set up in the node will be used.</p><p>When a config is sent like this, the schedule will be replanned based on the last previously received price data. If no price data has been received, no scheduling is done.</p><h2 id="algorithm" tabindex="-1"><a class="header-anchor" href="#algorithm" aria-hidden="true">#</a> Algorithm</h2><p>The calculation that decides what hours to turn off works as follows:</p><ol><li>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.</li><li>The matrix is filled with how much you save by turning off hour x for y hours.</li><li>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.</li><li>The remaining sequences are sorted by how much that is saved, in descending order.</li><li>Next, a table with one value per hour is created, with all hours in state &quot;on&quot;.</li><li>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.</li><li>When all sequences are processed, the resulting table shows a pretty good savings plan, that in most cases would be the optimal plan.</li></ol><p>I say &quot;in most cases&quot;, 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.</p><h2 id="integration-with-magicmirror" tabindex="-1"><a class="header-anchor" href="#integration-with-magicmirror" aria-hidden="true">#</a> Integration with MagicMirror</h2>',28),H=(0,a.Uk)("Are you using "),P={href:"https://magicmirror.builders/",target:"_blank",rel:"noopener noreferrer"},E=(0,a.Uk)("MagicMirror"),G=(0,a.Uk)("? Are you also using "),L={href:"https://tibber.com/",target:"_blank",rel:"noopener noreferrer"},R=(0,a.Uk)("Tibber"),Y=(0,a.Uk)("? If so, there is a module for MM called "),D={href:"https://github.com/ottopaulsen/MMM-Tibber",target:"_blank",rel:"noopener noreferrer"},F=(0,a.Uk)("MMM-Tibber"),J=(0,a.Uk)(", that easily can be used to show savings from this node."),Q=(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),V=(0,a._)("p",null,"The purple lines show savings per kWh.",-1),Z=(0,a.Uk)("Read more about this in the "),B={href:"https://github.com/ottopaulsen/MMM-Tibber#show-savings",target:"_blank",rel:"noopener noreferrer"},z=(0,a.Uk)("MMM-Tibber documentation"),K=(0,a.Uk)("."),X=(0,a._)("h2",{id:"change-log",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#change-log","aria-hidden":"true"},"#"),(0,a.Uk)(" Change Log")],-1),$=(0,a.Uk)("See "),nn=(0,a.Uk)("CHANGELOG.md"),en=(0,a._)("h2",{id:"contribute",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#contribute","aria-hidden":"true"},"#"),(0,a.Uk)(" Contribute")],-1),sn=(0,a._)("p",null,"Contributions are welcome. Please start by creating a Github Issue with suggested changes, and state what you would like to do.",-1),an={},tn=(0,s(3744).Z)(an,[["render",function(n,e){const s=(0,a.up)("OutboundLink"),an=(0,a.up)("RouterLink");return(0,a.wg)(),(0,a.iD)(a.HY,null,[t,(0,a._)("p",null,[o,(0,a._)("a",r,[p,(0,a.Wm)(s)]),l]),i,(0,a._)("p",null,[u,c,h,(0,a._)("a",d,[b,m,(0,a.Wm)(s)]),k]),g,(0,a._)("p",null,[(0,a.Wm)(an,{to:"/nodes/doc/example-tibber-mqtt.html"},{default:(0,a.w5)((()=>[f])),_:1})]),y,(0,a._)("p",null,[w,(0,a._)("a",q,[v,(0,a.Wm)(s)]),_,M,T,x,U]),S,(0,a._)("p",null,[(0,a.Wm)(an,{to:"/nodes/doc/example-nordpool-current-state.html"},{default:(0,a.w5)((()=>[O,I,N])),_:1})]),(0,a._)("p",null,[(0,a.Wm)(an,{to:"/nodes/doc/example-nordpool-events-state.html"},{default:(0,a.w5)((()=>[W,A,C])),_:1})]),j,(0,a._)("p",null,[H,(0,a._)("a",P,[E,(0,a.Wm)(s)]),G,(0,a._)("a",L,[R,(0,a.Wm)(s)]),Y,(0,a._)("a",D,[F,(0,a.Wm)(s)]),J]),Q,V,(0,a._)("p",null,[Z,(0,a._)("a",B,[z,(0,a.Wm)(s)]),K]),X,(0,a._)("p",null,[$,(0,a.Wm)(an,{to:"/nodes/CHANGELOG.html"},{default:(0,a.w5)((()=>[nn])),_:1})]),en,sn],64)}]])},3744:(n,e)=>{e.Z=(n,e)=>{const s=n.__vccOpts||n;for(const[n,a]of e)s[n]=a;return s}}}]);
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunknode_red_contrib_power_saver=self.webpackChunknode_red_contrib_power_saver||[]).push([[651],{3029:(e,a,t)=>{t.r(a),t.d(a,{data:()=>r});const r={key:"v-e8c55052",path:"/nodes/",title:"Nodes",lang:"en-US",frontmatter:{},excerpt:"",headers:[{level:2,title:"Power Saver",slug:"power-saver",children:[]},{level:2,title:"Strategy nodes",slug:"strategy-nodes",children:[{level:3,title:"ps-strategy-best-save",slug:"ps-strategy-best-save",children:[]},{level:3,title:"ps-strategy-lowest-price",slug:"ps-strategy-lowest-price",children:[]}]},{level:2,title:"Utility nodes",slug:"utility-nodes",children:[{level:3,title:"ps-receive-price",slug:"ps-receive-price",children:[]}]},{level:2,title:"Grid tariff nodes",slug:"grid-tariff-nodes",children:[{level:3,title:"ps-general-add-tariff",slug:"ps-general-add-tariff",children:[]},{level:3,title:"ps-elvia-add-tariff",slug:"ps-elvia-add-tariff",children:[]}]},{level:2,title:"Other nodes",slug:"other-nodes",children:[{level:3,title:"ps-elvia-tariff-types",slug:"ps-elvia-tariff-types",children:[]},{level:3,title:"ps-elvia-tariff",slug:"ps-elvia-tariff",children:[]}]}],filePathRelative:"nodes/README.md",git:{updatedTime:1641408133e3}}},1173:(e,a,t)=>{t.r(a),t.d(a,{default:()=>z});var r=t(6252),s=t(7656),i=t(7188),d=t(6110),l=t(3301),n=t(4693),o=t(5824);const p=(0,r._)("h1",{id:"nodes",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#nodes","aria-hidden":"true"},"#"),(0,r.Uk)(" Nodes")],-1),h=(0,r._)("p",null,"Here is an overview of the nodes, and links to detailed descriptions for eah of them.",-1),f={id:"power-saver",tabindex:"-1"},c=(0,r._)("a",{class:"header-anchor",href:"#power-saver","aria-hidden":"true"},"#",-1),g=(0,r.Uk)(),v=(0,r._)("a",{href:"./power-saver"},"Power Saver",-1),u=(0,r.Uk)(),_=(0,r._)("p",null,[(0,r._)("img",{src:s,alt:"Power Saver node"})],-1),y=(0,r._)("p",null,"The old node from version 2 is still working, but should be replaced.",-1),b=(0,r._)("h2",{id:"strategy-nodes",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#strategy-nodes","aria-hidden":"true"},"#"),(0,r.Uk)(" Strategy nodes")],-1),w=(0,r._)("p",null,"These are the nodes used to calculate and control saving.",-1),m=(0,r._)("h3",{id:"ps-strategy-best-save",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#ps-strategy-best-save","aria-hidden":"true"},"#"),(0,r.Uk)(),(0,r._)("a",{href:"./ps-strategy-best-save"},"ps-strategy-best-save")],-1),x=(0,r._)("p",null,[(0,r._)("img",{src:i,alt:"ps-strategy-best-save"})],-1),k=(0,r._)("p",null,"Strategy to find the best hours to turn off for most saving.",-1),U=(0,r._)("h3",{id:"ps-strategy-lowest-price",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#ps-strategy-lowest-price","aria-hidden":"true"},"#"),(0,r.Uk)(),(0,r._)("a",{href:"./ps-strategy-lowest-price"},"ps-strategy-lowest-price")],-1),S=(0,r._)("p",null,[(0,r._)("img",{src:d,alt:"ps-strategy-lowest-price"})],-1),P=(0,r._)("p",null,"Strategy to find the x hours with lowest price in a given period each day.",-1),E=(0,r._)("h2",{id:"utility-nodes",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#utility-nodes","aria-hidden":"true"},"#"),(0,r.Uk)(" Utility nodes")],-1),N=(0,r._)("h3",{id:"ps-receive-price",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#ps-receive-price","aria-hidden":"true"},"#"),(0,r.Uk)(),(0,r._)("a",{href:"./ps-receive-price"},"ps-receive-price")],-1),T=(0,r._)("p",null,[(0,r._)("img",{src:l,alt:"ps-receive-price"})],-1),A=(0,r._)("p",null,"Node to convert different types of input data to the format used by the strategy nodes.",-1),O=(0,r._)("h2",{id:"grid-tariff-nodes",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#grid-tariff-nodes","aria-hidden":"true"},"#"),(0,r.Uk)(" Grid tariff nodes")],-1),C=(0,r._)("h3",{id:"ps-general-add-tariff",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#ps-general-add-tariff","aria-hidden":"true"},"#"),(0,r.Uk)(),(0,r._)("a",{href:"./ps-general-add-tariff"},"ps-general-add-tariff")],-1),D=(0,r._)("p",null,[(0,r._)("img",{src:n,alt:"ps-general-add-tariff"})],-1),G=(0,r._)("p",null,"Node to add a variable grid tariff (or any value) to the prices before sending them to the strategy nodes.",-1),H=(0,r._)("h3",{id:"ps-elvia-add-tariff",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#ps-elvia-add-tariff","aria-hidden":"true"},"#"),(0,r.Uk)(),(0,r._)("a",{href:"./ps-elvia-add-tariff"},"ps-elvia-add-tariff")],-1),I=(0,r._)("p",null,[(0,r._)("img",{src:o,alt:"ps-elvia-add-tariff"})],-1),R=(0,r._)("p",null,"Node to add Elvia grid tariff to the prices before sending them to the strategy nodes.",-1),Z=(0,r._)("h2",{id:"other-nodes",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#other-nodes","aria-hidden":"true"},"#"),(0,r.Uk)(" Other nodes")],-1),B=(0,r._)("p",null,"These are a couple of other nodes for using the Elvia API, but these are not important to the Power Saver, so they are not given any further documentation here.",-1),M=(0,r._)("h3",{id:"ps-elvia-tariff-types",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#ps-elvia-tariff-types","aria-hidden":"true"},"#"),(0,r.Uk)(" ps-elvia-tariff-types")],-1),W=(0,r._)("p",null,"Use this to get a list of the tariff types available in the Elvia API.",-1),Y=(0,r._)("h3",{id:"ps-elvia-tariff",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#ps-elvia-tariff","aria-hidden":"true"},"#"),(0,r.Uk)(" ps-elvia-tariff")],-1),j=(0,r._)("p",null,"Use this to get the Elvia grid tariff for a selected tariff type.",-1),q={},z=(0,t(3744).Z)(q,[["render",function(e,a){const t=(0,r.up)("Badge");return(0,r.wg)(),(0,r.iD)(r.HY,null,[p,h,(0,r._)("h2",f,[c,g,v,u,(0,r.Wm)(t,{type:"warning",text:"deprecated",vertical:"middle"})]),_,y,b,w,m,x,k,U,S,P,E,N,T,A,O,C,D,G,H,I,R,Z,B,M,W,Y,j],64)}]])},3744:(e,a)=>{a.Z=(e,a)=>{const t=e.__vccOpts||e;for(const[e,r]of a)t[e]=r;return t}},7656:(e,a,t)=>{e.exports=t.p+"assets/img/node-power-saver.51ff2e5d.png"},5824:(e,a,t)=>{e.exports=t.p+"assets/img/node-ps-elvia-add-tariff.94ea2b09.png"},4693:(e,a,t)=>{e.exports=t.p+"assets/img/node-ps-general-add-tariff.a3cf6f06.png"},3301:(e,a,t)=>{e.exports=t.p+"assets/img/node-ps-receive-price.76eaa418.png"},7188:(e,a,t)=>{e.exports=t.p+"assets/img/node-ps-strategy-best-save.392292d5.png"},6110:(e,a,t)=>{e.exports=t.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([[807],{9570:(e,t,n)=>{n.r(t),n.d(t,{data:()=>r});const r={key:"v-fffb8e28",path:"/guide/",title:"Guide",lang:"en-US",frontmatter:{sidebar:"auto"},excerpt:"",headers:[{level:2,title:"Introduction",slug:"introduction",children:[]},{level:2,title:"Getting started",slug:"getting-started",children:[{level:3,title:"Installation",slug:"installation",children:[]},{level:3,title:"Get price data",slug:"get-price-data",children:[]},{level:3,title:"Add grid tariff",slug:"add-grid-tariff",children:[]},{level:3,title:"Calculate and run schedule",slug:"calculate-and-run-schedule",children:[]},{level:3,title:"Use schedule signals",slug:"use-schedule-signals",children:[]},{level:3,title:"Display schedule",slug:"display-schedule",children:[]},{level:3,title:"More information",slug:"more-information",children:[]}]},{level:2,title:"Migration from v2",slug:"migration-from-v2",children:[]}],filePathRelative:"guide/README.md",git:{updatedTime:1641408133e3}}},2163:(e,t,n)=>{n.r(t),n.d(t,{default:()=>ze});var r=n(6252),l=n(1321),a=n(3405),s=n(1758);const o=(0,r._)("h1",{id:"guide",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#guide","aria-hidden":"true"},"#"),(0,r.Uk)(" Guide")],-1),i=(0,r._)("h2",{id:"introduction",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#introduction","aria-hidden":"true"},"#"),(0,r.Uk)(" Introduction")],-1),d=(0,r.Uk)("This is a collection of nodes for the popular "),u={href:"https://nodered.org/",target:"_blank",rel:"noopener noreferrer"},c=(0,r.Uk)("Node-RED"),h=(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."),p=(0,r._)("p",null,[(0,r.Uk)("The solution can be used to control switches or other entities in a smart home system, and for example turn on when the price is low, and turn off when the price is high. There are different ways to calculate what hours to turn on and off, and these are implemented as "),(0,r._)("strong",null,"strategies nodes"),(0,r.Uk)(". Each strategy node can be configured to fit different purposes.")],-1),_=(0,r._)("p",null,"The strategies need price data to work. These can be received from different sources, for example Tibber, Nord Pool or custom sources.",-1),b=(0,r._)("div",{class:"custom-container warning"},[(0,r._)("p",{class:"custom-container-title"},"Price sources"),(0,r._)("p",null,"Tibber and Nord Pool are only available in the nordics, so if you live outside the nordics, you must find another source of price data, and make your own input.")],-1),m=(0,r._)("p",null,[(0,r.Uk)("Grid tariff is normally not part of the electricity price, so if this varies by the hour, it must be added before sent to the strategy nodes for calculation. This can be done by putting a "),(0,r._)("code",null,"ps-xxx-add-tariff"),(0,r.Uk)(" node between the price receiver and the strategy.")],-1),f=(0,r._)("p",null,'The strategy nodes have 3 outputs. Output 1 is used to "turn on", output 2 is used to "turn off", and on output 3, the calculated schedule and some other information is sent. You can use this to make graphs, or just send it to a debug node to view it.',-1),g=(0,r._)("p",null,"Example:",-1),v=(0,r._)("p",null,[(0,r._)("img",{src:l,alt:"Example flow"})],-1),k=(0,r._)("p",null,[(0,r.Uk)("Here prices are received from Tibber, converted in the "),(0,r._)("code",null,"ps-receive-price"),(0,r.Uk)(" node, then grid tariff for Elvia is added before sent to the "),(0,r._)("code",null,"ps-strategy-best-save"),(0,r.Uk)(" node. Output is sent to Home Assistant via two "),(0,r._)("code",null,"call-service"),(0,r.Uk)(" nodes, and the schedule is sent to a debug node.")],-1),y=(0,r._)("div",{class:"custom-container tip"},[(0,r._)("p",{class:"custom-container-title"},"Home Assistant"),(0,r._)("p",null,"The node collection fits very well with Home Assistant (HA), as Node-RED is frequently used for automations, and there also is an integration with Nord Pool, but there is no direct dependency to HA, so all nodes can be used also without HA.")],-1),w=(0,r._)("h2",{id:"getting-started",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#getting-started","aria-hidden":"true"},"#"),(0,r.Uk)(" Getting started")],-1),U=(0,r._)("h3",{id:"installation",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#installation","aria-hidden":"true"},"#"),(0,r.Uk)(" Installation")],-1),x=(0,r._)("p",null,"Install in Node-RED via the Manage Palette menu.",-1),T=(0,r._)("p",null,"May also be installed via npm:",-1),A=(0,r._)("p",null,[(0,r._)("code",null,"npm install node-red-contrib-power-saver")],-1),S=(0,r._)("p",null,[(0,r.Uk)("Make sure that you upgrade now and then to get the latest version. See "),(0,r._)("a",{href:"CHANGELOG"},"changelog"),(0,r.Uk)(" for changes.")],-1),q=(0,r._)("h3",{id:"get-price-data",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#get-price-data","aria-hidden":"true"},"#"),(0,r.Uk)(" Get price data")],-1),N=(0,r._)("p",null,"This solution is useless without price data. In the nordics, there are at least two very common places to get price data from:",-1),E=(0,r._)("ul",null,[(0,r._)("li",null,"Tibber"),(0,r._)("li",null,"Nord Pool")],-1),P=(0,r._)("p",null,[(0,r.Uk)("The "),(0,r._)("code",null,"ps-receive-price"),(0,r.Uk)(" node is designed to handle price input from both these, and convert it to the format required by the strategy nodes.")],-1),W=(0,r.Uk)("If you are a Tibber customer, use the "),H=(0,r._)("code",null,"tibber-query",-1),I=(0,r.Uk)(" node from the "),M={href:"https://flows.nodered.org/node/node-red-contrib-tibber-api",target:"_blank",rel:"noopener noreferrer"},G=(0,r.Uk)("Tibber API"),C=(0,r.Uk)(" to receive price, with one of the following queries:"),D=(0,r._)("div",{class:"language-gql ext-gql line-numbers-mode"},[(0,r._)("pre",{class:"language-gql"},[(0,r._)("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,r._)("div",{class:"line-numbers"},[(0,r._)("span",{class:"line-number"},"1"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"2"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"3"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"4"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"5"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"6"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"7"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"8"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"9"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"10"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"11"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"12"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"13"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"14"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"15"),(0,r._)("br")])],-1),O=(0,r._)("div",{class:"language-gql ext-gql line-numbers-mode"},[(0,r._)("pre",{class:"language-gql"},[(0,r._)("code",null,'{\n viewer {\n home(id: "142c1670-ab43-2ab3-ba6d-723703a551e2") {\n currentSubscription{\n priceInfo{\n today {\n total\n energy\n tax\n startsAt\n }\n tomorrow {\n total\n energy\n tax\n startsAt\n }\n }\n }\n }\n }\n}\n')]),(0,r._)("div",{class:"highlight-lines"},[(0,r._)("br"),(0,r._)("br"),(0,r._)("div",{class:"highlight-line"}," "),(0,r._)("br"),(0,r._)("br"),(0,r._)("br"),(0,r._)("br"),(0,r._)("br"),(0,r._)("br"),(0,r._)("br"),(0,r._)("br"),(0,r._)("br"),(0,r._)("br"),(0,r._)("br"),(0,r._)("br"),(0,r._)("br"),(0,r._)("br"),(0,r._)("br"),(0,r._)("br"),(0,r._)("br"),(0,r._)("br"),(0,r._)("br")]),(0,r._)("div",{class:"line-numbers"},[(0,r._)("span",{class:"line-number"},"1"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"2"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"3"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"4"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"5"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"6"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"7"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"8"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"9"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"10"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"11"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"12"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"13"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"14"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"15"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"16"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"17"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"18"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"19"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"20"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"21"),(0,r._)("br"),(0,r._)("span",{class:"line-number"},"22"),(0,r._)("br")])],-1),R=(0,r._)("p",null,[(0,r.Uk)("See more details in the "),(0,r._)("a",{href:"../nodes/ps-receive-price#tibber-input"},"documentation"),(0,r.Uk)(" for the "),(0,r._)("code",null,"ps-receive-price"),(0,r.Uk)(" node.")],-1),Y=(0,r.Uk)("Se documentation for "),L={href:"https://flows.nodered.org/node/node-red-contrib-tibber-api",target:"_blank",rel:"noopener noreferrer"},j=(0,r.Uk)("node-red-contrib-tibber-api"),B=(0,r.Uk)(" for details about the Tibber query."),Z=(0,r._)("div",{class:"custom-container tip"},[(0,r._)("p",{class:"custom-container-title"},"Tibber query"),(0,r._)("p",null,[(0,r.Uk)("You can use an "),(0,r._)("code",null,"inject"),(0,r.Uk)(" node (standard Node-RED) to send the Tibber query as a text string int to the "),(0,r._)("code",null,"tibber-query"),(0,r.Uk)(" node. This can be set to repeat the query for example every hour.")])],-1),F=(0,r.Uk)("See example of Tibber flow and mqtt"),z=(0,r.Uk)("If you use Home Assistant (HA), you can install the "),J={href:"https://github.com/custom-components/nordpool",target:"_blank",rel:"noopener noreferrer"},K=(0,r.Uk)("Nord Pool custom component"),Q=(0,r.Uk)(", that provides a "),V=(0,r._)("em",null,"sensor",-1),X=(0,r.Uk)(" that gives price per hour for today and tomorrow. Data can be sent from both the "),$=(0,r._)("code",null,"current state",-1),ee=(0,r.Uk)(" node or the "),te=(0,r._)("code",null,"events: state",-1),ne=(0,r.Uk)(" node."),re=(0,r.Uk)("See example with Nord Pool and "),le=(0,r._)("code",null,"current state",-1),ae=(0,r.Uk)(" node"),se=(0,r.Uk)("See example with Nord Pool and "),oe=(0,r._)("code",null,"events: state",-1),ie=(0,r.Uk)(" node"),de=(0,r._)("h3",{id:"add-grid-tariff",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#add-grid-tariff","aria-hidden":"true"},"#"),(0,r.Uk)(" Add grid tariff")],-1),ue=(0,r._)("p",null,"When also the grid tariff changes per hour, it must be added to the electricity price in order to get the calculations right.",-1),ce=(0,r._)("p",null,[(0,r.Uk)("After the the "),(0,r._)("code",null,"ps-receive-price"),(0,r.Uk)(" node, add a "),(0,r._)("code",null,"ps-xxx-add-tariff"),(0,r.Uk)(" node to add grid tariff. What node to choose depends on what grid you get electricity through. The following grids are supported:")],-1),he=(0,r._)("table",null,[(0,r._)("thead",null,[(0,r._)("tr",null,[(0,r._)("th",null,"Grid supplier"),(0,r._)("th",null,"Node")])]),(0,r._)("tbody",null,[(0,r._)("tr",null,[(0,r._)("td",null,"General (any)"),(0,r._)("td",null,[(0,r._)("code",null,"ps-general-add-tariff")])]),(0,r._)("tr",null,[(0,r._)("td",null,"Elvia"),(0,r._)("td",null,[(0,r._)("code",null,"ps-elvia-add-tariff")])])])],-1),pe=(0,r._)("p",null,"If your grid is not supported, you may code this yourself.",-1),_e=(0,r._)("div",{class:"custom-container tip"},[(0,r._)("p",{class:"custom-container-title"},"Skip this step"),(0,r._)("p",null,"If the grid tariff is the same the whole day, you can skip this step i the flow.")],-1),be=(0,r._)("h3",{id:"calculate-and-run-schedule",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#calculate-and-run-schedule","aria-hidden":"true"},"#"),(0,r.Uk)(" Calculate and run schedule")],-1),me=(0,r._)("p",null,"This is the step where the value is produced. Based on the prices received, the optimal schedule for you is calculated automatically, based on your configuration. You can choose between the following strategies:",-1),fe=(0,r._)("table",null,[(0,r._)("thead",null,[(0,r._)("tr",null,[(0,r._)("th",null,"Strategy"),(0,r._)("th",null,"Node"),(0,r._)("th",null,"Description")])]),(0,r._)("tbody",null,[(0,r._)("tr",null,[(0,r._)("td",null,"Best save"),(0,r._)("td",null,[(0,r._)("code",null,"ps-strategy-best-save")]),(0,r._)("td",null,"Postpone power consumption when there is most to save.")]),(0,r._)("tr",null,[(0,r._)("td",null,"Lowest price"),(0,r._)("td",null,[(0,r._)("code",null,"ps--strategy-lowest-price")]),(0,r._)("td",null,"Turn on power when the prices are the lowest in a given period.")])])],-1),ge=(0,r._)("p",null,"These nodes must be configured for your purpose. See configuration description and other details in the documentation for each node.",-1),ve=(0,r._)("p",null,[(0,r.Uk)("Send the result from the "),(0,r._)("code",null,"ps-xxx-add-tariff"),(0,r.Uk)(" node (or the "),(0,r._)("code",null,"ps-receive-price"),(0,r.Uk)(" node) as input to the strategy node you choose.")],-1),ke=(0,r._)("div",{class:"custom-container tip"},[(0,r._)("p",{class:"custom-container-title"},"Choose strategy"),(0,r._)("p",null,"Choose the best save strategy if you can postpone power consumption, and expect the consumption to occur during the first hour after power is turned on again."),(0,r._)("p",null,"Choose the lowest price strategy if you need the power to be on for x hours, but it is not important when that is. Note that you can select to have all hours on in one consecutive period, or spread around on the cheapest hours.")],-1),ye=(0,r._)("h3",{id:"use-schedule-signals",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#use-schedule-signals","aria-hidden":"true"},"#"),(0,r.Uk)(" Use schedule signals")],-1),we=(0,r._)("p",null,"Use the outputs to control switches, thermostats or other entities to control your power consumers.",-1),Ue=(0,r._)("p",null,[(0,r._)("strong",null,"Output 1"),(0,r.Uk)(" is used to turn on. A payload with value "),(0,r._)("code",null,"true"),(0,r.Uk)(" is sent every time turning on is scheduled.")],-1),xe=(0,r._)("p",null,[(0,r._)("strong",null,"Output 2"),(0,r.Uk)(" is used to turn off. A payload with value "),(0,r._)("code",null,"false"),(0,r.Uk)(" is sent every time turning off is scheduled.")],-1),Te=(0,r._)("p",null,"Example using Home Assistant:",-1),Ae=(0,r._)("p",null,[(0,r._)("img",{src:a,alt:"Example flow"})],-1),Se=(0,r._)("div",{class:"custom-container tip"},[(0,r._)("p",{class:"custom-container-title"},"Use output"),(0,r._)("p",null,"There are many ways you can use the output:"),(0,r._)("ul",null,[(0,r._)("li",null,"Turn on/off a switch"),(0,r._)("li",null,"Set a thermostat up, down or to specific values"),(0,r._)("li",null,"Change setting of a dimmer"),(0,r._)("li",null,"Send a notification")])],-1),qe=(0,r._)("h3",{id:"display-schedule",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#display-schedule","aria-hidden":"true"},"#"),(0,r.Uk)(" Display schedule")],-1),Ne=(0,r._)("p",null,[(0,r._)("strong",null,"Output 3"),(0,r.Uk)(" can be used to print or display the calculated schedule. If you just want to see it, send it to a debug node. You can also use it to display the result as graphs in HA.")],-1),Ee=(0,r._)("p",null,[(0,r.Uk)("For users of Magic Mirror and Tibber, the "),(0,r._)("code",null,"ps-best-save"),(0,r.Uk)(" node can send its schedule to the MMM-Tibber module. See more details in the "),(0,r._)("code",null,"ps-best-save"),(0,r.Uk)(" node documentation.")],-1),Pe=(0,r._)("h3",{id:"more-information",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#more-information","aria-hidden":"true"},"#"),(0,r.Uk)(" More information")],-1),We=(0,r.Uk)("There are more details and more information in the documentation for each "),He={href:"/nodes/",target:"_blank",rel:"noopener noreferrer"},Ie=(0,r.Uk)("node"),Me=(0,r.Uk)(" and in the "),Ge={href:"/examples/",target:"_blank",rel:"noopener noreferrer"},Ce=(0,r.Uk)("examples"),De=(0,r.Uk)("."),Oe=(0,r._)("h2",{id:"migration-from-v2",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#migration-from-v2","aria-hidden":"true"},"#"),(0,r.Uk)(" Migration from v2")],-1),Re=(0,r._)("p",null,[(0,r.Uk)("The "),(0,r._)("code",null,"Power Saver"),(0,r.Uk)(" node from v2 is still here, and it is working exactly as before. However, it will not be further maintained, so you should replace it. You may directly replace the "),(0,r._)("code",null,"Power Saver"),(0,r.Uk)(" node by two of the new nodes:")],-1),Ye=(0,r._)("p",null,[(0,r._)("img",{src:s,alt:"Migrate Power Saver"})],-1),Le=(0,r.Uk)("See more details in the "),je=(0,r.Uk)("documentation for the "),Be=(0,r._)("code",null,"ps-strategy-best-save",-1),Ze=(0,r.Uk)(" node."),Fe={},ze=(0,n(3744).Z)(Fe,[["render",function(e,t){const n=(0,r.up)("OutboundLink"),l=(0,r.up)("CodeGroupItem"),a=(0,r.up)("CodeGroup"),s=(0,r.up)("RouterLink");return(0,r.wg)(),(0,r.iD)(r.HY,null,[o,i,(0,r._)("p",null,[d,(0,r._)("a",u,[c,(0,r.Wm)(n)]),h]),p,_,b,m,f,g,v,k,y,w,U,x,T,A,S,q,N,E,P,(0,r._)("p",null,[W,H,I,(0,r._)("a",M,[G,(0,r.Wm)(n)]),C]),(0,r.Wm)(a,null,{default:(0,r.w5)((()=>[(0,r.Wm)(l,{title:"All homes"},{default:(0,r.w5)((()=>[D])),_:1}),(0,r.Wm)(l,{title:"Single home",active:""},{default:(0,r.w5)((()=>[O])),_:1})])),_:1}),R,(0,r._)("p",null,[Y,(0,r._)("a",L,[j,(0,r.Wm)(n)]),B]),Z,(0,r._)("p",null,[(0,r.Wm)(s,{to:"/examples/example-tibber-mqtt.html"},{default:(0,r.w5)((()=>[F])),_:1})]),(0,r._)("p",null,[z,(0,r._)("a",J,[K,(0,r.Wm)(n)]),Q,V,X,$,ee,te,ne]),(0,r._)("p",null,[(0,r.Wm)(s,{to:"/examples/example-nordpool-current-state.html"},{default:(0,r.w5)((()=>[re,le,ae])),_:1})]),(0,r._)("p",null,[(0,r.Wm)(s,{to:"/examples/example-nordpool-events-state.html"},{default:(0,r.w5)((()=>[se,oe,ie])),_:1})]),de,ue,ce,he,pe,_e,be,me,fe,ge,ve,ke,ye,we,Ue,xe,Te,Ae,Se,qe,Ne,Ee,Pe,(0,r._)("p",null,[We,(0,r._)("a",He,[Ie,(0,r.Wm)(n)]),Me,(0,r._)("a",Ge,[Ce,(0,r.Wm)(n)]),De]),Oe,Re,Ye,(0,r._)("p",null,[Le,(0,r.Wm)(s,{to:"/nodes/ps-strategy-best-save.html"},{default:(0,r.w5)((()=>[je,Be])),_:1}),Ze])],64)}]])},3744:(e,t)=>{t.Z=(e,t)=>{const n=e.__vccOpts||e;for(const[e,r]of t)n[e]=r;return n}},1321:(e,t,n)=>{e.exports=n.p+"assets/img/example-flow-1.3ff3e23f.png"},3405:(e,t,n)=>{e.exports=n.p+"assets/img/example-flow-2.b653b58d.png"},1758:(e,t,n)=>{e.exports=n.p+"assets/img/migrate-best-save.f73420f6.png"}}]);