node-red-contrib-power-saver 2.0.0 → 2.0.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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  List the most significant changes, starting in version 1.0.9.
4
4
 
5
+ ## 2.0.1
6
+
7
+ * Fix bug that caused no schedule
8
+ * Add config to output
9
+
5
10
  ## 2.0.0
6
11
 
7
12
  * New and better algorithm to calculates savings, resulting in a better schedule.
@@ -46,6 +46,7 @@ module.exports = {
46
46
  }
47
47
  if (
48
48
  saving > minSaving * count &&
49
+ hour + count <= last &&
49
50
  values[hour] > values[hour + count] + minSaving
50
51
  ) {
51
52
  savingsList.push({ hour, count, saving });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-red-contrib-power-saver",
3
- "version": "2.0.0",
3
+ "version": "2.0.1",
4
4
  "description": "A module for Node-RED that you can use to turn on and off a switch based on power prices",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/power-saver.js CHANGED
@@ -19,7 +19,7 @@ module.exports = function (RED) {
19
19
  this.maxHoursToSaveInSequence = config.maxHoursToSaveInSequence;
20
20
  this.minHoursOnAfterMaxSequenceSaved =
21
21
  config.minHoursOnAfterMaxSequenceSaved;
22
- this.minSaving = config.minSaving;
22
+ this.minSaving = parseFloat(config.minSaving);
23
23
  this.sendCurrentValueWhenRescheduling =
24
24
  config.sendCurrentValueWhenRescheduling;
25
25
  this.outputIfNoSchedule = config.outputIfNoSchedule === "true";
@@ -58,6 +58,14 @@ module.exports = function (RED) {
58
58
  // Save schedule
59
59
  dates.forEach((d) => saveDayData(node, d, extractPlanForDate(plan, d)));
60
60
 
61
+ const config = {
62
+ maxHoursToSaveInSequence: this.maxHoursToSaveInSequence,
63
+ minHoursOnAfterMaxSequenceSaved: this.minHoursOnAfterMaxSequenceSaved,
64
+ minSaving: this.minSaving,
65
+ sendCurrentValueWhenRescheduling: this.sendCurrentValueWhenRescheduling,
66
+ outputIfNoSchedule: this.outputIfNoSchedule,
67
+ };
68
+
61
69
  // Prepare output
62
70
  let output1 = null;
63
71
  let output2 = null;
@@ -66,6 +74,7 @@ module.exports = function (RED) {
66
74
  schedule: plan.schedule,
67
75
  hours: plan.hours,
68
76
  source: input.source,
77
+ config,
69
78
  },
70
79
  };
71
80
 
@@ -160,4 +160,10 @@ module.exports = {
160
160
  },
161
161
  ],
162
162
  source: "Other",
163
+ config: {
164
+ maxHoursToSaveInSequence: 3,
165
+ minHoursOnAfterMaxSequenceSaved: 2,
166
+ minSaving: 0.001,
167
+ outputIfNoSchedule: false,
168
+ },
163
169
  };
