smart-nodes 0.3.36 → 0.4.0

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 (116) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/README.md +35 -17
  3. package/central/central.html +27 -24
  4. package/central/central.js +84 -26
  5. package/central/locales/de-DE/central.html +10 -0
  6. package/central/locales/de-DE/central.json +14 -0
  7. package/central/locales/en-US/central.html +10 -0
  8. package/central/locales/en-US/central.json +14 -0
  9. package/compare/compare.html +64 -87
  10. package/compare/compare.js +69 -29
  11. package/compare/locales/de-DE/compare.html +36 -0
  12. package/compare/locales/de-DE/compare.json +35 -0
  13. package/compare/locales/en-US/compare.html +36 -0
  14. package/compare/locales/en-US/compare.json +35 -0
  15. package/counter/counter.html +70 -72
  16. package/counter/counter.js +43 -20
  17. package/counter/locales/de-DE/counter.html +48 -0
  18. package/counter/locales/de-DE/counter.json +21 -0
  19. package/counter/locales/en-US/counter.html +48 -0
  20. package/counter/locales/en-US/counter.json +21 -0
  21. package/delay/delay.html +30 -102
  22. package/delay/delay.js +63 -20
  23. package/delay/locales/de-DE/delay.html +71 -0
  24. package/delay/locales/de-DE/delay.json +19 -0
  25. package/delay/locales/en-US/delay.html +76 -0
  26. package/delay/locales/en-US/delay.json +19 -0
  27. package/forwarder/forwarder.html +11 -42
  28. package/forwarder/forwarder.js +59 -18
  29. package/forwarder/locales/de-DE/forwarder.html +32 -0
  30. package/forwarder/locales/de-DE/forwarder.json +15 -0
  31. package/forwarder/locales/en-US/forwarder.html +32 -0
  32. package/forwarder/locales/en-US/forwarder.json +15 -0
  33. package/heating-curve/heating-curve.html +10 -51
  34. package/heating-curve/heating-curve.js +38 -13
  35. package/heating-curve/locales/de-DE/heating-curve.html +38 -0
  36. package/heating-curve/locales/de-DE/heating-curve.json +12 -0
  37. package/heating-curve/locales/en-US/heating-curve.html +38 -0
  38. package/heating-curve/locales/en-US/heating-curve.json +12 -0
  39. package/hysteresis/hysteresis.html +49 -69
  40. package/hysteresis/hysteresis.js +94 -68
  41. package/hysteresis/locales/de-DE/hysteresis.html +36 -0
  42. package/hysteresis/locales/de-DE/hysteresis.json +27 -0
  43. package/hysteresis/locales/en-US/hysteresis.html +36 -0
  44. package/hysteresis/locales/en-US/hysteresis.json +27 -0
  45. package/light/light.html +250 -0
  46. package/{light-control/light-control.js → light/light.js} +151 -32
  47. package/light/locales/de-DE/light.html +149 -0
  48. package/light/locales/de-DE/light.json +24 -0
  49. package/light/locales/en-US/light.html +148 -0
  50. package/light/locales/en-US/light.json +24 -0
  51. package/logic/locales/de-DE/logic.html +12 -0
  52. package/logic/locales/de-DE/logic.json +26 -0
  53. package/logic/locales/en-US/logic.html +12 -0
  54. package/logic/locales/en-US/logic.json +26 -0
  55. package/logic/logic.html +48 -64
  56. package/logic/logic.js +63 -29
  57. package/long-press/locales/de-DE/long-press.html +5 -0
  58. package/long-press/locales/de-DE/long-press.json +13 -0
  59. package/long-press/locales/en-US/long-press.html +5 -0
  60. package/long-press/locales/en-US/long-press.json +13 -0
  61. package/{long-press-control/long-press-control.html → long-press/long-press.html} +10 -14
  62. package/long-press/long-press.js +163 -0
  63. package/mixing-valve/locales/de-DE/mixing-valve.html +65 -0
  64. package/mixing-valve/locales/de-DE/mixing-valve.json +19 -0
  65. package/mixing-valve/locales/en-US/mixing-valve.html +66 -0
  66. package/mixing-valve/locales/en-US/mixing-valve.json +19 -0
  67. package/mixing-valve/mixing-valve.html +27 -93
  68. package/mixing-valve/mixing-valve.js +87 -61
  69. package/multi-press/locales/de-DE/multi-press.html +5 -0
  70. package/multi-press/locales/de-DE/multi-press.json +12 -0
  71. package/multi-press/locales/en-US/multi-press.html +5 -0
  72. package/multi-press/locales/en-US/multi-press.json +12 -0
  73. package/{multi-press-control/multi-press-control.html → multi-press/multi-press.html} +9 -13
  74. package/{multi-press-control/multi-press-control.js → multi-press/multi-press.js} +53 -5
  75. package/package.json +7 -7
  76. package/persistence.js +1 -0
  77. package/scene/locales/de-DE/scene.html +105 -0
  78. package/scene/locales/de-DE/scene.json +21 -0
  79. package/scene/locales/en-US/scene.html +107 -0
  80. package/scene/locales/en-US/scene.json +20 -0
  81. package/{scene-control/scene-control.html → scene/scene.html} +30 -132
  82. package/{scene-control/scene-control.js → scene/scene.js} +76 -26
  83. package/scheduler/locales/de-DE/scheduler.html +30 -0
  84. package/scheduler/locales/de-DE/scheduler.json +21 -0
  85. package/scheduler/locales/en-US/scheduler.html +30 -0
  86. package/scheduler/locales/en-US/scheduler.json +21 -0
  87. package/scheduler/scheduler.html +34 -64
  88. package/scheduler/scheduler.js +85 -53
  89. package/shutter/locales/de-DE/shutter.html +127 -0
  90. package/shutter/locales/de-DE/shutter.json +11 -0
  91. package/shutter/locales/en-US/shutter.html +133 -0
  92. package/shutter/locales/en-US/shutter.json +11 -0
  93. package/{shutter-control/shutter-control.html → shutter/shutter.html} +7 -133
  94. package/{shutter-control/shutter-control.js → shutter/shutter.js} +116 -56
  95. package/shutter-complex/locales/de-DE/shutter-complex.html +120 -0
  96. package/shutter-complex/locales/de-DE/shutter-complex.json +20 -0
  97. package/shutter-complex/locales/en-US/shutter-complex.html +120 -0
  98. package/shutter-complex/locales/en-US/shutter-complex.json +20 -0
  99. package/{shutter-complex-control/shutter-complex-control.html → shutter-complex/shutter-complex.html} +36 -140
  100. package/shutter-complex/shutter-complex.js +578 -0
  101. package/smart_helper.js +52 -9
  102. package/statistic/locales/de-DE/statistic.html +10 -0
  103. package/statistic/locales/de-DE/statistic.json +29 -0
  104. package/statistic/locales/en-US/statistic.html +10 -0
  105. package/statistic/locales/en-US/statistic.json +29 -0
  106. package/statistic/statistic.html +38 -43
  107. package/statistic/statistic.js +57 -28
  108. package/text-exec/locales/de-DE/text-exec.html +18 -0
  109. package/text-exec/locales/de-DE/text-exec.json +7 -0
  110. package/text-exec/locales/en-US/text-exec.html +18 -0
  111. package/text-exec/locales/en-US/text-exec.json +7 -0
  112. package/text-exec/text-exec.html +9 -25
  113. package/text-exec/text-exec.js +43 -2
  114. package/light-control/light-control.html +0 -363
  115. package/long-press-control/long-press-control.js +0 -76
  116. package/shutter-complex-control/shutter-complex-control.js +0 -442
