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
package/delay/delay.html CHANGED
@@ -22,6 +22,8 @@
22
22
  },
23
23
  oneditprepare: function ()
24
24
  {
25
+ let node = this;
26
+
25
27
  $("#node-input-on_delay").spinner({
26
28
  min: 0,
27
29
  change: function (event, ui)
@@ -40,10 +42,10 @@
40
42
  default: "s",
41
43
  value: "on_delay_unit",
42
44
  options: [
43
- { value: "ms", label: "Millisekunden" },
44
- { value: "s", label: "Sekunden" },
45
- { value: "min", label: "Minuten" },
46
- { value: "h", label: "Stunden" },
45
+ { value: "ms", label: node._("delay.ui.milliseconds") },
46
+ { value: "s", label: node._("delay.ui.seconds") },
47
+ { value: "min", label: node._("delay.ui.minutes") },
48
+ { value: "h", label: node._("delay.ui.hours") },
47
49
  ]
48
50
  }]
49
51
  });
@@ -66,10 +68,10 @@
66
68
  default: "s",
67
69
  value: "on_delay_unit",
68
70
  options: [
69
- { value: "ms", label: "Millisekunden" },
70
- { value: "s", label: "Sekunden" },
71
- { value: "min", label: "Minuten" },
72
- { value: "h", label: "Stunden" },
71
+ { value: "ms", label: node._("delay.ui.milliseconds") },
72
+ { value: "s", label: node._("delay.ui.seconds") },
73
+ { value: "min", label: node._("delay.ui.minutes") },
74
+ { value: "h", label: node._("delay.ui.hours") },
73
75
  ]
74
76
  }]
75
77
  });
@@ -88,103 +90,31 @@
88
90
 
89
91
  <script type="text/html" data-template-name="smart_delay">
90
92
  <div class="form-row">
91
- <label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
92
- <input type="text" id="node-input-name" placeholder="Name" />
93
+ <label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="delay.ui.name"></span></label>
94
+ <input type="text" id="node-input-name" data-i18n="[placeholder]delay.ui.name" />
93
95
  </div>
94
96
  <div class="form-row">
95
- <label for="node-input-on_delay"><i class="fa fa-clock-o"></i> Einschalt- verzögerung</label>
97
+ <label for="node-input-on_delay"><i class="fa fa-clock-o"></i> <span data-i18n="delay.ui.on_delay"></label>
96
98
  <input id="node-input-on_delay" value="0" />
97
99
  <input id="node-input-on_delay_unit" />
98
100
  </div>
99
101
  <div class="form-row">
100
- <label for="node-input-off_delay"><i class="fa fa-clock-o"></i> Ausschalt- verzögerung</label>
102
+ <label for="node-input-off_delay"><i class="fa fa-clock-o"></i> <span data-i18n="delay.ui.off_delay"></label>
101
103
  <input id="node-input-off_delay" value="0" />
102
104
  <input id="node-input-off_delay_unit" />
103
105
  </div>
104
106
  <div class="form-row">
105
107
  <input id="node-input-delay_only_on_change" type="checkbox" style="display: inline-block; width: auto; vertical-align: top;"/>
106
- <span>Nur verzögern, wenn sich <code>msg.payload</code> verändert hat.</span>
108
+ <span data-i18n="[html]delay.ui.delay_only_on_change"></span>
107
109
  </div>
108
110
  <hr/>
109
- <h4 style="margin: 0.5rem 0;">Systemstart</h4>
111
+ <h4 style="margin: 0.5rem 0;" data-i18n="delay.ui.system_start"></h4>
110
112
  <div class="form-row">
111
113
  <input type="checkbox" id="node-input-save_state" style="width: 20px;" />
112
- <label for="node-input-save_state" style="width: calc(100% - 30px);">Zustand speichern</label>
114
+ <label for="node-input-save_state" style="width: calc(100% - 30px);" data-i18n="delay.ui.save_state"></label>
113
115
  </div>
114
116
  <div class="form-row" id="resend_on_start_row">
115
117
  <input type="checkbox" id="node-input-resend_on_start" style="width: 20px;" />
