smart-nodes 0.3.37 → 0.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 (109) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/README.md +35 -17
  3. package/central/central.html +26 -12
  4. package/central/central.js +84 -26
  5. package/central/locales/de-DE/central.json +1 -4
  6. package/central/locales/en-US/central.json +0 -3
  7. package/compare/compare.html +40 -24
  8. package/compare/compare.js +69 -29
  9. package/compare/locales/de-DE/compare.json +5 -7
  10. package/compare/locales/en-US/compare.json +18 -8
  11. package/counter/counter.html +64 -17
  12. package/counter/counter.js +43 -20
  13. package/counter/locales/de-DE/counter.json +6 -9
  14. package/counter/locales/en-US/counter.json +12 -16
  15. package/delay/delay.html +18 -88
  16. package/delay/delay.js +63 -20
  17. package/delay/locales/de-DE/delay.html +71 -0
  18. package/delay/locales/de-DE/delay.json +19 -0
  19. package/delay/locales/en-US/delay.html +76 -0
  20. package/delay/locales/en-US/delay.json +19 -0
  21. package/forwarder/forwarder.html +11 -42
  22. package/forwarder/forwarder.js +59 -18
  23. package/forwarder/locales/de-DE/forwarder.html +32 -0
  24. package/forwarder/locales/de-DE/forwarder.json +15 -0
  25. package/forwarder/locales/en-US/forwarder.html +32 -0
  26. package/forwarder/locales/en-US/forwarder.json +15 -0
  27. package/heating-curve/heating-curve.html +10 -51
  28. package/heating-curve/heating-curve.js +39 -14
  29. package/heating-curve/locales/de-DE/heating-curve.html +38 -0
  30. package/heating-curve/locales/de-DE/heating-curve.json +12 -0
  31. package/heating-curve/locales/en-US/heating-curve.html +38 -0
  32. package/heating-curve/locales/en-US/heating-curve.json +12 -0
  33. package/hysteresis/hysteresis.html +43 -65
  34. package/hysteresis/hysteresis.js +94 -69
  35. package/hysteresis/locales/de-DE/hysteresis.html +36 -0
  36. package/hysteresis/locales/de-DE/hysteresis.json +27 -0
  37. package/hysteresis/locales/en-US/hysteresis.html +36 -0
  38. package/hysteresis/locales/en-US/hysteresis.json +27 -0
  39. package/{light-control/light-control.html → light/light.html} +34 -144
  40. package/{light-control/light-control.js → light/light.js} +151 -32
  41. package/light/locales/de-DE/light.html +149 -0
  42. package/light/locales/de-DE/light.json +24 -0
  43. package/light/locales/en-US/light.html +148 -0
  44. package/light/locales/en-US/light.json +24 -0
  45. package/logic/locales/de-DE/logic.html +12 -0
  46. package/logic/locales/de-DE/logic.json +26 -0
  47. package/logic/locales/en-US/logic.html +12 -0
  48. package/logic/locales/en-US/logic.json +26 -0
  49. package/logic/logic.html +27 -40
  50. package/logic/logic.js +63 -29
  51. package/long-press/locales/de-DE/long-press.html +5 -0
  52. package/long-press/locales/de-DE/long-press.json +13 -0
  53. package/long-press/locales/en-US/long-press.html +5 -0
  54. package/long-press/locales/en-US/long-press.json +13 -0
  55. package/{long-press-control/long-press-control.html → long-press/long-press.html} +10 -14
  56. package/long-press/long-press.js +163 -0
  57. package/mixing-valve/locales/de-DE/mixing-valve.html +65 -0
  58. package/mixing-valve/locales/de-DE/mixing-valve.json +19 -0
  59. package/mixing-valve/locales/en-US/mixing-valve.html +66 -0
  60. package/mixing-valve/locales/en-US/mixing-valve.json +19 -0
  61. package/mixing-valve/mixing-valve.html +15 -79
  62. package/mixing-valve/mixing-valve.js +87 -61
  63. package/multi-press/locales/de-DE/multi-press.html +5 -0
  64. package/multi-press/locales/de-DE/multi-press.json +12 -0
  65. package/multi-press/locales/en-US/multi-press.html +5 -0
  66. package/multi-press/locales/en-US/multi-press.json +12 -0
  67. package/{multi-press-control/multi-press-control.html → multi-press/multi-press.html} +9 -13
  68. package/{multi-press-control/multi-press-control.js → multi-press/multi-press.js} +53 -5
  69. package/package.json +7 -7
  70. package/persistence.js +1 -0
  71. package/scene/locales/de-DE/scene.html +105 -0
  72. package/scene/locales/de-DE/scene.json +21 -0
  73. package/scene/locales/en-US/scene.html +107 -0
  74. package/scene/locales/en-US/scene.json +20 -0
  75. package/{scene-control/scene-control.html → scene/scene.html} +18 -121
  76. package/{scene-control/scene-control.js → scene/scene.js} +76 -26
  77. package/scheduler/locales/de-DE/scheduler.html +30 -0
  78. package/scheduler/locales/de-DE/scheduler.json +21 -0
  79. package/scheduler/locales/en-US/scheduler.html +30 -0
  80. package/scheduler/locales/en-US/scheduler.json +21 -0
  81. package/scheduler/scheduler.html +34 -64
  82. package/scheduler/scheduler.js +85 -53
  83. package/shutter/locales/de-DE/shutter.html +127 -0
  84. package/shutter/locales/de-DE/shutter.json +11 -0
  85. package/shutter/locales/en-US/shutter.html +133 -0
  86. package/shutter/locales/en-US/shutter.json +11 -0
  87. package/{shutter-control/shutter-control.html → shutter/shutter.html} +7 -133
  88. package/{shutter-control/shutter-control.js → shutter/shutter.js} +116 -56
  89. package/shutter-complex/locales/de-DE/shutter-complex.html +120 -0
  90. package/shutter-complex/locales/de-DE/shutter-complex.json +20 -0
  91. package/shutter-complex/locales/en-US/shutter-complex.html +120 -0
  92. package/shutter-complex/locales/en-US/shutter-complex.json +20 -0
  93. package/{shutter-complex-control/shutter-complex-control.html → shutter-complex/shutter-complex.html} +30 -133
  94. package/shutter-complex/shutter-complex.js +578 -0
  95. package/smart_helper.js +61 -9
  96. package/statistic/locales/de-DE/statistic.html +10 -0
  97. package/statistic/locales/de-DE/statistic.json +29 -0
  98. package/statistic/locales/en-US/statistic.html +10 -0
  99. package/statistic/locales/en-US/statistic.json +29 -0
  100. package/statistic/statistic.html +32 -36
  101. package/statistic/statistic.js +58 -29
  102. package/text-exec/locales/de-DE/text-exec.html +18 -0
  103. package/text-exec/locales/de-DE/text-exec.json +7 -0
  104. package/text-exec/locales/en-US/text-exec.html +18 -0
  105. package/text-exec/locales/en-US/text-exec.json +7 -0
  106. package/text-exec/text-exec.html +9 -25
  107. package/text-exec/text-exec.js +43 -2
  108. package/long-press-control/long-press-control.js +0 -76
  109. package/shutter-complex-control/shutter-complex-control.js +0 -442