@@ -0,0 +1,30 @@
1
+ <script type="text/html" data-help-name="smart_scheduler">
2
+ <p>
3
+ This node sends the corresponding messages to the output at the specified times.
4
+ </p>
5
+ <p>
6
+ The following topics are accepted:
7
+ <table>
8
+ <thead>
9
+ <tr>
10
+ <th>Topic</th>
11
+ <th>Description</th>
12
+ </tr>
13
+ </thead>
14
+ <tbody>
15
+ <tr>
16
+ <td><code>enable</code></td>
17
+ <td>Enables the scheduler.</td>
18
+ </tr>
19
+ <tr>
20
+ <td><code>disable</code></td>
21
+ <td>Disables the scheduler.</td>
22
+ </tr>
23
+ <tr>
24
+ <td><code>set_state</code></td>
25
+ <td>Enables the scheduler if <code>msg.payload = true</code> or disables the scheduler if <code>msg.payload = false</code>.</td>
26
+ </tr>
27
+ </tbody>
28
+ </table>
29
+ </p>
30
+ </script>
@@ -0,0 +1,21 @@
1
+ {
2
+ "scheduler": {
3
+ "ui": {
4
+ "name": "Name",
5
+ "scheduler_enabled": "Scheduler enabled",
6
+ "schedules": "Schedules",
7
+
8
+ "system_start": "System start",
9
+ "save_state": "Save state",
10
+ "send_after_start": "Send last message 10 seconds after start",
11
+
12
+ "monday": "Monday",
13
+ "tuesday": "Tuesday",
14
+ "wednesday": "Wednesday",
15
+ "thursday": "Thursday",
16
+ "friday": "Friday",
17
+ "saturday": "Saturday",
18
+ "sunday": "Sunday"
19
+ }
20
+ }
21
+ }
@@ -1,31 +1,3 @@
1
- <script type="text/html" data-template-name="smart_scheduler">
2
- <div class="form-row">
3
- <label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="node-red:common.label.name"></span></label>
4
- <input type="text" id="node-input-name" data-i18n="[placeholder]node-red:common.label.name" />
5
- </div>
6
- <div class="form-row">
7
- <label for="node-input-enabled"></label>
8
- <input type="checkbox" id="node-input-enabled" style="width: 20px;" />
9
- <label for="node-input-enabled" style="width: 200px;">Scheduler aktiviert</label>
10
- </div>
11
- <div class="form-row" style="margin-bottom: 2px;">
12
- <p class="text-center"><i class="fa fa-list"></i>&nbsp;<strong>Schedules</strong></p>
13
- </div>
14
- <div class="form-row node-scheduler-schedules-row">
15
- <ol id="node-scheduler-schedules"></ol>
16
- </div>
17
- <hr/>
18
- <h4 style="margin: 0.5rem 0;">Systemstart</h4>
19
- <div class="form-row">
20
- <input type="checkbox" id="node-input-save_state" style="width: 20px;" />
21
- <label for="node-input-save_state" style="width: calc(100% - 30px);">Zustand speichern</label>
22
- </div>
23
- <div class="form-row" id="resend_on_start_row">
24
- <input type="checkbox" id="node-input-resend_on_start" style="width: 20px;" />
25
- <label for="node-input-resend_on_start" style="width: calc(100% - 30px);">Letze Nachricht 10 Sekunden nach dem Start senden</label>
26
- </div>
27
- </script>
28
-
29
1
  <script type="text/html" data-template-scheduler-row="">