116
- <label for="node-input-resend_on_start" style="width: calc(100% - 30px);">Letze Nachricht 10 Sekunden nach dem Start senden</label>
118
+ <label for="node-input-resend_on_start" style="width: calc(100% - 30px);" data-i18n="delay.ui.send_after_start"></label>
117
119
  </div>
118
- </script>
119
-
120
- <script type="text/html" data-help-name="smart_delay">
121
- <p>Diese Node kann dazu verwendet werden ein Ein- oder Ausschaltsignal zu verzögern.</p>
122
- <p>Die Zeit 0 bedeutet keine Verögerung.</p>
123
- <p>
124
- <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/>
125
- Diese Node verwendet nur den Teil <code>name</code>. <code>#</code> und <code>nummer</code> sind dabei optional.
126
- </p>
127
- <p>
128
- Folgende topics werden akzeptiert:
129
- <table>
130
- <thead>
131
- <tr>
132
- <th>Topic</th>
133
- <th>Beschreibung</th>
134
- </tr>
135
- </thead>
136
- <tbody>
137
- <tr>
138
- <td><code>set_delay_on</code></td>
139
- <td>Setzt die Einschaltverzögerung auf die in <code>msg.payload</code> angegebene Zeit.</td>
140
- </tr>
141
- <tr>
142
- <td><code>set_delay_off</code></td>
143
- <td>Setzt die Ausschaltverzögerung auf die in <code>msg.payload</code> angegebene Zeit.</td>
144
- </tr>
145
- <tr>
146
- <td><code>set_delays</code></td>
147
- <td>Setzt die Ein- und Ausschaltverzögerung auf die in <code>msg.payload</code> angegebene Zeit.</td>
148
- </tr>
149
- </tbody>
150
- </table>
151
- </p>
152
- <p>
153
- Beispiel: <code>msg = { "topic": "set_delay_on", "payload": 5000 }</code> oder <code>msg = { "topic": "set_delay_on", "payload": "5s" }</code><br/>
154
- Diese Nachricht setzt die Einschaltverzögerung auf 5000 Millisekunden / 5 Sekunden.
155
- Ist die Zeit auf 0 eingestellt, wird die Nachricht sofort weitergeleitet.<br/>
156
- Als Einheit für die Zeit können folgende Werte verwendet werden:
157
- <table>
158
- <thead>
159
- <tr>
160
- <th>Einheit</th>
161
- <th>Beschreibung</th>
162
- </tr>
163
- </thead>
164
- <tbody>
165
- <tr>
166
- <td><code>ms</code> (default)</td>
167
- <td>Millisekunden</td>
168
- </tr>
169
- <tr>
170
- <td><code>s</code> oder <code>sec</code></td>
171
- <td>Sekunden</td>
172
- </tr>
173
- <tr>
174
- <td><code>m</code> oder <code>min</code></td>
175
- <td>Mintun.</td>
176
- </tr>
177
- <tr>
178
- <td><code>h</code></td>
179
- <td>Stunden</td>
180
- </tr>
181
- </tbody>
182
- </table>
183
- </p>
184
- <p>
185
- Wenn die Checkbox <b>Nur verzögern, wenn sich <code>msg.payload</code> verändert hat.</b> aktiviert ist
186
- und während dem Warten um ein Einschaltsignal weiterzuleiten ein Ausschaltsignal empfangen wird,
187
- so wird das Senden des Einschaltsignals abgebrochen. Dies gilt auch für den umgekehrten Fall.<br/>
188
- Ist die Checkbox nicht aktiviert, wird jede Nachricht verzögert, sofern nicht bereits eine Verzögerung für den gleichen <code>payload</code> aktiv ist.
189
- </p>
190
120
  </script>
package/delay/delay.js CHANGED
@@ -9,9 +9,22 @@ module.exports = function (RED)
9
9
  const node = this;
10
10
  RED.nodes.createNode(node, config);
11
11
 
12
+
13
+ // ###################
14
+ // # Class constants #
15
+ // ###################
16
+
17
+
18
+ // #######################
19
+ // # Global help objects #
20
+ // #######################
12
21
  const smart_context = require("../persistence.js")(RED);
13
22
  const helper = require("../smart_helper.js");
14
23
 
