mirror of
https://github.com/node-red/node-red-nodes.git
synced 2023-10-10 13:36:58 +02:00
This commit is contained in:
commit
85797eb7fc
63
README.md
63
README.md
@ -1,6 +1,6 @@
|
|||||||
# Node-RED Nodes
|
# Node-RED Nodes
|
||||||
|
|
||||||
A collection of nodes for [Node-RED](http://nodered.org).
|
A collection of nodes for [Node-RED](http://nodered.org). See below for a list.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
@ -42,3 +42,64 @@ slightly different.
|
|||||||
## Copyright and license
|
## Copyright and license
|
||||||
|
|
||||||
Copyright 2013 IBM Corp. under [the Apache 2.0 license](LICENSE).
|
Copyright 2013 IBM Corp. under [the Apache 2.0 license](LICENSE).
|
||||||
|
|
||||||
|
# Extra Node Information
|
||||||
|
|
||||||
|
### Analysis
|
||||||
|
|
||||||
|
**72-wordpos** - Analyses the payload and classifies the part-of-speech of each word. The resulting message has msg.pos added with the results. A word may appear in multiple categories (eg, 'great' is both a noun and an adjective).
|
||||||
|
|
||||||
|
**74-swearfilter** - Analyses the payload and tries to filter out any messages containing bad swear words. This only operates on payloads of type string. Everything else is blocked.
|
||||||
|
|
||||||
|
### Hardware
|
||||||
|
|
||||||
|
**37-rpi-piface** - Adds support for the PiFace interface module for Raspberry Pi.
|
||||||
|
|
||||||
|
**78-ledborg** - A simple driver for the LEDborg plug on module for Raspberry Pi.
|
||||||
|
|
||||||
|
**60-wemo** - Basic node to drive a WeMo socket and switch. Does not use discovery.
|
||||||
|
|
||||||
|
**76-blinkstick** - Provides support for the BlinkStick USB LED device.
|
||||||
|
|
||||||
|
**77-blink1** - Provides support for the Blink1 USB LED from ThingM.
|
||||||
|
|
||||||
|
**78-digiRGB** - Provides support for the DigiSpark RGB USB LED.
|
||||||
|
|
||||||
|
**79-sensorTag** - Reads data from the Ti BLE SensorTag device.
|
||||||
|
|
||||||
|
**101-scanBLE** - Scans for a particular Bluetooth Low Energy (BLE) device.
|
||||||
|
|
||||||
|
### IO
|
||||||
|
|
||||||
|
**26-rawserial** - Only really needed for Windows boxes without serialport npm module installed.
|
||||||
|
Uses a simple read of the serial port as a file to input data. You **must** set the baud rate etc externally *before* starting Node-RED. This node does not implement pooling of connections so only one instance of each port may be used - so in **or** out but **not** both.
|
||||||
|
|
||||||
|
**39-wol** - Sends a Wake-On-LAN magic packet to the mac address specified. You may instead set msg.mac to dynamically set the target device mac to wake up.
|
||||||
|
|
||||||
|
**88-ping** - Pings a machine and returns the trip time in mS. Returns false if no response received within 3 seconds, or if the host is unresolveable. Default ping is every 20 seconds but can be configured.
|
||||||
|
|
||||||
|
### Social
|
||||||
|
|
||||||
|
**69-mpd** - MPD music control nodes. Output node expects payload to be a valid mpc command. Currently only simple commands that expect no reply are supported. Input node creates a payload object with Artist, Album, Title, Genre and Date.
|
||||||
|
|
||||||
|
**57-notify** - Uses Growl to provide a desktop popup containing the payload. Only useful on the local machine.
|
||||||
|
|
||||||
|
**57-prowl** - Uses Prowl to push the payload to an Apple device that has the Prowl app installed.
|
||||||
|
|
||||||
|
**57-pushbullet** - Uses PushBullet to push the payload to an Android device that has the PushBullet app installed.
|
||||||
|
|
||||||
|
**92-xmpp** - Connects to an XMPP server to send and receive messages.
|
||||||
|
|
||||||
|
### Storage
|
||||||
|
|
||||||
|
**67-leveldb** - Uses LevelDB for a simple key value pair database.
|
||||||
|
|
||||||
|
**68-mysql** - Allows basic access to a MySQL database. This node uses the **query** operation against the configured database. This does allow both INSERTS and DELETES. By it's very nature it allows SQL injection... *so be careful out there...*
|
||||||
|
|
||||||
|
### Time
|
||||||
|
|
||||||
|
**79-suncalc** - Uses the suncalc module to generate an output at sunrise and sunset based on a specified location. Several choices of definition of sunrise and sunset are available,
|
||||||
|
|
||||||
|
### Misc
|
||||||
|
|
||||||
|
**99-sample** - A sample node with more comments than most to try to help you get started without any other docs...
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
|
|
||||||
<script type="text/x-red" data-help-name="badwords">
|
<script type="text/x-red" data-help-name="badwords">
|
||||||
<p>Analyses the <b>msg.payload</b> and tries to filter out any messages containing bad swear words...</p>
|
<p>Analyses the <b>msg.payload</b> and tries to filter out any messages containing bad swear words...</p>
|
||||||
|
<p><b>Note:</b> this only operates on payloads of type <b>string</b>. Everything else is blocked.</p>
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
@ -30,7 +31,7 @@
|
|||||||
category: 'analysis-function',
|
category: 'analysis-function',
|
||||||
color:"#E6E0F8",
|
color:"#E6E0F8",
|
||||||
defaults: {
|
defaults: {
|
||||||
name: {value:""},
|
name: {value:""}
|
||||||
},
|
},
|
||||||
inputs:1,
|
inputs:1,
|
||||||
outputs:1,
|
outputs:1,
|
||||||
@ -42,5 +43,4 @@
|
|||||||
return this.name?"node_label_italic":"";
|
return this.name?"node_label_italic":"";
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -21,8 +21,9 @@ function BadwordsNode(n) {
|
|||||||
RED.nodes.createNode(this,n);
|
RED.nodes.createNode(this,n);
|
||||||
var node = this;
|
var node = this;
|
||||||
this.on("input", function(msg) {
|
this.on("input", function(msg) {
|
||||||
|
if (typeof msg.payload == "string") {
|
||||||
if (badwords.ok(msg.payload)) { node.send(msg); }
|
if (badwords.ok(msg.payload)) { node.send(msg); }
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
RED.nodes.registerType("badwords",BadwordsNode);
|
RED.nodes.registerType("badwords",BadwordsNode);
|
||||||
|
@ -53,5 +53,4 @@
|
|||||||
return this.name?"node_label_italic":"";
|
return this.name?"node_label_italic":"";
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -15,9 +15,7 @@
|
|||||||
**/
|
**/
|
||||||
|
|
||||||
var RED = require(process.env.NODE_RED_HOME+"/red/red");
|
var RED = require(process.env.NODE_RED_HOME+"/red/red");
|
||||||
var util = require("util");
|
|
||||||
var WordPos = require('wordpos');
|
var WordPos = require('wordpos');
|
||||||
|
|
||||||
var wordpos = new WordPos();
|
var wordpos = new WordPos();
|
||||||
|
|
||||||
function WordPOSNode(n) {
|
function WordPOSNode(n) {
|
||||||
@ -30,5 +28,4 @@ function WordPOSNode(n) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
RED.nodes.registerType("wordpos",WordPOSNode);
|
RED.nodes.registerType("wordpos",WordPOSNode);
|
||||||
|
@ -20,7 +20,7 @@ var fs = require('fs');
|
|||||||
|
|
||||||
// check if /dev/ledborg exists - if not then don't even show the node.
|
// check if /dev/ledborg exists - if not then don't even show the node.
|
||||||
if (!fs.existsSync("/dev/ledborg")) {
|
if (!fs.existsSync("/dev/ledborg")) {
|
||||||
util.log("[78-ledborg.js] Error: PiBorg hardware : LedBorg not found");
|
util.log("[78-ledborg.js] Warning: PiBorg hardware : LedBorg not found");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -49,5 +49,4 @@ function LedBorgNode(n) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
RED.nodes.registerType("ledborg",LedBorgNode);
|
RED.nodes.registerType("ledborg",LedBorgNode);
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script type="text/x-red" data-help-name="blink1">
|
<script type="text/x-red" data-help-name="blink1">
|
||||||
<p>Thingm Blink1 output node. Expects a msg.payload with a three part csv string of r,g,b.</p>
|
<p>ThingM Blink1 output node. Expects a msg.payload with a three part csv string of r,g,b.</p>
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
@ -46,7 +46,7 @@
|
|||||||
return this.name||"blink1";
|
return this.name||"blink1";
|
||||||
},
|
},
|
||||||
labelStyle: function() {
|
labelStyle: function() {
|
||||||
return (this.name||!this.topic)?"node_label_italic":"";
|
return this.name?"node_label_italic":"";
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@ -42,7 +42,7 @@ function Blink1Node(n) {
|
|||||||
else { blink1.fadeToRGB(node.fade, parseInt(rgb[0])&255, parseInt(rgb[1])&255, parseInt(rgb[2])&255); }
|
else { blink1.fadeToRGB(node.fade, parseInt(rgb[0])&255, parseInt(rgb[1])&255, parseInt(rgb[2])&255); }
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// you can do fancy colours by name here if you want...
|
// you can add fancy colours by name here if you want...
|
||||||
node.warn("Blink1 : invalid msg : "+msg.payload);
|
node.warn("Blink1 : invalid msg : "+msg.payload);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -56,5 +56,4 @@ function Blink1Node(n) {
|
|||||||
node.error("No Blink1 found");
|
node.error("No Blink1 found");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RED.nodes.registerType("blink1",Blink1Node);
|
RED.nodes.registerType("blink1",Blink1Node);
|
||||||
|
@ -14,55 +14,34 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
|
||||||
<!-- First, the content of the edit dialog is defined. -->
|
|
||||||
|
|
||||||
<script type="text/x-red" data-template-name="digiRGB">
|
<script type="text/x-red" data-template-name="digiRGB">
|
||||||
<!-- data-template-name identifies the node type this is for -->
|
|
||||||
|
|
||||||
<!-- Each of the following divs creates a field in the edit dialog. -->
|
|
||||||
<!-- Generally, there should be an input for each property of the node. -->
|
|
||||||
<!-- The for and id attributes identify the corresponding property -->
|
|
||||||
<!-- (with the 'node-input-' prefix). -->
|
|
||||||
<!-- The available icon classes are defined in Twitter Bootstrap -->
|
|
||||||
|
|
||||||
<!-- By convention, most nodes have a 'name' property. The following div -->
|
|
||||||
<!-- provides the necessary field. -->
|
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
||||||
<input type="text" id="node-input-name" placeholder="Name">
|
<input type="text" id="node-input-name" placeholder="DigiSpark">
|
||||||
</div>
|
</div>
|
||||||
<div class="form-tips">Expects a msg.payload with three part csv string of r,g,b.</div>
|
<div class="form-tips">Expects a msg.payload with three part csv string of r,g,b.</div>
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
<!-- Next, some simple help text is provided for the node. -->
|
|
||||||
<script type="text/x-red" data-help-name="digiRGB">
|
<script type="text/x-red" data-help-name="digiRGB">
|
||||||
<!-- data-help-name identifies the node type this help is for -->
|
|
||||||
<!-- This content appears in the Info sidebar when a node is selected -->
|
|
||||||
<!-- The first <p> is used as the pop-up tool tip when hovering over a -->
|
|
||||||
<!-- node in the palette. -->
|
|
||||||
<p>Simple output node to drive digispark RGB</p>
|
<p>Simple output node to drive digispark RGB</p>
|
||||||
<p>Requires msg.payload to be of the form 'r,g,b'</p>
|
<p>Requires <b>msg.payload</b> to be of the form 'r,g,b'</p>
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<!-- Finally, the node type is registered along with all of its properties -->
|
|
||||||
<!-- The example below shows a small subset of the properties that can be set-->
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
RED.nodes.registerType('digiRGB',{
|
RED.nodes.registerType('digiRGB',{
|
||||||
category: 'output', // the palette category
|
category: 'output',
|
||||||
color:"GoldenRod",
|
color:"GoldenRod",
|
||||||
defaults: { // defines the editable properties of the node
|
defaults: {
|
||||||
name: {value:"digiSparkRGB"} // along with default values.
|
name: {value:""}
|
||||||
},
|
},
|
||||||
inputs:1, // set the number of inputs - only 0 or 1
|
inputs:1,
|
||||||
outputs:0, // set the number of outputs - 0 to n
|
outputs:0,
|
||||||
icon: "light.png", // set the icon (held in public/icons)
|
icon: "light.png",
|
||||||
align: "right",
|
align: "right",
|
||||||
label: function() { // sets the default label contents
|
label: function() {
|
||||||
return this.name||this.topic||"sample";
|
return this.name||"digiSparkRGB";
|
||||||
},
|
},
|
||||||
labelStyle: function() { // sets the class to apply to the label
|
labelStyle: function() {
|
||||||
return this.name?"node_label_italic":"";
|
return this.name?"node_label_italic":"";
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -14,17 +14,12 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
**/
|
**/
|
||||||
|
|
||||||
// Sample Node-RED node file
|
|
||||||
|
|
||||||
// Require main module
|
|
||||||
var RED = require(process.env.NODE_RED_HOME+"/red/red");
|
var RED = require(process.env.NODE_RED_HOME+"/red/red");
|
||||||
var HID = require('node-hid');
|
var HID = require('node-hid');
|
||||||
var device;
|
var device;
|
||||||
var node;
|
var node;
|
||||||
|
|
||||||
// The main node definition - most things happen in here
|
|
||||||
function DigiRGBNode(n) {
|
function DigiRGBNode(n) {
|
||||||
// Create a RED node
|
|
||||||
RED.nodes.createNode(this,n);
|
RED.nodes.createNode(this,n);
|
||||||
node=this;
|
node=this;
|
||||||
|
|
||||||
@ -66,18 +61,9 @@ function DigiRGBNode(n) {
|
|||||||
} else {
|
} else {
|
||||||
node.warn("no digispark RGB found");
|
node.warn("no digispark RGB found");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Register the node by name. This must be called before overriding any of the
|
this.on('close', function() {
|
||||||
// Node functions.
|
if (device) { device.close(); }
|
||||||
|
});
|
||||||
|
}
|
||||||
RED.nodes.registerType("digiRGB",DigiRGBNode);
|
RED.nodes.registerType("digiRGB",DigiRGBNode);
|
||||||
|
|
||||||
|
|
||||||
DigiRGBNode.prototype.close = function() {
|
|
||||||
// Called when the node is shutdown - eg on redeploy.
|
|
||||||
// Allows ports to be closed, connections dropped etc.
|
|
||||||
// eg: this.client.disconnect();
|
|
||||||
if (device) {
|
|
||||||
device.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
90
hardware/wemo/60-wemo.html
Normal file
90
hardware/wemo/60-wemo.html
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
<!--
|
||||||
|
Copyright 2013 IBM Corp.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<script type="text/x-red" data-template-name="wemo out">
|
||||||
|
<div class="form-row">
|
||||||
|
<label for="node-input-ipaddr"><i class="icon-globe"></i> IP Address</label>
|
||||||
|
<input type="text" id="node-input-ipaddr" placeholder="192.168.1.100">
|
||||||
|
</div>
|
||||||
|
<div class="form-row">
|
||||||
|
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
||||||
|
<input type="text" id="node-input-name" placeholder="Name">
|
||||||
|
</div>
|
||||||
|
<div class="form-tips">Expects a msg.payload with either 1/0, on/off, or true/false</div>
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="text/x-red" data-help-name="wemo out">
|
||||||
|
<p>Wemo output node. Expects a <b>msg.payload</b> with either 1/0, on/off or true/false.</p>
|
||||||
|
<p>It doesn't yet do any ip address discovery of the wemo devices.</p>
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
RED.nodes.registerType('wemo out',{
|
||||||
|
category: 'advanced-output',
|
||||||
|
color:"GoldenRod",
|
||||||
|
defaults: {
|
||||||
|
ipaddr: {value:"",required:true},
|
||||||
|
name: {value:""}
|
||||||
|
},
|
||||||
|
inputs:1,
|
||||||
|
outputs:0,
|
||||||
|
icon: "light.png",
|
||||||
|
align: "right",
|
||||||
|
label: function() {
|
||||||
|
return this.name||"wemo";
|
||||||
|
},
|
||||||
|
labelStyle: function() {
|
||||||
|
return this.name?"node_label_italic":"";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="text/x-red" data-template-name="wemo in">
|
||||||
|
<div class="form-row">
|
||||||
|
<label for="node-input-ipaddr"><i class="icon-globe"></i> IP Address</label>
|
||||||
|
<input type="text" id="node-input-ipaddr" placeholder="192.168.1.100">
|
||||||
|
</div>
|
||||||
|
<div class="form-row">
|
||||||
|
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
||||||
|
<input type="text" id="node-input-name" placeholder="Name">
|
||||||
|
</div>
|
||||||
|
<div class="form-tips">Creates a msg.payload with either 1, 0, nc or na.</div>
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="text/x-red" data-help-name="wemo in">
|
||||||
|
<p>Wemo input node. Creates a <b>msg.payload</b> with either 1, 0, nc (no change), or na (not available).</p>
|
||||||
|
<p>It doesn't yet do any ip address discovery of the wemo devices.</p>
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
RED.nodes.registerType('wemo in',{
|
||||||
|
category: 'advanced-input',
|
||||||
|
color:"GoldenRod",
|
||||||
|
defaults: {
|
||||||
|
ipaddr: {value:"",required:true},
|
||||||
|
name: {value:""}
|
||||||
|
},
|
||||||
|
inputs:0,
|
||||||
|
outputs:1,
|
||||||
|
icon: "light.png",
|
||||||
|
label: function() {
|
||||||
|
return this.name||"wemo";
|
||||||
|
},
|
||||||
|
labelStyle: function() {
|
||||||
|
return this.name?"node_label_italic":"";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
60
hardware/wemo/60-wemo.js
Normal file
60
hardware/wemo/60-wemo.js
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2013 IBM Corp.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
**/
|
||||||
|
|
||||||
|
var RED = require(process.env.NODE_RED_HOME+"/red/red");
|
||||||
|
var WeMo = new require('wemo');
|
||||||
|
|
||||||
|
function WeMoOut(n) {
|
||||||
|
RED.nodes.createNode(this,n);
|
||||||
|
this.ipaddr = n.ipaddr;
|
||||||
|
this.wemoSwitch = new WeMo(n.ipaddr);
|
||||||
|
var node = this;
|
||||||
|
|
||||||
|
this.on("input", function(msg) {
|
||||||
|
if (msg != null) {
|
||||||
|
var state = 0;
|
||||||
|
if ( msg.payload == 1 || msg.payload == true || msg.payload == "on" ) { var state = 1; }
|
||||||
|
node.wemoSwitch.setBinaryState(state, function(err, result) {
|
||||||
|
if (err) node.warn(err);
|
||||||
|
//else { node.log(result); }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
RED.nodes.registerType("wemo out",WeMoOut);
|
||||||
|
|
||||||
|
function WeMoIn(n) {
|
||||||
|
RED.nodes.createNode(this,n);
|
||||||
|
this.ipaddr = n.ipaddr;
|
||||||
|
this.wemoSwitch = new WeMo(n.ipaddr);
|
||||||
|
this.wemoSwitch.state = 0;
|
||||||
|
var node = this;
|
||||||
|
|
||||||
|
var tick = setInterval(function() {
|
||||||
|
wemoSwitch.getBinaryState(function(err, result) {
|
||||||
|
if (err) node.warn(err);
|
||||||
|
if (parseInt(result) != wemoSwitch.state) {
|
||||||
|
wemoSwitch.state = parseInt(result);
|
||||||
|
node.send({payload:wemoSwitch.state,topic:"wemo/"+node.ipaddr});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, 2000);
|
||||||
|
|
||||||
|
this.on("close", function() {
|
||||||
|
clearInterval(tick);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
RED.nodes.registerType("wemo in",WeMoOut);
|
@ -51,7 +51,5 @@ function PingNode(n) {
|
|||||||
this.on("close", function() {
|
this.on("close", function() {
|
||||||
clearInterval(this.tout);
|
clearInterval(this.tout);
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RED.nodes.registerType("ping",PingNode);
|
RED.nodes.registerType("ping",PingNode);
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script type="text/x-red" data-help-name="mpd out">
|
<script type="text/x-red" data-help-name="mpd out">
|
||||||
<p>MPD music control output node</p>
|
<p>MPD music control output node.</p>
|
||||||
<p>Expects <b>msg.payload</b> to be a valid mpc command. Currently only simple commands that expect no reply are supported.</p>
|
<p>Expects <b>msg.payload</b> to be a valid mpc command. Currently only simple commands that expect no reply are supported.</p>
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -25,11 +25,12 @@ function LevelNode(n) {
|
|||||||
if (err) node.error(err);
|
if (err) node.error(err);
|
||||||
node.db = db;
|
node.db = db;
|
||||||
});
|
});
|
||||||
|
this.on('close', function() {
|
||||||
|
if (node.db) { node.db.close(); }
|
||||||
|
});
|
||||||
}
|
}
|
||||||
RED.nodes.registerType("leveldbase",LevelNode);
|
RED.nodes.registerType("leveldbase",LevelNode);
|
||||||
LevelNode.prototype.close = function() {
|
|
||||||
this.db.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
function LevelDBNodeIn(n) {
|
function LevelDBNodeIn(n) {
|
||||||
RED.nodes.createNode(this,n);
|
RED.nodes.createNode(this,n);
|
||||||
|
@ -54,7 +54,6 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<script type="text/x-red" data-template-name="mysql">
|
<script type="text/x-red" data-template-name="mysql">
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<label for="node-input-mydb"><i class="icon-briefcase"></i> Database</label>
|
<label for="node-input-mydb"><i class="icon-briefcase"></i> Database</label>
|
||||||
@ -95,53 +94,3 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<!--
|
|
||||||
<script type="text/x-red" data-template-name="mysql out">
|
|
||||||
<div class="form-row node-input-level">
|
|
||||||
<label for="node-input-level"><i class="icon-briefcase"></i> Database</label>
|
|
||||||
<input type="text" id="node-input-level">
|
|
||||||
</div>
|
|
||||||
<div class="form-row">
|
|
||||||
<label for="node-input-operation"><i class="icon-wrench"></i> Operation</label>
|
|
||||||
<select type="text" id="node-input-operation" style="display: inline-block; vertical-align: top;">
|
|
||||||
<option value="store">Store</option>
|
|
||||||
<option value="delete">Delete</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div class="form-row">
|
|
||||||
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
|
||||||
<input type="text" id="node-input-name" placeholder="Name">
|
|
||||||
</div>
|
|
||||||
</script>
|
|
||||||
|
|
||||||
|
|
||||||
<script type="text/x-red" data-help-name="mysql out">
|
|
||||||
<p>Allows access to a MySQL database.</p>
|
|
||||||
<p>Use this node to either <b>put</b> (store) the <b>msg.payload</b> to the named database file, using <b>msg.topic</b> as the key.</p>
|
|
||||||
<p>To <b>delete</b> information select delete in the properties dialogue and again use <b>msg.topic</b> as the key.</b>.</p>
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
|
||||||
RED.nodes.registerType('mysql out',{
|
|
||||||
category: 'storage-output',
|
|
||||||
color:"#e97b00",
|
|
||||||
defaults: {
|
|
||||||
level: {type:"MySQLdatabase",required:true},
|
|
||||||
operation: {value:"store"},
|
|
||||||
name: {value:""}
|
|
||||||
},
|
|
||||||
inputs:1,
|
|
||||||
outputs:0,
|
|
||||||
icon: "db.png",
|
|
||||||
align: "right",
|
|
||||||
label: function() {
|
|
||||||
var levelNode = RED.nodes.node(this.level);
|
|
||||||
return this.name||(levelNode?levelNode.label():"mysql");
|
|
||||||
},
|
|
||||||
labelStyle: function() {
|
|
||||||
return this.name?"node_label_italic":"";
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
-->
|
|
||||||
|
Loading…
Reference in New Issue
Block a user