@@ -0,0 +1,412 @@
1
+ {
2
+ "payload": {
3
+ "viewer": {
4
+ "homes": [
5
+ {
6
+ "currentSubscription": {
7
+ "priceInfo": {
8
+ "today": [
9
+ {
10
+ "total": 0.1657,
11
+ "startsAt": "2021-10-23T00:00:00.000+02:00"
12
+ },
13
+ {
14
+ "total": 0.158,
15
+ "startsAt": "2021-10-23T01:00:00.000+02:00"
16
+ },
17
+ {
18
+ "total": 0.1554,
19
+ "startsAt": "2021-10-23T02:00:00.000+02:00"
20
+ },
21
+ {
22
+ "total": 0.1624,
23
+ "startsAt": "2021-10-23T03:00:00.000+02:00"
24
+ },
25
+ {
26
+ "total": 0.1712,
27
+ "startsAt": "2021-10-23T04:00:00.000+02:00"
28
+ },
29
+ {
30
+ "total": 0.185,
31
+ "startsAt": "2021-10-23T05:00:00.000+02:00"
32
+ },
33
+ {
34
+ "total": 0.19,
35
+ "startsAt": "2021-10-23T06:00:00.000+02:00"
36
+ },
37
+ {
38
+ "total": 0.1997,
39
+ "startsAt": "2021-10-23T07:00:00.000+02:00"
40
+ },
41
+ {
42
+ "total": 0.2213,
43
+ "startsAt": "2021-10-23T08:00:00.000+02:00"
44
+ },
45
+ {
46
+ "total": 0.2373,
47
+ "startsAt": "2021-10-23T09:00:00.000+02:00"
48
+ },
49
+ {
50
+ "total": 0.2529,
51
+ "startsAt": "2021-10-23T10:00:00.000+02:00"
52
+ },
53
+ {
54
+ "total": 0.2542,
55
+ "startsAt": "2021-10-23T11:00:00.000+02:00"
56
+ },
57
+ {
58
+ "total": 0.2523,
59
+ "startsAt": "2021-10-23T12:00:00.000+02:00"
60
+ },
61
+ {
62
+ "total": 0.2486,
63
+ "startsAt": "2021-10-23T13:00:00.000+02:00"
64
+ },
65
+ {
66
+ "total": 0.2458,
67
+ "startsAt": "2021-10-23T14:00:00.000+02:00"
68
+ },
69
+ {
70
+ "total": 0.2455,
71
+ "startsAt": "2021-10-23T15:00:00.000+02:00"
72
+ },
73
+ {
74
+ "total": 0.2476,
75
+ "startsAt": "2021-10-23T16:00:00.000+02:00"
76
+ },
77
+ {
78
+ "total": 0.2527,
79
+ "startsAt": "2021-10-23T17:00:00.000+02:00"
80
+ },
81
+ {
82
+ "total": 0.2563,
83
+ "startsAt": "2021-10-23T18:00:00.000+02:00"
84
+ },
85
+ {
86
+ "total": 0.255,
87
+ "startsAt": "2021-10-23T19:00:00.000+02:00"
88
+ },
89
+ {
90
+ "total": 0.2458,
91
+ "startsAt": "2021-10-23T20:00:00.000+02:00"
92
+ },
93
+ {
94
+ "total": 0.2232,
95
+ "startsAt": "2021-10-23T21:00:00.000+02:00"
96
+ },
97
+ {
98
+ "total": 0.2079,
99
+ "startsAt": "2021-10-23T22:00:00.000+02:00"
100
+ },
101
+ {
102
+ "total": 0.2005,
103
+ "startsAt": "2021-10-23T23:00:00.000+02:00"
104
+ }
105
+ ],
106
+ "tomorrow": [
107
+ {
108
+ "total": 0.2048,
109
+ "startsAt": "2021-10-24T00:00:00.000+02:00"
110
+ },
111
+ {
112
+ "total": 0.1987,
113
+ "startsAt": "2021-10-24T01:00:00.000+02:00"
114
+ },
115
+ {
116
+ "total": 0.192,
117
+ "startsAt": "2021-10-24T02:00:00.000+02:00"
118
+ },
119
+ {
120
+ "total": 0.1891,
121
+ "startsAt": "2021-10-24T03:00:00.000+02:00"
122
+ },
123
+ {
124
+ "total": 0.1827,
125
+ "startsAt": "2021-10-24T04:00:00.000+02:00"
126
+ },
127
+ {
128
+ "total": 0.174,
129
+ "startsAt": "2021-10-24T05:00:00.000+02:00"
130
+ },
131
+ {
132
+ "total": 0.1719,
133
+ "startsAt": "2021-10-24T06:00:00.000+02:00"
134
+ },
135
+ {
136
+ "total": 0.1759,
137
+ "startsAt": "2021-10-24T07:00:00.000+02:00"
138
+ },
139
+ {
140
+ "total": 0.1809,
141
+ "startsAt": "2021-10-24T08:00:00.000+02:00"
142
+ },
143
+ {
144
+ "total": 0.1898,
145
+ "startsAt": "2021-10-24T09:00:00.000+02:00"
146
+ },
147
+ {
148
+ "total": 0.1933,
149
+ "startsAt": "2021-10-24T10:00:00.000+02:00"
150
+ },
151
+ {
152
+ "total": 0.1996,
153
+ "startsAt": "2021-10-24T11:00:00.000+02:00"
154
+ },
155
+ {
156
+ "total": 0.2015,
157
+ "startsAt": "2021-10-24T12:00:00.000+02:00"
158
+ },
159
+ {
160
+ "total": 0.2013,
161
+ "startsAt": "2021-10-24T13:00:00.000+02:00"
162
+ },
163
+ {
164
+ "total": 0.1977,
165
+ "startsAt": "2021-10-24T14:00:00.000+02:00"
166
+ },
167
+ {
168
+ "total": 0.1983,
169
+ "startsAt": "2021-10-24T15:00:00.000+02:00"
170
+ },
171
+ {
172
+ "total": 0.198,
173
+ "startsAt": "2021-10-24T16:00:00.000+02:00"
174
+ },
175
+ {
176
+ "total": 0.2217,
177
+ "startsAt": "2021-10-24T17:00:00.000+02:00"
178
+ },
179
+ {
180
+ "total": 0.219,
181
+ "startsAt": "2021-10-24T18:00:00.000+02:00"
182
+ },
183
+ {
184
+ "total": 0.2208,
185
+ "startsAt": "2021-10-24T19:00:00.000+02:00"
186
+ },
187
+ {
188
+ "total": 0.2099,
189
+ "startsAt": "2021-10-24T20:00:00.000+02:00"
190
+ },
191
+ {
192
+ "total": 0.2021,
193
+ "startsAt": "2021-10-24T21:00:00.000+02:00"
194
+ },
195
+ {
196
+ "total": 0.1856,
197
+ "startsAt": "2021-10-24T22:00:00.000+02:00"
198
+ },
199
+ {
200
+ "total": 0.1658,
201
+ "startsAt": "2021-10-24T23:00:00.000+02:00"
202
+ }
203
+ ]
204
+ }
205
+ }
206
+ },
207
+ {
208
+ "currentSubscription": {
209
+ "priceInfo": {
210
+ "today": [
211
+ {
212
+ "total": 0.1657,
213
+ "startsAt": "2021-10-23T00:00:00.000+02:00"
214
+ },
215
+ {
216
+ "total": 0.158,
217
+ "startsAt": "2021-10-23T01:00:00.000+02:00"
218
+ },
219
+ {
220
+ "total": 0.1554,
221
+ "startsAt": "2021-10-23T02:00:00.000+02:00"
222
+ },
223
+ {
224
+ "total": 0.1624,
225
+ "startsAt": "2021-10-23T03:00:00.000+02:00"
226
+ },
227
+ {
228
+ "total": 0.1712,
229
+ "startsAt": "2021-10-23T04:00:00.000+02:00"
230
+ },
231
+ {
232
+ "total": 0.185,
233
+ "startsAt": "2021-10-23T05:00:00.000+02:00"
234
+ },
235
+ {
236
+ "total": 0.19,
237
+ "startsAt": "2021-10-23T06:00:00.000+02:00"
238
+ },
239
+ {
240
+ "total": 0.1997,
241
+ "startsAt": "2021-10-23T07:00:00.000+02:00"
242
+ },
243
+ {
244
+ "total": 0.2213,
245
+ "startsAt": "2021-10-23T08:00:00.000+02:00"
246
+ },
247
+ {
248
+ "total": 0.2373,
249
+ "startsAt": "2021-10-23T09:00:00.000+02:00"
250
+ },
251
+ {
252
+ "total": 0.2529,
253
+ "startsAt": "2021-10-23T10:00:00.000+02:00"
254
+ },
255
+ {
256
+ "total": 0.2542,
257
+ "startsAt": "2021-10-23T11:00:00.000+02:00"
258
+ },
259
+ {
260
+ "total": 0.2523,
261
+ "startsAt": "2021-10-23T12:00:00.000+02:00"
262
+ },
263
+ {
264
+ "total": 0.2486,
265
+ "startsAt": "2021-10-23T13:00:00.000+02:00"
266
+ },
267
+ {
268
+ "total": 0.2458,
269
+ "startsAt": "2021-10-23T14:00:00.000+02:00"
270
+ },
271
+ {
272
+ "total": 0.2455,
273
+ "startsAt": "2021-10-23T15:00:00.000+02:00"
274
+ },
275
+ {
276
+ "total": 0.2476,
277
+ "startsAt": "2021-10-23T16:00:00.000+02:00"
278
+ },
279
+ {
280
+ "total": 0.2527,
281
+ "startsAt": "2021-10-23T17:00:00.000+02:00"
282
+ },
283
+ {
284
+ "total": 0.2563,
285
+ "startsAt": "2021-10-23T18:00:00.000+02:00"
286
+ },
287
+ {
288
+ "total": 0.255,
289
+ "startsAt": "2021-10-23T19:00:00.000+02:00"
290
+ },
291
+ {
292
+ "total": 0.2458,
293
+ "startsAt": "2021-10-23T20:00:00.000+02:00"
294
+ },
295
+ {
296
+ "total": 0.2232,
297
+ "startsAt": "2021-10-23T21:00:00.000+02:00"
298
+ },
299
+ {
300
+ "total": 0.2079,
301
+ "startsAt": "2021-10-23T22:00:00.000+02:00"
302
+ },
303
+ {
304
+ "total": 0.2005,
305
+ "startsAt": "2021-10-23T23:00:00.000+02:00"
306
+ }
307
+ ],
308
+ "tomorrow": [
309
+ {
310
+ "total": 0.2048,
311
+ "startsAt": "2021-10-24T00:00:00.000+02:00"
312
+ },
313
+ {
314
+ "total": 0.1987,
315
+ "startsAt": "2021-10-24T01:00:00.000+02:00"
316
+ },
317
+ {
318
+ "total": 0.192,
319
+ "startsAt": "2021-10-24T02:00:00.000+02:00"
320
+ },
321
+ {
322
+ "total": 0.1891,
323
+ "startsAt": "2021-10-24T03:00:00.000+02:00"
324
+ },
325
+ {
326
+ "total": 0.1827,
327
+ "startsAt": "2021-10-24T04:00:00.000+02:00"
328
+ },
329
+ {
330
+ "total": 0.174,
331
+ "startsAt": "2021-10-24T05:00:00.000+02:00"
332
+ },
333
+ {
334
+ "total": 0.1719,
335
+ "startsAt": "2021-10-24T06:00:00.000+02:00"
336
+ },
337
+ {
338
+ "total": 0.1759,
339
+ "startsAt": "2021-10-24T07:00:00.000+02:00"
340
+ },
341
+ {
342
+ "total": 0.1809,
343
+ "startsAt": "2021-10-24T08:00:00.000+02:00"
344
+ },
345
+ {
346
+ "total": 0.1898,
347
+ "startsAt": "2021-10-24T09:00:00.000+02:00"
348
+ },
349
+ {
350
+ "total": 0.1933,
351
+ "startsAt": "2021-10-24T10:00:00.000+02:00"
352
+ },
353
+ {
354
+ "total": 0.1996,
355
+ "startsAt": "2021-10-24T11:00:00.000+02:00"
356
+ },
357
+ {
358
+ "total": 0.2015,
359
+ "startsAt": "2021-10-24T12:00:00.000+02:00"
360
+ },
361
+ {
362
+ "total": 0.2013,
363
+ "startsAt": "2021-10-24T13:00:00.000+02:00"
364
+ },
365
+ {
366
+ "total": 0.1977,
367
+ "startsAt": "2021-10-24T14:00:00.000+02:00"
368
+ },
369
+ {
370
+ "total": 0.1983,
371
+ "startsAt": "2021-10-24T15:00:00.000+02:00"
372
+ },
373
+ {
374
+ "total": 0.198,
375
+ "startsAt": "2021-10-24T16:00:00.000+02:00"
376
+ },
377
+ {
378
+ "total": 0.2217,
379
+ "startsAt": "2021-10-24T17:00:00.000+02:00"
380
+ },
381
+ {
382
+ "total": 0.219,
383
+ "startsAt": "2021-10-24T18:00:00.000+02:00"
384
+ },
385
+ {
386
+ "total": 0.2208,
387
+ "startsAt": "2021-10-24T19:00:00.000+02:00"
388
+ },
389
+ {
390
+ "total": 0.2099,
391
+ "startsAt": "2021-10-24T20:00:00.000+02:00"
392
+ },
393
+ {
394
+ "total": 0.2021,
395
+ "startsAt": "2021-10-24T21:00:00.000+02:00"
396
+ },
397
+ {
398
+ "total": 0.1856,
399
+ "startsAt": "2021-10-24T22:00:00.000+02:00"
400
+ },
401
+ {
402
+ "total": 0.1658,
403
+ "startsAt": "2021-10-24T23:00:00.000+02:00"
404
+ }
405
+ ]
406
+ }
407
+ }
408
+ }
409
+ ]
410
+ }
411
+ }
412
+ }
@@ -347,5 +347,11 @@
347
347
  "saving": null
348
348
  }
349
349
  ],
350
- "source": "Tibber"
350
+ "source": "Tibber",
351
+ "config": {
352
+ "maxHoursToSaveInSequence": 4,
353
+ "minHoursOnAfterMaxSequenceSaved": 2,
354
+ "minSaving": 0.001,
355
+ "outputIfNoSchedule": false
356
+ }
351
357
  }
@@ -174,7 +174,6 @@ describe("power-saver Node", function () {
174
174
  const n1 = helper.getNode("n1");
175
175
  const n2 = helper.getNode("n2");
176
176
  n2.on("input", function (msg) {
177
- console.log(JSON.stringify(msg, null, 2));
178
177
  expect(msg).toHaveProperty("payload", tibberResult);
179
178
  done();
180
179
  });