24
+
25
+ // #####################
26
+ // # persistent values #
27
+ // #####################
15
28
  var node_settings = {
16
29
  on_delay_ms: helper.getTimeInMs(config.on_delay, config.on_delay_unit),
17
30
  off_delay_ms: helper.getTimeInMs(config.off_delay, config.off_delay_unit),
@@ -45,16 +58,58 @@ module.exports = function (RED)
45
58
  smart_context.del(node.id);
46
59
  }
47
60
 
48
- // dynamic config
61
+
62
+ // ##################
63
+ // # Dynamic config #
64
+ // ##################
49
65
  let delay_only_on_change = config.delay_only_on_change;
50
66
 
51
- // runtime values
67
+
68
+ // ##################
69
+ // # Runtime values #
70
+ // ##################
71
+
72
+ // Here the setTimeout return value is stored to send the delayed message.
52
73
  let timeout = null;
74
+
75
+ // Saves the next payload that needs to be send.
76
+ // This is used to avoid restarting the timeout for the same payload.
53
77
  let next_payload = null;
54
78
 
79
+
80
+ // ###############
81
+ // # Node events #
82
+ // ###############
55
83
  node.on("input", function (msg)
56
84
  {
57
- switch (msg.topic)
85
+ handleTopic(msg);
86
+
87
+ // setStatus();
88
+
89
+ if (config.save_state)
90
+ smart_context.set(node.id, node_settings);
91
+ });
92
+
93
+ node.on("close", function ()
94
+ {
95
+ if (timeout != null)
96
+ {
97
+ clearTimeout(timeout);
98
+ timeout = null;
99
+ }
100
+ });
101
+
102
+
103
+ // #####################
104
+ // # Private functions #
105
+ // #####################
106
+
107
+ // This is the main function which handles all topics that was received.
108
+ let handleTopic = msg =>
109
+ {
110
+ let real_topic = helper.getTopicName(msg.topic);
111
+
112
+ switch (real_topic)
58
113
  {
59
114
  case "set_delay_on":
60
115
  node_settings.on_delay_ms = helper.getTimeInMsFromString(msg.payload);
@@ -85,16 +140,7 @@ module.exports = function (RED)
85
140
  send(msg);
86
141
  break;
87
142
  }
88
- });
89
-
90
- node.on("close", function ()
91
- {
92
- if (timeout != null)
93
- {
94
- clearTimeout(timeout);
95
- timeout = null;
96
- }
97
- });
143
+ }
98
144
 
99
145
  let send = msg =>
100
146
  {
@@ -144,10 +190,7 @@ module.exports = function (RED)
144
190
  node.status({ fill: "yellow", shape: "dot", text: helper.getCurrentTimeForStatus() + ": " + "Sended " + getMessageStatusText(msg) });
145
191
  node_settings.last_message = helper.cloneObject(msg);
146
192
 
147
- if (config.save_state)
148
- smart_context.set(node.id, node_settings);
149
-
150
- node.send(msg);
193
+ node.send(node_settings.last_message);
151
194
  return;
152
195
  }
153
196
 
@@ -159,10 +202,10 @@ module.exports = function (RED)
159
202
  node.status({ fill: "yellow", shape: "dot", text: helper.getCurrentTimeForStatus() + ": " + "Sended " + getMessageStatusText(msg) });
160
203
  node_settings.last_message = helper.cloneObject(msg);
161
204
 
205
+ node.send(node_settings.last_message);
206
+
162
207
  if (config.save_state)
163
208
  smart_context.set(node.id, node_settings);
164
-
165
- node.send(msg);
166
209
  }, delay_ms);
167
210
  }
168
211
 
@@ -185,7 +228,7 @@ module.exports = function (RED)
185
228
  setTimeout(() =>
186
229
  {
187
230
  node.status({ fill: "yellow", shape: "dot", text: helper.getCurrentTimeForStatus() + ": " + "Sended " + getMessageStatusText(node_settings.last_message) });
188
- node.send(node_settings.last_message);
231
+ node.send(helper.cloneObject(node_settings.last_message));
189
232
  }, 10000);
190
233
  }
191
234
  }
