smart-nodes 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -209,4 +209,8 @@
209
209
  - Mixing valve can now output as percentage directly or with open/close impulses.
210
210
  - Mixing valve tries to guess the best position, when getting enabled.
211
211
  - Added debug topic to all nodes, to see current values.
212
- - Added new node "mode-selector".
212
+ - Added new node "mode-selector".
213
+
214
+ ## Version 0.5.1:
215
+
216
+ - To be more compatible, topic "set" is also possible instead of "set_state". Same for "set_inverted" instead of "set_state_inverted".
@@ -81,16 +81,19 @@ module.exports = function (RED)
81
81
  {
82
82
  let real_topic = helper.getTopicName(msg.topic);
83
83
 
84
- if (real_topic == "set_state_inverted")
84
+ if (real_topic.startsWith("set_state"))
85
+ real_topic = real_topic.replace("set_state", "set");
86
+
87
+ if (real_topic == "set_inverted")
85
88
  {
86
- real_topic = "set_state";
89
+ real_topic = "set";
87
90
  msg.payload = !msg.payload;
88
91
  }
89
92
 
90
93
  let new_state = null;
91
- if (real_topic == "enable" || (real_topic == "set_state" && msg.payload))
94
+ if (real_topic == "enable" || (real_topic == "set" && msg.payload))
92
95
  new_state = true;
93
- else if (real_topic == "disable" || (real_topic == "set_state" && !msg.payload))
96
+ else if (real_topic == "disable" || (real_topic == "set" && !msg.payload))
94
97
  new_state = false;
95
98
 
96
99
  switch (real_topic)
@@ -27,11 +27,11 @@
27
27
  <td>Deaktiviert das Weiterleiten.</td>
28
28
  </tr>
29
29
  <tr>
30
- <td><code>set_state</code></td>
30
+ <td><code>set</code> oder <code>set_state</code></td>
31
31
  <td>Aktiviert das Weiterleiten, wenn <code>msg.payload = true</code> oder deaktiviert das Weiterleiten, wenn <code>msg.payload = false</code>.</td>
32
32
  </tr>
33
33
  <tr>
34
- <td><code>set_state_inverted</code></td>
34
+ <td><code>set_inverted</code> oder <code>set_state_inverted</code></td>
35
35
  <td>Aktiviert das Weiterleiten, wenn <code>msg.payload = false</code> oder deaktiviert das Weiterleiten, wenn <code>msg.payload = true</code>.</td>
36
36
  </tr>
37
37
  </tbody>
@@ -27,11 +27,11 @@
27
27
  <td>Disables forwarding.</td>
28
28
  </tr>
29
29
  <tr>
30
- <td><code>set_state</code></td>
30
+ <td><code>set</code> or <code>set_state</code></td>
31
31
  <td>Enables forwarding if <code>msg.payload = true</code> or disables forwarding if <code>msg.payload = false</code>.</td>
32
32
  </tr>
33
33
  <tr>
34
- <td><code>set_state_inverted</code></td>
34
+ <td><code>set_inverted</code> or <code>set_state_inverted</code></td>
35
35
  <td>Enables forwarding if <code>msg.payload = false</code> or disables forwarding if <code>msg.payload = true</code>.</td>
36
36
  </tr>
37
37
  </tbody>
package/light/light.js CHANGED
@@ -288,7 +288,6 @@ module.exports = function (RED)
288
288
  break;
289
289
  }
290
290
  }
291
-
292
291
  break;
293
292
 
294
293
  case "blink":
@@ -34,11 +34,11 @@
34
34
  <td>Deaktiviert die Mischeransteuerung und fährt die Position an, die als Aus-Modus festgelegt ist.</td>
35
35
  </tr>
36
36
  <tr>
37
- <td><code>set_state</code></td>
37
+ <td><code>set</code> oder <code>set_state</code></td>
38
38
  <td>Aktiviert den Mischer, wenn <code>msg.payload = true</code> oder deaktiviert ihn, wenn <code>msg.payload = false</code>.</td>
39
39
  </tr>
40
40
  <tr>
41
- <td><code>set_state_inverted</code></td>
41
+ <td><code>set_inverted</code> oder <code>set_state_inverted</code></td>
42
42
  <td>Aktiviert den Mischer, wenn <code>msg.payload = false</code> oder deaktiviert ihn, wenn <code>msg.payload = true</code>.</td>
