node-red-contrib-boolean-logic-ultimate 1.0.47 → 1.0.48

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
@@ -1,6 +1,10 @@
1
1
  # node-red-contrib-boolean-logic-ultimate
2
2
  [![Donate via PayPal](https://img.shields.io/badge/Donate-PayPal-blue.svg?style=flat-square)](https://www.paypal.me/techtoday)
3
3
 
4
+ <p>
5
+ <b>Version 1.0.48</b> February 2022<br/>
6
+ - NEW: SUM node: this new node makes sum, average and measurement count.</br>
7
+ </p>
4
8
  <p>
5
9
  <b>Version 1.0.47</b> February 2022<br/>
6
10
  - NEW: Interrupt Flow: the node now stores the last message, even if in the "stop" state.</br>
package/README.md CHANGED
@@ -323,6 +323,40 @@ Pass <code>msg.payload = false</code> to the node to stop the running sequence</
323
323
 
324
324
  - Output: the node outputs a message you specified in the command textbox<br/>
325
325
 
326
+ <br/>
327
+ <br/>
328
+ <br/>
329
+ <br/>
330
+ <br/>
331
+
332
+ # SUM ULTIMATE
333
+
334
+ The pourpose of this node is to sum the incoming values. Each incoming message MUST HAVE OWN TOPIC.<br />
335
+
336
+ <img src='https://raw.githubusercontent.com/Supergiovane/node-red-contrib-boolean-logic-ultimate/master/img/sum.png' width='60%'>
337
+ <details><summary>CLICK HERE, copy and paste it into your flow</summary>
338
+ <code>
339
+ [{"id":"05b6ce0cb476abd5","type":"SumUltimate","z":"d8fbf871e381cf2c","name":"Sum","property":"payload","x":550,"y":160,"wires":[["567aa6a9719e463e","34fbca5daf8b9fab","e3c2a45a0b77af8f"]]},{"id":"6744e01b88d820b9","type":"inject","z":"d8fbf871e381cf2c","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"Watt Table Lamp","payload":"10","payloadType":"num","x":250,"y":140,"wires":[["05b6ce0cb476abd5"]]},{"id":"75823dbc7db78c3c","type":"inject","z":"d8fbf871e381cf2c","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"Watt Washing machine","payload":"20","payloadType":"num","x":270,"y":180,"wires":[["05b6ce0cb476abd5"]]},{"id":"567aa6a9719e463e","type":"debug","z":"d8fbf871e381cf2c","name":"Sum","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":690,"y":160,"wires":[]},{"id":"1793931ba218bc1d","type":"inject","z":"d8fbf871e381cf2c","name":"Reset","props":[{"p":"reset","v":"","vt":"date"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":210,"y":240,"wires":[["05b6ce0cb476abd5"]]},{"id":"0b3277af03f546d4","type":"comment","z":"d8fbf871e381cf2c","name":"Getting Sum, Average etc. from the SUM node.","info":"","x":320,"y":100,"wires":[]},{"id":"34fbca5daf8b9fab","type":"debug","z":"d8fbf871e381cf2c","name":"Average","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"average","targetType":"msg","statusVal":"","statusType":"auto","x":700,"y":200,"wires":[]},{"id":"e3c2a45a0b77af8f","type":"debug","z":"d8fbf871e381cf2c","name":"Measurements","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"measurements","targetType":"msg","statusVal":"","statusType":"auto","x":720,"y":240,"wires":[]}]
340
+ </code>
341
+ </details>
342
+
343
+ **INPUT**<br />
344
+
345
+ <br /><b>msg.reset</b><br />
346
+ resets the values to zero.
347
+
348
+ <br />
349
+
350
+ - Output: the node outputs a message as follows:<br/>
351
+
352
+ <pre>
353
+ {
354
+ "payload": 30, // This is the SUM
355
+ "topic": "Sum", // Node Topic
356
+ "average": 15, // This is the AVERAVE
357
+ "measurements": 2 // This is the number of topics that have been evaluated
358
+ }
359
+ </pre>
326
360
 
327
361
  [license-image]: https://img.shields.io/badge/license-MIT-blue.svg
328
362
  [license-url]: https://github.com/Supergiovane/node-red-contrib-boolean-logic-ultimate/master/LICENSE
@@ -0,0 +1,54 @@
1
+ <script type="text/javascript">
2
+ RED.nodes.registerType('SumUltimate', {
3
+ category: 'boolean logic ultimate',
4
+ color: '#ff8080',
5
+ defaults: {
6
+ name: {
7
+ value: "Sum"
8
+ },
9
+ property: {
10
+ value: "payload"
11
+ }
12
+
13
+ },
14
+ inputs: 1,
15
+ outputs: 1,
16
+ icon: "font-awesome/fa-plus",
17
+ label:
18
+ function () {
19
+ return this.name || "Sum";
20
+ },
21
+ paletteLabel: function () {
22
+ return "SumUltimate";
23
+ }
24
+ });
25
+ </script>
26
+
27
+ <script type="text/x-red" data-template-name="SumUltimate">
28
+ <div class="form-row">
29
+ <b>Status Ultimate</b>&nbsp&nbsp&nbsp&nbsp<span style="color:red"><i class="fa fa-question-circle"></i>&nbsp<a target="_blank" href="https://github.com/Supergiovane/node-red-contrib-boolean-logic-ultimate"><u>Help online</u></a></span>
30
+ <br/>
31
+ <br/>
32
+ </div>
33
+ <div class="form-row">
34
+ <label for="node-input-name"><i class="icon-tag"></i> Name</label>
35
+ <input type="text" id="node-input-name" placeholder="Name">
36
+ </div>
37
+ <div class="form-row">
38
+ <label for="node-input-property"><i class="icon-tag"></i> Sum msg.</label>
39
+ <input type="text" id="node-input-property" placeholder="payload">
40
+ </div>
41
+ </script>
42
+
43
+ <script type="text/x-red" data-help-name="SumUltimate">
44
+ <p>
45
+ SEE THE README FOR HELP CONFIGURING THE NODE
46
+ </p>
47
+
48
+ <p>
49
+ <a href="https://github.com/Supergiovane/node-red-contrib-boolean-logic-ultimate" target="_blank">Click here to learn how to configure the node.</a>
50
+ </p>
51
+
52
+ <a href="https://www.paypal.me/techtoday" target="_blank"><img src='https://img.shields.io/badge/Donate-PayPal-blue.svg?style=flat-square' width='30%'></a>
53
+
54
+ </script>
@@ -0,0 +1,88 @@
1
+ module.exports = function (RED) {
2
+ function SumUltimate(config) {
3
+ RED.nodes.createNode(this, config);
4
+ this.config = config;
5
+ var node = this;
6
+ this.topics = {};
7
+
8
+ function setNodeStatus({ fill, shape, text }) {
9
+ var dDate = new Date();
10
+ node.status({ fill: fill, shape: shape, text: text + " (" + dDate.getDate() + ", " + dDate.toLocaleTimeString() + ")" })
11
+ }
12
+
13
+ setNodeStatus({ fill: "grey", shape: "dot", text: "" });
14
+
15
+ function fetchFromObject(obj, prop) {
16
+
17
+ if (obj === undefined) {
18
+ return undefined;
19
+ }
20
+
21
+ var _index = prop.indexOf('.')
22
+ if (_index > -1) {
23
+ return fetchFromObject(obj[prop.substring(0, _index)], prop.substr(_index + 1));
24
+ }
25
+
26
+ return obj[prop];
27
+ }
28
+
29
+ this.on('input', function (msg) {
30
+
31
+ // handle reset
32
+ if (msg.hasOwnProperty("reset")) {
33
+ node.topics = {};
34
+ setNodeStatus({ fill: "grey", shape: "ring", text: "Reset" });
35
+ return;
36
+ }
37
+
38
+ if (!msg.hasOwnProperty("topic")) {
39
+ setNodeStatus({ fill: "red", shape: "ring", text: "Incoming msg without topic! Please set the topic." });
40
+ return;
41
+ }
42
+
43
+ try {
44
+ let props = [] = this.config.property.split(".");
45
+ let ret = fetchFromObject(msg, this.config.property);
46
+ if (ret !== undefined) {
47
+
48
+ ret = Number(ret);
49
+
50
+ // Sum
51
+ if (!isNaN(ret) && isFinite(ret)) {
52
+ node.topics[msg.topic.toString()] = ret;
53
+
54
+ var quantita = 0;
55
+ var somma = Object.keys(node.topics).reduce(function (a, b) {
56
+ ++quantita;
57
+ return a + node.topics[b];
58
+ }, 0);
59
+
60
+ msg.payload = somma; // Sum
61
+ msg.average = somma / quantita; // Average
62
+ msg.measurements = quantita; // Topics
63
+
64
+ // overwrite topic if configured
65
+ if (config.name) {
66
+ msg.topic = config.name;
67
+ }
68
+ }
69
+
70
+ // everything else
71
+ else {
72
+ setNodeStatus({ fill: "red", shape: "ring", text: "Not a number" });
73
+ }
74
+
75
+ } else {
76
+ setNodeStatus({ fill: "red", shape: "ring", text: this.config.property + " is undefined." });
77
+ }
78
+ } catch (error) {
79
+ setNodeStatus({ fill: "red", shape: "ring", text: error.message });
80
+ }
81
+ setNodeStatus({ fill: "green", shape: "dot", text: "Sum " + msg.payload });
82
+ node.send(msg);
83
+ });
84
+
85
+ }
86
+
87
+ RED.nodes.registerType("SumUltimate", SumUltimate);
88
+ }
package/img/sum.png ADDED
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-red-contrib-boolean-logic-ultimate",
3
- "version": "1.0.47",
3
+ "version": "1.0.48",
4
4
  "description": "A set of Node-RED enhanced boolean logic node, flow interruption node, blinker node, invert node, filter node, with persisten values after reboot and more.",
5
5
  "author": "Supergiovane (https://github.com/Supergiovane)",
6
6
  "dependencies": {
@@ -29,7 +29,8 @@
29
29
  "SimpleOutputUltimate": "boolean-logic-ultimate/SimpleOutputUltimate.js",
30
30
  "InjectUltimate": "boolean-logic-ultimate/InjectUltimate.js",
31
31
  "StatusUltimate": "boolean-logic-ultimate/StatusUltimate.js",
32
- "ImpulseUltimate": "boolean-logic-ultimate/ImpulseUltimate.js"
32
+ "ImpulseUltimate": "boolean-logic-ultimate/ImpulseUltimate.js",
33
+ "SumUltimate": "boolean-logic-ultimate/SumUltimate.js"
33
34
  }
34
35
  }
35
36
  }