@@ -0,0 +1,71 @@
1
+ <script type="text/html" data-help-name="smart_delay">
2
+ <p>Diese Node kann dazu verwendet werden ein Ein- oder Ausschaltsignal zu verzögern.</p>
3
+ <p>Die Zeit 0 bedeutet keine Verögerung.</p>
4
+ <p>
5
+ <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/>
6
+ Diese Node verwendet nur den Teil <code>name</code>. <code>#</code> und <code>nummer</code> sind dabei optional.
7
+ </p>
8
+ <p>
9
+ Folgende topics werden akzeptiert:
10
+ <table>
11
+ <thead>
12
+ <tr>
13
+ <th>Topic</th>
14
+ <th>Beschreibung</th>
15
+ </tr>
16
+ </thead>
17
+ <tbody>
18
+ <tr>
19
+ <td><code>set_delay_on</code></td>
20
+ <td>Setzt die Einschaltverzögerung auf die in <code>msg.payload</code> angegebene Zeit.</td>
21
+ </tr>
22
+ <tr>
23
+ <td><code>set_delay_off</code></td>
24
+ <td>Setzt die Ausschaltverzögerung auf die in <code>msg.payload</code> angegebene Zeit.</td>
25
+ </tr>
26
+ <tr>
27
+ <td><code>set_delays</code></td>
28
+ <td>Setzt die Ein- und Ausschaltverzögerung auf die in <code>msg.payload</code> angegebene Zeit.</td>
29
+ </tr>
30
+ </tbody>
31
+ </table>
32
+ </p>
33
+ <p>
34
+ Beispiel: <code>msg = { "topic": "set_delay_on", "payload": 5000 }</code> oder <code>msg = { "topic": "set_delay_on", "payload": "5s" }</code><br/>
35
+ Diese Nachricht setzt die Einschaltverzögerung auf 5000 Millisekunden / 5 Sekunden.
36
+ Ist die Zeit auf 0 eingestellt, wird die Nachricht sofort weitergeleitet.<br/>
37
+ Als Einheit für die Zeit können folgende Werte verwendet werden:
38
+ <table>
39
+ <thead>
40
+ <tr>
41
+ <th>Einheit</th>
42
+ <th>Beschreibung</th>
43
+ </tr>
44
+ </thead>
45
+ <tbody>
46
+ <tr>
47
+ <td><code>ms</code> (default)</td>
48
+ <td>Millisekunden</td>
49
+ </tr>
50
+ <tr>
51
+ <td><code>s</code> oder <code>sec</code></td>
52
+ <td>Sekunden</td>
53
+ </tr>
54
+ <tr>
55
+ <td><code>m</code> oder <code>min</code></td>
56
+ <td>Mintun.</td>
57
+ </tr>
58
+ <tr>
59
+ <td><code>h</code></td>
60
+ <td>Stunden</td>
61
+ </tr>
62
+ </tbody>
63
+ </table>
64
+ </p>
65
+ <p>
66
+ Wenn die Checkbox <b>Nur verzögern, wenn sich <code>msg.payload</code> verändert hat.</b> aktiviert ist
67
+ und während dem Warten um ein Einschaltsignal weiterzuleiten ein Ausschaltsignal empfangen wird,
68
+ so wird das Senden des Einschaltsignals abgebrochen. Dies gilt auch für den umgekehrten Fall.<br/>
69
+ Ist die Checkbox nicht aktiviert, wird jede Nachricht verzögert, sofern nicht bereits eine Verzögerung für den gleichen <code>payload</code> aktiv ist.
70
+ </p>
71
+ </script>
@@ -0,0 +1,19 @@
1
+ {
2
+ "delay": {
3
+ "ui": {
4
+ "name": "Name",
5
+
6
+ "on_delay": "Einschalt- verzögerung",
7
+ "off_delay": "Ausschalt- verzögerung",
8
+ "delay_only_on_change": "Nur verzögern, wenn sich <code>msg.payload</code> verändert hat.",
9
+ "system_start": "Systemstart",
10
+ "save_state": "Zustand speichern",
11
+ "send_after_start": "Letze Nachricht 10 Sekunden nach dem Start senden",
12
+
13
+ "milliseconds": "Millisekunden",
14
+ "seconds": "Sekunden",
15
+ "minutes": "Minuten",
16
+ "hours": "Stunden"
17
+ }
18
+ }
19
+ }
@@ -0,0 +1,76 @@
1
+ <script type="text/html" data-help-name="smart_delay">
2
+ <p>This node can be used to delay an on or off signal.</p>
3
+ <p>The time 0 means no delay.</p>
4
+ <p>
5
+ <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 />
6
+ This node only uses the part <code>name</code>. <code>#</code> and <code>number</code> are optional.
7
+ </p>
8
+ <p>
9
+ The following topics are accepted:
10
+ <table>
11
+ <thead>
12
+ <tr>
13
+ <th>Topic</th>
14
+ <th>Description</th>
15
+ </tr>
16
+ </thead>
17
+ <tbody>
18
+ <tr>
19
+ <td><code>set_delay_on</code></td>
20
+ <td>Sets the on delay to the time specified in <code>msg.payload</code>.</td>
21
+ </tr>
22
+ <tr>
23
+ <td><code>set_delay_off</code></td>
24
+ <td>Sets the off delay to the time specified in <code>msg.payload</code>.</td>
25
+ </tr>
26
+ <tr>
27
+ <td><code>set_delays</code></td>
28
+ <td>Sets the on and off delay to the time specified in <code>msg.payload</code> Time.</td>
29
+ </tr>
30
+ </tbody>
31
+ </table>
32
+ </p>
33
+ <p>
34
+ Example: <code>msg = { "topic": "set_delay_on", "payload": 5000 }</code> or <code>msg = { "topic": "set_delay_on", "payload": "5s" }</code><br />
35
+ This message sets the power-on delay to 5000 milliseconds / 5 seconds.
36
+ If the time is set to 0, the message is forwarded immediately.<br />
37
+ The following values can be used as a unit for time:
38
+ <table>
39
+ <thead>
40
+ <tr>
41
+ <th>Unit</th>
42
+ <th>Description</th>
43
+ </tr>
44
+ </thead>
45
+ <tbody>
46
+ <tr>
47
+ <td><code>ms</code> (default)</td>
48
+ <td>Milliseconds</td>
49
+ </tr>
50
+ <tr>
51
+ <td><code>s</code> or <code>sec</code></td>
52
+ <td>Seconds</td>
53
+ </tr>
54
+ <tr>
55
+ <td><code>m</code> or <code>min</code></td>
56
+ <td>Mintun.</td>
57
+ </tr>
58
+ <tr>
59
+ <td><code>h</code></td>
60
+ <td>Hours</td>
61
+ </tr>
62
+ </tbody>
63
+
64
+ </table>
65
+
66
+ </p>
67
+
68
+ <p>
69
+ If the checkbox <b>Only delay if <code>msg.payload</code> has changed.</b> is activated
70
+ and a shutdown signal is received while waiting to forward a power-on signal,
71
+ the sending of the power-on signal is aborted. This also applies in the opposite case.<br />
72
+ If the checkbox is not activated, every message is delayed unless a delay is already active for the same
73
+ <code>payload</code>.
74
+
75
+ </p>
76
+ </script>
@@ -0,0 +1,19 @@
1
+ {
2
+ "delay": {
3
+ "ui": {
4
+ "name": "Name",
5
+
6
+ "on_delay": "Switch-on delay",
7
+ "off_delay": "Switch-off- delay",
8
+ "delay_only_on_change": "Only delay if <code>msg.payload</code> has changed.",
9
+ "system_start": "System start",
10
+ "save_state": "Save state",
11
+ "send_after_start": "Send last message 10 seconds after the start",
12
+
13
+ "milliseconds": "Milliseconds",
14
+ "seconds": "Seconds",
15
+ "minutes": "Minutes",
16
+ "hours": "Hours"
17
+ }
18
+ }
19
+ }
@@ -21,6 +21,8 @@
21
21
  },
