node-red-contrib-power-saver 3.3.0 → 3.4.1

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 (146) hide show
  1. package/.firebase/hosting.ZG9jcy8udnVlcHJlc3MvZGlzdA.cache +221 -0
  2. package/.firebaserc +5 -0
  3. package/.github/workflows/firebase-hosting-merge.yml +20 -0
  4. package/.github/workflows/firebase-hosting-pull-request.yml +17 -0
  5. package/CHANGELOG.md +1 -1
  6. package/README.md +1 -1
  7. package/docs/.vuepress/clientAppEnhance.js +5 -0
  8. package/docs/.vuepress/components/BestSaveVerificator.vue +306 -0
  9. package/docs/.vuepress/components/DonateButtons.vue +87 -0
  10. package/docs/.vuepress/config.js +40 -7
  11. package/docs/.vuepress/dist/404.html +24 -6
  12. package/docs/.vuepress/dist/assets/css/835.styles.c5afb22b.css +1 -0
  13. package/docs/.vuepress/dist/assets/css/896.styles.21a80cb6.css +1 -0
  14. package/docs/.vuepress/dist/assets/css/styles.1c48cbd0.css +10 -0
  15. package/docs/.vuepress/dist/assets/img/best-save-config.79a2f39a.png +0 -0
  16. package/docs/.vuepress/dist/assets/img/copy-payload-best-save.b9192985.png +0 -0
  17. package/docs/.vuepress/dist/assets/img/heat-capacitor-temperatureVsPrice.6e74905b.png +0 -0
  18. package/docs/.vuepress/dist/assets/img/node-ps-strategy-heat-capacitor-cascade-control.2e75ed9e.png +0 -0
  19. package/docs/.vuepress/dist/assets/img/node-ps-strategy-heat-capacitor-simple-flow-example.29d9bf59.png +0 -0
  20. package/docs/.vuepress/dist/assets/img/oven-setpoint-calculation.5bda0eec.png +0 -0
  21. package/docs/.vuepress/dist/assets/img/overshoot-time.b3b5d70e.png +0 -0
  22. package/docs/.vuepress/dist/assets/js/229.5c5378fa.js +1 -0
  23. package/docs/.vuepress/dist/assets/js/331.872104cd.js +1 -0
  24. package/docs/.vuepress/dist/assets/js/405.f4edd94d.js +2 -0
  25. package/docs/.vuepress/dist/assets/js/{812.79dad458.js.LICENSE.txt → 405.f4edd94d.js.LICENSE.txt} +0 -0
  26. package/docs/.vuepress/dist/assets/js/490.1e639e05.js +1 -0
  27. package/docs/.vuepress/dist/assets/js/{491.c183eba3.js → 491.bd938119.js} +1 -1
  28. package/docs/.vuepress/dist/assets/js/555.d8963d84.js +1 -0
  29. package/docs/.vuepress/dist/assets/js/811.5f659592.js +1 -0
  30. package/docs/.vuepress/dist/assets/js/app.999deae8.js +1 -0
  31. package/docs/.vuepress/dist/assets/js/runtime~app.1774b667.js +1 -0
  32. package/docs/.vuepress/dist/assets/js/v-0607240a.1304cbb6.js +1 -0
  33. package/docs/.vuepress/dist/assets/js/v-08683c60.52e94cb6.js +1 -0
  34. package/docs/.vuepress/dist/assets/js/v-0aca7ba6.cac5d4b9.js +1 -0
  35. package/docs/.vuepress/dist/assets/js/v-0b5e3c8c.18561f6e.js +1 -0
  36. package/docs/.vuepress/dist/assets/js/v-1ad821fa.6697a349.js +1 -0
  37. package/docs/.vuepress/dist/assets/js/v-1b3a0ab8.c6c4e19b.js +1 -0
  38. package/docs/.vuepress/dist/assets/js/v-1e2b191e.07b8ab21.js +1 -0
  39. package/docs/.vuepress/dist/assets/js/v-29504124.00be7399.js +1 -0
  40. package/docs/.vuepress/dist/assets/js/v-30acb564.28af12af.js +1 -0
  41. package/docs/.vuepress/dist/assets/js/{v-3706649a.d7f73384.js → v-3706649a.c76d575b.js} +1 -1
  42. package/docs/.vuepress/dist/assets/js/v-4637f9e4.d334c29a.js +1 -0
  43. package/docs/.vuepress/dist/assets/js/v-4c28314d.8cbb0f9d.js +1 -0
  44. package/docs/.vuepress/dist/assets/js/v-510ed0d4.14f08cf3.js +1 -0
  45. package/docs/.vuepress/dist/assets/js/{v-5954bcb2.182daf70.js → v-5954bcb2.dff3fc67.js} +1 -1
  46. package/docs/.vuepress/dist/assets/js/v-5db8da3a.e5e6d7a6.js +1 -0
  47. package/docs/.vuepress/dist/assets/js/v-61f728ca.81968036.js +1 -0
  48. package/docs/.vuepress/dist/assets/js/v-677dfaed.c159b0f4.js +1 -0
  49. package/docs/.vuepress/dist/assets/js/v-7446a652.88afb5e4.js +1 -0
  50. package/docs/.vuepress/dist/assets/js/v-7c87f26e.8ed52391.js +1 -0
  51. package/docs/.vuepress/dist/assets/js/v-84304104.ad4da2d5.js +1 -0
  52. package/docs/.vuepress/dist/assets/js/{v-8daa1a0e.dde202c9.js → v-8daa1a0e.ed84ca09.js} +1 -1
  53. package/docs/.vuepress/dist/assets/js/{v-b4a42144.9e5f9728.js → v-b4a42144.9a2a0c9f.js} +1 -1
  54. package/docs/.vuepress/dist/assets/js/v-e8c55052.b7d52fc6.js +1 -0
  55. package/docs/.vuepress/dist/assets/js/v-fffb8e28.d09ab959.js +1 -0
  56. package/docs/.vuepress/dist/changelog/index.html +24 -6
  57. package/docs/.vuepress/dist/contribute/index.html +24 -6
  58. package/docs/.vuepress/dist/examples/example-cascade-temperature-control.html +304 -0
  59. package/docs/.vuepress/dist/examples/example-heat-capacitor.html +247 -0
  60. package/docs/.vuepress/dist/examples/example-next-schedule-entity.html +28 -10
  61. package/docs/.vuepress/dist/examples/example-nordpool-current-state.html +25 -8
  62. package/docs/.vuepress/dist/examples/example-nordpool-events-state.html +25 -7
  63. package/docs/.vuepress/dist/examples/example-tibber-mqtt.html +25 -8
  64. package/docs/.vuepress/dist/examples/index.html +24 -6
  65. package/docs/.vuepress/dist/faq/best-save-viewer.html +33 -0
  66. package/docs/.vuepress/dist/faq/index.html +24 -6
  67. package/docs/.vuepress/dist/guide/index.html +25 -7
  68. package/docs/.vuepress/dist/index.html +24 -6
  69. package/docs/.vuepress/dist/nodes/index.html +24 -6
  70. package/docs/.vuepress/dist/nodes/old-power-saver-doc.html +26 -8
  71. package/docs/.vuepress/dist/nodes/power-saver.html +24 -6
  72. package/docs/.vuepress/dist/nodes/ps-elvia-add-tariff.html +24 -6
  73. package/docs/.vuepress/dist/nodes/ps-general-add-tariff.html +24 -6
  74. package/docs/.vuepress/dist/nodes/ps-receive-price.html +27 -9
  75. package/docs/.vuepress/dist/nodes/ps-strategy-best-save.html +46 -9
  76. package/docs/.vuepress/dist/nodes/ps-strategy-heat-capacitor.html +260 -0
  77. package/docs/.vuepress/dist/nodes/ps-strategy-lowest-price.html +41 -8
  78. package/docs/.vuepress/dist/nodes/strategy-input.html +25 -7
  79. package/docs/README.md +4 -1
  80. package/docs/changelog/README.md +19 -0
  81. package/docs/contribute/README.md +11 -3
  82. package/docs/examples/README.md +8 -2
  83. package/docs/examples/example-cascade-temperature-control.md +346 -0
  84. package/docs/examples/example-heat-capacitor.md +271 -0
  85. package/docs/faq/README.md +23 -0
  86. package/docs/faq/best-save-viewer.md +61 -0
  87. package/docs/images/copy-payload-best-save.png +0 -0
  88. package/docs/images/heat-capacitor-temperatureVsPrice.png +0 -0
  89. package/docs/images/node-ps-strategy-heat-capacitor-cascade-control.png +0 -0
  90. package/docs/images/node-ps-strategy-heat-capacitor-simple-flow-example.png +0 -0
  91. package/docs/images/node-ps-strategy-heat-capacitor.png +0 -0
  92. package/docs/images/oven-setpoint-calculation.png +0 -0
  93. package/docs/images/overshoot-time.png +0 -0
  94. package/docs/images/temperature-manipulation-config.png +0 -0
  95. package/docs/nodes/README.md +7 -1
  96. package/docs/nodes/ps-strategy-best-save.md +18 -0
  97. package/docs/nodes/ps-strategy-heat-capacitor.md +346 -0
  98. package/docs/nodes/ps-strategy-lowest-price.md +14 -0
  99. package/examples/add-general-tariff.json +103 -0
  100. package/examples/best-save-for-water-heater.json +140 -0
  101. package/examples/elvia-add-tariff.json +99 -0
  102. package/examples/elvia-get-tariff-types.json +58 -0
  103. package/examples/elvia-get-tariff.json +60 -0
  104. package/examples/heat-capacitor-for-room-heating.json +186 -0
  105. package/examples/lowest-price-for-heating-cables.json +159 -0
  106. package/firebase.json +6 -0
  107. package/package.json +20 -8
  108. package/public/404.html +33 -0
  109. package/public/index.html +89 -0
  110. package/src/elvia/elvia-tariff.js +2 -1
  111. package/src/handle-input.js +2 -2
  112. package/src/strategy-heat-capacitor-functions.js +246 -0
  113. package/src/strategy-heat-capacitor.html +85 -0
  114. package/src/strategy-heat-capacitor.js +125 -0
  115. package/test/data/converted-prices.json +1 -1
  116. package/test/data/multiple-trades.json +53 -0
  117. package/test/data/tibber-decreasing-24h.json +101 -0
  118. package/test/data/tibber-decreasing2-24h.json +101 -0
  119. package/test/strategy-best-save.test.js +14 -8
  120. package/test/strategy-heat-capacitor-node.test.js +183 -0
  121. package/test/strategy-heat-capacitor.test.js +103 -0
  122. package/test/strategy-lowest-price-functions.test.js +1 -1
  123. package/test/utils.test.js +0 -2
  124. package/docs/.vuepress/dist/.nojekyll +0 -0
  125. package/docs/.vuepress/dist/assets/css/styles.e835bef6.css +0 -8
  126. package/docs/.vuepress/dist/assets/img/best-save-config.93fa3c21.png +0 -0
  127. package/docs/.vuepress/dist/assets/js/293.5e967839.js +0 -1
  128. package/docs/.vuepress/dist/assets/js/812.79dad458.js +0 -2
  129. package/docs/.vuepress/dist/assets/js/app.49ad6d54.js +0 -1
  130. package/docs/.vuepress/dist/assets/js/runtime~app.547d0f4e.js +0 -1
  131. package/docs/.vuepress/dist/assets/js/v-0607240a.661e1808.js +0 -1
  132. package/docs/.vuepress/dist/assets/js/v-08683c60.a6b9cf5b.js +0 -1
  133. package/docs/.vuepress/dist/assets/js/v-0aca7ba6.b42fad7f.js +0 -1
  134. package/docs/.vuepress/dist/assets/js/v-0b5e3c8c.3b37457f.js +0 -1
  135. package/docs/.vuepress/dist/assets/js/v-1ad821fa.6e2194d0.js +0 -1
  136. package/docs/.vuepress/dist/assets/js/v-1e2b191e.98cc227b.js +0 -1
  137. package/docs/.vuepress/dist/assets/js/v-30acb564.f2fcd69f.js +0 -1
  138. package/docs/.vuepress/dist/assets/js/v-4637f9e4.b320f5e8.js +0 -1
  139. package/docs/.vuepress/dist/assets/js/v-510ed0d4.3c7e0056.js +0 -1
  140. package/docs/.vuepress/dist/assets/js/v-5db8da3a.f2de6cb9.js +0 -1
  141. package/docs/.vuepress/dist/assets/js/v-61f728ca.6fdbbb92.js +0 -1
  142. package/docs/.vuepress/dist/assets/js/v-677dfaed.0013f083.js +0 -1
  143. package/docs/.vuepress/dist/assets/js/v-7446a652.d05e2648.js +0 -1
  144. package/docs/.vuepress/dist/assets/js/v-7c87f26e.1127dcf5.js +0 -1
  145. package/docs/.vuepress/dist/assets/js/v-e8c55052.8384b053.js +0 -1
  146. package/docs/.vuepress/dist/assets/js/v-fffb8e28.3406fd88.js +0 -1