@@ -7,40 +7,84 @@ module.exports = function (RED)
7
7
  const node = this;
8
8
  RED.nodes.createNode(node, config);
9
9
 
10
+
11
+ // ###################
12
+ // # Class constants #
13
+ // ###################
14
+
15
+
16
+ // #######################
17
+ // # Global help objects #
18
+ // #######################
10
19
  const smart_context = require("../persistence.js")(RED);
11
20
  const helper = require("../smart_helper.js");
12
21
 
22
+
23
+ // #####################
24
+ // # persistent values #
25
+ // #####################
13
26
  var node_settings = {
14
27
  enabled: config.enabled,
15
28
  last_message: null,
16
29
  last_msg_was_sended: true
17
30
  };
18
31
 
32
+ // load or delete saved values
19
33
  if (config.save_state)
20
- {
21
- // load old saved values
22
34
  node_settings = Object.assign(node_settings, smart_context.get(node.id));
23
- }
24
35
  else
25
- {
26
- // delete old saved values
27
36
  smart_context.del(node.id);
28
- }
29
37
 
30
- // dynamic config
38
+
39
+ // ##################
40
+ // # Dynamic config #
41
+ // ##################
31
42
  let forward_true = config.always_forward_true;
32
43
  let forward_false = config.always_forward_false;
33
44
  let forward_last_on_enable = config.forward_last_on_enable;
34
45
 