22
22
  oneditprepare: function ()
23
23
  {
24
+ let node = this;
25
+
24
26
  $("#node-input-save_state").on("change", ev =>
25
27
  {
26
28
  if (ev.target.checked)
@@ -35,66 +37,33 @@
35
37
 
36
38
  <script type="text/html" data-template-name="smart_forwarder">
37
39
  <div class="form-row">
38
- <label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
39
- <input type="text" id="node-input-name" placeholder="Name" />
40
+ <label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="forwarder.ui.name"></span></label>
41
+ <input type="text" id="node-input-name" data-i18n="[placeholder]forwarder.ui.name" />
40
42
  </div>
41
43
  <div class="form-row">
42
44
  <input type="checkbox" id="node-input-enabled" style="width: 20px;" />
43
- <span for="node-input-enabled" style="width: 200px;"> Aktiviert</span>
45
+ <label for="node-input-enabled" style="width: 200px;"> <span data-i18n="forwarder.ui.enabled"></span>
44
46
  </div>
45
47
  <div class="form-row">
46
48
  <input type="checkbox" id="node-input-forward_last_on_enable" style="width: 20px;" />
47
- <span for="node-input-forward_last_on_enable">Letzte nicht gesendete Nachricht senden, wenn die Node aktiviert wird.</span>
49
+ <label for="node-input-forward_last_on_enable" data-i18n="forwarder.ui.forward_last_on_enable"></label>
48
50
  </div>
49
51
  <div class="form-row">
50
52
  <input type="checkbox" id="node-input-always_forward_true" style="width: 20px;" />
51
- <span for="node-input-always_forward_true"><code>msg.payload = true</code> immer weiterleiten</span>
53
+ <label for="node-input-always_forward_true" data-i18n="[html]forwarder.ui.always_forward_true"></label>
52
54
  </div>
53
55
  <div class="form-row">
54
56
  <input type="checkbox" id="node-input-always_forward_false" style="width: 20px;" />
55
- <span for="node-input-always_forward_false"><code>msg.payload = false</code> immer weiterleiten</span>
57
+ <label for="node-input-always_forward_false" data-i18n="[html]forwarder.ui.always_forward_false"></label>
56
58
  </div>
57
59
  <hr/>
58
- <h4 style="margin: 0.5rem 0;">Systemstart</h4>
60
+ <h4 style="margin: 0.5rem 0;" data-i18n="forwarder.ui.system_start"></h4>
59
61
  <div class="form-row">
60
62
  <input type="checkbox" id="node-input-save_state" style="width: 20px;" />
61
- <label for="node-input-save_state" style="width: calc(100% - 30px);">Zustand speichern</label>
63
+ <label for="node-input-save_state" style="width: calc(100% - 30px);" data-i18n="forwarder.ui.save_state"></label>
62
64
  </div>
63
65
  <div class="form-row" id="resend_on_start_row">
64
66
  <input type="checkbox" id="node-input-resend_on_start" style="width: 20px;" />
65
- <label for="node-input-resend_on_start" style="width: calc(100% - 30px);">Letze Nachricht 10 Sekunden nach dem Start senden</label>
67
+ <label for="node-input-resend_on_start" style="width: calc(100% - 30px);" data-i18n="forwarder.ui.send_after_start"></label>
66
68
  </div>
67
- </script>
68
-
69
- <script type="text/html" data-help-name="smart_forwarder">
70
- <p>Diese Node leitet eine Nachricht weiter, wenn er enabled wurde oder das dauerhafte Weiterleiten für die Nachricht aktiviert ist.</p>
71
- <p>
72
- <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/>
73
- Diese Node verwendet nur den Teil <code>name</code>. <code>#</code> und <code>nummer</code> sind dabei optional.
74
- </p>
75
- <p>
76
- Folgende topics werden akzeptiert:
77
- <table>
78
- <thead>
79
- <tr>
80
- <th>Topic</th>
81
- <th>Beschreibung</th>
82
- </tr>
83
- </thead>
84
- <tbody>
85
- <tr>
86
- <td><code>enable</code></td>
87
- <td>Aktiviert das Weiterleiten.</td>
88
- </tr>
89
- <tr>
90
- <td><code>disable</code></td>
91
- <td>Deaktiviert das Weiterleiten.</td>
92
- </tr>
93
- <tr>
94
- <td><code>set_state</code></td>
95
- <td>Aktiviert das Weiterleiten, wenn <code>msg.payload = true</code> oder deaktiviert das Weiterleiten, wenn <code>msg.payload = false</code>.</td>
96
- </tr>
97
- </tbody>
98
- </table>
99
- </p>
100
69
  </script>