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
@@ -23,11 +23,54 @@
23
23
  },
24
24
  oneditprepare: function ()
25
25
  {
26
+ let node = this;
27
+
28
+ $("#node-input-start")
29
+ .spinner({
30
+ change: function (event, ui)
31
+ {
32
+ var value = parseFloat(this.value);
33
+ value = isNaN(value) ? 0 : value;
34
+ if (value !== this.value) $(this).spinner("value", value);
35
+ },
36
+ }).css("max-width", "4rem");
37
+
38
+ $("#node-input-step")
39
+ .spinner({
40
+ change: function (event, ui)
41
+ {
42
+ var value = parseFloat(this.value);
43
+ value = isNaN(value) ? 0 : value;
44
+ if (value !== this.value) $(this).spinner("value", value);
45
+ },
46
+ }).css("max-width", "4rem");
47
+
48
+ $("#node-input-min")
49
+ .spinner({
50
+ change: function (event, ui)
51
+ {
52
+ var value = parseFloat(this.value);
53
+ value = isNaN(value) ? 0 : value;
54
+ if (value !== this.value) $(this).spinner("value", value);
55
+ },
56
+ }).css("max-width", "4rem");
57
+
58
+ $("#node-input-max")
59
+ .spinner({
60
+ change: function (event, ui)
61
+ {
62
+ var value = parseFloat(this.value);
63
+ value = isNaN(value) ? 0 : value;
64
+ if (value !== this.value) $(this).spinner("value", value);
65
+ },
66
+ }).css("max-width", "4rem");
67
+
68
+
26
69
  $("#node-input-out_message").typedInput({
27
70
  type: "json",
28
71
  types: ["json", {
29
- value: "null",
30
- label: "Standard",
72
+ value: "NOTHING",
73
+ label: node._("default"),
31
74
  icon: "fa fa-times",
32
75
  hasValue: false,
33
76
  }],
@@ -42,103 +85,58 @@
42
85
  $("#resend_on_start_row").hide();
43
86
  });
44
87
  $("#node-input-save_state").trigger("change");
88
+
89
+ // Backward compatibility
90
+ if (this.out_message_type == "null")
91
+ {
92
+ this.out_message_type = "NOTHING";
93
+ $("#node-input-out_message_type").val("NOTHING");
94
+ }
95
+
45
96
  }
46
97
  });
47
98
  </script>
48
99
 
49
100
  <script type="text/html" data-template-name="smart_counter">
50
101
  <div class="form-row">
51
- <label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
52
- <input type="text" id="node-input-name" placeholder="Name">
102
+ <label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="counter.ui.name"></span></label>
103
+ <input type="text" id="node-input-name" data-i18n="[placeholder]counter.ui.name">
53
104
  </div>
54
105
  <div class="form-row">
55
- <label for="node-input-start"><i class="fa fa-cog"></i> Start</label>
56
- <input type="number" id="node-input-start" placeholder="Startwert">
106
+ <label for="node-input-start"><i class="fa fa-cog"></i> <span data-i18n="counter.ui.start"></label>
107
+ <input id="node-input-start" data-i18n="[placeholder]counter.ui.start">
57
108
  </div>
58
109
  <div class="form-row">
59
- <label for="node-input-step"><i class="fa fa-forward"></i> Schritt</label>
60
- <input type="number" id="node-input-step" placeholder="Schrittweite">
110
+ <label for="node-input-step"><i class="fa fa-forward"></i> <span data-i18n="counter.ui.step"></label>
111
+ <input id="node-input-step" data-i18n="[placeholder]counter.ui.step">
61
112
  </div>
62
113
  <div class="form-row">
63
- <label for="node-input-min"><i class="fa fa-arrow-down"></i> Min</label>
64
- <input type="number" id="node-input-min" placeholder="Min">
114
+ <label for="node-input-min"><i class="fa fa-arrow-down"></i> <span data-i18n="counter.ui.min"></label>
115
+ <input id="node-input-min" data-i18n="[placeholder]counter.ui.min">
65
116
  </div>
66
117
  <div class="form-row">