43
43
  </tr>
44
44
  <tr>
@@ -34,11 +34,11 @@
34
34
  <td>Deactivates the mixer control and moves to the position that is set as the off mode.</td>
35
35
  </tr>
36
36
  <tr>
37
- <td><code>set_state</code></td>
37
+ <td><code>set</code> or <code>set_state</code></td>
38
38
  <td>Activates the mixing valve when <code>msg.payload = true</code> or deactivates it if <code>msg.payload = false</code>.</td>
39
39
  </tr>
40
40
  <tr>
41
- <td><code>set_state_inverted</code></td>
41
+ <td><code>set_inverted</code> or <code>set_state_inverted</code></td>
42
42
  <td>Activates the mixing valve when <code>msg.payload = false</code> or deactivates it if <code>msg.payload = true</code>.</td>
43
43
  </tr>
44
44
  <tr>
@@ -170,6 +170,33 @@
170
170
  onEditPrepare(this, ["smart_central-control"]);
171
171
  initTreeList(node, ["smart_central-control"]);
172
172
 
173
+ $("#node-input-output_mode")
174
+ .css("max-width", "70%")
175
+ .typedInput({
176
+ type: "num",
177
+ types: [{
178
+ value: "output_mode",
179
+ options: [
180
+ { value: "OPEN_CLOSE", label: node._("mixing-valve.ui.open_close") },
181
+ { value: "PERCENTAGE", label: node._("mixing-valve.ui.percentage") },
182
+ ]
183
+ }]
184
+ });
185
+
186
+ $("#node-input-output_mode").on("change", function ()
187
+ {
188
+ if (this.value == "OPEN_CLOSE")
189
+ {
190
+ $(".only-open-close").show();
191
+ node.outputs = 3;
192
+ }
193
+ else
194
+ {
195
+ $(".only-open-close").hide();
196
+ node.outputs = 1;
197
+ }
198
+ });
199
+
173
200
  $("#node-input-setpoint")
174
201
  .css("max-width", "4rem")
175
202
  .spinner({
@@ -240,49 +267,22 @@
240
267
  }],
241
268
  });
242
269
 
243
- $("#node-input-output_mode")
244
- .css("max-width", "70%")
245
- .typedInput({
246
- type: "num",
247
- types: [{
248
- value: "output_mode",
249
- options: [
250
- { value: "OPEN_CLOSE", label: node._("mixing-valve.ui.open_close") },
251
- { value: "PERCENTAGE", label: node._("mixing-valve.ui.percentage") },
252
- ]
253
- }]
254
- });
255
-
256
- $("#node-input-output_mode").on("change", function ()
257
- {
258
- if (this.value == "OPEN_CLOSE")
259
- {
260
- $(".only-open-close").show();
261
- node.outputs = 3;
262
- }
263
- else
264
- {
265
- $(".only-open-close").hide();
266
- node.outputs = 1;
267
- }
268
- });
269
-
270
270
 
271
271
  $("#node-input-precision")
272
- .css("max-width", "4rem")
273
- .spinner({
274
- min: 0.1,
275
- max: 1.0,
276
- step: 0.1,
277
- change: function (event, ui)
278
- {
279
- var value = parseFloat(this.value);
280
- value = isNaN(value) ? 0.0 : value;
281
- value = Math.max(value, parseFloat($(this).attr("aria-valuemin")));
282
- value = Math.min(value, parseFloat($(this).attr("aria-valuemax")));
283
- if (value !== this.value) $(this).spinner("value", value);
284
- },
285
- });
272
+ .css("max-width", "4rem")
273
+ .spinner({
274
+ min: 0.1,
275
+ max: 1.0,
276
+ step: 0.1,
277
+ change: function (event, ui)
278
+ {
279
+ var value = parseFloat(this.value);
280
+ value = isNaN(value) ? 0.0 : value;
281
+ value = Math.max(value, parseFloat($(this).attr("aria-valuemin")));
282
+ value = Math.min(value, parseFloat($(this).attr("aria-valuemax")));
283
+ if (value !== this.value) $(this).spinner("value", value);
284
+ },
285
+ });
286
286
 
287
287
  $("#node-input-max_change_percent")