30
2
  <div>
31
3
  <div style="display: inline-block; width: 30px; margin-left: 10px;">
@@ -224,13 +196,13 @@
224
196
  default: "",
225
197
  multiple: true,
226
198
  options: [
227
- { value: "1", label: "Montag" },
228
- { value: "2", label: "Dienstag" },
229
- { value: "3", label: "Mittwoch" },
230
- { value: "4", label: "Donnerstag" },
231
- { value: "5", label: "Freitag" },
232
- { value: "6", label: "Samstag" },
233
- { value: "0", label: "Sonntag" }
199
+ { value: "1", label: node._("scheduler.ui.monday") },
200
+ { value: "2", label: node._("scheduler.ui.tuesday") },
201
+ { value: "3", label: node._("scheduler.ui.wednesday") },
202
+ { value: "4", label: node._("scheduler.ui.thursday") },
203
+ { value: "5", label: node._("scheduler.ui.friday") },
204
+ { value: "6", label: node._("scheduler.ui.saturday") },
205
+ { value: "0", label: node._("scheduler.ui.sunday") }
234
206
  ],
235
207
  },
236
208
  ],
@@ -296,6 +268,7 @@
296
268
  oneditsave: function ()
297
269
  {
298
270
  let node = this;
271
+
299
272
  node.schedules = [];
300
273
 
301
274
  let scheduleList = $("#node-scheduler-schedules");
@@ -327,33 +300,30 @@
327
300
  });