67
- <label for="node-input-max"><i class="fa fa-arrow-up"></i> Max</label>
68
- <input type="number" id="node-input-max" placeholder="Max">
118
+ <label for="node-input-max"><i class="fa fa-arrow-up"></i> <span data-i18n="counter.ui.max"></label>
119
+ <input id="node-input-max" data-i18n="[placeholder]counter.ui.max">
69
120
  </div>
70
121
  <hr/>
71
- <h4 style="margin: 0.5rem 0;">Ausgangsnachricht</h4>
122
+ <h4 style="margin: 0.5rem 0;"><span data-i18n="compare.ui.output_messages"></span></h4>
72
123
  <div class="form-row">
73
- <label for="node-input-out_message"><i class="fa fa-check-circle"></i> Nachricht</label>
124
+ <label for="node-input-out_message"><i class="fa fa-check-circle"></i> <span data-i18n="counter.ui.message"></span></label>
74
125
  <input type="text" id="node-input-out_message"/>
75
126
  <input type="hidden" id="node-input-out_message_type">
76
127
  </div>
77
128
  <div class="form-row">
78
- <span><strong>Hinweis:</strong></span>
79
- </div>
80
- <div class="form-row">
81
- <span>
82
- <code>msg.payload</code> wird immer automatisch auf den Ergebnis-Wert gesetzt.
83
- </span>
129
+ <div><strong data-i18n="counter.ui.note"></strong></div>
130
+ <div data-i18n="[html]counter.ui.note_text"></div>
84
131
  </div>
85
132
  <hr/>
86
- <h4 style="margin: 0.5rem 0;">Systemstart</h4>
133
+ <h4 style="margin: 0.5rem 0;"><span data-i18n="compare.ui.system_start"></span></h4>
87
134
  <div class="form-row">
88
135
  <input type="checkbox" id="node-input-save_state" style="width: 20px;" />
89
- <label for="node-input-save_state" style="width: calc(100% - 30px);">Zustand speichern</label>
136
+ <label for="node-input-save_state" style="width: calc(100% - 30px);"><span data-i18n="compare.ui.save_state"></span></label>
90
137
  </div>
91
138
  <div class="form-row" id="resend_on_start_row">
92
139
  <input type="checkbox" id="node-input-resend_on_start" style="width: 20px;" />
93
- <label for="node-input-resend_on_start" style="width: calc(100% - 30px);">Letze Nachricht 10 Sekunden nach dem Start senden</label>
140
+ <label for="node-input-resend_on_start" style="width: calc(100% - 30px);"><span data-i18n="compare.ui.send_after_start"></span></label>
94
141
  </div>
95
- </script>
96
-
97
- <script type="text/html" data-help-name="smart_counter">
98
- <p>Diese Node kann verwendet werden um nach oben oder unten zu zählen.</p>
99
- <p>
100
- Die Standardschrittweite kann vorgegeben oder durch einkommende Nachrichten temporär überschrieben werden.
101
- Es sind auch Kommazahlen möglich.
102
- </p>
103
- <p>
104
- <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/>
105
- Diese Node verwendet nur den Teil <code>name</code>. <code>#</code> und <code>nummer</code> sind dabei optional.
106
- </p>
107
- <p>
108
- Folgende topics werden akzeptiert:
109
- <table>
110
- <thead>
111
- <tr>
112
- <th>Topic</th>
113
- <th>Beschreibung</th>
114
- </tr>
115
- </thead>
116
- <tbody>
117
- <tr>
118
- <td><code>set_min</code></td>
119
- <td>Überschreibt den eingestellten Min-Wert mit <code>msg.payload</code>.</td>
120
- </tr>
121
- <tr>
122
- <td><code>set_max</code></td>
123
- <td>Überschreibt den eingestellten Max-Wert mit <code>msg.payload</code>.</td>
124
- </tr>
125
- <tr>
126
- <td><code>set_step</code></td>
127
- <td>Überschreibt die eingestellte Schrittweite mit <code>msg.payload</code>.</td>
128
- </tr>
129
- <tr>
130
- <td><code>up</code></td>
131
- <td>Erhöht den Wert um <code>msg.payload</code> oder falls nicht gesetzt (oder <code>null</code>) um die konfigurierte Schrittweite. Der neue Wert ist dabei immer innerhalb der Min- und Max-Werte.</td>
132
- </tr>
133
- <tr>
134
- <td><code>down</code></td>
135
- <td>Verringert den Wert um <code>msg.payload</code> oder falls nicht gesetzt (oder <code>null</code>) um die konfigurierte Schrittweite. Der neue Wert ist dabei immer innerhalb der Min- und Max-Werte.</td>
136
- </tr>
137
- <tr>
138
- <td><code>reset</code></td>
139
- <td>Setzt den Wert auf <code>msg.payload</code> oder falls nicht gesetzt (oder <code>null</code>) auf den Startwert zurück. Der neue Wert ist dabei immer innerhalb der Min- und Max-Werte.</td>
140
- </tr>
141
- </tbody>
142
- </table>
143
- </p>
144
142
  </script>