35
- // runtime values
46
+
47
+ // ##################
48
+ // # Runtime values #
49
+ // ##################
36
50
 
37
51
 
52
+ // ###############
53
+ // # Node events #
54
+ // ###############
38
55
  node.on("input", function (msg)
39
56
  {
57
+ handleTopic(msg);
58
+
59
+ setStatus();
60
+
61
+ if (config.save_state)
62
+ smart_context.set(node.id, node_settings);
63
+ });
64
+
65
+ node.on("close", function ()
66
+ {
67
+ if (timeout != null)
68
+ {
69
+ clearTimeout(timeout);
70
+ timeout = null;
71
+ }
72
+ });
73
+
74
+
75
+ // #####################
76
+ // # Private functions #
77
+ // #####################
78
+
79
+ // This is the main function which handles all topics that was received.
80
+ let handleTopic = msg =>
81
+ {
82
+ let real_topic = helper.getTopicName(msg.topic);
83
+
40
84
  let new_state = null;
41
- if (msg.topic == "enable" || (msg.topic == "set_state" && msg.payload))
85
+ if (real_topic == "enable" || (real_topic == "set_state" && msg.payload))
42
86
  new_state = true;
43
- else if (msg.topic == "disable" || (msg.topic == "set_state" && !msg.payload))
87
+ else if (real_topic == "disable" || (real_topic == "set_state" && !msg.payload))
44
88
  new_state = false;
45
89
 
46
90
  // Already the correct state
@@ -53,12 +97,9 @@ module.exports = function (RED)
53
97
  case false:
54
98
  node_settings.enabled = new_state;
55
99
 
56
- if (config.save_state)
57
- smart_context.set(node.id, node_settings);
58
-
59
100
  if (node_settings.enabled && forward_last_on_enable && node_settings.last_message != null && !node_settings.last_msg_was_sended)
60
101
  {
61
- node.send(node_settings.last_message);
102
+ node.send(helper.cloneObject(node_settings.last_message));
62
103
  node_settings.last_msg_was_sended = true;
63
104
  }
64
105
 
@@ -69,7 +110,7 @@ module.exports = function (RED)
69
110
  // Forward if enabled or forced
70
111
  if (node_settings.enabled || (forward_true && msg.payload) || (forward_false && !msg.payload))
71
112
  {
72
- node.send(msg);
113
+ node.send(helper.cloneObject(msg));
73
114
  node_settings.last_msg_was_sended = true;
74
115
  }
75
116
  else
@@ -77,10 +118,10 @@ module.exports = function (RED)
77
118
  node_settings.last_msg_was_sended = false;
78
119
  }
79
120
 
80
- node_settings.last_message = helper.cloneObject(msg);;
121
+ node_settings.last_message = helper.cloneObject(msg);
81
122
  break;
82
123
  }
83
- });
124
+ }
84
125
 
85
126
  let setStatus = () =>