288
288
  .css("max-width", "4rem")
@@ -148,13 +148,16 @@ module.exports = function (RED)
148
148
 
149
149
  let real_topic = helper.getTopicName(msg.topic);
150
150
 
151
- if (real_topic == "set_state_inverted")
151
+ if (real_topic.startsWith("set_state"))
152
+ real_topic = real_topic.replace("set_state", "set");
153
+
154
+ if (real_topic == "set_inverted")
152
155
  {
153
- real_topic = "set_state";
156
+ real_topic = "set";
154
157
  msg.payload = !msg.payload;
155
158
  }
156
159
 
157
- if (real_topic == "set_state")
160
+ if (real_topic == "set")
158
161
  real_topic = (!!msg.payload) ? "enable" : "disable";
159
162
 
160
163
  switch (real_topic)
@@ -179,7 +182,7 @@ module.exports = function (RED)
179
182
  case "enable":
180
183
  if (node_settings.enabled)
181
184
  {
182
- helpers.log(node, "Already enabled");
185
+ helper.log(node, "Already enabled");
183
186
  break;
184
187
  }
185
188
 
@@ -1,5 +1,5 @@
1
1
  {
2
- "modeSelector": {
2
+ "mode-selector": {
3
3
  "ui": {
4
4
  "name": "Name",
5
5
  "update_only_changed_outputs": "Nur an geänderte Ausgänge senden",
@@ -1,5 +1,5 @@
1
1
  {
2
- "modeSelector": {
2
+ "mode-selector": {
3
3
  "ui": {
4
4
  "name": "Name",
5
5
  "update_only_changed_outputs": "Only send to changed outputs",
@@ -81,7 +81,7 @@
81
81
  .appendTo(row);
82
82
 
83
83
  // Output name
84
- var modeName = $("<input/>", { class: "node-input-prop-name", placeholder: node._("modeSelector.ui.name"), type: "text" })
84
+ var modeName = $("<input/>", { class: "node-input-prop-name", placeholder: node._("mode-selector.ui.name"), type: "text" })
85
85
  .css("width", "90%")
86
86
  .appendTo(row);
87
87
 
@@ -115,7 +115,7 @@
115
115
  tabs.addTab({
116
116
  id: "modes-tab-outputs",
117
117
  iconClass: "fa fa-list-ol",
118
- label: node._("modeSelector.ui.modes")
118
+ label: node._("mode-selector.ui.modes")
119
119
  });
120
120
  },
121
121
  oneditsave: function ()
@@ -135,12 +135,12 @@
135
135
 
136
136
  <script type="text/html" data-template-name="smart_mode-selector">
137
137
  <div class="form-row">
138
- <label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="modeSelector.ui.name"></span></label>
139
- <input type="text" id="node-input-name" data-i18n="[placeholder]modeSelector.ui.name" />
138
+ <label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="mode-selector.ui.name"></span></label>
139
+ <input type="text" id="node-input-name" data-i18n="[placeholder]mode-selector.ui.name" />
140
140
  </div>
141
141
  <div class="form-row">
142
142
  <input type="checkbox" id="node-input-update_only_changed_outputs" style="width: 20px;" />
143
- <label for="node-input-update_only_changed_outputs" style="width: calc(100% - 30px);" data-i18n="modeSelector.ui.update_only_changed_outputs"></label>
143
+ <label for="node-input-update_only_changed_outputs" style="width: calc(100% - 30px);" data-i18n="mode-selector.ui.update_only_changed_outputs"></label>
144
144
  </div>
145
145
 
146
146
  <div id="mode-selector-modes">
@@ -154,10 +154,10 @@
154
154
  </div>
155
155
  </div>
156
156
  <hr/>
157
- <h4 style="margin: 0.5rem 0;" data-i18n="modeSelector.ui.system_start"></h4>
157
+ <h4 style="margin: 0.5rem 0;" data-i18n="mode-selector.ui.system_start"></h4>
158
158
  <div class="form-row">
159
159
  <input type="checkbox" id="node-input-resend_on_start" style="width: 20px;" />
160
- <label for="node-input-resend_on_start" style="width: calc(100% - 30px);" data-i18n="modeSelector.ui.send_after_start"></label>
160
+ <label for="node-input-resend_on_start" style="width: calc(100% - 30px);" data-i18n="mode-selector.ui.send_after_start"></label>
161
161
  </div>
162
162
 
163
163
  </script>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "smart-nodes",
3
- "version": "0.5.0",
3
+ "version": "0.5.1",
4
4
  "description": "Controls light, shutters and more. Includes common used logic and statistic nodes to control your home.",
5
5
  "keywords": [
6
6
  "node-red",
@@ -25,11 +25,11 @@
25
25
  <td>Deaktiviert den Scheduler.</td>
26
26
  </tr>
27
27
  <tr>
28
- <td><code>set_state</code></td>
28
+ <td><code>set</code> oder <code>set_state</code></td>
29
29
  <td>Aktiviert den Scheduler, wenn <code>msg.payload = true</code> oder deaktiviert den Scheduler, wenn <code>msg.payload = false</code>.</td>
30
30
  </tr>
31
31
  <tr>
32
- <td><code>set_state_inverted</code></td>
32
+ <td><code>set_inverted</code> oder <code>set_state_inverted</code></td>
33
33
  <td>Aktiviert den Scheduler, wenn <code>msg.payload = false</code> oder deaktiviert den Scheduler, wenn <code>msg.payload = true</code>.</td>
34
34
  </tr>
35
35
  </tbody>
@@ -25,11 +25,11 @@
25
25
  <td>Disables the scheduler.</td>
26
26
  </tr>
27
27
  <tr>
28
- <td><code>set_state</code></td>
28
+ <td><code>set</code> or <code>set_state</code></td>
29
29
  <td>Enables the scheduler if <code>msg.payload = true</code> or disables the scheduler if <code>msg.payload = false</code>.</td>
30
30
  </tr>
31
31
  <tr>
32
- <td><code>set_state_inverted</code></td>
32
+ <td><code>set_inverted</code> oder <code>set_state_inverted</code></td>
33
33
  <td>Enables the scheduler if <code>msg.payload = false</code> or disables the scheduler if <code>msg.payload = true</code>.</td>
34
34
  </tr>
35
35
  </tbody>
@@ -102,13 +102,16 @@ module.exports = function (RED)
102
102
  {
103
103
  let real_topic = helper.getTopicName(msg.topic);
104
104
 
105
- if (real_topic == "set_state_inverted")
105
+ if (real_topic.startsWith("set_state"))
106
+ real_topic = real_topic.replace("set_state", "set");
107
+
108
+ if (real_topic == "set_inverted")
106
109
  {
107
- real_topic = "set_state";
110
+ real_topic = "set";
108
111
  msg.payload = !msg.payload;
109
112
  }
110
113
 
111
- if (real_topic == "set_state")
114
+ if (real_topic == "set")
112
115
  real_topic = (!!msg.payload) ? "enable" : "disable";
113
116
 
114
117
  switch (real_topic)
@@ -1,7 +1,7 @@
1
1
  <script type="text/html" data-help-name="smart_statistic">
2
2
  <p>Dieser Knoten berechnet das Minimum, Maximum, die Summe, die Differenz, den absoluten Wert, die absolute Differenz, den Durchschnitt sowie den gleitenden Mittelwert verschiedener Werte.</p>
3
3
  <p>Jeder Wert muss mit einem eigenen Topic gesendet werden. Kommt ein zweiter Wert mit dem gleichen Topic, wird der entsprechende Wert überschrieben.</p>
4
- <p>Im Falle von MIN, MAX und ABS wird das entsprechende Topic, welches mit den Werten kam, mit ausgegeben. Bei SUM, DIFF, AVG und MOV_AVG handelt es sich um kombinierte Ergebnisse, weshalb Topic hier immer nicht gesetzt ist.</p>
4
+ <p>Im Falle von MIN, MAX und ABS wird das entsprechende Topic, welches mit den Werten kam, mit ausgegeben. Bei SUM, DIFF, AVG und MOV_AVG handelt es sich um kombinierte Ergebnisse, weshalb das Topic hier immer nicht gesetzt ist.</p>
5
5
  <p>Für den absoluten Wert sowie den gleitenden Mittelwert spielt das Topic keine Rolle, jeder Wert der empfangen wird, wird für die Berechnung verwendet.</p>
6
6
  <p>
7
7
  <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/>