@@ -7,41 +7,67 @@ 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
 
21
+ // #####################
22
+ // # persistent values #
23
+ // #####################
13
24
  var node_settings = {
14
25
  value: null,
15
26
  last_message: null,
16
27
  };
17
28
 
29
+ // load or delete saved values
18
30
  if (config.save_state)
19
- {
20
- // load old saved values
21
31
  node_settings = Object.assign(node_settings, smart_context.get(node.id));
22
- }
23
32
  else
24
- {
25
- // delete old saved values
26
33
  smart_context.del(node.id);
27
- }
28
34
 
29
- // dynamic config
30
- let start = config.start;
31
- let step = config.step;
32
- let min = config.min;
33
- let max = config.max;
35
+
36
+ // ##################
37
+ // # Dynamic config #
38
+ // ##################
39
+ let start = parseInt(config.start, 10);
40
+ let step = parseInt(config.step, 10);
41
+ let min = parseInt(config.min, 10);
42
+ let max = parseInt(config.max, 10);
34
43
  let out_message = helper.evaluateNodeProperty(RED, config.out_message, config.out_message_type);
35
44
 
36
- // runtime values
45
+
46
+ // ##################
47
+ // # Runtime values #
48
+ // ##################
49
+ // Not used by this node
37
50
 
38
51
  node.on("input", function (msg)
39
52
  {
40
53
  handleTopic(msg);
54
+
41
55
  sendResult();
56
+
42
57
  setStatus();
58
+ smart_context.set(node.id, node_settings);
43
59
  });
44
60
 
61
+ node.on("close", function ()
62
+ {
63
+ });
64
+
65
+
66
+ // #####################
67
+ // # Private functions #
68
+ // #####################
69
+
70
+ // This is the main function which handles all topics that was received.
45
71
  let handleTopic = msg =>
46
72
  {
47
73
  let real_topic = helper.getTopicName(msg.topic);
@@ -93,6 +119,9 @@ module.exports = function (RED)
93
119
  node_settings.value = Math.min(max, Math.max(min, node_settings.value));
94
120
  }
95
121
 
122
+ /**
123
+ * Send the result to the output
124
+ */
96
125
  let sendResult = () =>
97
126
  {
98
127
  // Nothing changed, nothing to do
@@ -101,19 +130,13 @@ module.exports = function (RED)
101
130
 
102
131
  // if out_message is set, use this instead of the default message
103
132
  if (out_message)
104
- node_settings.last_message = Object.assign({}, out_message, { payload: node_settings.value });
133
+ node_settings.last_message = helper.cloneObject(out_message, { payload: node_settings.value });
105
134
  else
106
135
  node_settings.last_message = { payload: node_settings.value };
107
136
 
108
- smart_context.set(node.id, node_settings);
109
-
110
137
  node.send(node_settings.last_message);
111
138
  }
112
139
 
113
- node.on("close", function ()
114
- {
115
- });
116
-
117
140
  // updates the status
118
141
  let setStatus = () =>