328
301
  </script>
329
302
 
330
- <script type="text/html" data-help-name="smart_scheduler">
331
- <p>
332
- Diese Node sendet zu den angegebenen Zeitpunkten die entsprechenden Nachrichten an den Ausgang.
333
- <p>
334
- Folgende topics werden akzeptiert:
335
- <table>
336
- <thead>
337
- <tr>
338
- <th>Topic</th>
339
- <th>Beschreibung</th>
340
- </tr>
341
- </thead>
342
- <tbody>
343
- <tr>
344
- <td><code>enable</code></td>
345
- <td>Aktiviert den Scheduler.</td>
346
- </tr>
347
- <tr>
348
- <td><code>disable</code></td>
349
- <td>Deaktiviert den Scheduler.</td>
350
- </tr>
351
- <tr>
352
- <td><code>set_state</code></td>
353
- <td>Aktiviert den Scheduler, wenn <code>msg.payload = true</code> oder deaktiviert den Scheduler, wenn <code>msg.payload = false</code>.</td>
354
- </tr>
355
- </tbody>
356
- </table>
357
- </p>
358
- </p>
303
+ <script type="text/html" data-template-name="smart_scheduler">
304
+ <div class="form-row">
305
+ <label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="scheduler.ui.name"></span></label>
306
+ <input type="text" id="node-input-name" data-i18n="[placeholder]scheduler.ui.name" />
307
+ </div>
308
+ <div class="form-row">
309
+ <label for="node-input-enabled"></label>
310
+ <input type="checkbox" id="node-input-enabled" style="width: 20px;" />
311
+ <label for="node-input-enabled" style="width: 200px;" data-i18n="scheduler.ui.scheduler_enabled"></label>
312
+ </div>
313
+ <div class="form-row" style="margin-bottom: 2px;">
314
+ <p class="text-center"><i class="fa fa-list"></i> <strong data-i18n="scheduler.ui.schedules"></strong></p>
315
+ </div>
316
+ <div class="form-row node-scheduler-schedules-row">
317
+ <ol id="node-scheduler-schedules"></ol>
318
+ </div>
319
+ <hr/>
320
+ <h4 style="margin: 0.5rem 0;" data-i18n="scheduler.ui.system_start"></h4>
321
+ <div class="form-row">
322
+ <input type="checkbox" id="node-input-save_state" style="width: 20px;" />
323
+ <label for="node-input-save_state" style="width: calc(100% - 30px);" data-i18n="scheduler.ui.save_state"></label>
324
+ </div>
325
+ <div class="form-row" id="resend_on_start_row">
326
+ <input type="checkbox" id="node-input-resend_on_start" style="width: 20px;" />
327
+ <label for="node-input-resend_on_start" style="width: calc(100% - 30px);" data-i18n="scheduler.ui.send_after_start"></label>
328
+ </div>
359
329
  </script>
@@ -7,29 +7,52 @@ 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
- lastMessage: null,
28
+ last_message: null,
16
29
  };
17
30
 
31
+
32
+ // load or delete saved values
18
33
  if (config.save_state)
19
- {
20
- // load old saved values
21
34
  node_settings = Object.assign(node_settings, smart_context.get(node.id));
22
- }
23
35
  else
24
- {
25
- // delete old saved values
26
36
  smart_context.del(node.id);
27
- }
28
37
 
38
+
39
+ // ##################
40
+ // # Dynamic config #
41
+ // ##################
42
+
43
+
44
+ // ##################
45
+ // # Runtime values #
46
+ // ##################
47
+
48
+ // Here the setTimeout return value is stored when the next timeout should happen
29
49
  let timeout = null;
50
+
51
+ // This is date when the next event schould be raised
30
52
  let nextEvent = null;
31
53
 
