node-red-contrib-power-saver 3.4.3 → 3.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/docs/.vuepress/components/BestSaveVerificator.vue +17 -7
  2. package/docs/.vuepress/components/DonateButtons.vue +0 -1
  3. package/docs/.vuepress/config.js +15 -28
  4. package/docs/.vuepress/dist/404.html +6 -6
  5. package/docs/.vuepress/dist/assets/404.32f46df8.js +1 -0
  6. package/docs/.vuepress/dist/assets/404.html.bee13de6.js +1 -0
  7. package/docs/.vuepress/dist/assets/404.html.f166316b.js +1 -0
  8. package/docs/.vuepress/dist/assets/BestSaveVerificator.574001b7.js +1 -0
  9. package/docs/.vuepress/dist/assets/DonateButtons.ab660315.js +1 -0
  10. package/docs/.vuepress/dist/assets/Layout.1b8eeaf1.js +1 -0
  11. package/docs/.vuepress/dist/assets/{img/add-tariff-flow.eb700d4f.png → add-tariff-flow.9e258f5b.png} +0 -0
  12. package/docs/.vuepress/dist/assets/app.b3d8926b.js +8 -0
  13. package/docs/.vuepress/dist/assets/{img/back-to-top.8b37f773.svg → back-to-top.8efcbe56.svg} +0 -0
  14. package/docs/.vuepress/dist/assets/{img/best-save-config.79a2f39a.png → best-save-config.70d29386.png} +0 -0
  15. package/docs/.vuepress/dist/assets/best-save-viewer.html.bb64949a.js +1 -0
  16. package/docs/.vuepress/dist/assets/best-save-viewer.html.e897b3ac.js +1 -0
  17. package/docs/.vuepress/dist/assets/{img/copy-payload-best-save.b9192985.png → copy-payload-best-save.8b51cdf4.png} +0 -0
  18. package/docs/.vuepress/dist/assets/{img/elvia-config-no-config.b4bb972c.png → elvia-config-no-config.7ea35c3b.png} +0 -0
  19. package/docs/.vuepress/dist/assets/{img/elvia-config-no-tariff.3f89aba8.png → elvia-config-no-tariff.a208a0f3.png} +0 -0
  20. package/docs/.vuepress/dist/assets/{img/elvia-config-select-tariff.0f73fd56.png → elvia-config-select-tariff.48562d43.png} +0 -0
  21. package/docs/.vuepress/dist/assets/{img/elvia-config-subscription-key.8be8ab8a.png → elvia-config-subscription-key.3368b931.png} +0 -0
  22. package/docs/.vuepress/dist/assets/{img/elvia-flow.bae2a4d5.png → elvia-flow.a8b126d6.png} +0 -0
  23. package/docs/.vuepress/dist/assets/example-cascade-temperature-control.html.3632cc6c.js +272 -0
  24. package/docs/.vuepress/dist/assets/example-cascade-temperature-control.html.5a363ecf.js +1 -0
  25. package/docs/.vuepress/dist/assets/{img/example-flow-1.3ff3e23f.png → example-flow-1.971bbb87.png} +0 -0
  26. package/docs/.vuepress/dist/assets/{img/example-flow-2.b653b58d.png → example-flow-2.a0c62ed7.png} +0 -0
  27. package/docs/.vuepress/dist/assets/example-heat-capacitor.html.89cdea26.js +1 -0
  28. package/docs/.vuepress/dist/assets/example-heat-capacitor.html.b87ab267.js +215 -0
  29. package/docs/.vuepress/dist/assets/example-next-schedule-entity.html.dd06a4d6.js +11 -0
  30. package/docs/.vuepress/dist/assets/example-next-schedule-entity.html.fc8e9124.js +1 -0
  31. package/docs/.vuepress/dist/assets/example-nordpool-current-state.html.278abccb.js +1 -0
  32. package/docs/.vuepress/dist/assets/example-nordpool-current-state.html.8eca9b26.js +174 -0
  33. package/docs/.vuepress/dist/assets/example-nordpool-events-state.html.05c3331c.js +159 -0
  34. package/docs/.vuepress/dist/assets/example-nordpool-events-state.html.47dbda83.js +1 -0
  35. package/docs/.vuepress/dist/assets/example-tibber-mqtt.html.bed6459b.js +1 -0
  36. package/docs/.vuepress/dist/assets/example-tibber-mqtt.html.ce7f09e2.js +167 -0
  37. package/docs/.vuepress/dist/assets/{img/heat-capacitor-temperatureVsPrice.6e74905b.png → heat-capacitor-temperatureVsPrice.19bc8932.png} +0 -0
  38. package/docs/.vuepress/dist/assets/index.html.21bfa52e.js +1 -0
  39. package/docs/.vuepress/dist/assets/index.html.350682d1.js +38 -0
  40. package/docs/.vuepress/dist/assets/index.html.3bbc4fe4.js +1 -0
  41. package/docs/.vuepress/dist/assets/index.html.485a4abc.js +1 -0
  42. package/docs/.vuepress/dist/assets/index.html.49024575.js +1 -0
  43. package/docs/.vuepress/dist/assets/index.html.4c0ec52b.js +1 -0
  44. package/docs/.vuepress/dist/assets/index.html.54f6072c.js +1 -0
  45. package/docs/.vuepress/dist/assets/index.html.75c4e015.js +1 -0
  46. package/docs/.vuepress/dist/assets/index.html.7857db23.js +1 -0
  47. package/docs/.vuepress/dist/assets/index.html.797b027e.js +1 -0
  48. package/docs/.vuepress/dist/assets/index.html.88f59477.js +1 -0
  49. package/docs/.vuepress/dist/assets/index.html.c4e8bf36.js +1 -0
  50. package/docs/.vuepress/dist/assets/index.html.c98d742c.js +1 -0
  51. package/docs/.vuepress/dist/assets/index.html.edb1389f.js +1 -0
  52. package/docs/.vuepress/dist/assets/{img/lowest-price-config.6d66a8c2.png → lowest-price-config.d7043621.png} +0 -0
  53. package/docs/.vuepress/dist/assets/migrate-best-save.dcc20d06.js +1 -0
  54. package/docs/.vuepress/dist/assets/{img/migrate-best-save.f73420f6.png → migrate-best-save.ec036b00.png} +0 -0
  55. package/docs/.vuepress/dist/assets/{img/migrate-power-saver.aae13f9d.png → migrate-power-saver.98ee9f2e.png} +0 -0
  56. package/docs/.vuepress/dist/assets/mysterious-plan.687d8b75.png +0 -0
  57. package/docs/.vuepress/dist/assets/{img/next-schedule-entity.4406856a.png → next-schedule-entity.418ab6ec.png} +0 -0
  58. package/docs/.vuepress/dist/assets/{img/next-schedule-flow.413ad62b.png → next-schedule-flow.862dea60.png} +0 -0
  59. package/docs/.vuepress/dist/assets/{img/next-schedule-sensor.eb896bdd.png → next-schedule-sensor.87198baf.png} +0 -0
  60. package/docs/.vuepress/dist/assets/node-power-saver.3a115c24.js +1 -0
  61. package/docs/.vuepress/dist/assets/{img/node-power-saver.51ff2e5d.png → node-power-saver.feb2d4fb.png} +0 -0
  62. package/docs/.vuepress/dist/assets/{img/node-ps-elvia-add-tariff.94ea2b09.png → node-ps-elvia-add-tariff.0bff05a9.png} +0 -0
  63. package/docs/.vuepress/dist/assets/node-ps-elvia-add-tariff.57baddc7.js +1 -0
  64. package/docs/.vuepress/dist/assets/node-ps-general-add-tariff.17755af1.js +1 -0
  65. package/docs/.vuepress/dist/assets/{img/node-ps-general-add-tariff.a3cf6f06.png → node-ps-general-add-tariff.5a5c98c6.png} +0 -0
  66. package/docs/.vuepress/dist/assets/{img/node-ps-receive-price.76eaa418.png → node-ps-receive-price.3587e62e.png} +0 -0
  67. package/docs/.vuepress/dist/assets/node-ps-receive-price.dbc5e137.js +1 -0
  68. package/docs/.vuepress/dist/assets/{img/node-ps-strategy-best-save.392292d5.png → node-ps-strategy-best-save.13861759.png} +0 -0
  69. package/docs/.vuepress/dist/assets/node-ps-strategy-best-save.516d9e66.js +1 -0
  70. package/docs/.vuepress/dist/assets/{img/node-ps-strategy-heat-capacitor-cascade-control.2e75ed9e.png → node-ps-strategy-heat-capacitor-cascade-control.f35cce75.png} +0 -0
  71. package/docs/.vuepress/dist/assets/node-ps-strategy-heat-capacitor-simple-flow-example.099aa155.js +1 -0
  72. package/docs/.vuepress/dist/assets/{img/node-ps-strategy-heat-capacitor-simple-flow-example.29d9bf59.png → node-ps-strategy-heat-capacitor-simple-flow-example.5b712b3b.png} +0 -0
  73. package/docs/.vuepress/dist/assets/node-ps-strategy-heat-capacitor.e7736c9e.js +1 -0
  74. package/docs/.vuepress/dist/assets/{img/node-ps-strategy-lowest-price.3a4ad347.png → node-ps-strategy-lowest-price.4e5c38ee.png} +0 -0
  75. package/docs/.vuepress/dist/assets/node-ps-strategy-lowest-price.83209fac.js +1 -0
  76. package/docs/.vuepress/dist/assets/old-power-saver-doc.html.c7324541.js +1 -0
  77. package/docs/.vuepress/dist/assets/old-power-saver-doc.html.f428e475.js +83 -0
  78. package/docs/.vuepress/dist/assets/{img/oven-setpoint-calculation.5bda0eec.png → oven-setpoint-calculation.47b65429.png} +0 -0
  79. package/docs/.vuepress/dist/assets/{img/overshoot-time.b3b5d70e.png → overshoot-time.2c4e3929.png} +0 -0
  80. package/docs/.vuepress/dist/assets/plugin-vue_export-helper.21dcd24c.js +1 -0
  81. package/docs/.vuepress/dist/assets/{img/power-saver-nordpool-current-state.bf14afde.png → power-saver-nordpool-current-state.cbe8e48a.png} +0 -0
  82. package/docs/.vuepress/dist/assets/{img/power-saver-nordpool-events-state.8c392507.png → power-saver-nordpool-events-state.a764b813.png} +0 -0
  83. package/docs/.vuepress/dist/assets/{img/power-saver-tibber-mqtt.16891dd2.png → power-saver-tibber-mqtt.c04fb150.png} +0 -0
  84. package/docs/.vuepress/dist/assets/power-saver.html.4baca6ba.js +1 -0
  85. package/docs/.vuepress/dist/assets/power-saver.html.875a1f0e.js +1 -0
  86. package/docs/.vuepress/dist/assets/ps-elvia-add-tariff.html.05d3ab1b.js +1 -0
  87. package/docs/.vuepress/dist/assets/ps-elvia-add-tariff.html.dce36de0.js +1 -0
  88. package/docs/.vuepress/dist/assets/ps-general-add-tariff.html.3056f433.js +1 -0
  89. package/docs/.vuepress/dist/assets/ps-general-add-tariff.html.3cce3e4d.js +1 -0
  90. package/docs/.vuepress/dist/assets/ps-receive-price.html.0d762910.js +66 -0
  91. package/docs/.vuepress/dist/assets/ps-receive-price.html.53dde398.js +1 -0
  92. package/docs/.vuepress/dist/assets/ps-strategy-best-save.html.503ecfbe.js +1 -0
  93. package/docs/.vuepress/dist/assets/ps-strategy-best-save.html.9b0747bf.js +72 -0
  94. package/docs/.vuepress/dist/assets/ps-strategy-heat-capacitor.html.53b3383d.js +228 -0
  95. package/docs/.vuepress/dist/assets/ps-strategy-heat-capacitor.html.b7849bf7.js +1 -0
  96. package/docs/.vuepress/dist/assets/ps-strategy-lowest-price.html.1e419f56.js +92 -0
  97. package/docs/.vuepress/dist/assets/ps-strategy-lowest-price.html.f006d811.js +1 -0
  98. package/docs/.vuepress/dist/assets/strategy-input.html.6d452f16.js +26 -0
  99. package/docs/.vuepress/dist/assets/strategy-input.html.8a16d321.js +1 -0
  100. package/docs/.vuepress/dist/assets/style.a8aae67b.css +1 -0
  101. package/docs/.vuepress/dist/assets/temperature-manipulation-config.a0e0439b.png +0 -0
  102. package/docs/.vuepress/dist/changelog/index.html +6 -6
  103. package/docs/.vuepress/dist/contribute/index.html +6 -6
  104. package/docs/.vuepress/dist/examples/example-cascade-temperature-control.html +6 -6
  105. package/docs/.vuepress/dist/examples/example-heat-capacitor.html +6 -6
  106. package/docs/.vuepress/dist/examples/example-next-schedule-entity.html +7 -7
  107. package/docs/.vuepress/dist/examples/example-nordpool-current-state.html +6 -6
  108. package/docs/.vuepress/dist/examples/example-nordpool-events-state.html +6 -6
  109. package/docs/.vuepress/dist/examples/example-tibber-mqtt.html +6 -6
  110. package/docs/.vuepress/dist/examples/index.html +5 -5
  111. package/docs/.vuepress/dist/faq/best-save-viewer.html +6 -6
  112. package/docs/.vuepress/dist/faq/index.html +6 -6
  113. package/docs/.vuepress/dist/guide/index.html +8 -8
  114. package/docs/.vuepress/dist/index.html +6 -6
  115. package/docs/.vuepress/dist/nodes/index.html +6 -6
  116. package/docs/.vuepress/dist/nodes/old-power-saver-doc.html +9 -9
  117. package/docs/.vuepress/dist/nodes/power-saver.html +6 -6
  118. package/docs/.vuepress/dist/nodes/ps-elvia-add-tariff.html +6 -6
  119. package/docs/.vuepress/dist/nodes/ps-general-add-tariff.html +6 -6
  120. package/docs/.vuepress/dist/nodes/ps-receive-price.html +11 -11
  121. package/docs/.vuepress/dist/nodes/ps-strategy-best-save.html +12 -12
  122. package/docs/.vuepress/dist/nodes/ps-strategy-heat-capacitor.html +11 -11
  123. package/docs/.vuepress/dist/nodes/ps-strategy-lowest-price.html +11 -11
  124. package/docs/.vuepress/dist/nodes/strategy-input.html +6 -6
  125. package/docs/changelog/README.md +4 -0
  126. package/docs/faq/best-save-viewer.md +1 -0
  127. package/package.json +9 -11
  128. package/docs/.vuepress/dist/.nojekyll +0 -0
  129. package/docs/.vuepress/dist/assets/css/835.styles.c5afb22b.css +0 -1
  130. package/docs/.vuepress/dist/assets/css/896.styles.21a80cb6.css +0 -1
  131. package/docs/.vuepress/dist/assets/css/styles.1c48cbd0.css +0 -10
  132. package/docs/.vuepress/dist/assets/js/229.5c5378fa.js +0 -1
  133. package/docs/.vuepress/dist/assets/js/331.872104cd.js +0 -1
  134. package/docs/.vuepress/dist/assets/js/405.f4edd94d.js +0 -2
  135. package/docs/.vuepress/dist/assets/js/405.f4edd94d.js.LICENSE.txt +0 -8
  136. package/docs/.vuepress/dist/assets/js/490.1e639e05.js +0 -1
  137. package/docs/.vuepress/dist/assets/js/491.bd938119.js +0 -1
  138. package/docs/.vuepress/dist/assets/js/555.d8963d84.js +0 -1
  139. package/docs/.vuepress/dist/assets/js/811.5f659592.js +0 -1
  140. package/docs/.vuepress/dist/assets/js/app.6c6c1409.js +0 -1
  141. package/docs/.vuepress/dist/assets/js/runtime~app.f6ac32d7.js +0 -1
  142. package/docs/.vuepress/dist/assets/js/v-0607240a.0193a377.js +0 -1
  143. package/docs/.vuepress/dist/assets/js/v-08683c60.52e94cb6.js +0 -1
  144. package/docs/.vuepress/dist/assets/js/v-0aca7ba6.cac5d4b9.js +0 -1
  145. package/docs/.vuepress/dist/assets/js/v-0b5e3c8c.18561f6e.js +0 -1
  146. package/docs/.vuepress/dist/assets/js/v-1ad821fa.6697a349.js +0 -1
  147. package/docs/.vuepress/dist/assets/js/v-1b3a0ab8.c6c4e19b.js +0 -1
  148. package/docs/.vuepress/dist/assets/js/v-1e2b191e.07b8ab21.js +0 -1
  149. package/docs/.vuepress/dist/assets/js/v-29504124.00be7399.js +0 -1
  150. package/docs/.vuepress/dist/assets/js/v-30acb564.28af12af.js +0 -1
  151. package/docs/.vuepress/dist/assets/js/v-3706649a.c76d575b.js +0 -1
  152. package/docs/.vuepress/dist/assets/js/v-4637f9e4.d334c29a.js +0 -1
  153. package/docs/.vuepress/dist/assets/js/v-4c28314d.8cbb0f9d.js +0 -1
  154. package/docs/.vuepress/dist/assets/js/v-510ed0d4.c04bc2e4.js +0 -1
  155. package/docs/.vuepress/dist/assets/js/v-5954bcb2.dff3fc67.js +0 -1
  156. package/docs/.vuepress/dist/assets/js/v-5db8da3a.e5e6d7a6.js +0 -1
  157. package/docs/.vuepress/dist/assets/js/v-61f728ca.81968036.js +0 -1
  158. package/docs/.vuepress/dist/assets/js/v-677dfaed.c159b0f4.js +0 -1
  159. package/docs/.vuepress/dist/assets/js/v-7446a652.8fc2c591.js +0 -1
  160. package/docs/.vuepress/dist/assets/js/v-7c87f26e.8ed52391.js +0 -1
  161. package/docs/.vuepress/dist/assets/js/v-84304104.f3f07ed3.js +0 -1
  162. package/docs/.vuepress/dist/assets/js/v-8daa1a0e.ed84ca09.js +0 -1
  163. package/docs/.vuepress/dist/assets/js/v-b4a42144.9a2a0c9f.js +0 -1
  164. package/docs/.vuepress/dist/assets/js/v-e8c55052.b7d52fc6.js +0 -1
  165. package/docs/.vuepress/dist/assets/js/v-fffb8e28.d09ab959.js +0 -1