119
142
  {
@@ -127,7 +150,7 @@ module.exports = function (RED)
127
150
  {
128
151
  setTimeout(() =>
129
152
  {
130
- node.send(node_settings.last_message);
153
+ node.send(helper.cloneObject(node_settings.last_message));
131
154
  }, 10000);
132
155
  }
133
156
 
@@ -0,0 +1,48 @@
1
+ <script type="text/html" data-help-name="smart_counter">
2
+ <p>Diese Node kann verwendet werden um nach oben oder unten zu zählen.</p>
3
+ <p>
4
+ Die Standardschrittweite kann vorgegeben oder durch einkommende Nachrichten temporär überschrieben werden.
5
+ Es sind auch Kommazahlen möglich.
6
+ </p>
7
+ <p>
8
+ <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/>
9
+ Diese Node verwendet nur den Teil <code>name</code>. <code>#</code> und <code>nummer</code> sind dabei optional.
10
+ </p>
11
+ <p>
12
+ Folgende topics werden akzeptiert:
13
+ <table>
14
+ <thead>
15
+ <tr>
16
+ <th>Topic</th>
17
+ <th>Beschreibung</th>
18
+ </tr>
19
+ </thead>
20
+ <tbody>
21
+ <tr>
22
+ <td><code>set_min</code></td>
23
+ <td>Überschreibt den eingestellten Min-Wert mit <code>msg.payload</code>.</td>
24
+ </tr>
25
+ <tr>
26
+ <td><code>set_max</code></td>
27
+ <td>Überschreibt den eingestellten Max-Wert mit <code>msg.payload</code>.</td>
28
+ </tr>
29
+ <tr>
30
+ <td><code>set_step</code></td>
31
+ <td>Überschreibt die eingestellte Schrittweite mit <code>msg.payload</code>.</td>
32
+ </tr>
33
+ <tr>
34
+ <td><code>up</code></td>
35
+ <td>Erhöht den Wert um <code>msg.payload</code> oder falls nicht gesetzt (oder <code>null</code>) um die konfigurierte Schrittweite. Der neue Wert ist dabei immer innerhalb der Min- und Max-Werte.</td>
36
+ </tr>
37
+ <tr>
38
+ <td><code>down</code></td>
39
+ <td>Verringert den Wert um <code>msg.payload</code> oder falls nicht gesetzt (oder <code>null</code>) um die konfigurierte Schrittweite. Der neue Wert ist dabei immer innerhalb der Min- und Max-Werte.</td>
40
+ </tr>
41
+ <tr>
42
+ <td><code>reset</code></td>
43
+ <td>Setzt den Wert auf <code>msg.payload</code> oder falls nicht gesetzt (oder <code>null</code>) auf den Startwert zurück. Der neue Wert ist dabei immer innerhalb der Min- und Max-Werte.</td>
44
+ </tr>
45
+ </tbody>
46
+ </table>
47
+ </p>
48
+ </script>
@@ -0,0 +1,21 @@
1
+ {
2
+ "counter": {
3
+ "ui": {
4
+ "name": "Name",
5
+ "start": "Start",
6
+ "step": "Schritt",
7
+ "min": "Min",
8
+ "max": "Max",
9
+ "output_messages": "Ausgangsnachrichten",
10
+ "message": "Nachricht",
11
+ "note": "Hinweis:",
12
+ "note_text": "<code>msg.payload</code> wird immer automatisch auf den Ergebnis-Wert gesetzt.",
13
+
14
+ "system_start": "Systemstart",
15
+ "save_state": "Zustand speichern",
16
+ "send_after_start": "Letze Nachricht 10 Sekunden nach dem Start senden",
17
+
18
+ "default": "Standard"
19
+ }
20
+ }
21
+ }
@@ -0,0 +1,48 @@
1
+ <script type="text/html" data-help-name="smart_counter">
2
+ <p>This node can be used to count up or down.</p>
3
+ <p>
4
+ The standard step size can be specified or temporarily overwritten by incoming messages.
5
+ Decimal numbers are also possible.
6
+ </p>
7
+ <p>
8
+ <b>Note:</b> Smart nodes use topics in the format <code>name#number</code>, so different smart nodes can be controlled with the same topic.<br/>
9
+ This node only uses the <code>name</code> part. <code>#</code> and <code>number</code> are optional.
10
+ </p>
11
+ <p>
12
+ The following topics are accepted:
13
+ <table>
14
+ <thead>
15
+ <tr>
16
+ <th>Topic</th>
17
+ <th>Description</th>
18
+ </tr>
19
+ </thead>
20
+ <tbody>
21
+ <tr>
22
+ <td><code>set_min</code></td>
23
+ <td>Overwrites the set min value with <code>msg.payload</code>.</td>
24
+ </tr>
25
+ <tr>
26
+ <td><code>set_max</code></td>
27
+ <td>Overwrites the set max value with <code>msg.payload</code>.</td>
28
+ </tr>
29
+ <tr>
30
+ <td><code>set_step</code></td>
31
+ <td>Overwrites the set step size with <code>msg.payload</code>.</td>
32
+ </tr>
33
+ <tr>
34
+ <td><code>up</code></td>
35
+ <td>Increases the value by <code>msg.payload</code> or, if not set (or <code>null</code>), by the configured step size. The new value is always within the min and max values.</td>
36
+ </tr>
37
+ <tr>
38
+ <td><code>down</code></td>
39
+ <td>Decreases the value by <code>msg.payload</code> or, if not set (or <code>null</code>), by the configured step size. The new value is always within the min and max values.</td>
40
+ </tr>
41
+ <tr>
42
+ <td><code>reset</code></td>
43
+ <td>Resets the value to <code>msg.payload</code> or, if not set (or <code>null</code>), to the start value. The new value is always within the min and max values.</td>
44
+ </tr>
45
+ </tbody>
46
+ </table>
47
+ </p>
48
+ </script>
@@ -0,0 +1,21 @@
1
+ {
2
+ "counter": {
3
+ "ui": {
4
+ "name": "Name",
5
+ "start": "Start",
6
+ "step": "Step",
7
+ "min": "Min",
8
+ "max": "Max",
9
+ "output_messages": "Output messages",
10
+ "message": "Message",
11
+ "note": "Note:",
12
+ "note_text": "<code>msg.payload</code> is always automatically set to the result value.",
13
+
14
+ "system_start": "System start",
15
+ "save_state": "Save state",
16
+ "send_after_start": "Send last message 10 seconds after start",
17
+
18
+ "default": "Default"
19
+ }
20
+ }
21
+ }
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)
@@ -36,17 +38,16 @@
36
38
  });