32
- // prepare schedules
54
+
55
+ // Initially prepare schedules config object
33
56
  setTimeout(() =>
34
57
  {
35
58
  for (let i = 0; i < config.schedules.length; i++)
@@ -47,48 +70,17 @@ module.exports = function (RED)
47
70
  }, 1000);
48
71
 
49
72
 
73
+ // ###############
74
+ // # Node events #
75
+ // ###############
50
76
  node.on("input", function (msg)
51
77
  {
52
- switch (helper.getTopicName(msg.topic))
53
- {
54
- case "enable":
55
- if (node_settings.enabled)
56
- return;
57
-
58
- node_settings.enabled = true;
59
- if (config.save_state)
60
- smart_context.set(node.id, node_settings);
61
- break;
62
-
63
- case "disable":
64
- if (!node_settings.enabled)
65
- return;
66
-
67
- node_settings.enabled = false;
68
- if (config.save_state)
69
- smart_context.set(node.id, node_settings);
70
- break;
71
-
72
- case "set_state":
73
- if (node_settings.enabled == !!msg.payload)
74
- return;
75
-
76
- node_settings.enabled = !!msg.payload;
77
- if (config.save_state)
78
- smart_context.set(node.id, node_settings);
79
- break;
80
-
81
- default:
82
- return;
83
- }
84
-
85
- if (node_settings.enabled)
86
- initTimeouts();
87
- else
88
- clearTimeouts();
78
+ handleTopic(msg);
89
79
 
90
80
  setStatus();
91
- smart_context.set(node.id, node_settings);
81
+
82
+ if (config.save_state)
83
+ smart_context.set(node.id, node_settings);
92
84
  });
93
85
 
94
86
  node.on("close", function ()
@@ -100,6 +92,33 @@ module.exports = function (RED)
100
92
  }
101
93
  });
102
94
 
95
+
96
+ // #####################
97
+ // # Private functions #
98
+ // #####################
99
+
100
+ // This is the main function which handles all topics that was received.
101
+ let handleTopic = msg =>
102
+ {
103
+ let real_topic = helper.getTopicName(msg.topic);
104
+
105
+ if (real_topic == "set_state")
106
+ real_topic = (!!msg.payload) ? "enable" : "disable";
107
+
108
+ switch (real_topic)
109
+ {
110
+ case "enable":
111
+ node_settings.enabled = true;
112
+ initNextTimeout();
113
+ break;
114
+
115
+ case "disable":
116
+ node_settings.enabled = false;
117
+ break;
118
+ }
119
+ }
120
+
121
+ // calculate which event should occur nect
103
122
  let initNextTimeout = () =>
104
123
  {
105
124
  let minIndex = null;
@@ -120,16 +139,28 @@ module.exports = function (RED)
120
139
  return;
121
140
  }
122
141
 
142
+ // Stop timeout if any
143
+ if (timeout != null)
144
+ {
145
+ clearTimeout(timeout);
146
+ timeout = null;
147
+ }
148
+
123
149
  nextEvent = config.schedules[minIndex].nextEvent;
124
150
  let waitTime = nextEvent.getTime() - (new Date()).getTime();
125
- timeout = setTimeout(raiseEvent, waitTime, minIndex);
151
+ timeout = setTimeout(() =>
152
+ {
153
+ timeout = null;
154
+ raiseEvent(minIndex);
155
+ }, waitTime);
126
156
  }
127
157
 
158
+ // calculates the next time when the scheduled i-th entry should run.
128
159
  let calcNextEvent = i =>
129
160
  {
130
161
  const schedule = config.schedules[i];
131
162
 
132
- // If no day is checked then we cannot it is never raised
163
+ // If no day is checked it is never raised
133
164
  if (!schedule.days || schedule.days.length == 0)
134
165
  return null;
135
166
 
@@ -174,7 +205,7 @@ module.exports = function (RED)
174
205
  schedule.second
175
206
  );
176
207
 
177
- // console.log({
208
+ // helper.log({
178
209
  // i,
179
210
  // findNextDay,
180
211
  // nextEvent
@@ -183,6 +214,7 @@ module.exports = function (RED)
183
214
  return nextEvent;
184
215
  }
185
216
 
