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

@@ -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);
}