37
39
 
38
40
  $("#node-input-on_delay_unit").css("max-width", "10rem").typedInput({
39
- types: [
40
- {
41
- default: "s",
42
- options: [
43
- { value: "ms", label: "Millisekunden" },
44
- { value: "s", label: "Sekunden" },
45
- { value: "min", label: "Minuten" },
46
- { value: "h", label: "Stunden" },
47
- ]
48
- }
49
- ]
41
+ types: [{
42
+ default: "s",
43
+ value: "on_delay_unit",
44
+ options: [
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") },
49
+ ]
50
+ }]
50
51
  });
51
52
 
52
53
  $("#node-input-off_delay").spinner({
@@ -63,17 +64,16 @@
63
64
  });
64
65
 
65
66
  $("#node-input-off_delay_unit").css("max-width", "10rem").typedInput({
66
- types: [
67
- {
68
- default: "s",
69
- options: [
70
- { value: "ms", label: "Millisekunden" },
71
- { value: "s", label: "Sekunden" },
72
- { value: "min", label: "Minuten" },
73
- { value: "h", label: "Stunden" },
74
- ]
75
- }
76
- ]
67
+ types: [{
68
+ default: "s",
69
+ value: "on_delay_unit",
70
+ options: [
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") },
75
+ ]
76
+ }]
77
77
  });
78
78
 
