mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
Add configuration of serial protocol settings
- Add support for configuration of protocol parameters (data bits, party, stop bits) - Set serial device/port using select list (discovered ports) - Provide default settings for existing flows that do not yet have serial protocol settings
This commit is contained in:
parent
4ae5f34d2e
commit
9d1bb39018
@ -95,7 +95,8 @@
|
|||||||
<script type="text/x-red" data-template-name="serial-port">
|
<script type="text/x-red" data-template-name="serial-port">
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<label for="node-config-input-serialport"><i class="icon-bullhorn"></i> Serial Port</label>
|
<label for="node-config-input-serialport"><i class="icon-bullhorn"></i> Serial Port</label>
|
||||||
<input type="text" id="node-config-input-serialport" placeholder="/dev/ttyUSB0" style="width:50%;">
|
<select type="text" id="node-config-input-serialport" style="width:75%;">
|
||||||
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<label for="node-config-input-serialbaud"><i class="icon-wrench"></i> Baud Rate</label>
|
<label for="node-config-input-serialbaud"><i class="icon-wrench"></i> Baud Rate</label>
|
||||||
@ -119,6 +120,32 @@
|
|||||||
<option value="50">50</option>
|
<option value="50">50</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-row">
|
||||||
|
<label for="node-config-input-databits"><i class="icon-wrench"></i> Data Bits</label>
|
||||||
|
<select type="text" id="node-config-input-databits" style="width: 100px;">
|
||||||
|
<option value="8">8</option>
|
||||||
|
<option value="7">7</option>
|
||||||
|
<option value="6">6</option>
|
||||||
|
<option value="5">5</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="form-row">
|
||||||
|
<label for="node-config-input-parity"><i class="icon-wrench"></i> Parity</label>
|
||||||
|
<select type="text" id="node-config-input-parity" style="width: 100px;">
|
||||||
|
<option value="none">None</option>
|
||||||
|
<option value="even">Even</option>
|
||||||
|
<option value="mark">Mark</option>
|
||||||
|
<option value="odd">Odd</option>
|
||||||
|
<option value="space">Space</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="form-row">
|
||||||
|
<label for="node-config-input-stopbits"><i class="icon-wrench"></i> Stop Bits</label>
|
||||||
|
<select type="text" id="node-config-input-stopbits" style="width: 100px;">
|
||||||
|
<option value="2">2</option>
|
||||||
|
<option value="1">1</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<label for="node-config-input-newline"><i class="icon-text-width"></i> New line</label>
|
<label for="node-config-input-newline"><i class="icon-text-width"></i> New line</label>
|
||||||
<input type="text" id="node-config-input-newline" style="width: 50px;">
|
<input type="text" id="node-config-input-newline" style="width: 50px;">
|
||||||
@ -126,7 +153,7 @@
|
|||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<label for="node-config-input-addchar"> </label>
|
<label for="node-config-input-addchar"> </label>
|
||||||
<select type="text" id="node-config-input-addchar" style="width: 70%;">
|
<select type="text" id="node-config-input-addchar" style="width: 70%;">
|
||||||
<option value="false">Don't add 'New Line' to serial output</option>
|
<option value="false">Dont add 'New Line' to serial output</option>
|
||||||
<option value="true">Add 'New line' to serial output message</option>
|
<option value="true">Add 'New line' to serial output message</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
@ -140,12 +167,36 @@
|
|||||||
//name: {value:""},
|
//name: {value:""},
|
||||||
serialport: {value:"",required:true},
|
serialport: {value:"",required:true},
|
||||||
serialbaud: {value:57600,required:true},
|
serialbaud: {value:57600,required:true},
|
||||||
|
databits: {value:8,required:true},
|
||||||
|
parity: {value:"none",required:true},
|
||||||
|
stopbits: {value:1,required:true},
|
||||||
newline: {value:"\\n"},
|
newline: {value:"\\n"},
|
||||||
addchar: {value:false}
|
addchar: {value:false}
|
||||||
},
|
},
|
||||||
label: function() {
|
label: function() {
|
||||||
//return this.name||this.serialport;
|
if (typeof this.serialbaud === 'undefined') {
|
||||||
return this.serialport+":"+this.serialbaud;
|
this.serialbaud = 57600;
|
||||||
|
}
|
||||||
|
if (typeof this.databits === 'undefined') {
|
||||||
|
this.databits = 8;
|
||||||
|
}
|
||||||
|
if (typeof this.parity === 'undefined') {
|
||||||
|
this.parity = 'none';
|
||||||
|
}
|
||||||
|
if (typeof this.stopbits == 'undefined') {
|
||||||
|
this.stopbits = 1;
|
||||||
|
}
|
||||||
|
return this.serialport+":"+this.serialbaud+"-"+this.databits+this.parity.charAt(0).toUpperCase()+this.stopbits;
|
||||||
|
},
|
||||||
|
oneditprepare: function() {
|
||||||
|
var p = this.serialport;
|
||||||
|
var s = $("#node-config-input-serialport");
|
||||||
|
$.getJSON('serialports',function(data) {
|
||||||
|
$.each(data, function(i, port){
|
||||||
|
s.append($('<option>').text(port.comName).attr('value', port.comName));
|
||||||
|
});
|
||||||
|
s.val(p);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@ -25,9 +25,29 @@ var serialp = require("serialport");
|
|||||||
function SerialPortNode(n) {
|
function SerialPortNode(n) {
|
||||||
RED.nodes.createNode(this,n);
|
RED.nodes.createNode(this,n);
|
||||||
this.serialport = n.serialport;
|
this.serialport = n.serialport;
|
||||||
this.serialbaud = n.serialbaud * 1;
|
|
||||||
this.newline = n.newline;
|
this.newline = n.newline;
|
||||||
this.addchar = n.addchar || "false";
|
this.addchar = n.addchar || "false";
|
||||||
|
|
||||||
|
if (typeof n.serialbaud === 'undefined') {
|
||||||
|
this.serialbaud = 57600;
|
||||||
|
} else {
|
||||||
|
this.serialbaud = parseInt(n.serialbaud);
|
||||||
|
}
|
||||||
|
if (typeof n.databits === 'undefined') {
|
||||||
|
this.databits = 8;
|
||||||
|
} else {
|
||||||
|
this.databits = parseInt(n.databits);
|
||||||
|
}
|
||||||
|
if (typeof n.parity === 'undefined') {
|
||||||
|
this.parity = 'none';
|
||||||
|
} else {
|
||||||
|
this.parity = n.parity;
|
||||||
|
}
|
||||||
|
if (typeof n.stopbits == 'undefined') {
|
||||||
|
this.stopbits = 1;
|
||||||
|
} else {
|
||||||
|
this.stopbits = parseInt(n.stopbits);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
RED.nodes.registerType("serial-port",SerialPortNode);
|
RED.nodes.registerType("serial-port",SerialPortNode);
|
||||||
|
|
||||||
@ -39,7 +59,12 @@ function SerialOutNode(n) {
|
|||||||
|
|
||||||
if (this.serialConfig) {
|
if (this.serialConfig) {
|
||||||
var node = this;
|
var node = this;
|
||||||
node.port = serialPool.get(this.serialConfig.serialport,this.serialConfig.serialbaud,this.serialConfig.newline);
|
node.port = serialPool.get(this.serialConfig.serialport,
|
||||||
|
this.serialConfig.serialbaud,
|
||||||
|
this.serialConfig.databits,
|
||||||
|
this.serialConfig.parity,
|
||||||
|
this.serialConfig.stopbits,
|
||||||
|
this.serialConfig.newline);
|
||||||
node.addCh = "";
|
node.addCh = "";
|
||||||
if (node.serialConfig.addchar == "true") {
|
if (node.serialConfig.addchar == "true") {
|
||||||
node.addCh = this.serialConfig.newline.replace("\\n","\n").replace("\\r","\r");
|
node.addCh = this.serialConfig.newline.replace("\\n","\n").replace("\\r","\r");
|
||||||
@ -82,7 +107,12 @@ function SerialInNode(n) {
|
|||||||
|
|
||||||
if (this.serialConfig) {
|
if (this.serialConfig) {
|
||||||
var node = this;
|
var node = this;
|
||||||
this.port = serialPool.get(this.serialConfig.serialport,this.serialConfig.serialbaud,this.serialConfig.newline);
|
node.port = serialPool.get(this.serialConfig.serialport,
|
||||||
|
this.serialConfig.serialbaud,
|
||||||
|
this.serialConfig.databits,
|
||||||
|
this.serialConfig.parity,
|
||||||
|
this.serialConfig.stopbits,
|
||||||
|
this.serialConfig.newline);
|
||||||
this.port.on('data', function(msg) {
|
this.port.on('data', function(msg) {
|
||||||
node.send({ "payload": msg });
|
node.send({ "payload": msg });
|
||||||
});
|
});
|
||||||
@ -105,7 +135,7 @@ RED.nodes.registerType("serial in",SerialInNode);
|
|||||||
var serialPool = function() {
|
var serialPool = function() {
|
||||||
var connections = {};
|
var connections = {};
|
||||||
return {
|
return {
|
||||||
get:function(port,baud,newline,callback) {
|
get:function(port,baud,databits,parity,stopbits,newline,callback) {
|
||||||
var id = port;
|
var id = port;
|
||||||
if (!connections[id]) {
|
if (!connections[id]) {
|
||||||
connections[id] = function() {
|
connections[id] = function() {
|
||||||
@ -123,12 +153,18 @@ var serialPool = function() {
|
|||||||
if (newline == "") {
|
if (newline == "") {
|
||||||
obj.serial = new serialp.SerialPort(port,{
|
obj.serial = new serialp.SerialPort(port,{
|
||||||
baudrate: baud,
|
baudrate: baud,
|
||||||
|
databits: databits,
|
||||||
|
parity: parity,
|
||||||
|
stopbits: stopbits,
|
||||||
parser: serialp.parsers.raw
|
parser: serialp.parsers.raw
|
||||||
},true, function(err, results) { if (err) obj.serial.emit('error',err); });
|
},true, function(err, results) { if (err) obj.serial.emit('error',err); });
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
obj.serial = new serialp.SerialPort(port,{
|
obj.serial = new serialp.SerialPort(port,{
|
||||||
baudrate: baud,
|
baudrate: baud,
|
||||||
|
databits: databits,
|
||||||
|
parity: parity,
|
||||||
|
stopbits: stopbits,
|
||||||
parser: serialp.parsers.readline(newline)
|
parser: serialp.parsers.readline(newline)
|
||||||
},true, function(err, results) { if (err) obj.serial.emit('error',err); });
|
},true, function(err, results) { if (err) obj.serial.emit('error',err); });
|
||||||
}
|
}
|
||||||
@ -147,7 +183,7 @@ var serialPool = function() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
obj.serial.on('open',function() {
|
obj.serial.on('open',function() {
|
||||||
util.log("[serial] serial port "+port+" opened at "+baud+" baud");
|
util.log("[serial] serial port "+port+" opened at "+baud+" baud "+databits+""+parity.charAt(0).toUpperCase()+stopbits);
|
||||||
if (obj.tout) { clearTimeout(obj.tout); }
|
if (obj.tout) { clearTimeout(obj.tout); }
|
||||||
//obj.serial.flush();
|
//obj.serial.flush();
|
||||||
obj._emitter.emit('ready');
|
obj._emitter.emit('ready');
|
||||||
|
Loading…
Reference in New Issue
Block a user