@@ -0,0 +1,221 @@
1
+ 404.html,1644523149664,02c8d10f139b3bedd3496f42cc673b0927aa6628e1c0499d07bfbe0ad32dfaa3
2
+ euro.png,1644523146031,e6a1d246a05e447333de6e1099b1c3a5ae8ad050b2389e51ff53289e4dc1b8e4
3
+ .git/COMMIT_EDITMSG,1644523150276,286e4fcaf917616edf5674b053ae78c0dd65e626c7075fc3ea0e4a4a5934dcd3
4
+ .git/config,1644523150101,9293b175b921ccc4a4cfc1c245f70600940d48b639a86185201959a7a6acb946
5
+ .git/HEAD,1644523150096,0a82a7459f034a38a724938ef8ab5294be7784a5364b058c89aa3b41697f4874
6
+ .git/description,1644523149900,3cdc7b6a29de07f63b76d16b9911d93468000346945f759d4f6456660b5c113b
7
+ .git/hooks/commit-msg.sample,1644523149959,4df962ba3955944bec38b211351c73f083d7b0e5360a5d3d76a49548e7314f9e
8
+ index.html,1644523148947,a4cd34d4adbb1b015f36d300ffe7e292e616beee6413f135643b56c30ef9d859
9
+ .git/hooks/fsmonitor-watchman.sample,1644523150014,b3931ea5b83e0dfda7200fdf713bba46b1e29a609f4e0aadf123fd5406f14583
10
+ .git/hooks/pre-merge-commit.sample,1644523150054,0479d217dc6329cbba403c8254db7b9ee6c028f62f55db3641b0690373679b25
11
+ .git/hooks/pre-applypatch.sample,1644523150063,defbdbcdbf096439878474d3b12ed4b5a63dec7400ecde5f4b60a496391d64d0
12
+ .git/hooks/post-update.sample,1644523150044,3d5b0c2026371e835c791d4b25099e98b1d507971ed6bfb639ae56a321309aeb
13
+ .git/hooks/pre-commit.sample,1644523149996,c9debccbcaffa725c95e8cfb31e37163d60cbc84c07c85e23fb0fad63778acc3
14
+ .git/hooks/prepare-commit-msg.sample,1644523150034,9b3c070fc0608b04e690a7dd7c17419759fbed06932985aed32e306418e86ed2
15
+ .git/hooks/pre-receive.sample,1644523150024,b703160503002ea73605a1b54a8183989f66e6530c125fbd1595339048ebd856
16
+ .git/hooks/pre-push.sample,1644523150075,ec7dbdf4bb867f5032404e185b8430514836107dacb99d273857f289417ddd13
17
+ .git/index,1644523150275,96b5e971e9767639b9b127b4a7b5a79d0ec078293da5bb915b4eab6cc2f26bb7
18
+ .git/info/exclude,1644523149900,a362e375cc3330f10d115cfeb0f90a325219d80a764d57e2c4873f78d1d0b4f5
19
+ .git/hooks/applypatch-msg.sample,1644523150005,91b94f5feaf0e4d2e6e7808a9188384a4300adf024fa24c48547ee87c64d6558
20
+ .git/logs/HEAD,1644523150282,0785e239694b1b2645be954104e8633d63d8f67c7ef78a3d168384bee96e7fd8
21
+ .git/logs/refs/heads/master,1644523150282,0785e239694b1b2645be954104e8633d63d8f67c7ef78a3d168384bee96e7fd8
22
+ .git/hooks/update.sample,1644523150086,f66202d06c7959d02a35955a052261db5453db0bdb50162c78e1a9860b33013f
23
+ .git/objects/07/9bac81ba245c4cba5e035aa99cc75c9526d45c,1644523150203,33f59d0940ba516a81ce3d8ec7b59396b81780cbfc4065bed1734d3698a5dd7a
24
+ .git/hooks/pre-rebase.sample,1644523149993,b3f2e1f9de52a3895458d3a6f5e5a1ad139f688bcbc358d6e9d31888f7e84829
25
+ .git/objects/0c/f65b4221a19c00fce01e5ee8b59933d96a0872,1644523150221,1ed11a053bece46f38bfcf7874607ffce4751d7d1b3cd51d4da9f2c2b5e7f497
26
+ .git/objects/08/81503e619666400156f8439bd294f2e088db92,1644523150229,e78709bff311bd60717d2fdbc3c344af6b94253753b42b9c4ad71c98fb5106cb
27
+ .git/objects/18/cf64cfb900052a66734c2f4cc85e73a098cc59,1644523150158,1ce405a780f2b5d0ba0c4b25479c37b55de315c9e3cc01aa538058218d9e7582
28
+ .git/objects/23/eed8c898ff91a20052ec080e04d06da2844e3e,1644523150231,f029fa95d5e188de2604f127dd9ccd9576ca415fcd40adb04abde8ee5fefa146
29
+ .git/objects/0c/80c7458b3dedb601ee2090974470f0c6ff5b7c,1644523150153,1ea99e1e101d3c2d9324fca72c5e8e1f7c5832ee4aad484b8e7fbf4682e3a84e
30
+ .git/objects/09/1f58760277006ab5b8057aa1fd68197a7ea4b8,1644523150152,15295a148c0b62750c29dc80d7daa0d583912a60912efaa037da32c4118d33bc
31
+ .git/objects/2e/85f11fe204e5f671e6787a6b34d21735fbe5eb,1644523150238,c402b080f02021ddabe4cb344bb3143b87b3163a1aa80ae22d73417499fc91d7
32
+ .git/objects/1f/e45221e851f1dea87c08f9f0a14592974ab826,1644523150165,f5d5cbd69a4bac54a8dd34da6c883fba0b340cf799da53be8777a11d9230d05a
33
+ .git/objects/34/af6fc705a07a0f980a2e8b113fdf8bd4d51821,1644523150201,4790b3178b54febdc85c8c335fa9435a225b53b336a3ee6ad9ebc6bd7241be65
34
+ .git/objects/31/86fa8cc6b79fa88c6ed9f3b3104be78a11f403,1644523150217,9a3ced60244d5076ce998cd501d3ee1aa70cd1e5a3ffa84e63c958d2021f1d16
35
+ .git/objects/35/495d276217185f406cfb9410cf41bc74406969,1644523150196,25884e9c99cfe643167134b78f4a305643befc6114bf87247a6bc2914759ba18
36
+ .git/objects/2e/1aa8ffdd4259186e627e99c011e4bc9f737c8e,1644523150245,9d802c1042b0f0adb956ee3678019b6894ec7dd6798335376658608ac586bd29
37
+ .git/objects/20/a8f4989641e2007fd71a9acf6c749235502371,1644523150228,ebd98eb6d4ed893362ba21959dcf656b6c60170b219b04b3edcb31093a240ff3
38
+ .git/objects/35/13d266d4c042c9882f588dd3688993388cea5e,1644523150214,7c7d5c9b3c7669b697621c57fd79a05876dac7a6ddfc3d65267664ef53a96956
39
+ .git/objects/39/f996c3d9aa2b1d33e2be650a59b35387aed049,1644523150208,317f2f846669c0bf2a1992bf0f76c5098ce15ab5ef77738cfceb1035ae947d85
40
+ .git/objects/3c/0dccd5a589cf5c90e14058b72c8f0675369be6,1644523150200,d0f9c7d488165c5312b5d337befc5852783683ed19b07757aab6f2772e32b9c3
41
+ .git/objects/3a/11ddb1ab09be2933a7a7e6d452e1021a788b0f,1644523150233,6fa25d454c0e58dffd2c29544b311b6cb61e1a265f4b2fffe92eb8f17ccf7565
42
+ .git/objects/3d/6f923ca44b7d5b66ae03cd3dd3a4124bdb8456,1644523150242,e1fc11951100ce083f04d8448712537a8648f605f8e55a52331381d5f26dc4d4
43
+ .git/objects/44/00e64ace26bb71fd4606a18ca86a651f5034bd,1644523150230,1bd1aa9ac0e795c5cdfdce1bd70ce162da9d44947300a8801245e84cf68e4e28
44
+ logo.png,1644523146031,b0d240bb816f26ca3207f1c99f0db945e48b75928ce80b4b3500035a2627583c
45
+ .git/objects/33/1ef55f4b0f7d5b57d0fd6656b2d85fcde74745,1644523150219,3e44264fbe59ef3836a1a23833cbbb58a20c8dea04034d1f598b14adcf6bf81e
46
+ .git/objects/0d/6fd5ea608d7ce4a9265a182171d083075a91e1,1644523150225,3680493089337aac2f1ccdcceb4e8c188535c136c8a8e1b5dcdbec837c459f48
47
+ .git/objects/25/baab1ec9da45c7bfc7973f50c95e8dfbd56544,1644523150267,2cfc4662a7b8893e753e38f9cfb74031ff8ac717dd10ee0b8a77a4ff58610ebc
48
+ .git/objects/3d/439f6b82a6d6c583d74ba40be84a3c730977d5,1644523150174,e4b9d4f7e959ad36db6c5b110f43dcf12e3ddd1f514ea54572c1a067c825d0e8
49
+ .git/objects/1b/c9e7b4eb3547240c528c3e7f80b2aebd76124b,1644523150131,fc35a30e654740eaa8948db93c4cfb86f8e7e1222e4d411b664baa04772333de
50
+ .git/objects/50/08ddfcf53c02e82d7eee2e57c38e5672ef89f6,1644523150115,422bb3640d58629c6cce7adf6aa528435b470f4ece69ac672eaf6e913be8a792
51
+ .git/objects/4a/a674094e98eaebe6bde33288ba935848fae22c,1644523150260,d62fd4d6f49605c4c38960af31fd93eb24bc536c9926aad9a5fd7bbeff14bc15
52
+ .git/objects/44/a35c2deaf1b05ee2ce3822442691c0b5787dae,1644523150247,f06bd9a59beef9ac559b9f384cbac350c8d89968e4f198040c9724a705f1f6cb
53
+ .git/objects/50/fe6fae100e1353afb1faa716d6077b0c212194,1644523150211,0cf5a50a2ec597cac1b7aa2c5517df504814e841021dd1a4f6fa6c87d0685a51
54
+ .git/objects/5b/10fb083af404924855dc7ddea5ebf6a4f2f4b6,1644523150220,173a333e1d0a755692fdbf90a8599b3af051fe807644ca342e924dd907baa9d3
55
+ .git/objects/52/ce924c6871bc8c676df543ff3de777cd7aec3f,1644523150218,c5a39b71274394bf716974df4dd9842b42fc8f7b670a876568c2ad95aaa60bb8
56
+ .git/objects/5f/00b407eb3ab488eda161e532983d8d58fd6aca,1644523150205,b5b4d934b515c6856a52da41c9afb539235560d706bb45504998d9004ae3e046
57
+ .git/objects/5d/9acff1737caf99d3765c000f2d364c97517675,1644523150207,9f87194e9b729caea08cfada5bd675905b3fe2142e31f084ac238036f4033d4d
58
+ .git/objects/61/228db7d13d92816860a77275d7c66cf80198b9,1644523150206,f94f911d5509b9c3960748165e88b81675678859391ef30a9e9fe73fb450d366
59
+ .git/objects/68/c93448545da6e9b3905a21f4014c0d3deec95a,1644523150262,3763c1de46b0f3b1a8e53abcb2f599a43b1506cdc8c917d28d7567307eb74b46
60
+ .git/objects/60/566b9c0cdf6ea87d37a8870022ad4a5ce885fb,1644523150272,8151b3f1281fd2cf4176fd17d300da6557365fd3f66a08db5d40d12c24cb62c2
61
+ .git/objects/5f/7a74c386cc019cde55400b02b1d5ed54dbcd60,1644523150212,0457d1df29c67ad19d9c6fd0ccdefe0d036661560312510641762b95da31746d
62
+ .git/objects/6c/ce357cd45f1fcf0527366bcd581a9eb2246d10,1644523150222,64260eb17fb9be414d8356f3cbbb2792af9e18216f4b7c309d3c5d82ef59d172
63
+ .git/objects/6c/d09354ffcc0a425b76aa5aaaf2e52de002cc9f,1644523150235,9a75713a640b395bff755c0d76780523ef71780979803e8507ecc8812719090f
64
+ .git/objects/6c/8c7c8f8c4e7579f73b2655110584d656a5100e,1644523150263,41f954879ed39bc7ffb26364008810e39d097aaeb2e8506bb5725ffb62e4d0d1
65
+ .git/objects/7b/60c9df90b5b61b3987adbf25c63d15c7ad01ec,1644523150240,6dc6c077a6335405f5d057e09eaf23b858f6ee556507c9e5145f10820282f9c2
66
+ .git/objects/7c/fc8e7bb90859b319f8e55a3b1dfa9eb19501bf,1644523150264,4a5c9d6962042e1d24762af38612cd108a5df66c08ff688585d047c8b319ae8a
67
+ .git/objects/75/a3cabf3bd93d59c3dd3c40851e0543367e8bf0,1644523150204,4c43a2588cd8e69715ee6f0e58c48c545e6e4ba4826453c2b5e93d28f5eb9c2c
68
+ .git/objects/7d/4b9eb94c20101356c21aec280df2ce3855d695,1644523150241,26677017a91f9227c50ac31a0eb3b14af49d79cd646ddb88ea4b66e4aba32ce9
69
+ .git/objects/7e/0d127cc63a487de0d5e56615ef6e1a6dcdd0f4,1644523150119,b7d6d01b89b84b13aa7e9707ff6f0f0519e2a9b5627cd50f4468dd3e2540ebf1
70
+ .git/objects/83/236781a9493a468b631981fd4968feb77d84c1,1644523150121,7bc3fab5cf4a3b2a2cc704f8f13a50cdf5f7862c939f92ffd40b1f711caa5190
71
+ .git/objects/86/e1078356f2fa2c01495880f87f3823a4cfe75a,1644523150265,cbef41db404df95bb6551b75049af7a6829a0f125fdfc13d2e8754bcd26a8092
72
+ .git/objects/8a/b55d68134a8b65718be062f3a8c9d131c7ef97,1644523150216,891f0021b368cfd45862f4a5e515fb04a93a66df692145f7757e062fbe7ef707
73
+ .git/objects/82/5e4217ef864caac9a55971aaacd4ce648f994c,1644523150169,e66db97500fdf78217955b3962cc4950e78ef14c1925e8060bd7b6b9dd380f41
74
+ .git/objects/8b/632a0b280b64bab00b345f10c23bcd94625ac4,1644523150261,fc6790423335145f2bf65cb6df3856026d10924974a181c7e1f8f7b6ec3fa9c4
75
+ .git/objects/87/5de0d857feefd08dd0b3bcf93279f1b950b3e8,1644523150224,78d904c7dc30e0c34bb16f3f324835edf416874c524df78f3d9b95d66697f08e
76
+ .git/objects/7f/eb1675702be2243458b794111277676e91bef1,1644523150242,d40257d0234f202fd7b56e4fa6a89ec406c992a639e86c3f0c18f51ed82658a7
77
+ .git/objects/88/572c50b5a20619ee51e46fc4e32dfb47f3e85b,1644523150157,ef5d47c751ba8a1145c755bf468e1613d4643cda888e3f3fc0fb7601419b8a36
78
+ .git/objects/70/9a5ae62b32cf18e9335748adc6623137ac9013,1644523150223,642d3e037c1d215806e3122285cfb8fe7883229c06ea1a7334516bb7f5c75df3
79
+ .git/objects/7d/c8ee5b95510d43ef664355fec03677b240a5b7,1644523150195,5b8da4677346543fda012668afd463cb96e97907428a0be2beff59b5b59d1712
80
+ .git/objects/47/04c14f8967c091abc273fbb38baf6b279d1c3f,1644523150163,65cd027fa05f4212b5ab8d8f3809068c0dac89785e4acaa4a89c181c0f4d97af
81
+ .git/objects/6a/bdcf7e8a8caa7ce17f949916e4b28c09b109e0,1644523150239,d17acba40d47155be0680f7bf44ef30c98e46e9df0a3b181b83702fd810fa0d0
82
+ .git/objects/69/cc41b8bb135acd42ef4c7e5e27af9725c8d54b,1644523150128,3ecdc656fdaa332c920c8d37b66930569b9df88280410a6c66141f91df020431
83
+ .git/objects/60/96f24ab2e8cd84f59d9639b8f33e56dc8bc067,1644523150214,4d0349dd1b1e9af5a5530cdabf728d059885ceeb59e22831f2c3ba27e0845d03
84
+ .git/objects/96/1991e8a784077b42962f7052552f88e93735ca,1644523150237,ffd35046676bdba5d1cd2082344de97e2cba66fac7952ea2c1c5a19df08e674f
85
+ .git/objects/76/9716d4eab27740bc23e08cb3acd0696e82aa58,1644523150194,e8a5834d4556a87771fd7c70a88d12e9416621aedad0e49f3e395084df3a7724
86
+ .git/objects/9a/22d6da5edf01ce88c54e82f8525a9b92b8642f,1644523150116,32a151f01a70d54bfee83231f1d596393277c0a32cd4c59d70b62366c52b879b
87
+ .git/objects/8c/362002ad1631410797ab18188d835867d04278,1644523150215,f20cc326b0a7f45b730c1122dcbeaa9b9540d6e15883f72b8ccd471164c8a2e0
88
+ .git/objects/8c/b9ad5123a47c4ffed66431dfbb052a56549d26,1644523150247,bdd68496af32167e666bad8fc1721380d324f3bc2181d1e16b5113fb65d1fe13
89
+ .git/objects/a2/e8f4a67dce34e58ef43b5632277dbfb5663194,1644523150117,51b5db371598b36b47def7e4acab02552f61f427a68705fee29a1464b9862d72
90
+ .git/objects/4b/5f22ac29a6e898dc762b8105c6cfae4756c060,1644523150145,737a4dce928e0d266d27831ff34a03932dfa10790e74bc115d13ee3b177530f7
91
+ .git/objects/3b/adba11cf84224fb59f0af44396f204009b25bc,1644523150138,70ba6f19ba81086aabd88859c3b4906a145c3ce93a10b41bd2426a0ac4c75b86
92
+ .git/objects/57/46a02a4a5431911e35fd9386cef63970255785,1644523150186,c42f63582b9958e361f9878d11131a5e0eb0342b8d0879b8771a4e74aa2491a6
93
+ .git/objects/5a/a723fbfe58650bdf40f8725ce3779803c0dd5f,1644523150199,e2c15bf6a497725a18d0549ea4fa7efb3684becd01482db36a3bf4e80bb3ea82
94
+ .git/objects/95/64cada0c616c4f725b04cb678852d29dd1dfc8,1644523150189,b9049788cb4cff24a115ff264555a9abe6894610e0cb89aa21be9662ded472d3
95
+ .git/objects/69/c63de7f595c8d50aff2b85e5db3e8ff2287e98,1644523150135,eb3fef31ba49426008036746f14970771a0fc8479fd10fcc1c2d5a535608ca8e
96
+ .git/objects/aa/bc3f1ca9c3505c94c0cf575f04f1c9afdf43a7,1644523150265,cdc87f0c72d34716ea82726576a1e592bcad537f417870a9bf0a241003a7c57a
97
+ .git/objects/a5/7420fd607ddcd9616d080792f51057cd067fad,1644523150226,a2bd1fe3969cb6ea96df3c936d988347e9c90ed83322bcca4653b9dfcfc1887e
98
+ .git/objects/ab/a4e16b09b43d4fad08e0209730dc6783fbd765,1644523150210,67d4ebdab38a68ddd3bf3aac9c7d70ba81ce0b83c79a1b448fdca2786cd32b28
99
+ .git/objects/b7/b333e1a719931adec223bc95ec909770e890a6,1644523150202,7df8458d73f435940911da845115f6c8b82e9b33c9882415aca6274ab80bea7c
100
+ .git/objects/9d/455b9ca7de780426c68bacfdf0bb9f755cd1f8,1644523150120,594be3029bfae1c9ca819bc34d31d7ac958678b3950e36a35484ddb94e623233
101
+ .git/objects/ad/5e3acf4dff970507cab7d11a104fc598183879,1644523150236,eabc4b96c17adb223353e6f84de52de2c5fc505ecbfde128467c2c8e226f9702
102
+ .git/objects/be/b34cd52f327c741f9e4d31126e002139cb765d,1644523150248,f61b21180a972eafa5374b92dcbf6a96c8a1c66d88ec2d075305665edc32e391
103
+ .git/objects/ba/6b52bfde8820e3b0c9abaeba7d251124585358,1644523150210,bec6aa65142c41889565638629af7ef98cd9a2e3529df28bc29e3ccfa418d680
104
+ .git/objects/c7/9861fc6ec5514d36897c1b4780a5dcec4bcfc5,1644523150118,6d421c86492f1aac09e55371c94c6063540ca3a06dcee8d81facc3cdba873480
105
+ .git/objects/cc/e5c977aeccefefe56bb9119581a9020772cac0,1644523150234,965f9d5b96d972166c7ea7f14dbaeee8a3c1ffb1de2d11e81eb4ba8ec194f9f0
106
+ .git/objects/cd/819e4920689d6d2346aecd9b079efcca026b58,1644523150227,5a49b4dbaf260f2874109aab1ee5507455c52be17fdd393a2408f873a835a858
107
+ .git/objects/c7/abbb79615c3369acef06162eff1b402632917d,1644523150156,7441f17b0d37f6d287ddc5772c73f145fa8d602578f40d0f061f0450e57bc6ea
108
+ .git/objects/b7/90de3d34ec933f190b15f671aba95a0fefefe2,1644523150244,e7bf1cea453a7e3db4b14fe82ecab7980cee88379dcc5520f43dc2d9d4ec886d
109
+ .git/objects/d9/8bcd461a325bd556b1eb50d5961f572506eaa8,1644523150274,d1675117bf84c6ad79d8f469c8e9b881db732c701a6e801d43977c694863fd3a
110
+ .git/objects/d4/a58c21f684100e13c8d0b2d234fd3e7abc775c,1644523150155,644a6e8c2f0c29849f767b6d602f6dbcac234a4125fd6f8a76f9b48a8d82a020
111
+ .git/objects/d9/907cd6fcb81c9310bf56b362b011dd787fb5df,1644523150235,23953036037073fec52dc2b501bb95b6b89008b3fc173ac15917e82fc9cd94cf
112
+ .git/objects/da/ca3701e930eb63ed46b936fca1eec0fdb8e8ec,1644523150209,9795f67f541afdc7e940d7b560fe964be253b0e9af78273fb71c002547984c98
113
+ .git/objects/de/169c4a3cb088342ca5450407d9935cd4b2e057,1644523150278,0bd592219897a7e5026d311fd9456c95d1e6bb608a7e7f1da3590fb3dd97dea0
114
+ .git/objects/db/0a72308cb81346719a8bba59684d4e3a0a68f8,1644523150195,cdf0d83fefa7ccdd18556255e5cb61dd8fb0e6cb3005eb2d8a5439f5ef54f264
115
+ .git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391,1644523150115,1b384640d6800d08b347dca84cbce95473fe0aa6aa082c21aaccbdabecdc4ae3
116
+ .git/objects/e8/cb4d7b1b6eda9aea1fbbcc2be0f1711e8934a9,1644523150154,2ffc82223f259df6589ecfc5fd902cc2db54efe3a8eb8efb82b055337a116b53
117
+ .git/objects/f9/e57c47f844cc756f81bed00562b2bab322c284,1644523150232,3ce6a7d78acaaf8649319f578eee68064e12737a91ad8af1235928ab6457da66
118
+ .git/objects/d9/0c68c11d4a8385f8de290e20456b02b7c98354,1644523150206,6351bcc8f41d75bdd09cbd6c325e11636f7540c7dd5444df82e939a9e384e37b
119
+ .git/objects/fc/c7c7a49cca641652b8b8cfa9be25ea75898aff,1644523150243,5a51378b5ddff01a21e70a0510e0396cb98349cb8699208823edc602045ababf
120
+ .git/objects/9e/cf04a34894999dc59ec5d518733a00be24932c,1644523150182,03abb74dcb7dd56bc2c11be0948803d6d6af08cdeff288376f5f2f142757db97
121
+ .git/objects/fe/306a328601aab63a7f376a84153f0effaf708c,1644523150269,2b88937b95c5476506ded25433f7629f78c36712877eaf705468f0dd5b1177af
122
+ .git/objects/4f/8a04755996c87ab7679fdfb43ea94bc31f8388,1644523150127,fb42d0a6968148764dc8ef76380f1698db7fef00ea0e87f9b9bd511a8fbe633f
123
+ .git/refs/heads/master,1644523150281,d4ff7d4c5183eccc4223c2ee050e9f00f54ff3dd3a86a95ff19cdc87bab5102a
124
+ .git/objects/b5/f306955ce575bcdc5251ecfd05c3cf736f3634,1644523150133,46ab394257a3f039390df20f6c51386c1ef38586751f002c14e2a86a18b8beb3
125
+ assets/css/563.styles.99f4a8aa.css,1644523146013,d286e892d44c93258a56eeacdfd66f1483c48d57abbc0ddb65abb27432e966f1
126
+ .git/objects/cd/05376e2d797ecbbd9e7dcd82023edf45956a3c,1644523150129,727616255c3527d04008fb50ae9c0ecb3a1b0fceffb294b7add58194c7cc66b2
127
+ assets/img/back-to-top.8b37f773.svg,1644523145898,c6af5f9d1f495b4bb193a957cf5cbddd69b3df8346fb0ad8421ff29e872e660b
128
+ .git/objects/f4/276d65c1f4928dc3e1ae35b5ed69554bf0c147,1644523150151,9c173d36f204e4036bdd02a438369f8898cafcf48eca7347008101c0ac73e3de
129
+ assets/css/835.styles.c5afb22b.css,1644523146011,54c8fc773468d5ab5cacbd55f0535bf1cacbd57cb0ab43cde2a6bc4ea405b80e
130
+ assets/css/styles.031dcf27.css,1644523146011,5ce2b8407cac7602aa5961e46a59a27074b67c882a0c889625dca3202d333ab5
131
+ .git/objects/ad/d77c33d9ac3ca4cb0ebb781f590f858f19cc78,1644523150143,df7c8674edc0979b22a5f8ae43e6c40dc6561a2684246201cdaccd0e5488267f
132
+ .git/objects/af/bc04698697ebda19ea386279225b9473e52940,1644523150148,69caf14d8a9288cf2ab177db47389296b7abbe3656694472c3886ca43dd25ff0
133
+ .git/objects/ba/4806f4838b9ed6683ac2fc86ecbc604251161d,1644523150141,254988842cc7321d67d3d71741dbf1a3972ae122ce4dd95671c9d7bdd37a34f4
134
+ assets/img/elvia-config-no-config.b4bb972c.png,1644523145966,b6d893cf4f56713f3004aff49f28339645ec68e885ec30503740ff071050b643
135
+ assets/img/elvia-config-no-tariff.3f89aba8.png,1644523145966,00eee1c51ab3b19e3db8b139071d7596f61601b4295edcc69ad503bcea026d2f
136
+ .git/objects/dc/a54d7afa541cd5f4489cd4fa2b204cae449484,1644523150150,aa09d06099990ddd761aaa03992906f0683465bed8728d4fff2426ff9a831d01
137
+ assets/img/add-tariff-flow.eb700d4f.png,1644523145966,a27790951f13dec75da0da079edeb58378aaa6f74c1d708a0c1b5aea846ae808
138
+ assets/img/next-schedule-flow.413ad62b.png,1644523145940,dc39e108b2e1c231df8172b375f73bbdce6dba5e7b19b16524c81a15a1ce1036
139
+ assets/img/node-power-saver.51ff2e5d.png,1644523145959,bc03e13706d001771796195e67e237873c2f2b3fd014e7f8003d80e3c5e09ea9
140
+ assets/img/next-schedule-sensor.eb896bdd.png,1644523145940,3017cdc42afaeeccd07240a18729b59264175c8ef7f17d4bf89ecc12dcfd1723
141
+ assets/img/node-ps-elvia-add-tariff.94ea2b09.png,1644523145959,82f83794ebee8920524f2c8fb0123014cf8ef0182600c34ca2c170b2adefd970
142
+ assets/img/node-ps-general-add-tariff.a3cf6f06.png,1644523145960,0e6ef51de245944acad043cbf6b4c1a9f3762cb0d59c721afd67b8a9fa93dc90
143
+ assets/img/node-ps-receive-price.76eaa418.png,1644523145959,9d8f62d2b5bee458952cd895a143a2c757ba5ae6cd7e13afd3103b7872619571
144
+ assets/img/elvia-config-subscription-key.8be8ab8a.png,1644523145966,1e8f457772d4941c9f4a245e84e0cd89f8d0387b11464a3eab3533ed50780e9b
145
+ .git/objects/ee/565d44a7e671307ef95312f8e107a854db65a1,1644523150124,e6047682b480fb45f0d5287456108778278d1a1de5ad2345b7b66b5d19060735
146
+ assets/img/node-ps-strategy-heat-capacitor-simple-flow-example.29d9bf59.png,1644523145923,31d4e2481f50bf3d26b77e1f53899bb10ee214a8c9675114738a4f8fa2c361d2
147
+ assets/img/node-ps-strategy-lowest-price.3a4ad347.png,1644523145961,dd4e368f5c81e87f64770a5d80b4c026d92fc89a72589f2d8b163e6a251c3662
148
+ assets/js/293.08ea5200.js,1644523146006,0952709f2a1901610b53d6146f0130add68798b4b92bad9c07c63b8f43424552
149
+ assets/js/491.17a98f38.js,1644523146006,65b18d7138b0195971a54a139a44f836fa3336b6b70c64ef0d6921ddf3ace452
150
+ assets/js/331.15ee3c51.js,1644523146006,6437fb95e95dce3415cbf7e9a20100a3ddee3a2e6a421944e6f4a1566bff4ec2
151
+ assets/img/next-schedule-entity.4406856a.png,1644523145939,d6f36c55bef22fdb27e7a793144016b9b5688fdb7c0f358f446bec4871cb59f1
152
+ assets/js/811.6a3392d5.js,1644523146013,4f6777db824062a896831c035032022dcd45d93f634d5afb37e610442f146eef
153
+ assets/js/619.8ba1b1f6.js.LICENSE.txt,1644523146042,adc4d946db037aab89d8d540dc5ba92ec41212a9777b284c2189f3e90729031c
154
+ assets/js/app.e881e9b6.js,1644523145897,a5e971391db834a017ff92d0694caff6531823533d59854e0cd43906007667ec
155
+ assets/img/best-save-config.79a2f39a.png,1644523145986,0e854e0ad8521268786a86789707053d08f60f7810bf9bbb1c6cbfc9485c657d
156
+ assets/js/runtime~app.8bebaa00.js,1644523145897,f6232174b778034bfd34b7f5ed86293151032c7e47f6cf44ce2f4dec4accb154
157
+ assets/img/oven-setpoint-calculation.5bda0eec.png,1644523145898,d59c196f156dbb561106368065b08b9fa16b0555e0683d3d9c6ef2a123b6b787
158
+ assets/js/v-0607240a.a57c2199.js,1644523145898,873d48fc14b52bf404709b542e74aef747573cbb93aee734862b64ac149611cd
159
+ assets/js/v-08683c60.ccafdcab.js,1644523145966,3418f9e5a646c87a710fbec16d01477acb33f92ccad2a910fa04ab34d274f377
160
+ assets/img/node-ps-strategy-heat-capacitor-cascade-control.2e75ed9e.png,1644523145898,277fec95ceb1f4a608c512a361778e21da49cfa48f630f43ced60abf7b586c00
161
+ assets/js/v-0aca7ba6.4f3573a3.js,1644523145922,dbea499c89803a53096b971161ac9fc40fa272e793bacbdcb2761370cdb3f361
162
+ assets/js/v-1ad821fa.5978386f.js,1644523145962,3cee1b46b690b522941e859b48870f00301edaac110e11b34b8f2bde032c9ec2
163
+ .git/objects/cd/9386e14b0007dc858394f55c80f4b9fddcfaaa,1644523150192,3fa3036a39f34674a344447e91044371f0bad16a43266ba1e918c206b7c46778
164
+ assets/img/heat-capacitor-temperatureVsPrice.6e74905b.png,1644523145922,4ec0ee90f5f8c110e17a07f1c6572c1d6ef31a318e3cc58125680aae6ac39a30
165
+ assets/img/lowest-price-config.6d66a8c2.png,1644523146005,2e8328c5ccb07158c1c2edb5a5a1b4746f7a773b3a380d88fff2f9da279ffed2
166
+ assets/js/v-0b5e3c8c.76407435.js,1644523145981,17bcdf85458632cb2e4216a0160a277f2a7e24f415652fef905ef32934a99c8c
167
+ assets/js/v-1b3a0ab8.def099e9.js,1644523145898,85b5ac9586cc50219239118bca59b9bba7220553627cfd806ad983309854a35c
168
+ assets/img/node-ps-strategy-best-save.392292d5.png,1644523145959,d9e48500b4df8cdcb2696faeaea1c5e9f462299a07b0231c1a2e4e8d4d88f7bb
169
+ assets/img/elvia-flow.bae2a4d5.png,1644523145966,a3bbae90b0a528c8975ed92cad0d3cf354aaf6b2df8a8ec8c2f92d55d21e97df
170
+ assets/img/elvia-config-select-tariff.0f73fd56.png,1644523145966,db2bce470db8a714b87e3d07b915d225395b49ae2bc99a271f37844d3356e22f
171
+ assets/img/overshoot-time.b3b5d70e.png,1644523145898,c855af9a434f7d56928446dba5466f7fbf62958acf6f53d1230db16d0c40712f
172
+ assets/img/power-saver-nordpool-events-state.8c392507.png,1644523145941,d8cb79a6ded596050e5ba9a81c21d2277a76ac6c43f388d664aae9559f420780
173
+ assets/js/262.cf2c57d2.js,1644523146020,233694a84237ea581d3098041b95f30f75bc749c741b374db5513b0ebb56a6bb
174
+ assets/js/v-1e2b191e.88dc5555.js,1644523145966,bc379660eb68f388cf9985e3a7ae199137925cd7f47ec86276955dea501ced7c
175
+ assets/img/example-flow-2.b653b58d.png,1644523145959,44970df39fb4d1a30778770f91211ef95f13cf14a2137324b955aadff47ab17e
176
+ assets/img/copy-payload-best-save.b9192985.png,1644523145955,7b12f6464e3fc8a83222e1e55d0ecdc81c9fdf5356eadd173c98313a45f44f75
177
+ assets/js/v-30acb564.529a3c16.js,1644523145940,8de66a72a483ea347b318847b660fe64c9ab03e588f2094077bc1f533fca6c3a
178
+ assets/js/v-29504124.4aca27d5.js,1644523145955,1396f2fec5b65e1d54860e31bbeaffe73630b1b923f24110155365854644bef5
179
+ assets/img/migrate-power-saver.aae13f9d.png,1644523145966,0f2c1fd39fcea757d41d48b07d2d02832c14d289ee63ed7175d5fddc8f62bcf6
180
+ assets/js/v-3706649a.d7f73384.js,1644523146006,74d5c4d8b3a8a92852300eeb09e24adb5cd0f26a564bfbe0e1be931a5832e55b
181
+ assets/img/power-saver-nordpool-current-state.bf14afde.png,1644523145940,51824f9b48565e1f6f1f1ab8472bce7a2f5045f4bb9312989a10819c1502945c
182
+ assets/js/v-4637f9e4.5cc542f6.js,1644523146005,1e1ab10a03129e86a336bf08e01bf130b50abdd9ddd98482d353c4a7dc201e9d
183
+ assets/js/v-510ed0d4.b58000bf.js,1644523145897,1919f93a90bba990db3d165314c6ecff883672d0005bfce266e650c56dd673b9
184
+ assets/js/v-5954bcb2.937005d0.js,1644523146006,a3c8635241eb371442badd9f9d50e44281da1c8c02cdabcd849e9d8370d49105
185
+ assets/js/v-5db8da3a.3de3588d.js,1644523145941,6b3a937c180fba795aad1b18656ad8d761cfe608d943554533087a5b109c4c98
186
+ assets/js/v-677dfaed.1ad4c776.js,1644523145997,cfcf242c826d0add9e54b3c4102994aba1a90233b54b41fc5671ad98cdaca531
187
+ assets/js/v-7c87f26e.5e3553b0.js,1644523145897,960b96f030d24bea371dbe76d0818526949460ec740451c39b6b27b3b78c0e27
188
+ assets/js/v-8daa1a0e.c06c5c76.js,1644523145897,ce6c83f4c726f243b003fa4b97fc67db4887fec5c90bb7a6208ebd086d9ae0f9
189
+ assets/js/v-61f728ca.21d432fe.js,1644523145940,7c30c96d96935369fb1a7071c0701c58b90790e4e959cc2f8ca93ff97ff09be4
190
+ assets/js/v-b4a42144.733e4e7c.js,1644523145961,e1611b2fdbbdb96bf5f78a41ee126256cf41e80f0de3601e864bec1785caafb5
191
+ assets/img/example-flow-1.3ff3e23f.png,1644523145958,9602bdee071fd442bc5c466600970ad5b639a8e15c09206c8f824840979b6122
192
+ assets/js/v-e8c55052.9664f731.js,1644523145959,9de0a29ff17fa6aa425c919a14fb0203cb122c3e7715838c67f2ee1397f42f9d
193
+ assets/js/v-fffb8e28.525be02a.js,1644523145958,1546d3d29fc7dc3db3c8d92414cdd3f05b2d1f0420162d64894f5bea008e4c8d
194
+ changelog/index.html,1644523149053,4ee6b98d3bc12444ad1076e25413a91e36dcc46bfcd238b83e3ff7a1ac7d51d3
195
+ contribute/index.html,1644523149066,92041659fe5c28cbed83cf85edbd4d16aba90dc5d6a895bd69d44470a1a86481
196
+ examples/example-heat-capacitor.html,1644523149139,9b382be986e8d8d8ac6923a0dc260461313379d3212e127b772758c8f9c90655
197
+ examples/example-next-schedule-entity.html,1644523149160,94a44df0a7b4bbdda9d17000416230d03c1ecfc2d429176c85931139c400c1e8
198
+ examples/example-nordpool-current-state.html,1644523149186,c57564a785d75b86e64f82ca969929e8a8b2c670793c152e33e1f1f0a4778054
199
+ examples/example-nordpool-events-state.html,1644523149210,fc4cd13afa4678b6ac300371578e741078c68768a4f508da835c4bd2689300a5
200
+ assets/js/v-84304104.f66996c5.js,1644523145897,bb2b7c2e78915c4d6e27eaeb151d6ce7246d47bc85cd05bb4719d3c0f0e8ae5d
201
+ examples/example-tibber-mqtt.html,1644523149264,9236c98c3e4cb8317878760f1bbe8e4166d66e25e8d42a2fc2744a313b2071d5
202
+ examples/index.html,1644523149091,c1e9cd2e992d29c553b52b2ec1525e5b3311fb76d095a26b0f2b8c395c5f7f44
203
+ faq/best-save-viewer.html,1644523149325,1572f973e960ac15c16a77b9eacd1259f7550ebd3387dbbbadf9ef7937f645db
204
+ nodes/index.html,1644523149413,55a4accb2b16027c07740ab9fb1afe997feeae5efe96fd09220549bc24e4f4fd
205
+ guide/index.html,1644523149357,3f78d11bb3066694d33d932c6a3c5d3d020d78f155a794860898d5ad3a858488
206
+ nodes/power-saver.html,1644523149452,685ba7856767ae1d7cab45aae7b0041c3ada4a67c28c951b21bb1a0eaef177f1
207
+ nodes/ps-elvia-add-tariff.html,1644523149479,08fb3ab121cf4f175582284ccb3723b0b6ea758b23faccdeed988da7b1ed0e6e
208
+ nodes/old-power-saver-doc.html,1644523149429,90458f8b3d74fd5711cadf4094a3d9214d418631b3007f36e714a2151b830b5b
209
+ assets/img/power-saver-tibber-mqtt.16891dd2.png,1644523145941,24f2cad039c83c9031aa7f9d3decadc107b7cc257676e0e466078b2089632fcf
210
+ examples/example-cascade-temperature-control.html,1644523149116,a1cd64a8e496d9fcb142a9507492a01601f43356c9cc90c5e73962423053894b
211
+ assets/js/v-4c28314d.48fc6e75.js,1644523146004,174c5b0b9abb7bf8dc38ff553a4df6a4826539becfd36cde6bff1c9a4262d19b
212
+ faq/index.html,1644523149280,3a386a26c974fceeae315229b1322f0bf54e149a4a63a549b97ff53d9b805752
213
+ nodes/ps-general-add-tariff.html,1644523149508,7fda1c728f690cf8378af93868b77843ba3089e3ddbde22f89cbeb68c3eae7be
214
+ nodes/strategy-input.html,1644523149651,74049ece4e010ec82e22151e686c367506aea1ca1efd8507c5552eb5117c0f38
215
+ nodes/ps-receive-price.html,1644523149532,961e8997d564c5c5965c226f752f8000aeb304d8788c43ea2767e53ef347fc4f
216
+ nodes/ps-strategy-lowest-price.html,1644523149624,0305def4e9a0d6fe851b4dbb6608e9c763656508d978c8b96e65328f9aac1c5e
217
+ assets/js/619.8ba1b1f6.js,1644523146020,c21f0c2fdf3db04d5f0058420c49d3aa9d2f02cc9b930153b1cffd05c49cc7f8
218
+ assets/js/v-7446a652.74b21d0b.js,1644523145955,850a4ea713a62addcf787b91d45fd9d51a349c7d1a356bdcfbab7d7c83e39adb
219
+ assets/img/migrate-best-save.f73420f6.png,1644523145959,7dbcde0717bc45d78d3d1e77282f9750aba2a49f3364604a7e29911fbfc490eb
220
+ nodes/ps-strategy-best-save.html,1644523149563,220eceb40e5fb6a397d23fa021894ff2da4d5f503e0ecd3e1f0af23ac2674a4e
221
+ nodes/ps-strategy-heat-capacitor.html,1644523149591,137f774ea85fe28233daea0df4b29bc02aed6b4f8c926907f585d130e3956cbe
package/.firebaserc ADDED
@@ -0,0 +1,5 @@
1
+ {
2
+ "projects": {
3
+ "default": "powersaver-c98d0"
4
+ }
5
+ }
@@ -0,0 +1,20 @@
1
+ # This file was auto-generated by the Firebase CLI
2
+ # https://github.com/firebase/firebase-tools
3
+
4
+ name: Deploy to Firebase Hosting on merge
5
+ 'on':
6
+ push:
7
+ branches:
8
+ - gh-pages
9
+ jobs:
10
+ build_and_deploy:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v2
14
+ - run: 'npm run docs:build'
15
+ - uses: FirebaseExtended/action-hosting-deploy@v0
16
+ with:
17
+ repoToken: '${{ secrets.GITHUB_TOKEN }}'
18
+ firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_POWERSAVER_C98D0 }}'
19
+ channelId: live
20
+ projectId: powersaver-c98d0
@@ -0,0 +1,17 @@
1
+ # This file was auto-generated by the Firebase CLI
2
+ # https://github.com/firebase/firebase-tools
3
+
4
+ name: Deploy to Firebase Hosting on PR
5
+ 'on': pull_request
6
+ jobs:
7
+ build_and_preview:
8
+ if: '${{ github.event.pull_request.head.repo.full_name == github.repository }}'
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@v2
12
+ - run: 'npm run docs:build'
13
+ - uses: FirebaseExtended/action-hosting-deploy@v0
14
+ with:
15
+ repoToken: '${{ secrets.GITHUB_TOKEN }}'
16
+ firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_POWERSAVER_C98D0 }}'
17
+ projectId: powersaver-c98d0
package/CHANGELOG.md CHANGED
@@ -1 +1 @@
1
- [The changelog has moved here](https://ottopaulsen.github.io/node-red-contrib-power-saver/changelog/)
1
+ [The changelog has moved here](http://power-saver.smoky.no/changelog/)
package/README.md CHANGED
@@ -4,4 +4,4 @@ A Node-RED node to save money when power prices are changing by the hour.
4
4
 
5
5
  ![Logo](docs/.vuepress/public/logo.png)
6
6
 
7
- ## Please read more in the [documentation](https://ottopaulsen.github.io/node-red-contrib-power-saver/).
7
+ ## Please read more in the [documentation](http://powersaver.no/).
@@ -0,0 +1,5 @@
1
+ import FloatingVue from "floating-vue";
2
+ import "floating-vue/dist/style.css";
3
+ export default ({ app, router, siteData }) => {
4
+ app.use(FloatingVue);
5
+ };
@@ -0,0 +1,306 @@
1
+ <template>
2
+ <textarea rows="5" cols="80" name="rawData" placeHolder="Paste data here" v-model="dataString"></textarea>
3
+ <p>{{ message }}</p>
4
+ <div class="config" v-if="message === '' && payload.version">
5
+ <h3>Config:</h3>
6
+ <p>Max in sequence: {{ payload.config.maxHoursToSaveInSequence }}</p>
7
+ <p>Min on after max: {{ payload.config.minHoursOnAfterMaxSequenceSaved }}</p>
8
+ <p>Minimum saving: {{ payload.config.minSaving }}</p>
9
+ <p>Send when rescheduling: {{ payload.config.sendCurrentValueWhenRescheduling ? "Yes" : "No" }}</p>
10
+ <p>If no schedule, output: {{ payload.config.outputIfNoSchedule ? "On" : "Off" }}</p>
11
+ <h3>Meta data:</h3>
12
+ <p>Node version: {{ payload.version }}</p>
13
+ <p>Data timestamp: {{ payload.time }}</p>
14
+ <p>Price source: {{ payload.source }}</p>
15
+ <p>Current output: {{ payload.current ? "On" : "Off" }}</p>
16
+ <hr />
17
+ <h3>Days:</h3>
18
+ <table>
19
+ <tr>
20
+ <th>Date</th>
21
+ <th v-tooltip="'Number of hours for the day'">Hours</th>
22
+ <th v-tooltip="'Number of hours that are on'">Count on</th>
23
+ <th v-tooltip="'Number of hours that are off'">Count off</th>
24
+ <th v-tooltip="'Average price for the day'">Avg price</th>
25
+ <th v-tooltip="'Number of hours that are turned off (saved)'">Count saved</th>
26
+ <th v-tooltip="'Sum saved per kWh for the hours that are saved'">Sum saved</th>
27
+ <th v-tooltip="'Sum saved / count saved'">Avg saved 1</th>
28
+ <th v-tooltip="'Sum saved / Hours (whole day)'">Avg saved 2</th>
29
+ </tr>
30
+ <tr v-for="day in dayData" :key="day.date">
31
+ <td>{{ day.date }}</td>
32
+ <td>{{ day.countHours }}</td>
33
+ <td>{{ day.countOn }}</td>
34
+ <td>{{ day.countOff }}</td>
35
+ <td>{{ day.avgPrice }}</td>
36
+ <td>{{ day.countSaved }}</td>
37
+ <td>{{ day.sumSaved }}</td>
38
+ <td>{{ day.avgSaved1 }}</td>
39
+ <td>{{ day.avgSaved2 }}</td>
40
+ </tr>
41
+ </table>
42
+
43
+ <h3>Hours:</h3>
44
+
45
+ <div>
46
+ <input type="checkbox" id="showNegative" v-model="showNegative" />
47
+ <label for="showNegative">Show negative</label>
48
+
49
+ <label style="margin-left: 40px">Show saving per sequence as:</label>
50
+ <input type="radio" id="sum" value="sum" v-model="show" />
51
+ <label for="sum">Sum</label>
52
+ <input type="radio" id="avg" value="avg" v-model="show" />
53
+ <label for="avg">Average</label>
54
+ </div>
55
+
56
+ <table>
57
+ <tr>
58
+ <th colspan="5">Input data</th>
59
+ <th class="sepcol"></th>
60
+ <th :colspan="differenceColumns.length">Saving if turned off x hours</th>
61
+ <th class="sepcol"></th>
62
+ <th :colspan="differenceColumns.length">Saving for sequence of x hours</th>
63
+ </tr>
64
+ <tr>
65
+ <th>Date</th>
66
+ <th>Hour</th>
67
+ <th>Price</th>
68
+ <th>On/Off</th>
69
+ <th>Saving</th>
70
+ <th class="sepcol"></th>
71
+ <th v-for="h in differenceColumns" :key="h">
72
+ {{ h }}
73
+ </th>
74
+ <th class="sepcol"></th>
75
+ <th v-for="h in differenceColumns" :key="h">
76
+ {{ h }}
77
+ </th>
78
+ </tr>
79
+ <tr v-for="(hour, i) in payload.hours" :key="hour.start">
80
+ <td>{{ DateTime.fromISO(hour.start).day }}</td>
81
+ <td>{{ DateTime.fromISO(hour.start).toLocaleString(DateTime.TIME_SIMPLE) }}</td>
82
+ <td :class="priceClasses(i)">{{ hour.price }}</td>
83
+ <td>{{ hour.onOff ? "On" : "Off" }}</td>
84
+ <td>{{ hour.saving ?? "" }}</td>
85
+ <td class="sepcol"></td>
86
+ <td v-for="(h, j) in differenceColumns" :key="h" @click="showSavingSource(i, j)" :class="savingClasses(i, j)">
87
+ {{ showNegative || differencePerHour[i][j] > 0 ? differencePerHour[i][j] : "" }}
88
+ </td>
89
+ <td class="sepcol"></td>
90
+ <td
91
+ v-for="(h, j) in differenceColumns"
92
+ :key="h"
93
+ @click="showSequenceSource(i, j)"
94
+ :class="sequenceClasses(i, j)"
95
+ >
96
+ {{
97
+ showNegative || totalPerSequence[i][j] > 0
98
+ ? "" + (showSum ? totalPerSequence[i][j] : averagePerSequence[i][j])
99
+ : ""
100
+ }}
101
+ </td>
102
+ </tr>
103
+ </table>
104
+ </div>
105
+ </template>
106
+
107
+ <script setup>
108
+ import { computed, reactive, ref, watch } from "vue";
109
+
110
+ const { roundPrice } = import("../../../src/utils");
111
+ const { DateTime } = import("luxon");
112
+
113
+ const message = ref("");
114
+ const showNegative = ref(false);
115
+
116
+ const show = ref("avg");
117
+ const showSum = computed(() => show.value === "sum");
118
+
119
+ console.log("This is the setup script");
120
+
121
+ const dataString = ref("");
122
+ watch(dataString, (value) => {
123
+ convert(value);
124
+ calculatePotentialSavings();
125
+ highlightSequence.length = 0;
126
+ clickedSequence.row = null;
127
+ clickedSequence.col = null;
128
+ clickedSaving.row = null;
129
+ clickedSaving.col = null;
130
+ });
131
+
132
+ const payload = reactive({});
133
+ function convert(value) {
134
+ try {
135
+ const obj = JSON.parse(value);
136
+ const pl = obj.payload ?? obj;
137
+ Object.keys(pl).forEach((key) => (payload[key] = pl[key]));
138
+ message.value = "";
139
+ } catch (e) {
140
+ message.value = "No legal JSON data";
141
+ }
142
+ }
143
+
144
+ const differencePerHour = reactive([]);
145
+ const differenceColumns = reactive([]);
146
+ const totalPerSequence = reactive([]);
147
+ const averagePerSequence = reactive([]);
148
+
149
+ function calculatePotentialSavings() {
150
+ const hours = payload.hours;
151
+
152
+ // Savings per hour
153
+ for (let i = 0; i < payload.config.maxHoursToSaveInSequence; i++) {
154
+ differenceColumns[i] = i + 1;
155
+ }
156
+ for (let i = 0; i < hours.length; i++) {
157
+ const row = reactive([]);
158
+ for (let j = 0; j < differenceColumns.length; j++) {
159
+ row[j] = i + j + 1 < hours.length ? roundPrice(hours[i].price - hours[i + j + 1].price) : null;
160
+ }
161
+ differencePerHour[i] = row;
162
+ }
163
+
164
+ // Savings per sequence
165
+ for (let i = 0; i < hours.length; i++) {
166
+ const tot = reactive([]);
167
+ const avg = reactive([]);
168
+ for (let j = 0; j < differenceColumns.length; j++) {
169
+ tot[j] = 0;
170
+ for (let k = 0; k <= j; k++) {
171
+ const res = tot[j] + (i + k < hours.length ? differencePerHour[i + k][j - k] : 0);
172
+ tot[j] = roundPrice(res);
173
+ avg[j] = roundPrice(res / (j + 1));
174
+ }
175
+ totalPerSequence[i] = tot;
176
+ averagePerSequence[i] = avg;
177
+ }
178
+ }
179
+ }
180
+
181
+ // Daily data
182
+ const dayData = computed(() => {
183
+ const hours = payload.hours;
184
+ const dates = [...new Set(hours.map((h) => DateTime.fromISO(h.start).toISODate()))];
185
+ const days = dates.map((d) => {
186
+ return { date: d };
187
+ });
188
+ days.forEach((d) => {
189
+ const dayHours = hours.filter((h) => DateTime.fromISO(h.start).toISODate() === d.date);
190
+ d.countHours = dayHours.length;
191
+ d.countOn = dayHours.filter((h) => h.onOff).length;
192
+ d.countOff = dayHours.filter((h) => !h.onOff).length;
193
+ d.countSaved = dayHours.filter((h) => h.saving !== null).length;
194
+ d.avgPrice = roundPrice(
195
+ dayHours.reduce((prev, h) => {
196
+ return prev + h.price;
197
+ }, 0.0) / d.countHours
198
+ );
199
+ d.sumSaved =
200
+ d.countSaved > 0
201
+ ? roundPrice(
202
+ dayHours.reduce((prev, h) => {
203
+ return prev + h.saving ?? 0;
204
+ }, 0)
205
+ )
206
+ : null;
207
+ d.avgSaved1 = d.countSaved > 0 ? roundPrice(d.sumSaved / d.countSaved) : null;
208
+ d.avgSaved2 = d.countSaved > 0 ? roundPrice(d.sumSaved / d.countHours) : null;
209
+ });
210
+ return days;
211
+ });
212
+
213
+ // Event handlers
214
+
215
+ // Show source for sequence sums
216
+ const highlightSequence = reactive([]);
217
+ const clickedSequence = reactive({ row: null, col: null });
218
+ function showSequenceSource(row, col) {
219
+ const sameCell = row === clickedSequence.row && col === clickedSequence.col;
220
+ highlightSequence.length = 0;
221
+ clickedSequence.row = sameCell ? null : row;
222
+ clickedSequence.col = sameCell ? null : col;
223
+ for (let c = 0; c <= col && !sameCell; c++) {
224
+ highlightSequence.push({ row: row + c, col: col - c });
225
+ }
226
+ }
227
+
228
+ // Show source for saving
229
+ const clickedSaving = reactive({ row: null, col: null });
230
+ function showSavingSource(row, col) {
231
+ const sameCell = row === clickedSaving.row && col === clickedSaving.col;
232
+ clickedSaving.row = sameCell ? null : row;
233
+ clickedSaving.col = sameCell ? null : col;
234
+ }
235
+
236
+ // Styling functions
237
+
238
+ function priceClasses(i) {
239
+ let hl =
240
+ clickedSaving.row === null ? false : clickedSaving.row === i || clickedSaving.row + clickedSaving.col === i - 1;
241
+ let res = hl ? "highlightSaving " : " ";
242
+ return res;
243
+ }
244
+
245
+ function savingClasses(i, j) {
246
+ const seq = highlightSequence.some((cell) => cell.row === i && cell.col === j);
247
+ const sav = i === clickedSaving.row && j === clickedSaving.col;
248
+ const res = "selectable ";
249
+ if (seq & sav) {
250
+ return res + "highlightBoth";
251
+ }
252
+ if (seq) {
253
+ return res + "highlightSequence";
254
+ }
255
+ if (sav) {
256
+ return res + "highlightSaving";
257
+ }
258
+ return res;
259
+ }
260
+
261
+ function sequenceClasses(i, j) {
262
+ let res = clickedSequence.row === i && clickedSequence.col === j ? "highlightSequence " : " ";
263
+ if (averagePerSequence[i][j] < payload.config.minSaving) {
264
+ res = res + "belowMin ";
265
+ }
266
+ return res + "selectable";
267
+ }
268
+ </script>
269
+
270
+ <style scoped>
271
+ .config > p {
272
+ margin: 0;
273
+ padding: 0;
274
+ }
275
+
276
+ td,
277
+ th {
278
+ margin: 2px 4px;
279
+ padding: 2px 4px;
280
+ font-size: small;
281
+ }
282
+
283
+ .highlightSequence {
284
+ background-color: lightskyblue;
285
+ }
286
+
287
+ .highlightSaving {
288
+ background-color: yellow;
289
+ }
290
+
291
+ .highlightBoth {
292
+ background-color: lightgreen;
293
+ }
294
+
295
+ .belowMin {
296
+ color: red;
297
+ }
298
+
299
+ .selectable {
300
+ cursor: pointer;
301
+ }
302
+
303
+ .sepcol {
304
+ background-color: darkgray;
305
+ }
306
+ </style>