79
79
  $("#node-input-save_state").on("change", ev =>
@@ -90,103 +90,31 @@
90
90
 
91
91
  <script type="text/html" data-template-name="smart_delay">
92
92
  <div class="form-row">
93
- <label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
94
- <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" />
95
95
  </div>
96
96
  <div class="form-row">
97
- <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>
98
98
  <input id="node-input-on_delay" value="0" />
99
99
  <input id="node-input-on_delay_unit" />
100
100
  </div>
101
101
  <div class="form-row">
102
- <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>
103
103
  <input id="node-input-off_delay" value="0" />
104
104
  <input id="node-input-off_delay_unit" />
105
105
  </div>
106
106
  <div class="form-row">
107
107
  <input id="node-input-delay_only_on_change" type="checkbox" style="display: inline-block; width: auto; vertical-align: top;"/>
108
- <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>
109
109
  </div>
110
110
  <hr/>
111
- <h4 style="margin: 0.5rem 0;">Systemstart</h4>
111
+ <h4 style="margin: 0.5rem 0;" data-i18n="delay.ui.system_start"></h4>
112
112
  <div class="form-row">
113
113
  <input type="checkbox" id="node-input-save_state" style="width: 20px;" />
114
- <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>
115
115
  </div>
116
116
  <div class="form-row" id="resend_on_start_row">
117
117
  <input type="checkbox" id="node-input-resend_on_start" style="width: 20px;" />
118
- <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>
119
119
  </div>
120
- </script>
121
-
122
- <script type="text/html" data-help-name="smart_delay">
123
- <p>Diese Node kann dazu verwendet werden ein Ein- oder Ausschaltsignal zu verzögern.</p>
124
- <p>Die Zeit 0 bedeutet keine Verögerung.</p>
125
- <p>
126
- <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/>
127
- Diese Node verwendet nur den Teil <code>name</code>. <code>#</code> und <code>nummer</code> sind dabei optional.
128
- </p>
129
- <p>
130
- Folgende topics werden akzeptiert:
131
- <table>
132
- <thead>
133
- <tr>
134
- <th>Topic</th>
135
- <th>Beschreibung</th>
136
- </tr>
137
- </thead>
138
- <tbody>
139
- <tr>
140
- <td><code>set_delay_on</code></td>
141
- <td>Setzt die Einschaltverzögerung auf die in <code>msg.payload</code> angegebene Zeit.</td>
142
- </tr>
143
- <tr>
144
- <td><code>set_delay_off</code></td>
145
- <td>Setzt die Ausschaltverzögerung auf die in <code>msg.payload</code> angegebene Zeit.</td>
146
- </tr>
147
- <tr>
148
- <td><code>set_delays</code></td>
149
- <td>Setzt die Ein- und Ausschaltverzögerung auf die in <code>msg.payload</code> angegebene Zeit.</td>
150
- </tr>
151
- </tbody>
152
- </table>
153
- </p>
154
- <p>
155
- Beispiel: <code>msg = { "topic": "set_delay_on", "payload": 5000 }</code> oder <code>msg = { "topic": "set_delay_on", "payload": "5s" }</code><br/>
156
- Diese Nachricht setzt die Einschaltverzögerung auf 5000 Millisekunden / 5 Sekunden.
157
- Ist die Zeit auf 0 eingestellt, wird die Nachricht sofort weitergeleitet.<br/>
158
- Als Einheit für die Zeit können folgende Werte verwendet werden:
159
- <table>
160
- <thead>
161
- <tr>
162
- <th>Einheit</th>
163
- <th>Beschreibung</th>
164
- </tr>
165
- </thead>
166
- <tbody>
167
- <tr>
168
- <td><code>ms</code> (default)</td>
169
- <td>Millisekunden</td>
170
- </tr>
171
- <tr>
172
- <td><code>s</code> oder <code>sec</code></td>
173
- <td>Sekunden</td>
174
- </tr>
175
- <tr>
176
- <td><code>m</code> oder <code>min</code></td>
177
- <td>Mintun.</td>
178
- </tr>
179
- <tr>
180
- <td><code>h</code></td>
181
- <td>Stunden</td>
182
- </tr>
183
- </tbody>
184
- </table>
185
- </p>
186
- <p>
187
- Wenn die Checkbox <b>Nur verzögern, wenn sich <code>msg.payload</code> verändert hat.</b> aktiviert ist
188
- und während dem Warten um ein Einschaltsignal weiterzuleiten ein Ausschaltsignal empfangen wird,
189
- so wird das Senden des Einschaltsignals abgebrochen. Dies gilt auch für den umgekehrten Fall.<br/>
190
- 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.
191
- </p>
192
120
  </script>