217
+ // Send the i-th entry to the output
186
218
  let raiseEvent = i =>
187
219
  {
188
220
  const schedule = config.schedules[i];
@@ -191,8 +223,8 @@ module.exports = function (RED)
191
223
  return;
192
224
 
193
225
  timeout = null;
194
- node.send(schedule.message);
195
- node_settings.lastMessage = schedule.message;
226
+ node.send(helper.cloneObject(schedule.message));
227
+ node_settings.last_message = schedule.message;
196
228
 
197
229
  if (config.save_state)
198
230
  smart_context.set(node.id, node_settings);
@@ -233,11 +265,11 @@ module.exports = function (RED)
233
265
  }
234
266
  }
235
267
 
236
- if (config.save_state && config.resend_on_start && node_settings.lastMessage != null)
268
+ if (config.save_state && config.resend_on_start && node_settings.last_message != null)
237
269
  {
238
270
  setTimeout(() =>
239
271
  {
240
- node.send(node_settings.lastMessage);
272
+ node.send(helper.cloneObject(node_settings.last_message));
241
273
  }, 10000);
242
274
  }
243
275
  }
@@ -0,0 +1,127 @@
1
+
2
+ <script type="text/html" data-help-name="smart_shutter-control">
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
+ Diese Node steuert Rollladen oder Jalousien.
9
+ Es gibt 3 Ausgänge die angesteuert werden können:
10
+ <ol>
11
+ <li><b>Auf/Ab:</b> <code>msg.payload = false</code> lässt den Rollladen nach oben fahren und <code>msg.payload = true</code> lässt den Rollladen nach unten fahren.</li>
12
+ <li><b>Stop:</b> <code>msg.payload = true</code> lässt den Rollladen stoppen.</li>
13
+ <li><b>Position:</b> <code>msg.payload = 42</code> Lässt den Rollladen auf 42% fahren.</li>
14
+ </ol>
15
+ Die Ausgänge sind den jeweiligen KNX Gruppenadressen zuzuordnen.
16
+ </p>
17
+ <p>
18
+ Diese Node erwartet folgende Topics als Eingang:<br/>
19
+ <table>
20
+ <thead>
21
+ <tr>
22
+ <th>Topic</th>
23
+ <th>Beschreibung</th>
24
+ <th>msg.payload == false wird ignoriert</th>
25
+ </tr>
26
+ </thead>
27
+ <tbody>
28
+ <tr>
29
+ <td><code>status</code> oder <code>status_position</code></td>
30
+ <td>
31
+ Meldet der Node die aktuelle Position.
32
+ Dadurch kann die Node feststellen in welche Richtung ein Rollladen als letztes gefahren ist.
33
+ Dies wird für das topic <b>toggle</b> benötigt um die nächste Laufrichtung bei einer 1-Tasten Bedienung zu ermitteln.
34
+ </td>
35
+ </tr>
36
+ <tr>
37
+ <td><code>up_down</code></td>
38
+ <td>
39
+ Nimmt einen Befehl von Home Assistant entgegen um informiert zu werden ob der Rollladen läuft und in welche Richtung.<br/>
40
+ <strong>Wichtig:</strong> Dieses Topic startet den Rollladen <u>nicht</u>, da die Gruppenadresse direkt mit dem Jalousiemodul verbunden sein muss.
41
+ </td>
42
+ <td>Nein</td>
43
+ </tr>
44
+ <tr>
45
+ <td><code>short_up_down</code></td>
46
+ <td>
47
+ Sendet bei <code>msg.payload = false</code> einen kurzen Hochfahrbefehl und bei <code>msg.payload = true</code> einen kurzen Runterfahrbefehl.<br/>
48
+ Es wird dabei die im Baustein hinterlegte Zeit verwendet. Diese kann aber durch setzen von <code>msg.time_on = 1500</code> oder <code>msg.time_on = "1.5s"</code> einmalig überschrieben werden.
49
+ </td>
50
+ <td>Nein</td>
51
+ </tr>
52
+ <tr>
53
+ <td><code>up</code></td>
54
+ <td>Sendet einen Hochfahrbefehl, falls der Rollladen nicht bereits nach oben fährt. Ggf. wird vorher noch ein Stop-Befehl gesendet.</td>
55
+ <td>Ja</td>
56
+ </tr>
57
+ <tr>
58
+ <td><code>up_stop</code></td>
59
+ <td>Sendet abwechselnd einen Stop- und einen Hochfahrbefehl.</td>
60
+ <td>Ja</td>
61
+ </tr>
62
+ <tr>
63
+ <td><code>down</code></td>
64
+ <td>Sendet einen Runterfahrbefehl, falls der Rollladen nicht bereits nach unten fährt. Ggf. wird vorher noch ein Stop-Befehl gesendet.</td>
65
+ <td>Ja</td>
66
+ </tr>
67
+ <tr>
68
+ <td><code>down_stop</code></td>
69
+ <td>Sendet abwechselnd einen Stop- und einen Runterfahrbefehl.</td>
70
+ <td>Ja</td>
71
+ </tr>
72
+ <tr>
73
+ <td><code>stop</code></td>
74
+ <td>Sendet einen Stopbefehl.</td>
75
+ <td>Ja</td>
76
+ </tr>
77
+ <tr>
78
+ <td><code>position</code></td>
79
+ <td>Sendet einen Positionsbefehl. <code>msg.payload</code> sollte ein Wert zwischen 0 (offen) und 100 (geschlossen) haben.</td>
80
+ <td>Nein</td>
81
+ </tr>
82
+ <tr>
83
+ <td><code>toggle</code> (default)</td>
84
+ <td>Schaltet den Rollladen abwechselnd auf hoch, stop, runter, stop.</td>
85
+ <td>Ja</td>
86
+ </tr>
87
+ </tbody>
88
+ </table>
89
+ </p>
90
+ <p>
91
+ Diese Node verwaltet keine Laufzeit für den Rollladen selbst. Diese muss über ETS für den Ausgang konfiguriert werden.
92
+ Es ist jedoch möglich, den Rollladen nach einer definierten Zeit automatisch abzuschalten.
93
+ Es ist jedoch möglich, den Rollladen nach einer definierten Zeit automatisch abzuschalten.
94
+ Beispiel: <code>msg = { "topic": "up", "time_on": 5000 }</code> oder <code>msg = { "topic": "up", "time_on": "5s" }</code><br/>
95
+ Diese Nachricht lässt den Rollladen für 5000 Millisekunden / 5 Sekunden nach oben fahren. Sollte es sich um eine Jalousie halten, werden die Lamellen entsprechend gedreht.
96
+ Als Einheit für die Zeit können folgende Werte verwendet werden:
97
+ <table>
98
+ <thead>
99
+ <tr>
100
+ <th>Einheit</th>
101
+ <th>Beschreibung</th>
102
+ </tr>
103
+ </thead>
104
+ <tbody>
105
+ <tr>
106
+ <td><code>ms</code> (default)</td>
107
+ <td>Millisekunden</td>
108
+ </tr>
109
+ <tr>
110
+ <td><code>s</code> oder <code>sec</code></td>
111
+ <td>Sekunden</td>
112
+ </tr>
113
+ <tr>
114
+ <td><code>m</code> oder <code>min</code></td>
115
+ <td>Mintun.</td>
116
+ </tr>
117
+ <tr>
118
+ <td><code>h</code></td>
119
+ <td>Stunden</td>
120
+ </tr>
121
+ </tbody>
122
+ </table>
123
+ </p>
124
+ <p>
125
+ Die Angabe einer Zeit funktioniert nicht mit dem topic <b>position</b>.
126
+ </p>
127
+ </script>
@@ -0,0 +1,11 @@
1
+ {
2
+ "shutter": {
3
+ "ui": {
4
+ "name": "Name",
5
+ "text": "Text",
6
+ "controlled_by_words": "Diese Node kann über die eingegebenen Wörter gesteuert werden. Mehrere Wörter werden durch ein Komma getrennt.",
7
+ "time_short": "Zeit kurz",
8
+ "controlled_by_central": "Dieser Baustein wird von folgenden Zentralbausteinen gesteuert:"
9
+ }
10
+ }
11
+ }