@@ -0,0 +1 @@
1
+ const e={key:"v-4c28314d",path:"/nodes/ps-strategy-heat-capacitor.html",title:"ps-strategy-heat-capacitor Experimental",lang:"en-US",frontmatter:{},excerpt:"",headers:[{level:2,title:"Description",slug:"description",children:[]},{level:2,title:"Configuration",slug:"configuration",children:[{level:3,title:"The impact of Time +1C",slug:"the-impact-of-time-1c",children:[]},{level:3,title:"Setpoint",slug:"setpoint",children:[]},{level:3,title:"Max temperature adjustment",slug:"max-temperature-adjustment",children:[]},{level:3,title:"Heating Boost [C]",slug:"heating-boost-c",children:[]},{level:3,title:"Cooling Boost [C]",slug:"cooling-boost-c",children:[]},{level:3,title:"Min Savings",slug:"min-savings",children:[]}]},{level:2,title:"Dynamic config",slug:"dynamic-config",children:[]},{level:2,title:"Output",slug:"output",children:[{level:3,title:"Output 1 - Temperature",slug:"output-1-temperature",children:[]},{level:3,title:"Output 2 - $\\Delta T$",slug:"output-2-delta-t",children:[]},{level:3,title:"Output 3",slug:"output-3",children:[]}]}],git:{updatedTime:164452306e4},filePathRelative:"nodes/ps-strategy-heat-capacitor.md"};export{e as data};
@@ -0,0 +1,92 @@
1
+ import{m as e,o as t,d as o,f as p,q as r,s as c,F as u,x as n,l as s}from"./app.b3d8926b.js";import{_ as l}from"./node-ps-strategy-lowest-price.83209fac.js";import{_ as i}from"./plugin-vue_export-helper.21dcd24c.js";var d="/assets/lowest-price-config.d7043621.png";const h={},b=n('<h1 id="ps-strategy-lowest-price" tabindex="-1"><a class="header-anchor" href="#ps-strategy-lowest-price" aria-hidden="true">#</a> ps-strategy-lowest-price</h1><p><img src="'+l+'" alt="ps-strategy-lowest-price"></p><p>Strategy node to turn on power the hours when the price is lowest during a given period, and turn off the other hours.</p><h2 id="description" tabindex="-1"><a class="header-anchor" href="#description" aria-hidden="true">#</a> Description</h2><p>The node can work on a specific period from 1 to 24 hours during a 24 hour period. Inside this period, you can decide how many hours that shall be on. The rest of the period will be off. Outside the period, you can select that the output shall be either on or off. You can also decide that the hours on shall be consecutive (one continuous period) or spread around in multiple on-periods.</p><h2 id="configuration" tabindex="-1"><a class="header-anchor" href="#configuration" aria-hidden="true">#</a> Configuration</h2><p><img src="'+d+`" alt="Node Configuration"></p><table><thead><tr><th>Value</th><th>Description</th></tr></thead><tbody><tr><td>From Time</td><td>The start time of the selected period.</td></tr><tr><td>To Time</td><td>The end time of the selected period.</td></tr><tr><td>Hours On</td><td>The number of hours that shall be turned on.</td></tr><tr><td>Consecutive On-Period</td><td>Check this if you need the on-period to be consecutive.</td></tr><tr><td>Send When Rescheduling</td><td>Check this to make sure on or off output is sent immediately after rescheduling.</td></tr><tr><td>If No Schedule, Send</td><td>What to do if there is no valid schedule any more (turn on or off).</td></tr><tr><td>Outside Period, Send</td><td>Select the value to send outside the selected period.</td></tr></tbody></table><p>If you want to use a period of 24 hours, set the From Time and To Time to the same value. The time you select is significant in the way that it decides which 24 hours that are considered when finding the hours with lowest price.</p><div class="custom-container tip"><p class="custom-container-title">Example with Consecutive On-Period</p><p>One example to need a consecutive on-period can be if you want to control the washing machine. Let&#39;s say it needs 3 hours, and you want it to run between 22:00 and 06:00. Set <code>From Time = 22:00</code>, <code>To Time = 06:00</code> and check the <code>Consecutive On-Period</code> flag. This will turn on the cheapest 3-hour period from 22:00 to 06:00.</p><p>NB! It is not recommended to run the washing machine when you are sleeping or away.</p></div><div class="custom-container tip"><p class="custom-container-title">Example with non-consecutive on-period</p><p>If you have heating cables in the driveway, you may need them to be on only for a few hours every day, for example 4 hours, but it may not be important when this is. Then set <code>From Time = 00:00</code>, <code>To Time = 00:00</code> and <strong>un-check</strong> the <code>Consecutive On-Period</code> flag. This will turn on the 4 cheapest hours during the whole day, and off the rest.</p><p>You can use any time for start and end, but it is a good idea to use <code>00:00</code>, since the prices normally comes for this period.</p></div><div class="custom-container warning"><p class="custom-container-title">Outside Period, Send</p><p>Unless the period you select is 24 hours (<code>From Time</code> and <code>To Time</code> are the same), it is important what value you choose for <code>Outside Period, Send</code>. This decides whether the output is on or off during the period that is outside the selected period.</p></div><div class="custom-container danger"><p class="custom-container-title">Schedule not calculated</p><p>If you select a period for example from 10:00 to 02:00, it may not be possible to calculate before the period starts. This is because electricity prices for the next day (in the Nord Pool area) normally are received around 13:00. The node cannot calculate the period until it has price data for the whole period.</p></div><h3 id="dynamic-config" tabindex="-1"><a class="header-anchor" href="#dynamic-config" aria-hidden="true">#</a> Dynamic config</h3><p>It is possible to change config dynamically by sending a config message to the node. The config messages has a payload with a config object like this example:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token property">&quot;payload&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
2
+ <span class="token property">&quot;config&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
3
+ <span class="token property">&quot;fromTime&quot;</span> <span class="token operator">:</span> <span class="token number">10</span><span class="token punctuation">,</span>
4
+ <span class="token property">&quot;toTime&quot;</span> <span class="token operator">:</span> <span class="token number">16</span><span class="token punctuation">,</span>
5
+ <span class="token property">&quot;hoursOn&quot;</span> <span class="token operator">:</span> <span class="token number">3</span><span class="token punctuation">,</span>
6
+ <span class="token property">&quot;doNotSplit&quot;</span> <span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
7
+ <span class="token property">&quot;sendCurrentValueWhenRescheduling&quot;</span> <span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
8
+ <span class="token property">&quot;outputIfNoSchedule&quot;</span> <span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
9
+ <span class="token property">&quot;outputOutsidePeriod&quot;</span><span class="token operator">:</span> <span class="token boolean">false</span>
10
+ <span class="token punctuation">}</span>
11
+ <span class="token punctuation">}</span>
12
+ </code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br></div></div><p>All the variables in the config object are optional. You can send only those you want to change.</p><p>The config sent like this will be valid until a new config is sent the same way, or until the flow is restarted. On a restart, the original config set up in the node will be used.</p><p>When a config is sent like this, and without price data, the schedule will be replanned based on the last previously received price data. If no price data has been received, no scheduling is done.</p><p>However, you can send config and price data in the same message. Then both will be used .</p><h3 id="dynamic-commands" tabindex="-1"><a class="header-anchor" href="#dynamic-commands" aria-hidden="true">#</a> Dynamic commands</h3><p>You can dynamically send some commands to the node via its input, by using a <code>commands</code> object in the payload as described below.</p><p>Commands can be sent together with config and/or price data, but the exact behavior is not defined.</p><h4 id="sendschedule" tabindex="-1"><a class="header-anchor" href="#sendschedule" aria-hidden="true">#</a> sendSchedule</h4><p>You can get the schedule sent to output 3 any time by sending a message like this to the node:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token property">&quot;payload&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
13
+ <span class="token property">&quot;commands&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
14
+ <span class="token property">&quot;sendSchedule&quot;</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
15
+ <span class="token punctuation">}</span>
16
+ <span class="token punctuation">}</span>
17
+ </code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br></div></div><p>When you do this, the current schedule is actually recalculated based on the last received data, and then sent to output 3 the same way as when it was originally planned.</p><h4 id="sendoutput" tabindex="-1"><a class="header-anchor" href="#sendoutput" aria-hidden="true">#</a> sendOutput</h4><p>You can get the node to send the current output to output 1 or 2 any time by sending a message like this to the node:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token property">&quot;payload&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
18
+ <span class="token property">&quot;commands&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
19
+ <span class="token property">&quot;sendOutput&quot;</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
20
+ <span class="token punctuation">}</span>
21
+ <span class="token punctuation">}</span>
22
+ </code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br></div></div><p>When you do this, the current schedule is actually recalculated based on the last received data. The current output is sent to output 1 or 2, and the schedule is sent to output 3.</p><h4 id="reset" tabindex="-1"><a class="header-anchor" href="#reset" aria-hidden="true">#</a> reset</h4><p>You can reset data the node has saved in context by sending this message:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token property">&quot;payload&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
23
+ <span class="token property">&quot;commands&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
24
+ <span class="token property">&quot;reset&quot;</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
25
+ <span class="token punctuation">}</span>
26
+ <span class="token punctuation">}</span>
27
+ </code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br></div></div><p>When you do this, all historical data the node has saved is deleted, including the current schedule, so the result will be that the node shows status &quot;No price data&quot;. When new price data is received, a schedule is calculated without considering any history.</p><p>The nodes config is not deleted, as the node depends on it to work.</p><div class="custom-container warning"><p class="custom-container-title">WARNING</p><p>This operation cannot be undone.</p><p>However, it is normally not a big loss, as you can just feed the node with new price data and start from scratch.</p></div><h2 id="input" tabindex="-1"><a class="header-anchor" href="#input" aria-hidden="true">#</a> Input</h2>`,38),k=s("The input is the "),m=s("common strategy input format"),q=n(`<h2 id="output" tabindex="-1"><a class="header-anchor" href="#output" aria-hidden="true">#</a> Output</h2><p>When a valid input is received, and the schedule is recalculated, the resulting schedule, as well as some other information, is sent to output 3. You can use this to see the plan and verify that it meets your expectations. You can also use it to display the schedule in any way you like.</p><p>Example of output:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token punctuation">{</span>
28
+ <span class="token property">&quot;schedule&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
29
+ <span class="token punctuation">{</span>
30
+ <span class="token property">&quot;time&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2021-12-10T00:00:00.000+01:00&quot;</span><span class="token punctuation">,</span>
31
+ <span class="token property">&quot;value&quot;</span><span class="token operator">:</span> <span class="token string">&quot;true&quot;</span>
32
+ <span class="token punctuation">}</span><span class="token punctuation">,</span>
33
+ <span class="token punctuation">{</span>
34
+ <span class="token property">&quot;time&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2021-12-10T04:00:00.000+01:00&quot;</span><span class="token punctuation">,</span>
35
+ <span class="token property">&quot;value&quot;</span><span class="token operator">:</span> <span class="token boolean">true</span>
36
+ <span class="token punctuation">}</span><span class="token punctuation">,</span>
37
+ <span class="token punctuation">{</span>
38
+ <span class="token property">&quot;time&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2021-12-10T10:00:00.000+01:00&quot;</span><span class="token punctuation">,</span>
39
+ <span class="token property">&quot;value&quot;</span><span class="token operator">:</span> <span class="token boolean">false</span>
40
+ <span class="token punctuation">}</span><span class="token punctuation">,</span>
41
+ <span class="token punctuation">{</span>
42
+ <span class="token property">&quot;time&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2021-12-10T18:00:00.000+01:00&quot;</span><span class="token punctuation">,</span>
43
+ <span class="token property">&quot;value&quot;</span><span class="token operator">:</span> <span class="token string">&quot;true&quot;</span>
44
+ <span class="token punctuation">}</span><span class="token punctuation">,</span>
45
+ <span class="token punctuation">{</span>
46
+ <span class="token property">&quot;time&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2021-12-11T04:00:00.000+01:00&quot;</span><span class="token punctuation">,</span>
47
+ <span class="token property">&quot;value&quot;</span><span class="token operator">:</span> <span class="token boolean">true</span>
48
+ <span class="token punctuation">}</span><span class="token punctuation">,</span>
49
+ <span class="token punctuation">{</span>
50
+ <span class="token property">&quot;time&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2021-12-11T10:00:00.000+01:00&quot;</span><span class="token punctuation">,</span>
51
+ <span class="token property">&quot;value&quot;</span><span class="token operator">:</span> <span class="token boolean">false</span>
52
+ <span class="token punctuation">}</span><span class="token punctuation">,</span>
53
+ <span class="token punctuation">{</span>
54
+ <span class="token property">&quot;time&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2021-12-11T18:00:00.000+01:00&quot;</span><span class="token punctuation">,</span>
55
+ <span class="token property">&quot;value&quot;</span><span class="token operator">:</span> <span class="token string">&quot;true&quot;</span>
56
+ <span class="token punctuation">}</span>
57
+ <span class="token punctuation">]</span><span class="token punctuation">,</span>
58
+ <span class="token property">&quot;hours&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
59
+ <span class="token punctuation">{</span>
60
+ <span class="token property">&quot;price&quot;</span><span class="token operator">:</span> <span class="token number">0.4778</span><span class="token punctuation">,</span>
61
+ <span class="token property">&quot;onOff&quot;</span><span class="token operator">:</span> <span class="token string">&quot;true&quot;</span><span class="token punctuation">,</span>
62
+ <span class="token property">&quot;start&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2021-12-10T00:00:00.000+01:00&quot;</span><span class="token punctuation">,</span>
63
+ <span class="token property">&quot;saving&quot;</span><span class="token operator">:</span> <span class="token null keyword">null</span>
64
+ <span class="token punctuation">}</span><span class="token punctuation">,</span>
65
+ <span class="token punctuation">{</span>
66
+ <span class="token property">&quot;price&quot;</span><span class="token operator">:</span> <span class="token number">0.4828</span><span class="token punctuation">,</span>
67
+ <span class="token property">&quot;onOff&quot;</span><span class="token operator">:</span> <span class="token string">&quot;true&quot;</span><span class="token punctuation">,</span>
68
+ <span class="token property">&quot;start&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2021-12-10T01:00:00.000+01:00&quot;</span><span class="token punctuation">,</span>
69
+ <span class="token property">&quot;saving&quot;</span><span class="token operator">:</span> <span class="token null keyword">null</span>
70
+ <span class="token punctuation">}</span><span class="token punctuation">,</span>
71
+ <span class="token comment">//...</span>
72
+ <span class="token punctuation">{</span>
73
+ <span class="token property">&quot;price&quot;</span><span class="token operator">:</span> <span class="token number">0.6514</span><span class="token punctuation">,</span>
74
+ <span class="token property">&quot;onOff&quot;</span><span class="token operator">:</span> <span class="token string">&quot;true&quot;</span><span class="token punctuation">,</span>
75
+ <span class="token property">&quot;start&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2021-12-11T23:00:00.000+01:00&quot;</span><span class="token punctuation">,</span>
76
+ <span class="token property">&quot;saving&quot;</span><span class="token operator">:</span> <span class="token null keyword">null</span>
77
+ <span class="token punctuation">}</span>
78
+ <span class="token punctuation">]</span><span class="token punctuation">,</span>
79
+ <span class="token property">&quot;source&quot;</span><span class="token operator">:</span> <span class="token string">&quot;Tibber&quot;</span><span class="token punctuation">,</span>
80
+ <span class="token property">&quot;config&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
81
+ <span class="token property">&quot;fromTime&quot;</span><span class="token operator">:</span> <span class="token string">&quot;04&quot;</span><span class="token punctuation">,</span>
82
+ <span class="token property">&quot;toTime&quot;</span><span class="token operator">:</span> <span class="token string">&quot;18&quot;</span><span class="token punctuation">,</span>
83
+ <span class="token property">&quot;hoursOn&quot;</span><span class="token operator">:</span> <span class="token string">&quot;06&quot;</span><span class="token punctuation">,</span>
84
+ <span class="token property">&quot;doNotSplit&quot;</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
85
+ <span class="token property">&quot;sendCurrentValueWhenRescheduling&quot;</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
86
+ <span class="token property">&quot;outputIfNoSchedule&quot;</span><span class="token operator">:</span> <span class="token string">&quot;true&quot;</span><span class="token punctuation">,</span>
87
+ <span class="token property">&quot;outputOutsidePeriod&quot;</span><span class="token operator">:</span> <span class="token string">&quot;true&quot;</span>
88
+ <span class="token punctuation">}</span><span class="token punctuation">,</span>
89
+ <span class="token property">&quot;time&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2021-09-30T23:45:12.123+02:00&quot;</span><span class="token punctuation">,</span>
90
+ <span class="token property">&quot;version&quot;</span><span class="token operator">:</span> <span class="token string">&quot;3.1.2&quot;</span>
91
+ <span class="token punctuation">}</span>
92
+ </code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br><span class="line-number">38</span><br><span class="line-number">39</span><br><span class="line-number">40</span><br><span class="line-number">41</span><br><span class="line-number">42</span><br><span class="line-number">43</span><br><span class="line-number">44</span><br><span class="line-number">45</span><br><span class="line-number">46</span><br><span class="line-number">47</span><br><span class="line-number">48</span><br><span class="line-number">49</span><br><span class="line-number">50</span><br><span class="line-number">51</span><br><span class="line-number">52</span><br><span class="line-number">53</span><br><span class="line-number">54</span><br><span class="line-number">55</span><br><span class="line-number">56</span><br><span class="line-number">57</span><br><span class="line-number">58</span><br><span class="line-number">59</span><br><span class="line-number">60</span><br><span class="line-number">61</span><br><span class="line-number">62</span><br><span class="line-number">63</span><br><span class="line-number">64</span><br><span class="line-number">65</span><br></div></div><p>The <code>schedule</code> array shows every time the switch is turned on or off. The <code>hours</code> array shows values per hour containing the price (received as input), whether that hour is on or off, the start time of the hour and the amount per kWh that is saved on hours that are turned off, compared to the next hour that is on.</p><h2 id="tips-tricks" tabindex="-1"><a class="header-anchor" href="#tips-tricks" aria-hidden="true">#</a> Tips &amp; tricks</h2><h3 id="multiple-nodes-works-together" tabindex="-1"><a class="header-anchor" href="#multiple-nodes-works-together" aria-hidden="true">#</a> Multiple nodes works together</h3><p>You can use multiple nodes simultanously, for different periods, if you want more hours on one part of the day than another part, or to make sure there are at least some hours on during each period.</p><h3 id="highest-price" tabindex="-1"><a class="header-anchor" href="#highest-price" aria-hidden="true">#</a> Highest price</h3><p>If you want to find the <code>x</code> hours with the highest prices, do as follows:</p><ol><li>Calculate <code>y</code> as the total number of hours in the period. For example, if the period is from <code>08:00</code> to <code>20:00</code>, then <code>y = 12</code>.</li><li>Configure <code>Hours On = y - x</code>, so if <code>x = 4</code>, then <code>Hours On = 12 - 4 = 8</code>.</li><li>Use <strong>Output 2</strong> to get a signal when you have the hours with the highest prices. Just remember that the value sent to output 2 is <code>false</code>, not <code>true</code> as it is on output 1.</li></ol>`,11);function y(g,f){const a=e("RouterLink");return t(),o(u,null,[b,p("p",null,[k,r(a,{to:"/nodes/strategy-input.html"},{default:c(()=>[m]),_:1})]),q],64)}var x=i(h,[["render",y]]);export{x as default};
@@ -0,0 +1 @@
1
+ const e={key:"v-4637f9e4",path:"/nodes/ps-strategy-lowest-price.html",title:"ps-strategy-lowest-price",lang:"en-US",frontmatter:{next:"./ps-receive-price.md"},excerpt:"",headers:[{level:2,title:"Description",slug:"description",children:[]},{level:2,title:"Configuration",slug:"configuration",children:[{level:3,title:"Dynamic config",slug:"dynamic-config",children:[]},{level:3,title:"Dynamic commands",slug:"dynamic-commands",children:[]}]},{level:2,title:"Input",slug:"input",children:[]},{level:2,title:"Output",slug:"output",children:[]},{level:2,title:"Tips & tricks",slug:"tips-tricks",children:[{level:3,title:"Multiple nodes works together",slug:"multiple-nodes-works-together",children:[]},{level:3,title:"Highest price",slug:"highest-price",children:[]}]}],git:{updatedTime:1643919651e3},filePathRelative:"nodes/ps-strategy-lowest-price.md"};export{e as data};
@@ -0,0 +1,26 @@
1
+ import{x as n}from"./app.b3d8926b.js";import{_ as s}from"./plugin-vue_export-helper.21dcd24c.js";const a={},p=n(`<h1 id="strategy-input-format" tabindex="-1"><a class="header-anchor" href="#strategy-input-format" aria-hidden="true">#</a> Strategy input format</h1><p>The common input for strategy nodes is a payload with a <code>priceData</code> array containing an object for each hour. Each object has a <code>value</code> which is the price, and a <code>start</code> which is the start time for the hour.</p><p>Example:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token punctuation">{</span>
2
+ <span class="token property">&quot;priceData&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span>
3
+ <span class="token punctuation">{</span>
4
+ <span class="token property">&quot;value&quot;</span><span class="token operator">:</span> <span class="token number">0.9544</span><span class="token punctuation">,</span>
5
+ <span class="token property">&quot;start&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2021-12-07T00:00:00.000+01:00&quot;</span>
6
+ <span class="token punctuation">}</span><span class="token punctuation">,</span>
7
+ <span class="token punctuation">{</span>
8
+ <span class="token property">&quot;value&quot;</span><span class="token operator">:</span> <span class="token number">0.8973</span><span class="token punctuation">,</span>
9
+ <span class="token property">&quot;start&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2021-12-07T01:00:00.000+01:00&quot;</span>
10
+ <span class="token punctuation">}</span><span class="token punctuation">,</span>
11
+ <span class="token punctuation">{</span>
12
+ <span class="token property">&quot;value&quot;</span><span class="token operator">:</span> <span class="token number">0.8668</span><span class="token punctuation">,</span>
13
+ <span class="token property">&quot;start&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2021-12-07T02:00:00.000+01:00&quot;</span>
14
+ <span class="token punctuation">}</span><span class="token punctuation">,</span>
15
+ <span class="token punctuation">{</span>
16
+ <span class="token property">&quot;value&quot;</span><span class="token operator">:</span> <span class="token number">0.8683</span><span class="token punctuation">,</span>
17
+ <span class="token property">&quot;start&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2021-12-07T03:00:00.000+01:00&quot;</span>
18
+ <span class="token punctuation">}</span><span class="token punctuation">,</span>
19
+ <span class="token punctuation">{</span>
20
+ <span class="token property">&quot;value&quot;</span><span class="token operator">:</span> <span class="token number">0.8942</span><span class="token punctuation">,</span>
21
+ <span class="token property">&quot;start&quot;</span><span class="token operator">:</span> <span class="token string">&quot;2021-12-07T04:00:00.000+01:00&quot;</span>
22
+ <span class="token punctuation">}</span>
23
+ <span class="token comment">// ... normally 24 or 48 hours</span>
24
+ <span class="token punctuation">]</span>
25
+ <span class="token punctuation">}</span>
26
+ </code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br></div></div><p>This format is used for:</p><ul><li>Output of the <code>ps-receive-price</code> node</li><li>Input and output of the <code>ps-xxx-add-tariff</code> nodes</li><li>Input for the strategy nodes (<code>ps-strategy-xxx-xxx</code>)</li></ul>`,6);function t(e,o){return p}var u=s(a,[["render",t]]);export{u as default};
@@ -0,0 +1 @@
1
+ const t={key:"v-5954bcb2",path:"/nodes/strategy-input.html",title:"Strategy input format",lang:"en-US",frontmatter:{},excerpt:"",headers:[],git:{updatedTime:1640034618e3},filePathRelative:"nodes/strategy-input.md"};export{t as data};
@@ -0,0 +1 @@
1
+ :root{--external-link-icon-color:#aaa}.external-link-icon{position:relative;display:inline-block;color:var(--external-link-icon-color);vertical-align:middle;top:-1px}.external-link-icon-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}:root{--medium-zoom-z-index:100;--medium-zoom-bg-color:#ffffff;--medium-zoom-opacity:1}.medium-zoom-overlay{background-color:var(--medium-zoom-bg-color)!important;z-index:var(--medium-zoom-z-index)}.medium-zoom-overlay~img{z-index:calc(var(--medium-zoom-z-index) + 1)}.medium-zoom--opened .medium-zoom-overlay{opacity:var(--medium-zoom-opacity)}:root{--c-brand:#3eaf7c;--c-brand-light:#4abf8a;--c-bg:#ffffff;--c-bg-light:#f3f4f5;--c-bg-lighter:#eeeeee;--c-bg-navbar:var(--c-bg);--c-bg-sidebar:var(--c-bg);--c-bg-arrow:#cccccc;--c-text:#2c3e50;--c-text-accent:var(--c-brand);--c-text-light:#3a5169;--c-text-lighter:#4e6e8e;--c-text-lightest:#6a8bad;--c-text-quote:#999999;--c-border:#eaecef;--c-border-dark:#dfe2e5;--c-tip:#42b983;--c-tip-bg:var(--c-bg-light);--c-tip-title:var(--c-text);--c-tip-text:var(--c-text);--c-tip-text-accent:var(--c-text-accent);--c-warning:#e7c000;--c-warning-bg:#fffae3;--c-warning-title:#ad9000;--c-warning-text:#746000;--c-warning-text-accent:var(--c-text);--c-danger:#cc0000;--c-danger-bg:#ffe0e0;--c-danger-title:#990000;--c-danger-text:#660000;--c-danger-text-accent:var(--c-text);--c-details-bg:#eeeeee;--c-badge-tip:var(--c-tip);--c-badge-warning:var(--c-warning);--c-badge-danger:var(--c-danger);--t-color:.3s ease;--t-transform:.3s ease;--code-bg-color:#282c34;--code-hl-bg-color:rgba(0, 0, 0, .66);--code-ln-color:#9e9e9e;--code-ln-wrapper-width:3.5rem;--font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--font-family-code:Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;--navbar-height:3.6rem;--navbar-padding-v:.7rem;--navbar-padding-h:1.5rem;--sidebar-width:20rem;--sidebar-width-mobile:calc(var(--sidebar-width) * .82);--content-width:740px;--homepage-width:960px}.back-to-top{--back-to-top-color:var(--c-brand);--back-to-top-color-hover:var(--c-brand-light)}.DocSearch{--docsearch-primary-color:var(--c-brand);--docsearch-text-color:var(--c-text);--docsearch-highlight-color:var(--c-brand);--docsearch-muted-color:var(--c-text-quote);--docsearch-container-background:rgba(9, 10, 17, .8);--docsearch-modal-background:var(--c-bg-light);--docsearch-searchbox-background:var(--c-bg-lighter);--docsearch-searchbox-focus-background:var(--c-bg);--docsearch-searchbox-shadow:inset 0 0 0 2px var(--c-brand);--docsearch-hit-color:var(--c-text-light);--docsearch-hit-active-color:var(--c-bg);--docsearch-hit-background:var(--c-bg);--docsearch-hit-shadow:0 1px 3px 0 var(--c-border-dark);--docsearch-footer-background:var(--c-bg)}.external-link-icon{--external-link-icon-color:var(--c-text-quote)}.medium-zoom-overlay{--medium-zoom-bg-color:var(--c-bg)}#nprogress{--nprogress-color:var(--c-brand)}.pwa-popup{--pwa-popup-text-color:var(--c-text);--pwa-popup-bg-color:var(--c-bg);--pwa-popup-border-color:var(--c-brand);--pwa-popup-shadow:0 4px 16px var(--c-brand);--pwa-popup-btn-text-color:var(--c-bg);--pwa-popup-btn-bg-color:var(--c-brand);--pwa-popup-btn-hover-bg-color:var(--c-brand-light)}.search-box{--search-bg-color:var(--c-bg);--search-accent-color:var(--c-brand);--search-text-color:var(--c-text);--search-border-color:var(--c-border);--search-item-text-color:var(--c-text-lighter);--search-item-focus-bg-color:var(--c-bg-light)}html.dark{--c-brand:#3aa675;--c-brand-light:#349469;--c-bg:#22272e;--c-bg-light:#2b313a;--c-bg-lighter:#262c34;--c-text:#adbac7;--c-text-light:#96a7b7;--c-text-lighter:#8b9eb0;--c-text-lightest:#8094a8;--c-border:#3e4c5a;--c-border-dark:#34404c;--c-tip:#318a62;--c-warning:#ceab00;--c-warning-bg:#7e755b;--c-warning-title:#ceac03;--c-warning-text:#362e00;--c-danger:#940000;--c-danger-bg:#806161;--c-danger-title:#610000;--c-danger-text:#3a0000;--c-details-bg:#323843;--code-hl-bg-color:#363b46;color-scheme:dark}html.dark .DocSearch{--docsearch-logo-color:var(--c-text);--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40, 0 3px 8px 0 #000309;--docsearch-key-shadow:inset 0 -2px 0 0 #282d55, inset 0 0 1px 1px #51577d, 0 2px 2px 0 rgba(3, 4, 9, .3);--docsearch-key-gradient:linear-gradient(-225deg, #444950, #1c1e21);--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73, 76, 106, .5), 0 -4px 8px 0 rgba(0, 0, 0, .2)}body,html{padding:0;margin:0;background-color:var(--c-bg);transition:background-color var(--t-color)}body{font-family:var(--font-family);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px}a,p a code{color:var(--c-text-accent)}a{font-weight:500;text-decoration:none;overflow-wrap:break-word}p a code{font-weight:400}code,kbd{font-family:var(--font-family-code)}body,kbd{color:var(--c-text)}kbd{background:var(--c-bg-lighter);border:solid .15rem var(--c-border-dark);border-bottom:solid .25rem var(--c-border-dark);border-radius:.15rem;padding:0 .15em}code{color:var(--c-text-lighter);padding:.25rem .5rem;font-size:.85em;background-color:var(--c-bg-light);border-radius:3px;overflow-wrap:break-word;transition:background-color var(--t-color)}blockquote{font-size:1rem;color:var(--c-text-quote);border-left:.2rem solid var(--c-border-dark);margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p,code{margin:0}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}h1:focus-visible,h2:focus-visible,h3:focus-visible,h4:focus-visible,h5:focus-visible,h6:focus-visible{outline:0}h1:hover .header-anchor,h2:hover .header-anchor,h3:hover .header-anchor,h4:hover .header-anchor,h5:hover .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid var(--c-border);transition:border-color var(--t-color)}h3{font-size:1.35rem}h4{font-size:1.15rem}h5{font-size:1.05rem}h6{font-size:1rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0}a.header-anchor:hover{text-decoration:none}a.header-anchor:focus-visible{opacity:1}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid var(--c-border)}table,tr{transition:border-color var(--t-color)}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto}tr{border-top:1px solid var(--c-border-dark)}tr:nth-child(2n){background-color:var(--c-bg-light);transition:background-color var(--t-color)}td,th{padding:.6em 1em;border:1px solid var(--c-border-dark);transition:border-color var(--t-color)}.arrow,.badge{display:inline-block}.arrow{width:0;height:0}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.up{border-bottom:6px solid var(--c-bg-arrow)}.arrow.down{border-top:6px solid var(--c-bg-arrow)}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.right{border-left:6px solid var(--c-bg-arrow)}.arrow.left{border-right:6px solid var(--c-bg-arrow)}.badge{font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:var(--c-bg);vertical-align:top;transition:color var(--t-color),background-color var(--t-color)}.badge.tip{background-color:var(--c-badge-tip)}.badge.warning{background-color:var(--c-badge-warning)}.badge.danger{background-color:var(--c-badge-danger)}.badge+.badge{margin-left:5px}code[class*=language-],pre[class*=language-]{color:#ccc;background:0 0;font-family:var(--font-family-code);font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#ec5975}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:#3eaf7c}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.3rem 1.5rem;margin:.85rem 0;border-radius:6px;overflow:auto}.theme-default-content pre code,.theme-default-content pre[class*=language-] code{color:#fff;padding:0;background-color:transparent;border-radius:0;overflow-wrap:unset;-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.theme-default-content .line-number{font-family:var(--font-family-code)}div[class*=language-]{position:relative;background-color:var(--code-bg-color);border-radius:6px}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:var(--code-ln-color)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:0 0!important;position:relative;z-index:1}div[class*=language-] .highlight-lines{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlight-line{background-color:var(--code-hl-bg-color)}div[class*=language-]:not(.line-numbers-mode) .line-numbers{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlight-line{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlight-line:before{content:" ";position:absolute;z-index:2;left:0;top:0;display:block;width:var(--code-ln-wrapper-width);height:100%}div[class*=language-].line-numbers-mode pre{margin-left:var(--code-ln-wrapper-width);padding-left:1rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers{position:absolute;top:0;width:var(--code-ln-wrapper-width);text-align:center;color:var(--code-ln-color);padding-top:1.25rem;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers .line-number,div[class*=language-].line-numbers-mode .line-numbers br{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers .line-number{position:relative;z-index:3;font-size:.85em;line-height:0}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;top:0;left:0;width:var(--code-ln-wrapper-width);height:100%;border-radius:6px 0 0 6px;border-right:1px solid var(--code-hl-bg-color)}div[class*=language-].ext-c:before{content:"c"}div[class*=language-].ext-cpp:before{content:"cpp"}div[class*=language-].ext-cs:before{content:"cs"}div[class*=language-].ext-css:before{content:"css"}div[class*=language-].ext-dart:before{content:"dart"}div[class*=language-].ext-docker:before{content:"docker"}div[class*=language-].ext-fs:before{content:"fs"}div[class*=language-].ext-go:before{content:"go"}div[class*=language-].ext-html:before{content:"html"}div[class*=language-].ext-java:before{content:"java"}div[class*=language-].ext-js:before{content:"js"}div[class*=language-].ext-json:before{content:"json"}div[class*=language-].ext-kt:before{content:"kt"}div[class*=language-].ext-less:before{content:"less"}div[class*=language-].ext-makefile:before{content:"makefile"}div[class*=language-].ext-md:before{content:"md"}div[class*=language-].ext-php:before{content:"php"}div[class*=language-].ext-py:before{content:"py"}div[class*=language-].ext-rb:before{content:"rb"}div[class*=language-].ext-rs:before{content:"rs"}div[class*=language-].ext-sass:before{content:"sass"}div[class*=language-].ext-scss:before{content:"scss"}div[class*=language-].ext-sh:before{content:"sh"}div[class*=language-].ext-styl:before{content:"styl"}div[class*=language-].ext-ts:before{content:"ts"}div[class*=language-].ext-toml:before{content:"toml"}div[class*=language-].ext-vue:before{content:"vue"}div[class*=language-].ext-yml:before{content:"yml"}@media (max-width:419px){.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}.code-group__nav{margin-top:.85rem;margin-bottom:calc(-1.7rem - 6px);padding-bottom:calc(1.7rem - 6px);padding-left:10px;padding-top:10px;border-top-left-radius:6px;border-top-right-radius:6px;background-color:var(--code-bg-color)}.code-group__ul{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.code-group__nav-tab{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:#ffffffe6;font-weight:600}.code-group__nav-tab:focus{outline:0}.code-group__nav-tab:focus-visible{outline:1px solid rgba(255,255,255,.9)}.code-group__nav-tab-active{border-bottom:var(--c-brand) 1px solid}@media (max-width:419px){.code-group__nav{margin-left:-1.5rem;margin-right:-1.5rem;border-radius:0}}.code-group-item,.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle>a.router-link-active:after{display:none}.code-group-item__active{display:block}.code-group-item>pre{background-color:orange}.custom-container{transition:color var(--t-color),border-color var(--t-color),background-color var(--t-color)}.custom-container .custom-container-title{font-weight:600}.custom-container .custom-container-title:not(:only-child){margin-bottom:-.4rem}.custom-container.danger,.custom-container.tip,.custom-container.warning{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-container.tip{border-color:var(--c-tip);background-color:var(--c-tip-bg);color:var(--c-tip-text)}.custom-container.tip .custom-container-title{color:var(--c-tip-title)}.custom-container.tip a{color:var(--c-tip-text-accent)}.custom-container.warning{border-color:var(--c-warning);background-color:var(--c-warning-bg);color:var(--c-warning-text)}.custom-container.warning .custom-container-title{color:var(--c-warning-title)}.custom-container.warning a{color:var(--c-warning-text-accent)}.custom-container.danger{border-color:var(--c-danger);background-color:var(--c-danger-bg);color:var(--c-danger-text)}.custom-container.danger .custom-container-title{color:var(--c-danger-title)}.custom-container.danger a{color:var(--c-danger-text-accent)}.custom-container.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:var(--c-details-bg)}.custom-container.details h4{margin-top:0}.custom-container.details figure:last-child,.custom-container.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-container.details summary{outline:0;cursor:pointer}.home{padding:var(--navbar-height) 2rem 0;max-width:var(--homepage-width);margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero .actions,.home .hero .description,.home .hero h1{margin:1.8rem auto}.home .hero .actions{display:flex;flex-wrap:wrap;gap:1rem;justify-content:center}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:var(--c-text-lightest)}.home .hero .action-button{display:inline-block;font-size:1.2rem;padding:.8rem 1.6rem;border-width:2px;border-style:solid;border-radius:4px;transition:background-color var(--t-color);box-sizing:border-box}.home .hero .action-button.primary{color:var(--c-bg);background-color:var(--c-brand);border-color:var(--c-brand)}.home .hero .action-button.primary:hover{background-color:var(--c-brand-light)}.home .hero .action-button.secondary{color:var(--c-brand);background-color:var(--c-bg);border-color:var(--c-brand)}.home .hero .action-button.secondary:hover{color:var(--c-bg);background-color:var(--c-brand-light)}.home .features{border-top:1px solid var(--c-border);transition:border-color var(--t-color);padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:var(--c-text-light)}.home .feature p,.home .footer{color:var(--c-text-lighter)}.home .footer{padding:2.5rem;border-top:1px solid var(--c-border);text-align:center;transition:border-color var(--t-color)}@media (max-width:719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width:419px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero .actions,.home .hero .description,.home .hero h1{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}.page{padding-top:var(--navbar-height);padding-left:var(--sidebar-width)}.navbar,.sidebar{position:fixed;left:0;box-sizing:border-box}.navbar{z-index:20;top:0;right:0;height:var(--navbar-height);border-bottom:1px solid var(--c-border);background-color:var(--c-bg-navbar);transition:background-color var(--t-color),border-color var(--t-color)}.sidebar{font-size:16px;width:var(--sidebar-width);z-index:10;margin:0;top:var(--navbar-height);bottom:0;border-right:1px solid var(--c-border);overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--c-brand) var(--c-border);background-color:var(--c-bg-sidebar);transition:transform var(--t-transform),background-color var(--t-color),border-color var(--t-color)}.sidebar::-webkit-scrollbar{width:7px}.sidebar::-webkit-scrollbar-track{background-color:var(--c-border)}.sidebar::-webkit-scrollbar-thumb{background-color:var(--c-brand)}.sidebar-mask{position:fixed;z-index:9;top:0;left:0;width:100vw;height:100vh;display:none}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(1){transform:rotate(45deg) translate3d(5.5px,5.5px,0)}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(2){transform:scale3d(0,1,1)}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(3){transform:rotate(-45deg) translate3d(6px,-6px,0)}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(1),.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(3){transform-origin:center}.theme-container.no-navbar .theme-default-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .page{padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}.theme-default-content:not(.custom)>h1,.theme-default-content:not(.custom)>h2,.theme-default-content:not(.custom)>h3,.theme-default-content:not(.custom)>h4,.theme-default-content:not(.custom)>h5,.theme-default-content:not(.custom)>h6{margin-top:calc(.5rem - var(--navbar-height));padding-top:calc(1rem + var(--navbar-height));margin-bottom:0}.theme-default-content:not(.custom)>h1:first-child,.theme-default-content:not(.custom)>h2:first-child,.theme-default-content:not(.custom)>h3:first-child,.theme-default-content:not(.custom)>h4:first-child,.theme-default-content:not(.custom)>h5:first-child,.theme-default-content:not(.custom)>h6:first-child{margin-bottom:1rem}.theme-default-content:not(.custom)>h1:first-child+.custom-container,.theme-default-content:not(.custom)>h1:first-child+p,.theme-default-content:not(.custom)>h1:first-child+pre,.theme-default-content:not(.custom)>h2:first-child+.custom-container,.theme-default-content:not(.custom)>h2:first-child+p,.theme-default-content:not(.custom)>h2:first-child+pre,.theme-default-content:not(.custom)>h3:first-child+.custom-container,.theme-default-content:not(.custom)>h3:first-child+p,.theme-default-content:not(.custom)>h3:first-child+pre,.theme-default-content:not(.custom)>h4:first-child+.custom-container,.theme-default-content:not(.custom)>h4:first-child+p,.theme-default-content:not(.custom)>h4:first-child+pre,.theme-default-content:not(.custom)>h5:first-child+.custom-container,.theme-default-content:not(.custom)>h5:first-child+p,.theme-default-content:not(.custom)>h5:first-child+pre,.theme-default-content:not(.custom)>h6:first-child+.custom-container,.theme-default-content:not(.custom)>h6:first-child+p,.theme-default-content:not(.custom)>h6:first-child+pre{margin-top:2rem}.theme-default-content:not(.custom){max-width:var(--content-width);margin:0 auto;padding:2rem 2.5rem;padding-top:0}@media (max-width:959px){.theme-default-content:not(.custom){padding:2rem}}@media (max-width:419px){.theme-default-content:not(.custom){padding:1.5rem}}.theme-default-content:not(.custom) a:hover{text-decoration:underline}.theme-default-content:not(.custom) img{max-width:100%}.theme-default-content.custom{padding:0;margin:0}.theme-default-content.custom img{max-width:100%}@media (max-width:959px){.sidebar{font-size:15px;width:var(--sidebar-width-mobile)}.page{padding-left:var(--sidebar-width-mobile)}}@media (max-width:719px){.sidebar{top:0;padding-top:var(--navbar-height);transform:translate(-100%)}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translate(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:419px){h1{font-size:1.9rem}}.navbar{--navbar-line-height:calc( var(--navbar-height) - 2 * var(--navbar-padding-v) );padding:var(--navbar-padding-v) var(--navbar-padding-h);line-height:var(--navbar-line-height)}.navbar .logo{height:var(--navbar-line-height);margin-right:var(--navbar-padding-v);vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:var(--c-text);position:relative}.navbar .navbar-items-wrapper{display:flex;position:absolute;box-sizing:border-box;top:var(--navbar-padding-v);right:var(--navbar-padding-h);height:var(--navbar-line-height);padding-left:var(--navbar-padding-h);white-space:nowrap;font-size:.9rem}.navbar .navbar-items-wrapper .search-box{flex:0 0 auto;vertical-align:top}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.navbar-items,.navbar-items a{display:inline-block}.navbar-items a{line-height:1.4rem;color:inherit}.navbar-items a.router-link-active,.navbar-items a:hover{color:var(--c-text-accent)}.navbar-items .navbar-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:var(--navbar-line-height)}.navbar-items .navbar-item:first-child{margin-left:0}@media (max-width:719px){.navbar-items .navbar-item{margin-left:0}}@media (min-width:719px){.navbar-items a.router-link-active,.navbar-items a:hover{color:var(--c-text)}.navbar-item>a.router-link-active,.navbar-item>a:hover{margin-bottom:-2px;border-bottom:2px solid var(--c-text-accent)}}.toggle-sidebar-button{position:absolute;top:.6rem;left:1rem;display:none;padding:.6rem;cursor:pointer}.toggle-sidebar-button .icon{display:flex;flex-direction:column;justify-content:center;align-items:center;width:1.25rem;height:1.25rem;cursor:inherit}.toggle-sidebar-button .icon span{display:inline-block;width:100%;height:2px;border-radius:2px;background-color:var(--c-text);transition:transform var(--t-transform)}.toggle-sidebar-button .icon span:nth-child(2){margin:6px 0}@media screen and (max-width:719px){.toggle-sidebar-button{display:block}}.toggle-dark-button{display:flex;margin:auto;margin-left:1rem;border:0;background:0 0;color:var(--c-text);opacity:.8;cursor:pointer}.toggle-dark-button:hover{opacity:1}.toggle-dark-button .icon{width:1.25rem;height:1.25rem}.DocSearch{transition:background-color var(--t-color)}.navbar-dropdown-wrapper{cursor:pointer}.navbar-dropdown-wrapper .navbar-dropdown-title,.navbar-dropdown-wrapper .navbar-dropdown-title-mobile{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:0 0;border:0;font-weight:500;color:var(--c-text)}.navbar-dropdown-wrapper .navbar-dropdown-title-mobile{display:none;font-weight:600;font-size:inherit}.navbar-dropdown-wrapper .navbar-dropdown-title-mobile:hover,.navbar-dropdown-wrapper .navbar-dropdown-title:hover{border-color:transparent}.navbar-dropdown-wrapper .navbar-dropdown-title .arrow,.navbar-dropdown-wrapper .navbar-dropdown-title-mobile .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.navbar-dropdown-wrapper .navbar-dropdown-title-mobile:hover{color:var(--c-text-accent)}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item{color:inherit;line-height:1.7rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle{margin:.45rem 0 0;border-top:1px solid var(--c-border);padding:1rem 0 .45rem;font-size:.9rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle>span{padding:0 1.5rem 0 1.25rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle>a{font-weight:inherit}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subitem-wrapper{padding:0;list-style:none}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subitem-wrapper .navbar-dropdown-subitem{font-size:.9em}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a.router-link-active,.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a:hover{color:var(--c-text-accent)}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid var(--c-text-accent);border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item:first-child .navbar-dropdown-subtitle{margin-top:0;padding-top:0;border-top:0}@media (max-width:719px){.navbar-dropdown-wrapper.open .navbar-dropdown-title,.navbar-dropdown-wrapper.open .navbar-dropdown-title-mobile{margin-bottom:.5rem}.navbar-dropdown-wrapper .navbar-dropdown-title{display:none}.navbar-dropdown-wrapper .navbar-dropdown-title-mobile{display:block}.navbar-dropdown-wrapper .navbar-dropdown{transition:height .1s ease-out;overflow:hidden}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle{border-top:0;margin-top:0;padding-top:0;padding-bottom:0;font-size:15px;line-height:2rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item>a{font-size:15px;line-height:2rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:720px){.navbar-dropdown-wrapper{height:1.8rem}.navbar-dropdown-wrapper.open .navbar-dropdown,.navbar-dropdown-wrapper:hover .navbar-dropdown{display:block!important}.navbar-dropdown-wrapper.open:blur{display:none}.navbar-dropdown-wrapper .navbar-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:var(--c-bg-navbar);padding:.6rem 0;border:1px solid var(--c-border);border-bottom-color:var(--c-border-dark);text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.page{padding-bottom:2rem;display:block}.page-meta{max-width:var(--content-width);margin:0 auto;padding:1rem 2.5rem;overflow:auto}@media (max-width:959px){.page-meta{padding:2rem}}@media (max-width:419px){.page-meta{padding:1.5rem}}.page-meta .meta-item{cursor:default;margin-top:.8rem}.page-meta .meta-item .meta-item-label{font-weight:500;color:var(--c-text-lighter)}.page-meta .meta-item .meta-item-info{font-weight:400;color:var(--c-text-quote)}.page-meta .edit-link{display:inline-block;margin-right:.25rem}.page-meta .last-updated{float:right}@media (max-width:719px){.page-meta .last-updated{font-size:.8em;float:none}.page-meta .contributors{font-size:.8em}}.page-nav{max-width:var(--content-width);margin:0 auto;padding:1rem 2.5rem 2rem;padding-bottom:0}@media (max-width:959px){.page-nav{padding:2rem}}@media (max-width:419px){.page-nav{padding:1.5rem}}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid var(--c-border);transition:border-color var(--t-color);padding-top:1rem;overflow:auto}.page-nav .prev a:before{content:"\2190"}.page-nav .next{float:right}.page-nav .next a:after{content:"\2192"}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .navbar-items{display:none;border-bottom:1px solid var(--c-border);transition:border-color var(--t-color);padding:.5rem 0 .75rem}.sidebar .navbar-items a{font-weight:600}.sidebar .navbar-items .navbar-item{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar .sidebar-items{padding:1.5rem 0}@media (max-width:719px){.sidebar .navbar-items{display:block}.sidebar .navbar-items .navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar .sidebar-items{padding:1rem 0}}.sidebar-item{cursor:default;border-left:.25rem solid transparent;color:var(--c-text)}.sidebar-item:focus-visible{outline-width:1px;outline-offset:-1px}.sidebar-item.active:not(p.sidebar-heading){font-weight:600;color:var(--c-text-accent);border-left-color:var(--c-text-accent)}.sidebar-item.sidebar-heading{transition:color .15s ease;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0}.sidebar-item.sidebar-heading.collapsible,a.sidebar-item{cursor:pointer}.sidebar-item.sidebar-heading.collapsible+.sidebar-item-children{transition:height .1s ease-out;overflow:hidden;margin-bottom:.75rem}.sidebar-item.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-item:not(.sidebar-heading){font-size:1em;font-weight:400;display:inline-block;margin:0;padding:.35rem 1rem .35rem 2rem;line-height:1.4;width:100%;box-sizing:border-box}.sidebar-item:not(.sidebar-heading)+.sidebar-item-children{padding-left:1rem;font-size:.95em}.sidebar-item-children .sidebar-item-children .sidebar-item:not(.sidebar-heading){padding:.25rem 1rem .25rem 1.75rem}.sidebar-item-children .sidebar-item-children .sidebar-item:not(.sidebar-heading).active{font-weight:500;border-left-color:transparent}a.sidebar-heading+.sidebar-item-children .sidebar-item:not(.sidebar-heading).active{border-left-color:transparent}a.sidebar-item:hover{color:var(--c-text-accent)}.table-of-contents .badge{vertical-align:middle}.dropdown-enter-from,.dropdown-leave-to{height:0!important}.fade-slide-y-enter-active{transition:all .2s ease}.fade-slide-y-leave-active{transition:all .2s cubic-bezier(1,.5,.8,1)}.fade-slide-y-enter-from,.fade-slide-y-leave-to{transform:translateY(10px);opacity:0}.resize-observer[data-v-b329ee4c]{border:0;background-color:transparent;opacity:0}.resize-observer[data-v-b329ee4c],.resize-observer[data-v-b329ee4c] object{display:block;position:absolute;top:0;left:0;height:100%;width:100%;overflow:hidden;pointer-events:none;z-index:-1}.v-popper__popper{z-index:10000;top:0;left:0}.v-popper__popper.v-popper__popper--hidden{visibility:hidden;opacity:0;transition:opacity .15s,visibility .15s;pointer-events:none}.v-popper__popper.v-popper__popper--shown{visibility:visible;opacity:1;transition:opacity .15s}.v-popper__popper.v-popper__popper--skip-transition,.v-popper__popper.v-popper__popper--skip-transition>.v-popper__wrapper{transition:none!important}.v-popper__backdrop{position:absolute;top:0;left:0;width:100%;height:100%;display:none}.v-popper__inner{position:relative;box-sizing:border-box;overflow-y:auto}.v-popper__inner>div{position:relative;z-index:1;max-width:inherit;max-height:inherit}.v-popper__arrow-container{position:absolute;width:10px;height:10px}.v-popper__popper--arrow-overflow .v-popper__arrow-container,.v-popper__popper--no-positioning .v-popper__arrow-container{display:none}.v-popper__arrow-inner,.v-popper__arrow-outer{border-style:solid;position:absolute;top:0;left:0;width:0;height:0}.v-popper__arrow-inner{visibility:hidden;border-width:7px}.v-popper__arrow-outer{border-width:6px}.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-inner{left:-2px}.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-outer,.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-outer{left:-1px}.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-outer{border-bottom-width:0;border-left-color:transparent!important;border-right-color:transparent!important;border-bottom-color:transparent!important}.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-inner{top:-2px}.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-container{top:0}.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-outer{border-top-width:0;border-left-color:transparent!important;border-right-color:transparent!important;border-top-color:transparent!important}.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-inner{top:-4px}.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-outer{top:-6px}.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-inner{top:-2px}.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-outer,.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-outer{top:-1px}.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-outer{border-left-width:0;border-left-color:transparent!important;border-top-color:transparent!important;border-bottom-color:transparent!important}.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-inner{left:-4px}.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-outer{left:-6px}.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-container{right:-10px}.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-outer{border-right-width:0;border-top-color:transparent!important;border-right-color:transparent!important;border-bottom-color:transparent!important}.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-inner{left:-2px}.v-popper{width:-webkit-max-content;width:-moz-max-content;width:max-content}.v-popper--theme-dropdown .v-popper__inner{background:#fff;color:#000;border-radius:6px;border:1px solid #ddd;box-shadow:0 6px 30px #0000001a}.v-popper--theme-dropdown .v-popper__arrow-inner{visibility:visible;border-color:#fff}.v-popper--theme-dropdown .v-popper__arrow-outer{border-color:#ddd}.v-popper--theme-tooltip .v-popper__inner{background:rgba(0,0,0,.8);color:#fff;border-radius:6px;padding:7px 12px 6px}.v-popper--theme-tooltip .v-popper__arrow-outer{border-color:#000c}:root{--back-to-top-z-index:5;--back-to-top-color:#3eaf7c;--back-to-top-color-hover:#71cda3}.back-to-top{cursor:pointer;position:fixed;bottom:2rem;right:2.5rem;width:2rem;height:1.2rem;background-color:var(--back-to-top-color);-webkit-mask:url(/assets/back-to-top.8efcbe56.svg)no-repeat;mask:url(/assets/back-to-top.8efcbe56.svg)no-repeat;z-index:var(--back-to-top-z-index)}.back-to-top:hover{background-color:var(--back-to-top-color-hover)}@media (max-width:959px){.back-to-top{display:none}}.back-to-top-enter-active,.back-to-top-leave-active{transition:opacity .3s}.back-to-top-enter-from,.back-to-top-leave-to{opacity:0}:root{--nprogress-color:#29d;--nprogress-z-index:1031}#nprogress{pointer-events:none}#nprogress .bar{background:var(--nprogress-color);position:fixed;z-index:var(--nprogress-z-index);top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px var(--nprogress-color),0 0 5px var(--nprogress-color);opacity:1;transform:rotate(3deg) translateY(-4px)}.config>p[data-v-ba8c6c0c]{margin:0;padding:0}td[data-v-ba8c6c0c],th[data-v-ba8c6c0c]{margin:2px 4px;padding:2px 4px;font-size:small}.highlightSequence[data-v-ba8c6c0c]{background-color:#87cefa}.highlightSaving[data-v-ba8c6c0c]{background-color:#ff0}.highlightBoth[data-v-ba8c6c0c]{background-color:#90ee90}.belowMin[data-v-ba8c6c0c]{color:red}.selectable[data-v-ba8c6c0c]{cursor:pointer}.sepcol[data-v-ba8c6c0c]{background-color:#a9a9a9}.box[data-v-611afafb]{display:flex;justify-content:space-evenly}left[data-v-611afafb],right[data-v-611afafb]{flex:1 1 auto}.buttonDiv[data-v-611afafb],.patreonButton[data-v-611afafb]{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;font-family:aktiv-grotesk,sans-serif;-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility}.buttonDiv[data-v-611afafb]{color:#241e12;font-size:16px;width:11rem}.patreonButton[data-v-611afafb]{align-items:center;-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:#ff424d;border-radius:9999px;border:1px solid #ff424d;box-sizing:border-box;display:inline-flex;font-weight:500;height:unset;justify-content:center;padding:.46875rem 1rem;position:relative;pointer-events:unset;text-align:center;text-transform:none;transition:all .3s cubic-bezier(.19,1,.22,1) 0s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:unset;width:100%;color:#fff!important;font-size:.875rem!important;text-decoration:none;cursor:pointer}
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="utf-8">
5
5
  <meta name="viewport" content="width=device-width,initial-scale=1">
6
- <meta name="generator" content="VuePress 2.0.0-beta.35">
6
+ <meta name="generator" content="VuePress 2.0.0-beta.36">
7
7
  <style>
8
8
  :root {
9
9
  --c-bg: #fff;
@@ -22,12 +22,12 @@
22
22
  document.documentElement.classList.toggle('dark', true);
23
23
  }
24
24
  </script>
25
- <link rel="shortcut icon" type="image/x-icon" href="euro.png"><script async src="https://www.googletagmanager.com/gtag/js?id=G-Z2QNNCDQZG"></script><script src="window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-Z2QNNCDQZG');"></script><title>Change Log | Power Saver</title><meta name="description" content="A Node-RED note to save money on hourly changing power prices">
26
- <link rel="preload" href="/assets/js/runtime~app.f6ac32d7.js" as="script"><link rel="preload" href="/assets/css/styles.1c48cbd0.css" as="style"><link rel="preload" href="/assets/js/405.f4edd94d.js" as="script"><link rel="preload" href="/assets/js/app.6c6c1409.js" as="script">
27
- <link rel="stylesheet" href="/assets/css/styles.1c48cbd0.css">
25
+ <link rel="shortcut icon" type="image/x-icon" href="euro.png"><title>Change Log | Power Saver</title><meta name="description" content="A Node-RED note to save money on hourly changing power prices">
26
+ <link rel="modulepreload" href="/assets/app.b3d8926b.js"><link rel="modulepreload" href="/assets/index.html.7857db23.js"><link rel="modulepreload" href="/assets/index.html.485a4abc.js"><link rel="modulepreload" href="/assets/plugin-vue_export-helper.21dcd24c.js">
27
+ <link rel="stylesheet" href="/assets/style.a8aae67b.css">
28
28
  </head>
29
29
  <body>
30
- <div id="app"><!--[--><div class="theme-container"><!--[--><header ref_key="navbar" class="navbar"><div class="toggle-sidebar-button" title="toggle sidebar" aria-expanded="false" role="button" tabindex="0"><div class="icon" aria-hidden="true"><span></span><span></span><span></span></div></div><span><a href="/" class=""><img class="logo" src="/Ukraine-heart-shape-flag.png" alt="Power Saver"><span class="site-name can-hide">Power Saver</span></a></span><div class="navbar-items-wrapper" style=""><!--[--><!--]--><nav class="navbar-items can-hide"><!--[--><div class="navbar-item"><a href="/guide/" class="" aria-label="Guide"><!--[--><!--]--> Guide <!--[--><!--]--></a></div><div class="navbar-item"><a href="/nodes/" class="" aria-label="Nodes"><!--[--><!--]--> Nodes <!--[--><!--]--></a></div><div class="navbar-item"><a href="/examples/" class="" aria-label="Examples"><!--[--><!--]--> Examples <!--[--><!--]--></a></div><div class="navbar-item"><a href="/faq/" class="" aria-label="FAQ"><!--[--><!--]--> FAQ <!--[--><!--]--></a></div><div class="navbar-item"><a href="/contribute/" class="" aria-label="Contribute"><!--[--><!--]--> Contribute <!--[--><!--]--></a></div><div class="navbar-item"><a aria-current="page" href="/changelog/" class="router-link-active router-link-exact-active router-link-active" aria-label="Changes"><!--[--><!--]--> Changes <!--[--><!--]--></a></div><div class="navbar-item"><a class="external-link" href="https://github.com/ottopaulsen/node-red-contrib-power-saver" rel="noopener noreferrer" target="_blank" aria-label="GitHub"><!--[--><!--]--> GitHub <span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span><!--[--><!--]--></a></div><!--]--></nav><!--[--><!--]--><button class="toggle-dark-button" title="toggle dark mode"><svg style="" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg style="display:none;" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button><!----></div></header><!--]--><div class="sidebar-mask"></div><!--[--><aside class="sidebar"><nav class="navbar-items"><!--[--><div class="navbar-item"><a href="/guide/" class="" aria-label="Guide"><!--[--><!--]--> Guide <!--[--><!--]--></a></div><div class="navbar-item"><a href="/nodes/" class="" aria-label="Nodes"><!--[--><!--]--> Nodes <!--[--><!--]--></a></div><div class="navbar-item"><a href="/examples/" class="" aria-label="Examples"><!--[--><!--]--> Examples <!--[--><!--]--></a></div><div class="navbar-item"><a href="/faq/" class="" aria-label="FAQ"><!--[--><!--]--> FAQ <!--[--><!--]--></a></div><div class="navbar-item"><a href="/contribute/" class="" aria-label="Contribute"><!--[--><!--]--> Contribute <!--[--><!--]--></a></div><div class="navbar-item"><a aria-current="page" href="/changelog/" class="router-link-active router-link-exact-active router-link-active" aria-label="Changes"><!--[--><!--]--> Changes <!--[--><!--]--></a></div><div class="navbar-item"><a class="external-link" href="https://github.com/ottopaulsen/node-red-contrib-power-saver" rel="noopener noreferrer" target="_blank" aria-label="GitHub"><!--[--><!--]--> GitHub <span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span><!--[--><!--]--></a></div><!--]--></nav><!--[--><!--]--><ul class="sidebar-items"><!--[--><li><p tabindex="0" class="sidebar-item sidebar-heading">Change Log <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/changelog/#_3-4-2" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.4.2"><!--[--><!--]--> 3.4.2 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-4-1" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.4.1"><!--[--><!--]--> 3.4.1 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-4-0" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.4.0"><!--[--><!--]--> 3.4.0 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-3-2" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.3.2"><!--[--><!--]--> 3.3.2 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-3-1" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.3.1"><!--[--><!--]--> 3.3.1 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-3-0" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.3.0"><!--[--><!--]--> 3.3.0 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-2-3" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.2.3"><!--[--><!--]--> 3.2.3 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-2-2" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.2.2"><!--[--><!--]--> 3.2.2 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-2-1" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.2.1"><!--[--><!--]--> 3.2.1 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-2-0" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.2.0"><!--[--><!--]--> 3.2.0 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-1-2" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.1.2"><!--[--><!--]--> 3.1.2 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-1-1" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.1.1"><!--[--><!--]--> 3.1.1 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-1-0" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.1.0"><!--[--><!--]--> 3.1.0 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-0-10" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.0.10"><!--[--><!--]--> 3.0.10 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-0-9" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.0.9"><!--[--><!--]--> 3.0.9 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-0-8" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.0.8"><!--[--><!--]--> 3.0.8 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-0-7" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.0.7"><!--[--><!--]--> 3.0.7 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-0-6" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.0.6"><!--[--><!--]--> 3.0.6 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-0-5" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.0.5"><!--[--><!--]--> 3.0.5 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-0-4" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.0.4"><!--[--><!--]--> 3.0.4 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-0-3" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.0.3"><!--[--><!--]--> 3.0.3 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-0-2" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.0.2"><!--[--><!--]--> 3.0.2 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-0-1" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.0.1"><!--[--><!--]--> 3.0.1 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-0-0" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.0.0"><!--[--><!--]--> 3.0.0 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_2-1-0" class="router-link-active router-link-exact-active sidebar-item" aria-label="2.1.0"><!--[--><!--]--> 2.1.0 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_2-0-5" class="router-link-active router-link-exact-active sidebar-item" aria-label="2.0.5"><!--[--><!--]--> 2.0.5 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_2-0-4" class="router-link-active router-link-exact-active sidebar-item" aria-label="2.0.4"><!--[--><!--]--> 2.0.4 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_2-0-3" class="router-link-active router-link-exact-active sidebar-item" aria-label="2.0.3"><!--[--><!--]--> 2.0.3 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_2-0-2" class="router-link-active router-link-exact-active sidebar-item" aria-label="2.0.2"><!--[--><!--]--> 2.0.2 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_2-0-1" class="router-link-active router-link-exact-active sidebar-item" aria-label="2.0.1"><!--[--><!--]--> 2.0.1 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_2-0-0" class="router-link-active router-link-exact-active sidebar-item" aria-label="2.0.0"><!--[--><!--]--> 2.0.0 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_1-0-9" class="router-link-active router-link-exact-active sidebar-item" aria-label="1.0.9"><!--[--><!--]--> 1.0.9 <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><!--]--></ul><!--[--><!--]--></aside><!--]--><!--[--><main class="page"><!--[--><!--]--><div class="theme-default-content"><!--[--><h1 id="change-log" tabindex="-1"><a class="header-anchor" href="#change-log" aria-hidden="true">#</a> Change Log</h1><p>List the most significant changes, starting in version 1.0.9.</p><h2 id="_3-4-2" tabindex="-1"><a class="header-anchor" href="#_3-4-2" aria-hidden="true">#</a> 3.4.2</h2><ul><li>Fix bug in reset command. It did not reset daily data properly.</li></ul><h2 id="_3-4-1" tabindex="-1"><a class="header-anchor" href="#_3-4-1" aria-hidden="true">#</a> 3.4.1</h2><ul><li>Update examples</li><li>Update dependencies</li><li>Move doc to powersaver.no</li></ul><h2 id="_3-4-0" tabindex="-1"><a class="header-anchor" href="#_3-4-0" aria-hidden="true">#</a> 3.4.0</h2><ul><li>Added new strategy node Heat Capacitor</li></ul><h2 id="_3-3-2" tabindex="-1"><a class="header-anchor" href="#_3-3-2" aria-hidden="true">#</a> 3.3.2</h2><ul><li>Add command sendOutput.</li></ul><h2 id="_3-3-1" tabindex="-1"><a class="header-anchor" href="#_3-3-1" aria-hidden="true">#</a> 3.3.1</h2><ul><li>Move doc to <a href="power-saver.smoky.no">power-saver.smoky.no</a></li><li>Make tool to test the result of the best save node: <a href="/changelog/power-saver.smoky.no/faq/best-save-viewer.html" class="">Best Save Viewer</a></li></ul><h2 id="_3-3-0" tabindex="-1"><a class="header-anchor" href="#_3-3-0" aria-hidden="true">#</a> 3.3.0</h2><ul><li>Remove the config option to schedule from the current hour. The feature did not work, and it was not clear how it should work.</li><li>Added a dynamic command feature to make it possible to dynamically <ol><li>Tell the node to send the schedule to output 3.</li><li>Reset saved data making the next schedule to start without historical data.</li></ol></li><li>Fix node status so it says &quot;No price data&quot; when there is no price data available.</li><li>Added an FAQ section to the doc.</li></ul><h2 id="_3-2-3" tabindex="-1"><a class="header-anchor" href="#_3-2-3" aria-hidden="true">#</a> 3.2.3</h2><ul><li>Remove unused imports</li><li>Fix doc deployment issue</li></ul><h2 id="_3-2-2" tabindex="-1"><a class="header-anchor" href="#_3-2-2" aria-hidden="true">#</a> 3.2.2</h2><ul><li>New attempt to solve the problem with multiple outputs at the same time.</li></ul><h2 id="_3-2-1" tabindex="-1"><a class="header-anchor" href="#_3-2-1" aria-hidden="true">#</a> 3.2.1</h2><ul><li>Fix that may solve the problem with multiple outputs at the same time.</li></ul><h2 id="_3-2-0" tabindex="-1"><a class="header-anchor" href="#_3-2-0" aria-hidden="true">#</a> 3.2.0</h2><ul><li>Config can be sent on input to strategy nodes together with price data, in the same message.</li><li>The ps-receive-price and ps-xxx-add-tariff nodes pass config through from input to output.</li><li>Status on strategy nodes shows the time for the next change.</li></ul><h2 id="_3-1-2" tabindex="-1"><a class="header-anchor" href="#_3-1-2" aria-hidden="true">#</a> 3.1.2</h2><ul><li>Add time, version and current value to output from strategy nodes.</li></ul><h2 id="_3-1-1" tabindex="-1"><a class="header-anchor" href="#_3-1-1" aria-hidden="true">#</a> 3.1.1</h2><ul><li>Fix schedule for Lowest Price node so it uses data from previous day correctly. It sometimes failed when the selected period went over midnight.</li><li>Fix so old data in the Lowest Price node context is deleted.</li></ul><h2 id="_3-1-0" tabindex="-1"><a class="header-anchor" href="#_3-1-0" aria-hidden="true">#</a> 3.1.0</h2><ul><li>New node <code>ps-general-add-tariff</code> to add values that varies af fixed times during the day.</li></ul><h2 id="_3-0-10" tabindex="-1"><a class="header-anchor" href="#_3-0-10" aria-hidden="true">#</a> 3.0.10</h2><ul><li>Fix bug in ps-elvia-add-tariff so it connects to API.</li></ul><h2 id="_3-0-9" tabindex="-1"><a class="header-anchor" href="#_3-0-9" aria-hidden="true">#</a> 3.0.9</h2><ul><li>Fix Nord Pool input for current state node, to read data when payload is set to entity.</li></ul><h2 id="_3-0-8" tabindex="-1"><a class="header-anchor" href="#_3-0-8" aria-hidden="true">#</a> 3.0.8</h2><ul><li>Fix bug in Lowest Price node when period goes over midnight.</li><li>Fix documentation - lots of pages were failing.</li></ul><h2 id="_3-0-7" tabindex="-1"><a class="header-anchor" href="#_3-0-7" aria-hidden="true">#</a> 3.0.7</h2><ul><li>Fix Nord Pool current state node input.</li></ul><h2 id="_3-0-6" tabindex="-1"><a class="header-anchor" href="#_3-0-6" aria-hidden="true">#</a> 3.0.6</h2><ul><li>Remove non-existent node from package.json.</li></ul><h2 id="_3-0-5" tabindex="-1"><a class="header-anchor" href="#_3-0-5" aria-hidden="true">#</a> 3.0.5</h2><ul><li>Move dependencies to correct section (node_fetch and lodash.cloneDeep).</li></ul><h2 id="_3-0-4" tabindex="-1"><a class="header-anchor" href="#_3-0-4" aria-hidden="true">#</a> 3.0.4</h2><ul><li>Remove <code>null</code>-values from Nord Pool data for <code>tomorrow</code>.</li></ul><h2 id="_3-0-3" tabindex="-1"><a class="header-anchor" href="#_3-0-3" aria-hidden="true">#</a> 3.0.3</h2><ul><li>Fix bug in lowest price strategy, when period ends at midnight.</li><li>Fix labels for hours on, so they do not have leading zero.</li><li>Fix so source should be visible in output 3.</li></ul><h2 id="_3-0-2" tabindex="-1"><a class="header-anchor" href="#_3-0-2" aria-hidden="true">#</a> 3.0.2</h2><ul><li>Bugfix in Lowest Price node (not successful)</li></ul><h2 id="_3-0-1" tabindex="-1"><a class="header-anchor" href="#_3-0-1" aria-hidden="true">#</a> 3.0.1</h2><ul><li>Fix so elvia subscription key is stored as credential</li><li>Fix bug on config for strategy nodes. Config was not saved properly.</li><li>Remove double output bug, and better handling when hoursOn &gt; period</li></ul><h2 id="_3-0-0" tabindex="-1"><a class="header-anchor" href="#_3-0-0" aria-hidden="true">#</a> 3.0.0</h2><ul><li>Deprecating old Power Saver node, adding multiple new nodes.</li><li>New node <code>ps-strategy-best-save</code> is replacing old node <code>Power Saver</code> together with the new <code>ps-receive-price</code> node.</li><li>Add new strategy node: <code>ps-strategy-lowest-price</code>.</li><li>Add new node: <code>ps-receive-price</code>.</li><li>Add grid tariff for Elvia customers, using the <code>ps-elvia-add-tariff</code> node.</li><li>New documentation.</li><li>Change node category to Power Saver.</li></ul><h2 id="_2-1-0" tabindex="-1"><a class="header-anchor" href="#_2-1-0" aria-hidden="true">#</a> 2.1.0</h2><ul><li>Accept config as input, making it possible to dynamically change config</li><li>Fix dropdown for config value for selecting output when there is no schedule</li><li>Improve config screen and documentation</li></ul><h2 id="_2-0-5" tabindex="-1"><a class="header-anchor" href="#_2-0-5" aria-hidden="true">#</a> 2.0.5</h2><ul><li>Update links to examples</li></ul><h2 id="_2-0-4" tabindex="-1"><a class="header-anchor" href="#_2-0-4" aria-hidden="true">#</a> 2.0.4</h2><ul><li>Update doc and add examples</li></ul><h2 id="_2-0-3" tabindex="-1"><a class="header-anchor" href="#_2-0-3" aria-hidden="true">#</a> 2.0.3</h2><ul><li>Bugfix</li></ul><h2 id="_2-0-2" tabindex="-1"><a class="header-anchor" href="#_2-0-2" aria-hidden="true">#</a> 2.0.2</h2><ul><li>Fix so Nord Pool data can be read directly from the current state node</li></ul><h2 id="_2-0-1" tabindex="-1"><a class="header-anchor" href="#_2-0-1" aria-hidden="true">#</a> 2.0.1</h2><ul><li>Fix bug that caused no schedule</li><li>Add config to output</li></ul><h2 id="_2-0-0" tabindex="-1"><a class="header-anchor" href="#_2-0-0" aria-hidden="true">#</a> 2.0.0</h2><ul><li>New and better algorithm to calculate savings, resulting in a better schedule.</li><li>Removed possibility to configure maximum hours to save per day, as this does not really make much sense.</li><li>Round savings to 4 decimals.</li><li>Set last savings hour to null when 0.</li></ul><h2 id="_1-0-9" tabindex="-1"><a class="header-anchor" href="#_1-0-9" aria-hidden="true">#</a> 1.0.9</h2><ul><li>Fix bug in saving last hour of the day.</li></ul><!--]--></div><footer class="page-meta"><!----><div class="meta-item last-updated"><span class="meta-item-label">Last Updated: </span><!----></div><!----></footer><!----><!--[--><!--]--></main><!--]--></div><!----><!--]--></div>
31
- <script src="/assets/js/runtime~app.f6ac32d7.js" defer></script><script src="/assets/js/405.f4edd94d.js" defer></script><script src="/assets/js/app.6c6c1409.js" defer></script>
30
+ <div id="app"><!--[--><div class="theme-container"><!--[--><header ref_key="navbar" class="navbar"><div class="toggle-sidebar-button" title="toggle sidebar" aria-expanded="false" role="button" tabindex="0"><div class="icon" aria-hidden="true"><span></span><span></span><span></span></div></div><span><a href="/" class=""><img class="logo" src="/Ukraine-heart-shape-flag.png" alt="Power Saver"><span class="site-name can-hide">Power Saver</span></a></span><div class="navbar-items-wrapper" style=""><!--[--><!--]--><nav class="navbar-items can-hide"><!--[--><div class="navbar-item"><a href="/guide/" class="" aria-label="Guide"><!--[--><!--]--> Guide <!--[--><!--]--></a></div><div class="navbar-item"><a href="/nodes/" class="" aria-label="Nodes"><!--[--><!--]--> Nodes <!--[--><!--]--></a></div><div class="navbar-item"><a href="/examples/" class="" aria-label="Examples"><!--[--><!--]--> Examples <!--[--><!--]--></a></div><div class="navbar-item"><a href="/faq/" class="" aria-label="FAQ"><!--[--><!--]--> FAQ <!--[--><!--]--></a></div><div class="navbar-item"><a href="/contribute/" class="" aria-label="Contribute"><!--[--><!--]--> Contribute <!--[--><!--]--></a></div><div class="navbar-item"><a aria-current="page" href="/changelog/" class="router-link-active router-link-exact-active router-link-active" aria-label="Changes"><!--[--><!--]--> Changes <!--[--><!--]--></a></div><div class="navbar-item"><a class="external-link" href="https://github.com/ottopaulsen/node-red-contrib-power-saver" rel="noopener noreferrer" target="_blank" aria-label="GitHub"><!--[--><!--]--> GitHub <span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span><!--[--><!--]--></a></div><!--]--></nav><!--[--><!--]--><button class="toggle-dark-button" title="toggle dark mode"><svg style="" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg style="display:none;" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button><!----></div></header><!--]--><div class="sidebar-mask"></div><!--[--><aside class="sidebar"><nav class="navbar-items"><!--[--><div class="navbar-item"><a href="/guide/" class="" aria-label="Guide"><!--[--><!--]--> Guide <!--[--><!--]--></a></div><div class="navbar-item"><a href="/nodes/" class="" aria-label="Nodes"><!--[--><!--]--> Nodes <!--[--><!--]--></a></div><div class="navbar-item"><a href="/examples/" class="" aria-label="Examples"><!--[--><!--]--> Examples <!--[--><!--]--></a></div><div class="navbar-item"><a href="/faq/" class="" aria-label="FAQ"><!--[--><!--]--> FAQ <!--[--><!--]--></a></div><div class="navbar-item"><a href="/contribute/" class="" aria-label="Contribute"><!--[--><!--]--> Contribute <!--[--><!--]--></a></div><div class="navbar-item"><a aria-current="page" href="/changelog/" class="router-link-active router-link-exact-active router-link-active" aria-label="Changes"><!--[--><!--]--> Changes <!--[--><!--]--></a></div><div class="navbar-item"><a class="external-link" href="https://github.com/ottopaulsen/node-red-contrib-power-saver" rel="noopener noreferrer" target="_blank" aria-label="GitHub"><!--[--><!--]--> GitHub <span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span><!--[--><!--]--></a></div><!--]--></nav><!--[--><!--]--><ul class="sidebar-items"><!--[--><li><p tabindex="0" class="sidebar-item sidebar-heading">Change Log <!----></p><!--[--><ul style="" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/changelog/#_3-4-3" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.4.3"><!--[--><!--]--> 3.4.3 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-4-2" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.4.2"><!--[--><!--]--> 3.4.2 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-4-1" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.4.1"><!--[--><!--]--> 3.4.1 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-4-0" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.4.0"><!--[--><!--]--> 3.4.0 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-3-2" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.3.2"><!--[--><!--]--> 3.3.2 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-3-1" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.3.1"><!--[--><!--]--> 3.3.1 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-3-0" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.3.0"><!--[--><!--]--> 3.3.0 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-2-3" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.2.3"><!--[--><!--]--> 3.2.3 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-2-2" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.2.2"><!--[--><!--]--> 3.2.2 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-2-1" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.2.1"><!--[--><!--]--> 3.2.1 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-2-0" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.2.0"><!--[--><!--]--> 3.2.0 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-1-2" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.1.2"><!--[--><!--]--> 3.1.2 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-1-1" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.1.1"><!--[--><!--]--> 3.1.1 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-1-0" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.1.0"><!--[--><!--]--> 3.1.0 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-0-10" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.0.10"><!--[--><!--]--> 3.0.10 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-0-9" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.0.9"><!--[--><!--]--> 3.0.9 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-0-8" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.0.8"><!--[--><!--]--> 3.0.8 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-0-7" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.0.7"><!--[--><!--]--> 3.0.7 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-0-6" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.0.6"><!--[--><!--]--> 3.0.6 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-0-5" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.0.5"><!--[--><!--]--> 3.0.5 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-0-4" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.0.4"><!--[--><!--]--> 3.0.4 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-0-3" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.0.3"><!--[--><!--]--> 3.0.3 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-0-2" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.0.2"><!--[--><!--]--> 3.0.2 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-0-1" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.0.1"><!--[--><!--]--> 3.0.1 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_3-0-0" class="router-link-active router-link-exact-active sidebar-item" aria-label="3.0.0"><!--[--><!--]--> 3.0.0 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_2-1-0" class="router-link-active router-link-exact-active sidebar-item" aria-label="2.1.0"><!--[--><!--]--> 2.1.0 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_2-0-5" class="router-link-active router-link-exact-active sidebar-item" aria-label="2.0.5"><!--[--><!--]--> 2.0.5 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_2-0-4" class="router-link-active router-link-exact-active sidebar-item" aria-label="2.0.4"><!--[--><!--]--> 2.0.4 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_2-0-3" class="router-link-active router-link-exact-active sidebar-item" aria-label="2.0.3"><!--[--><!--]--> 2.0.3 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_2-0-2" class="router-link-active router-link-exact-active sidebar-item" aria-label="2.0.2"><!--[--><!--]--> 2.0.2 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_2-0-1" class="router-link-active router-link-exact-active sidebar-item" aria-label="2.0.1"><!--[--><!--]--> 2.0.1 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_2-0-0" class="router-link-active router-link-exact-active sidebar-item" aria-label="2.0.0"><!--[--><!--]--> 2.0.0 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/changelog/#_1-0-9" class="router-link-active router-link-exact-active sidebar-item" aria-label="1.0.9"><!--[--><!--]--> 1.0.9 <!--[--><!--]--></a><!----></li><!--]--></ul><!--]--></li><!--]--></ul><!--[--><!--]--></aside><!--]--><!--[--><main class="page"><!--[--><!--]--><div class="theme-default-content"><!--[--><h1 id="change-log" tabindex="-1"><a class="header-anchor" href="#change-log" aria-hidden="true">#</a> Change Log</h1><p>List the most significant changes, starting in version 1.0.9.</p><h2 id="_3-4-3" tabindex="-1"><a class="header-anchor" href="#_3-4-3" aria-hidden="true">#</a> 3.4.3</h2><ul><li>Fix Elvia config so it can be used independently on any node.</li></ul><h2 id="_3-4-2" tabindex="-1"><a class="header-anchor" href="#_3-4-2" aria-hidden="true">#</a> 3.4.2</h2><ul><li>Fix bug in reset command. It did not reset daily data properly.</li></ul><h2 id="_3-4-1" tabindex="-1"><a class="header-anchor" href="#_3-4-1" aria-hidden="true">#</a> 3.4.1</h2><ul><li>Update examples</li><li>Update dependencies</li><li>Move doc to powersaver.no</li></ul><h2 id="_3-4-0" tabindex="-1"><a class="header-anchor" href="#_3-4-0" aria-hidden="true">#</a> 3.4.0</h2><ul><li>Added new strategy node Heat Capacitor</li></ul><h2 id="_3-3-2" tabindex="-1"><a class="header-anchor" href="#_3-3-2" aria-hidden="true">#</a> 3.3.2</h2><ul><li>Add command sendOutput.</li></ul><h2 id="_3-3-1" tabindex="-1"><a class="header-anchor" href="#_3-3-1" aria-hidden="true">#</a> 3.3.1</h2><ul><li>Move doc to <a href="power-saver.smoky.no">power-saver.smoky.no</a></li><li>Make tool to test the result of the best save node: <a href="/changelog/power-saver.smoky.no/faq/best-save-viewer.html" class="">Best Save Viewer</a></li></ul><h2 id="_3-3-0" tabindex="-1"><a class="header-anchor" href="#_3-3-0" aria-hidden="true">#</a> 3.3.0</h2><ul><li>Remove the config option to schedule from the current hour. The feature did not work, and it was not clear how it should work.</li><li>Added a dynamic command feature to make it possible to dynamically <ol><li>Tell the node to send the schedule to output 3.</li><li>Reset saved data making the next schedule to start without historical data.</li></ol></li><li>Fix node status so it says &quot;No price data&quot; when there is no price data available.</li><li>Added an FAQ section to the doc.</li></ul><h2 id="_3-2-3" tabindex="-1"><a class="header-anchor" href="#_3-2-3" aria-hidden="true">#</a> 3.2.3</h2><ul><li>Remove unused imports</li><li>Fix doc deployment issue</li></ul><h2 id="_3-2-2" tabindex="-1"><a class="header-anchor" href="#_3-2-2" aria-hidden="true">#</a> 3.2.2</h2><ul><li>New attempt to solve the problem with multiple outputs at the same time.</li></ul><h2 id="_3-2-1" tabindex="-1"><a class="header-anchor" href="#_3-2-1" aria-hidden="true">#</a> 3.2.1</h2><ul><li>Fix that may solve the problem with multiple outputs at the same time.</li></ul><h2 id="_3-2-0" tabindex="-1"><a class="header-anchor" href="#_3-2-0" aria-hidden="true">#</a> 3.2.0</h2><ul><li>Config can be sent on input to strategy nodes together with price data, in the same message.</li><li>The ps-receive-price and ps-xxx-add-tariff nodes pass config through from input to output.</li><li>Status on strategy nodes shows the time for the next change.</li></ul><h2 id="_3-1-2" tabindex="-1"><a class="header-anchor" href="#_3-1-2" aria-hidden="true">#</a> 3.1.2</h2><ul><li>Add time, version and current value to output from strategy nodes.</li></ul><h2 id="_3-1-1" tabindex="-1"><a class="header-anchor" href="#_3-1-1" aria-hidden="true">#</a> 3.1.1</h2><ul><li>Fix schedule for Lowest Price node so it uses data from previous day correctly. It sometimes failed when the selected period went over midnight.</li><li>Fix so old data in the Lowest Price node context is deleted.</li></ul><h2 id="_3-1-0" tabindex="-1"><a class="header-anchor" href="#_3-1-0" aria-hidden="true">#</a> 3.1.0</h2><ul><li>New node <code>ps-general-add-tariff</code> to add values that varies af fixed times during the day.</li></ul><h2 id="_3-0-10" tabindex="-1"><a class="header-anchor" href="#_3-0-10" aria-hidden="true">#</a> 3.0.10</h2><ul><li>Fix bug in ps-elvia-add-tariff so it connects to API.</li></ul><h2 id="_3-0-9" tabindex="-1"><a class="header-anchor" href="#_3-0-9" aria-hidden="true">#</a> 3.0.9</h2><ul><li>Fix Nord Pool input for current state node, to read data when payload is set to entity.</li></ul><h2 id="_3-0-8" tabindex="-1"><a class="header-anchor" href="#_3-0-8" aria-hidden="true">#</a> 3.0.8</h2><ul><li>Fix bug in Lowest Price node when period goes over midnight.</li><li>Fix documentation - lots of pages were failing.</li></ul><h2 id="_3-0-7" tabindex="-1"><a class="header-anchor" href="#_3-0-7" aria-hidden="true">#</a> 3.0.7</h2><ul><li>Fix Nord Pool current state node input.</li></ul><h2 id="_3-0-6" tabindex="-1"><a class="header-anchor" href="#_3-0-6" aria-hidden="true">#</a> 3.0.6</h2><ul><li>Remove non-existent node from package.json.</li></ul><h2 id="_3-0-5" tabindex="-1"><a class="header-anchor" href="#_3-0-5" aria-hidden="true">#</a> 3.0.5</h2><ul><li>Move dependencies to correct section (node_fetch and lodash.cloneDeep).</li></ul><h2 id="_3-0-4" tabindex="-1"><a class="header-anchor" href="#_3-0-4" aria-hidden="true">#</a> 3.0.4</h2><ul><li>Remove <code>null</code>-values from Nord Pool data for <code>tomorrow</code>.</li></ul><h2 id="_3-0-3" tabindex="-1"><a class="header-anchor" href="#_3-0-3" aria-hidden="true">#</a> 3.0.3</h2><ul><li>Fix bug in lowest price strategy, when period ends at midnight.</li><li>Fix labels for hours on, so they do not have leading zero.</li><li>Fix so source should be visible in output 3.</li></ul><h2 id="_3-0-2" tabindex="-1"><a class="header-anchor" href="#_3-0-2" aria-hidden="true">#</a> 3.0.2</h2><ul><li>Bugfix in Lowest Price node (not successful)</li></ul><h2 id="_3-0-1" tabindex="-1"><a class="header-anchor" href="#_3-0-1" aria-hidden="true">#</a> 3.0.1</h2><ul><li>Fix so elvia subscription key is stored as credential</li><li>Fix bug on config for strategy nodes. Config was not saved properly.</li><li>Remove double output bug, and better handling when hoursOn &gt; period</li></ul><h2 id="_3-0-0" tabindex="-1"><a class="header-anchor" href="#_3-0-0" aria-hidden="true">#</a> 3.0.0</h2><ul><li>Deprecating old Power Saver node, adding multiple new nodes.</li><li>New node <code>ps-strategy-best-save</code> is replacing old node <code>Power Saver</code> together with the new <code>ps-receive-price</code> node.</li><li>Add new strategy node: <code>ps-strategy-lowest-price</code>.</li><li>Add new node: <code>ps-receive-price</code>.</li><li>Add grid tariff for Elvia customers, using the <code>ps-elvia-add-tariff</code> node.</li><li>New documentation.</li><li>Change node category to Power Saver.</li></ul><h2 id="_2-1-0" tabindex="-1"><a class="header-anchor" href="#_2-1-0" aria-hidden="true">#</a> 2.1.0</h2><ul><li>Accept config as input, making it possible to dynamically change config</li><li>Fix dropdown for config value for selecting output when there is no schedule</li><li>Improve config screen and documentation</li></ul><h2 id="_2-0-5" tabindex="-1"><a class="header-anchor" href="#_2-0-5" aria-hidden="true">#</a> 2.0.5</h2><ul><li>Update links to examples</li></ul><h2 id="_2-0-4" tabindex="-1"><a class="header-anchor" href="#_2-0-4" aria-hidden="true">#</a> 2.0.4</h2><ul><li>Update doc and add examples</li></ul><h2 id="_2-0-3" tabindex="-1"><a class="header-anchor" href="#_2-0-3" aria-hidden="true">#</a> 2.0.3</h2><ul><li>Bugfix</li></ul><h2 id="_2-0-2" tabindex="-1"><a class="header-anchor" href="#_2-0-2" aria-hidden="true">#</a> 2.0.2</h2><ul><li>Fix so Nord Pool data can be read directly from the current state node</li></ul><h2 id="_2-0-1" tabindex="-1"><a class="header-anchor" href="#_2-0-1" aria-hidden="true">#</a> 2.0.1</h2><ul><li>Fix bug that caused no schedule</li><li>Add config to output</li></ul><h2 id="_2-0-0" tabindex="-1"><a class="header-anchor" href="#_2-0-0" aria-hidden="true">#</a> 2.0.0</h2><ul><li>New and better algorithm to calculate savings, resulting in a better schedule.</li><li>Removed possibility to configure maximum hours to save per day, as this does not really make much sense.</li><li>Round savings to 4 decimals.</li><li>Set last savings hour to null when 0.</li></ul><h2 id="_1-0-9" tabindex="-1"><a class="header-anchor" href="#_1-0-9" aria-hidden="true">#</a> 1.0.9</h2><ul><li>Fix bug in saving last hour of the day.</li></ul><!--]--></div><footer class="page-meta"><!----><div class="meta-item last-updated"><span class="meta-item-label">Last Updated: </span><!----></div><!----></footer><!----><!--[--><!--]--></main><!--]--></div><!----><!--]--></div>
31
+ <script type="module" src="/assets/app.b3d8926b.js" defer></script>
32
32
  </body>
33
33
  </html>