86
127
  {
@@ -94,7 +135,7 @@ module.exports = function (RED)
94
135
  {
95
136
  setTimeout(() =>
96
137
  {
97
- node.send(node_settings.last_message);
138
+ node.send(helper.cloneObject(node_settings.last_message));
98
139
  }, 10000);
99
140
  }
100
141
 
@@ -0,0 +1,32 @@
1
+ <script type="text/html" data-help-name="smart_forwarder">
2
+ <p>Diese Node leitet eine Nachricht weiter, wenn er enabled wurde oder das dauerhafte Weiterleiten für die Nachricht aktiviert ist.</p>
3
+ <p>
4
+ <b>Hinweis:</b> Smart Nodes verwenden Topics im Format <code>name#nummer</code>, damit können verschiedene Smart Nodes mit dem gleichen Topic angesteuert werden.<br/>
5
+ Diese Node verwendet nur den Teil <code>name</code>. <code>#</code> und <code>nummer</code> sind dabei optional.
6
+ </p>
7
+ <p>
8
+ Folgende topics werden akzeptiert:
9
+ <table>
10
+ <thead>
11
+ <tr>
12
+ <th>Topic</th>
13
+ <th>Beschreibung</th>
14
+ </tr>
15
+ </thead>
16
+ <tbody>
17
+ <tr>
18
+ <td><code>enable</code></td>
19
+ <td>Aktiviert das Weiterleiten.</td>
20
+ </tr>
21
+ <tr>
22
+ <td><code>disable</code></td>
23
+ <td>Deaktiviert das Weiterleiten.</td>
24
+ </tr>
25
+ <tr>
26
+ <td><code>set_state</code></td>
27
+ <td>Aktiviert das Weiterleiten, wenn <code>msg.payload = true</code> oder deaktiviert das Weiterleiten, wenn <code>msg.payload = false</code>.</td>
28
+ </tr>
29
+ </tbody>
30
+ </table>
31
+ </p>
32
+ </script>
@@ -0,0 +1,15 @@
1
+ {
2
+ "forwarder": {
3
+ "ui": {
4
+ "name": "Name",
5
+ "enabled": "Aktiviert",
6
+ "forward_last_on_enable": "Letzte nicht gesendete Nachricht senden, wenn die Node aktiviert wird.",
7
+ "always_forward_true": "Leite <code>msg.payload = true</code> immer weiter.",
8
+ "always_forward_false": "Leite <code>msg.payload = false</code> immer weiter.",
9
+
10
+ "system_start": "Systemstart",
11
+ "save_state": "Zustand speichern",
12
+ "send_after_start": "Letze Nachricht 10 Sekunden nach dem Start senden"
13
+ }
14
+ }
15
+ }
@@ -0,0 +1,32 @@
1
+ <script type="text/html" data-help-name="smart_forwarder">
2
+ <p>This node forwards a message if it has been enabled or if permanent forwarding is activated for the message.</p>
3
+ <p>
4
+ <b>Note:</b> Smart nodes use topics in the format <code>name#number</code>, so that different smart nodes can be controlled with the same topic.<br />
5
+ This node only uses the part <code>name</code>. <code>#</code> and <code>number</code> are optional.
6
+ </p>
7
+ <p>
8
+ The following topics are accepted:
9
+ <table>
10
+ <thead>
11
+ <tr>
12
+ <th>Topic</th>
13
+ <th>Description</th>
14
+ </tr>
15
+ </thead>
16
+ <tbody>
17
+ <tr>
18
+ <td><code>enable</code></td>
19
+ <td>Enables forwarding.</td>
20
+ </tr>
21
+ <tr>
22
+ <td><code>disable</code></td>
23
+ <td>Disables forwarding.</td>
24
+ </tr>
25
+ <tr>
26
+ <td><code>set_state</code></td>
27
+ <td>Enables forwarding if <code>msg.payload = true</code> or disables forwarding if <code>msg.payload = false</code>.</td>
28
+ </tr>
29
+ </tbody>
30
+ </table>
31
+ </p>
32
+ </script>
@@ -0,0 +1,15 @@
1
+ {
2
+ "forwarder": {
3
+ "ui": {
4
+ "name": "Name",
5
+ "enabled": "Enabled",
6
+ "forward_last_on_enable": "Send last unsent message when node is activated.",
7
+ "always_forward_true": "Always forward <code>msg.payload = true</code> .",
8
+ "always_forward_false": "Always forward <code>msg.payload = false</code> .",
9
+
10
+ "system_start": "System start",
11
+ "save_state": "Save state",
12
+ "send_after_start": "Send last message 10 seconds after the start"
13
+ }
14
+ }
15
+ }
@@ -1,8 +1,6 @@
1
1
  <script type="text/javascript">
2
2
  (function ()
3
3
  {
4
- let node;
5
-
6
4
  RED.nodes.registerType("smart_heating-curve", {
7
5
  category: "Smart Nodes",
8
6
  paletteLabel: "Heating Curve",
@@ -24,7 +22,7 @@
24
22
  },
25
23
  oneditprepare: function ()
26
24
  {
27
- node = this;
25
+ let node = this;
28
26
 
29
27
  $("#node-input-room_setpoint")
30
28
  .spinner({
@@ -278,69 +276,30 @@
278
276
 
279
277
  <script type="text/html" data-template-name="smart_heating-curve">
280
278
  <div class="form-row">
281
- <label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
282
- <input type="text" id="node-input-name" placeholder="Name" />
279
+ <label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="heating.ui.name"></span></label>
280
+ <input type="text" id="node-input-name" data-i18n="[placeholder]heating.ui.name" />
283
281
  </div>
284
282
  <div class="form-row">
285
- <label for="node-input-room_setpoint"><i class="fa fa-thermometer-three-quarters"></i> Raum Soll</label>
283
+ <label for="node-input-room_setpoint"><i class="fa fa-thermometer-three-quarters"></i> <span data-i18n="heating.ui.room_setpoint"></span></label>
286
284
  <input id="node-input-room_setpoint" value="0" /> °C [15 - 25]
287
285
  </div>
288
286
  <div class="form-row">
289
- <label for="node-input-slope"><i class="fa fa-expand"></i> Steilheit</label>
287
+ <label for="node-input-slope"><i class="fa fa-expand"></i> <span data-i18n="heating.ui.slope"></span></label>
290
288
  <input id="node-input-slope" value="0" /> [0,05 - 4]
291
289
  </div>
292
290
  <div class="form-row">
293
- <label for="node-input-offset"><i class="fa fa-arrows-v"></i> Verschiebung</label>
291
+ <label for="node-input-offset"><i class="fa fa-arrows-v"></i> <span data-i18n="heating.ui.offset"></span></label>
294
292
  <input id="node-input-offset" value="0" />
295
293
  </div>
296
294
  <div class="form-row">
297
- <label for="node-input-flow_max"><i class="fa fa-arrow-up"></i> Max Soll</label>
298
- <input id="node-input-flow_max" value="0" />
295
+ <label for="node-input-flow_min"><i class="fa fa-arrow-down"></i> <span data-i18n="heating.ui.min_setpoint"></span></label>
296
+ <input id="node-input-flow_min" value="0" />
299
297
  </div>
300
298
  <div class="form-row">
301
- <label for="node-input-flow_min"><i class="fa fa-arrow-down"></i> Min Soll</label>
302
- <input id="node-input-flow_min" value="0" />
299
+ <label for="node-input-flow_max"><i class="fa fa-arrow-up"></i> <span data-i18n="heating.ui.max_setpoint"></span></label>
300
+ <input id="node-input-flow_max" value="0" />
303
301
  </div>
304
302
  <div class="form-row">
305
303
  <canvas id="heating-curve-diagram" width="450" height="300"></canvas>
306
304
  </div>
307
- </script>
308
-
309
- <script type="text/html" data-help-name="smart_heating-curve">
310
- <p>
311
- Diese Node berechnet anhand den eingestellten Werten, die Vorlaufsolltemperatur. Diese kann verwendet werden um ein Mischventil anzusteuern.
312
- </p>
313
- <p>
314
- <b>Hinweis:</b> Smart Nodes verwenden Topics im Format <code>name#nummer</code>, damit können verschiedene Smart Nodes mit dem gleichen Topic angesteuert werden.<br/>
315
- Diese Node verwendet nur den Teil <code>name</code>. <code>#</code> und <code>nummer</code> sind dabei optional.
316
- </p>
317
- <p>
318
- Folgende topics werden akzeptiert:
319
- <table>
320
- <thead>
321
- <tr>
322
- <th>Topic</th>
323
- <th>Beschreibung</th>
324
- </tr>
325
- </thead>
326
- <tbody>
327
- <tr>
328
- <td><code>room_setpoint</code></td>
329
- <td>Überschreibt die Raum-Solltemperatur.</td>
330
- </tr>
331
- <tr>
332
- <td><code>flow_min</code></td>
333
- <td>Überschreibt die minimale Vorlaufsolltemperatur.</td>
334
- </tr>
335
- <tr>
336
- <td><code>flow_max</code></td>
337
- <td>Überschreibt die maximale Vorlaufsolltemperatur.</td>
338
- </tr>
339
- <tr>
340
- <td><code>temperature_outside</code></td>
341
- <td>Setzt die aktuelle Außentemperatur.</td>
342
- </tr>
343
- </tbody>
344
- </table>
345
- </p>
346
305
  </script>
@@ -7,11 +7,22 @@ module.exports = function (RED)
7
7
  const node = this;
8
8
  RED.nodes.createNode(node, config);
9
9
 
10
+ // ###################
11
+ // # Class constants #
12
+ // ###################
13
+
14
+
15
+ // #######################
16
+ // # Global help objects #
17
+ // #######################
10
18
  const smart_context = require("../persistence.js")(RED);
11
19
  const helper = require("../smart_helper.js");
12
20
 
13
- // persistent values
14
- var node_settings = Object.assign({}, {
21
+
22
+ // #####################
23
+ // # persistent values #
24
+ // #####################
25
+ var node_settings = helper.cloneObject({
15
26
  room_setpoint: config.room_setpoint,
16
27
  flow_min: config.flow_min,
17
28
  flow_max: config.flow_max,
@@ -19,17 +30,30 @@ module.exports = function (RED)
19
30
  last_flow_temperature: null
20
31
  }, smart_context.get(node.id));
21
32
 
22
- // dynamic config
33
+
34
+ // ##################
35
+ // # Dynamic config #
36
+ // ##################
23
37
  let slope = config.slope;
24
38
  let offset = config.offset;
25
39
 
26
- // runtime values
27
40
 
41
+ // ##################
42
+ // # Runtime values #
43
+ // ##################
44
+
45
+
46
+ // ###############
47
+ // # Node events #
48
+ // ###############
28
49
  node.on("input", function (msg)
29
50
  {
30
51
  handleTopic(msg);
52
+
31
53
  sendResult();
32
54
  setStatus();
55
+
56
+ smart_context.set(node.id, node_settings);
33
57
  });
34
58
 
35
59
  node.on("close", function ()
@@ -37,6 +61,11 @@ module.exports = function (RED)
37
61
  });
38
62
 
39
63
 
64
+ // #####################
65
+ // # Private functions #
66
+ // #####################
67
+
68
+ // This is the main function which handles all topics that was received.
40
69
  let handleTopic = msg =>
41
70
  {
42
71
  let real_topic = helper.getTopicName(msg.topic);
@@ -46,48 +75,44 @@ module.exports = function (RED)
46
75
  let new_setpoint = parseFloat(msg.payload);
47
76
  if (isNaN(new_setpoint) && !isFinite(new_setpoint))
48
77
  {
49
- // node.error("Invalid payload: " + msg.payload);
78
+ // helper.warn(this, "Invalid payload: " + msg.payload);
50
79
  return;
51
80
  }
52
81
 
53
82
  node_settings.room_setpoint = msg.payload;
54
- smart_context.set(node.id, node_settings);
55
83
  break;
56
84
 
57
85
  case "temperature_outside":
58
86
  let new_temp = parseFloat(msg.payload);
59
87
  if (isNaN(new_temp) && !isFinite(new_temp))
60
88
  {
61
- // node.error("Invalid payload: " + msg.payload);
89
+ // helper.warn(this, "Invalid payload: " + msg.payload);
62
90
  return;
63
91
  }
64
92
 
65
93
  node_settings.temperature_outside = msg.payload;
66
- smart_context.set(node.id, node_settings);
67
94
  break;
68
95
 
69
96
  case "flow_min":
70
97
  let new_flow_min = parseFloat(msg.payload);
71
98
  if (isNaN(new_flow_min) && !isFinite(new_flow_min))
72
99
  {
73
- // node.error("Invalid payload: " + msg.payload);
100
+ // helper.warn(this, "Invalid payload: " + msg.payload);
74
101
  return;
75
102
  }
76
103
 
77
104
  node_settings.flow_min = msg.payload;
78
- smart_context.set(node.id, node_settings);
79
105
  break;
80
106
 
81
107
  case "flow_max":
82
108
  let new_flow_max = parseFloat(msg.payload);
83
109
  if (isNaN(new_flow_max) && !isFinite(new_flow_max))
84
110
  {
85
- // node.error("Invalid payload: " + msg.payload);
111
+ // helper.warn(this, "Invalid payload: " + msg.payload);
86
112
  return;
87
113
  }
88
114
 
89
115
  node_settings.flow_max = msg.payload;
90
- smart_context.set(node.id, node_settings);
91
116
  break;
92
117
 
93
118
  default:
@@ -121,11 +146,11 @@ module.exports = function (RED)
121
146
 
122
147
  let setStatus = () =>
123
148
  {
124
- node.status({ fill: "green", shape: "dot", text: helper.getCurrentTimeForStatus() + ": Out: " + node_settings.temperature_outside.toFixed(1) + "°C, Flow: " + node_settings.last_flow_temperature?.toFixed(1) + "°C" });
149
+ node.status({ fill: "green", shape: "dot", text: helper.getCurrentTimeForStatus() + ": Out: " + node_settings.temperature_outside?.toFixed(1) + "°C, Flow: " + node_settings.last_flow_temperature?.toFixed(1) + "°C" });
125
150
  }
126
151
 
127
152
  if (node_settings.last_flow_temperature !== null)
128
- setTimeout(sendResult, 10 * 1000);
153
+ setTimeout(sendResult, 10000);
129
154
 
130
155
  setStatus();
131
156
  }
@@ -0,0 +1,38 @@
1
+ <script type="text/html" data-help-name="smart_heating-curve">
2
+ <p>
3
+ Diese Node berechnet anhand den eingestellten Werten, die Vorlaufsolltemperatur. Diese kann verwendet werden um ein Mischventil anzusteuern.
4
+ </p>
5
+ <p>
6
+ <b>Hinweis:</b> Smart Nodes verwenden Topics im Format <code>name#nummer</code>, damit können verschiedene Smart Nodes mit dem gleichen Topic angesteuert werden.<br/>
7
+ Diese Node verwendet nur den Teil <code>name</code>. <code>#</code> und <code>nummer</code> sind dabei optional.
8
+ </p>
9
+ <p>
10
+ Folgende topics werden akzeptiert:
11
+ <table>
12
+ <thead>
13
+ <tr>
14
+ <th>Topic</th>
15
+ <th>Beschreibung</th>
16
+ </tr>
17
+ </thead>
18
+ <tbody>
19
+ <tr>
20
+ <td><code>room_setpoint</code></td>
21
+ <td>Überschreibt die Raum-Solltemperatur.</td>
22
+ </tr>
23
+ <tr>
24
+ <td><code>flow_min</code></td>
25
+ <td>Überschreibt die minimale Vorlaufsolltemperatur.</td>
26
+ </tr>
27
+ <tr>
28
+ <td><code>flow_max</code></td>
29
+ <td>Überschreibt die maximale Vorlaufsolltemperatur.</td>
30
+ </tr>
31
+ <tr>
32
+ <td><code>temperature_outside</code></td>
33
+ <td>Setzt die aktuelle Außentemperatur.</td>
34
+ </tr>
35
+ </tbody>
36
+ </table>
37
+ </p>
38
+ </script>
@@ -0,0 +1,12 @@
1
+ {
2
+ "heating": {
3
+ "ui": {
4
+ "name": "Name",
5
+ "room_setpoint": "Raum Soll",
6
+ "slope": "Steilheit",
7
+ "offset": "Verschiebung",
8
+ "min_setpoint": "Min Soll",
9
+ "max_setpoint": "Max Soll"
10
+ }
11
+ }
12
+ }
@@ -0,0 +1,38 @@
1
+ <script type="text/html" data-help-name="smart_heating-curve">
2
+ <p>
3
+ This node calculates the target flow temperature based on the set values. This can be used to control a mixing valve.
4
+ </p>
5
+ <p>
6
+ <b>Note:</b> Smart Nodes use topics in the format <code>name#number</code>, so that different Smart Nodes can be controlled with the same topic.<br />
7
+ This node only uses the part <code>name</code>. <code>#</code> and <code>number</code> are optional.
8
+ </p>
9
+ <p>
10
+ The following topics are accepted:
11
+ <table>
12
+ <thead>
13
+ <tr>
14
+ <th>Topic</th>
15
+ <th>Description</th>
16
+ </tr>
17
+ </thead>
18
+ <tbody>
19
+ <tr>
20
+ <td><code>room_setpoint</code></td>
21
+ <td>Overwrites the room setpoint temperature.</td>
22
+ </tr>
23
+ <tr>
24
+ <td><code>flow_min</code></td>
25
+ <td>Overwrites the minimum flow setpoint temperature.</td>
26
+ </tr>
27
+ <tr>
28
+ <td><code>flow_max</code></td>
29
+ <td>Overwrites the maximum flow setpoint temperature.</td>
30
+ </tr>
31
+ <tr>
32
+ <td><code>temperature_outside</code></td>
33
+ <td>Sets the current outside temperature.</td>
34
+ </tr>
35
+ </tbody>
36
+ </table>
37
+ </p>
38
+ </script>
@@ -0,0 +1,12 @@
1
+ {
2
+ "heating": {
3
+ "ui": {
4
+ "name": "Name",
5
+ "room_setpoint": "Room setpoint",
6
+ "slope": "Slope",
7
+ "offset": "Offset",
8
+ "min_setpoint": "Min setpoint",
9
+ "max_setpoint": "Max setpoint"
10
+ }
11
+ }
12
+ }