Tidy up node-red-nodes

This commit is contained in:
dceejay 2015-04-10 11:56:17 +01:00
parent 4dc2db2f95
commit e56029b3e3
10 changed files with 24 additions and 489 deletions

View File

@ -6,7 +6,8 @@ before_install:
before_script:
- npm install -g istanbul
- npm install coveralls
- npm install git+https://github.com/node-red/node-red.git
- npm install node-red
#- npm install git+https://github.com/node-red/node-red.git
- export NODE_RED_HOME=`pwd`/node_modules/node-red
- (cd $NODE_RED_HOME ; npm install nock@~0.48.0 )
script:

View File

@ -4,14 +4,16 @@ A collection of nodes for [Node-RED](http://nodered.org). See below for a list.
## Installation
Most of these nodes are available as npm packages. See the list below for the npm package names, or [search npm](https://www.npmjs.org/search?q=node-red-node).
Most of these nodes are available as npm packages. See the list below for the npm p
ackage names, or [search npm](https://www.npmjs.org/search?q=node-red-node-).
To install
cd node-red
npm install node-red-node-{*filename*}
This repository acts as an overall store for these nodes - and is no longer intended as a way to install them - unless you really do want some bloat.
This repository acts as an overall store for these nodes - and is no longer
intended as a way to install them - unless you really do want some bloat.
To manually install using this repo:
@ -23,9 +25,12 @@ To manually install using this repo:
## Contributing
Now that we support npm installaton of nodes we recommend people post their own via [npm](https://www.npmjs.org/). Please read the [packaging guide notes](http://nodered.org/docs/creating-nodes/packaging.html).
Now that we support npm installaton of nodes we recommend people post their own
via [npm](https://www.npmjs.org/). Please read
the [packaging guide notes](http://nodered.org/docs/creating-nodes/packaging.html).
If you are an IBMer, please contact us directly as the contribution process is slightly different.
If you are an IBMer, please contact us directly as the contribution process
is slightly different.
## Copyright and license
@ -40,7 +45,7 @@ NPM name - File-link - Description
**node-red-node-wordpos** - *[72-wordpos](analysis/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).
**node-red-node-wordpos** - *[74-swearfilter](analysis/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.
**node-red-node-badwords** - *[74-swearfilter](analysis/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.
### Function
@ -66,9 +71,9 @@ NPM name - File-link - Description
**node-red-node-wemo** - *[60-wemo](hardware/wemo)* - Basic node to drive a [WeMo](http://www.belkin.com/us/Products/home-automation/c/wemo-home-automation/) socket and switch. Does not use discovery.
**N/A** - *[42-makey](hardware/makey)* - A Node-RED node to read from a [MakeyMakey](http://www.makeymakey.com/) input device.
**node-red-node-makeymakey** - *[42-makey](hardware/makey)* - A Node-RED node to read from a [MakeyMakey](http://www.makeymakey.com/) input device.
**N/A** - *[79-sensorTag](hardware/sensorTag)* - Reads data from the Ti Bluetooh Low Energy (BLE) SensorTag device.
**node-red-node-sensortag** - *[79-sensorTag](hardware/sensorTag)* - Reads data from the Ti Bluetooh Low Energy (BLE) SensorTag device.
**N/A** - *[100-heatmiser-in](hardware/heatmiser)* - Writes settings for temperature and frost protection to Heatmiser thermostats.
@ -90,9 +95,6 @@ NPM name - File-link - Description
**N/A** - *[88-emoncms](io/emoncms)* - Adds node to post to an [Emoncms](http://emoncms.org/) server.
**N/A** - *[26-rawserial](io/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.
### Social
**node-red-node-twilio** - *[56-twilio](social/twilio)* - Uses [Twilio](https://www.twilio.com/) service to send/receive text messages.
@ -111,8 +113,6 @@ Uses a simple read of the serial port as a file to input data. You **must** set
**node-red-node-xmpp** - *[92-xmpp](social/xmpp)* - Connects to an XMPP server to send and receive messages.
**N/A** - *[69-mpd](social/music)* - 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.
**N/A** - *[79-snapchat](social/snapchat)* - Downloads [SnapChat](https://www.snapchat.com/) images from the account specified.
**N/A** - *[114-pusher](social/pusher)* - Publish-Subscribe to a [Pusher](http://pusher.com/) channel/event.
@ -125,13 +125,17 @@ Uses a simple read of the serial port as a file to input data. You **must** set
**node-red-node-sqlite** - *[sqlite](storage/sqlite)* - Supports read and write to a local sqlite database.
**node-red-node-ddb** - *[69-ddbout](https://github.com/wnagele/node-red-node-ddb)* - Support output to Amazon DynamoDB. This version deprecated - now moved to it's own npm. **Note:** you cannot have both version installed - if you do install from npm then please manually delete the version from your node-red-nodes/storage/ddb directory.
**N/A** - *[110-postgres](storage/postgres)* - PostgreSql I/O node.
### Time
**node-red-node-suncalc** - *[79-suncalc](time)* - 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,
**node-red-node-suncalc** - *[79-suncalc](time/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,
### Utility
**node-red-node-exif** - *[94-exif](utility/exif)* - Extracts GPS and other EXIF information from a passed in jpeg image,
**node-red-node-daemon** - *[daemon](utility/daemon)* - starts up (calls) a long running system program and pipes STDIN, STDOUT and STDERR to and from that process. Good for monitoring long running command line applications,
### Misc

View File

@ -43,7 +43,7 @@ module.exports = function(RED) {
browser.start();
node.on("close", function () {
browser.stop();
if (browser) { browser.stop(); }
});
}

View File

@ -1,132 +0,0 @@
<!--
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="rawserial in">
<div class="form-row">
<label for="node-input-port"><i class="fa fa-random"></i> Port</label>
<input type="text" id="node-input-port" placeholder="COM1">
</div>
<div class="form-row">
<label for="node-input-out"><i class="fa fa-cut"></i> split input</label>
<select type="text" id="node-input-out" style="width:52%;">
<option value="char">when character received is</option>
<option value="time">after a fixed timeout of</option>
</select>
<input type="text" id="node-input-splitc" style="width:50px;">
<span id="node-units"></span>
</div>
<div class="form-row">
<label for="node-input-bin"><i class="fa fa-sign-in"></i> and deliver</label>
<select type="text" id="node-input-bin" style="width: 77%;">
<option value="false">ascii strings</option>
<option value="true">binary buffers</option>
</select>
</div>
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name">
</div>
<script>
var previous = null;
$("#node-input-out").on('focus', function () { previous = this.value; }).change(function() {
if (previous == null) { previous = $("#node-input-out").val(); }
if ($("#node-input-out").val() == "char") {
if (previous != "char") { $("#node-input-splitc").val("\\n"); }
$("#node-units").text("");
}
else {
if (previous != "time") { $("#node-input-splitc").val("0"); }
$("#node-units").text("ms");
}
});
</script>
</script>
<script type="text/x-red" data-help-name="rawserial in">
<p><b>DEPERECATED :</b> Rawseerial is now deprecated as the serialport npm now provide pre-compiled binaries for Windows.</p>
<p>Uses a simple read of the serial port as a file to input data.</p>
<p>You MUST set the baud rate etc <i>externally</i> before starting Node-RED. For example.</p>
<p>Windows<pre>mode COM1:9600,n,8,1</pre>
<p>Linux<pre>stty -F /dev/ttyUSB0 9600</pre>
<p>Note: 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.</p>
<p>Should only really be used if you can't get npm serialport installed properly.</p>
</script>
<script type="text/javascript">
RED.nodes.registerType('rawserial in',{
category: 'deprecated',
color:"BurlyWood",
defaults: {
name: {value:""},
splitc: {value:"\n"},
out: {value:"char"},
bin: {value:"false"},
port: {value:"", required:true}
},
inputs:0,
outputs:1,
icon: "serial.png",
label: function() {
return this.name||this.port||"Raw Serial";
},
labelStyle: function() {
return this.name?"node_label_italic":"";
}
});
</script>
<script type="text/x-red" data-template-name="rawserial out">
<div class="form-row">
<label for="node-input-port"><i class="fa fa-random"></i> Port</label>
<input type="text" id="node-input-port" placeholder="COM1">
</div>
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name">
</div>
</script>
<script type="text/x-red" data-help-name="rawserial out">
<p><b>DEPERECATED :</b> Rawseerial is now deprecated as the serialport npm now provide pre-compiled binaries for Windows.</p>
<p>Uses a simple file write to output <b>msg.payload</b> to the serial port.</p>
<p>You MUST set the baud rate etc <i>externally</i> before starting Node-RED. For example.</p>
<p>Windows<pre>mode COM1:9600,n,8,1</pre>
<p>Linux<pre>stty -F /dev/ttyUSB0 9600</pre>
<p>Note: 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.</p>
<p>Should only really be used if you can't get npm serialport installed properly.</p>
</script>
<script type="text/javascript">
RED.nodes.registerType('rawserial out',{
category: 'deprecated',
color:"BurlyWood",
defaults: {
name: {value:""},
split: {value:""},
port: {value:"", required:true}
},
inputs:1,
outputs:0,
icon: "serial.png",
align: "right",
label: function() {
return this.name||this.port||"Raw Serial";
},
labelStyle: function() {
return this.name?"node_label_italic":"";
}
});
</script>

View File

@ -1,149 +0,0 @@
/**
* 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.
**/
module.exports = function(RED) {
"use strict";
var settings = RED.settings;
var util = require("util");
var fs = require('fs');
var plat = require('os').platform();
var pre = "\\\\.\\";
if (!plat.match(/^win/)) {
pre = "";
throw "Info : only needed for Windows boxes without serialport npm module installed.";
//util.log("[26-rawserial.js] Info : only really needed for Windows boxes without serialport npm module installed.");
}
function RawSerialInNode(n) {
RED.nodes.createNode(this,n);
this.port = n.port;
this.splitc = n.splitc||null;
this.out = n.out||"char";
this.bin = n.bin||false;
if (this.splitc == '\\n') { this.splitc = "\n"; }
if (this.splitc == '\\r') { this.splitc = "\r"; }
if (!isNaN(parseInt(this.splitc))) { this.splitc = parseInt(this.splitc); }
var node = this;
var setupSerial = function() {
node.inp = fs.createReadStream(pre+node.port);
node.log("open "+pre+node.port);
node.tout = null;
var line = "";
var buf = new Buffer(32768);
var i = 0;
node.inp.on('data', function (data) {
for (var z = 0; z < data.length; z++) {
if ((node.out === "time") && (node.splitc !== 0)) {
if (node.tout) {
i += 1;
buf[i] = data[z];
}
else {
node.tout = setTimeout(function () {
node.tout = null;
var m = new Buffer(i+1);
buf.copy(m,0,0,i+1);
if (node.bin !== "true") { m = m.toString(); }
node.send({"payload": m});
m = null;
}, node.splitc);
i = 0;
buf[0] = data[z];
}
}
else if ((node.out == "char") && (node.splitc != null)) {
buf[i] = data[z];
i += 1;
if ((data[z] === node.splitc.charCodeAt(0)) || (i === 32768)) {
var m = new Buffer(i);
buf.copy(m,0,0,i);
if (node.bin !== "true") { m = m.toString(); }
node.send({"payload":m});
m = null;
i = 0;
}
}
else {
if (node.bin !== "true") { node.send({"payload": String.fromCharCode(data[z])}); }
else { node.send({"payload": new Buffer([data[z]])});}
}
}
});
//node.inp.on('end', function (error) {console.log("End", error);});
node.inp.on('close', function (error) {
node.log(node.port+" closed");
node.tout = setTimeout(function() {
setupSerial();
},settings.serialReconnectTime);
});
node.inp.on('error', function(error) {
if (error.code == "ENOENT") { node.log(node.port+" not found"); }
else { node.log(node.port+" error "+error); }
node.tout = setTimeout(function() {
setupSerial();
},settings.serialReconnectTime);
});
}
setupSerial();
node.on('close', function() {
if (node.tout) { clearTimeout(node.tout); }
if (node.inp) { node.inp.pause(); }
});
}
RED.nodes.registerType("rawserial in",RawSerialInNode);
function RawSerialOutNode(n) {
RED.nodes.createNode(this,n);
this.port = n.port;
var node = this;
var setupSerial = function() {
node.oup = fs.createWriteStream(pre+node.port,{ flags:'w', encoding:'utf8', mode:'0666' });
node.on("input", function(msg) {
if (msg.payload != null) {
node.oup.write(msg.payload);
}
});
node.oup.on('open', function (error) { node.log("opened "+node.port); });
node.oup.on('end', function (error) { node.log("end :"+error); });
node.oup.on('close', function (error) {
node.log(node.port+" closed");
node.tout = setTimeout(function() {
setupSerial();
},settings.serialReconnectTime);
});
node.oup.on('error', function(error) {
if (error.code == "EACCES") { node.log("can't access port "+node.port); }
else if (error.code == "EIO") { node.log("can't write to port "+node.port); }
else { node.log(node.port+" error "+error); }
node.tout = setTimeout(function() {
setupSerial();
},settings.serialReconnectTime);
});
}
setupSerial();
node.on('close', function() {
if (node.tout) { clearTimeout(node.tout); }
});
}
RED.nodes.registerType("rawserial out",RawSerialOutNode);
}

View File

@ -1,80 +0,0 @@
<!--
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="mpd out">
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name">
</div>
<div class="form-tips">Expects a msg.payload with a valid mpc command.</div>
</script>
<script type="text/x-red" data-help-name="mpd out">
<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. play, pause, next, previous, stop, etc.</p>
</script>
<script type="text/javascript">
RED.nodes.registerType('mpd out',{
category: 'advanced-output',
color:"#ffcc66",
defaults: {
name: {value:""}
},
inputs:1,
outputs:0,
icon: "music.png",
align: "right",
label: function() {
return this.name||"mpd";
},
labelStyle: function() {
return this.name?"node_label_italic":"";
}
});
</script>
<script type="text/x-red" data-template-name="mpd in">
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name">
</div>
<div class="form-tips">Creates a msg.payload object with Artist, Album, Title, Genre and Date.</div>
</script>
<script type="text/x-red" data-help-name="mpd in">
<p>MPD music control input node.</p>
<p>Creates a <b>msg.payload</b> object containing Artist, Album, Track, Genre and Date.</p>
</script>
<script type="text/javascript">
RED.nodes.registerType('mpd in',{
category: 'advanced-input',
color:"#ffcc66",
defaults: {
name: {value:""}
},
inputs:0,
outputs:1,
icon: "music.png",
label: function() {
return this.name||"mpd";
},
labelStyle: function() {
return this.name?"node_label_italic":"";
}
});
</script>

View File

@ -1,102 +0,0 @@
/**
* 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.
**/
module.exports = function(RED) {
"use strict";
var util = require("util");
var exec = require('child_process').exec;
var komponist = require('komponist');
var mpc = null;
exec("which mpd",function(err,stdout,stderr) {
if (stdout.indexOf('mpd') == -1) {
throw 'Error: Cannot find "mpd" command. Please install MPD.';
}
});
exec("netstat -an | grep LISTEN | grep 6600",function(err,stdout,stderr) {
if (stdout.indexOf('6600') == -1) {
throw '[69-mpd.js] Error: MPD daemon not listening on port 6600. Please start MPD.';
}
komponist.createConnection(6600, 'localhost', function(err, client) {
if (err) { node.error("MPD: Failed to connect to MPD server"); }
mpc = client;
});
});
function MPDOut(n) {
RED.nodes.createNode(this,n);
var node = this;
node.mpc = mpc;
if (mpc != null) {
this.on("input", function(msg) {
try {
//node.mpc.command(msg.payload);
node.mpc.command(msg.payload, msg.param, function(err, results) {
if (err) { node.log("error: "+err); }
//else { console.log(results); }
});
} catch (err) { node.log("error: "+err); }
});
node.mpc.on('error', function(err) {
node.log("error: "+err);
});
}
else { node.warn("MPD not running"); }
}
RED.nodes.registerType("mpd out",MPDOut);
function MPDIn(n) {
RED.nodes.createNode(this,n);
var node = this;
node.mpc = mpc;
var oldMsg = "";
if (mpc != null) {
getSong();
var getSong = function() {
node.mpc.currentsong(function(err, info) {
if (err) { node.log(err); }
else {
var msg = {payload:{},topic:"music"};
msg.payload.Artist = info.Artist;
msg.payload.Album = info.Album;
msg.payload.Title = info.Title;
msg.payload.Genre = info.Genre;
msg.payload.Date = info.Date;
if (JSON.stringify(msg) != oldMsg) {
node.send(msg);
oldMsg = JSON.stringify(msg);
}
}
});
}
node.mpc.on('changed', function(system) {
getSong();
});
this.on("close", function() {
// node.mpc.command("stop");
});
}
else { node.warn("MPD not running"); }
}
RED.nodes.registerType("mpd in",MPDIn);
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -1,3 +0,0 @@
node-red-node-ddb
=================
Moved to: https://github.com/wnagele/node-red-node-ddb

View File

@ -1,4 +0,0 @@
node-red-node-postgres
======================
Moved to: https://www.npmjs.com/package/node-red-contrib-postgres