Update main.js
This commit is contained in:
@@ -4,24 +4,17 @@
|
||||
'use strict';
|
||||
|
||||
const utils = require(__dirname + '/lib/utils');
|
||||
let modbus = null;
|
||||
let yuanqu = null;
|
||||
let fs;
|
||||
|
||||
let serialport = null;
|
||||
|
||||
let adapter = utils.Adapter({
|
||||
name: 'modbus',
|
||||
name: 'yuanqu',
|
||||
unload: stop
|
||||
});
|
||||
|
||||
process.on('SIGINT', stop);
|
||||
|
||||
adapter.on('ready', function () {
|
||||
try {
|
||||
serialport = require('serialport');
|
||||
} catch (err) {
|
||||
adapter.log.warn('Serial is not available');
|
||||
}
|
||||
|
||||
adapter.setState('info.connection', adapter.config.params.slave ? 0 : false, true);
|
||||
main();
|
||||
@@ -31,28 +24,18 @@ adapter.on('message', function (obj) {
|
||||
if (obj) {
|
||||
switch (obj.command) {
|
||||
case 'listUart':
|
||||
if (obj.callback) {
|
||||
if (serialport) {
|
||||
// read all found serial ports
|
||||
serialport.list(function (err, ports) {
|
||||
listSerial(ports);
|
||||
adapter.log.info('List of port: ' + JSON.stringify(ports));
|
||||
adapter.sendTo(obj.from, obj.command, ports, obj.callback);
|
||||
});
|
||||
} else {
|
||||
adapter.log.warn('Module serialport is not available');
|
||||
adapter.sendTo(obj.from, obj.command, [{comName: 'Not available'}], obj.callback);
|
||||
}
|
||||
}
|
||||
adapter.log.warn('Module serialport is not available');
|
||||
adapter.sendTo(obj.from, obj.command, [{comName: 'Not available'}], obj.callback);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
function stop(callback) {
|
||||
if (modbus) {
|
||||
modbus.close();
|
||||
modbus = null;
|
||||
if (yuanqu) {
|
||||
yuanqu.close();
|
||||
yuanqu = null;
|
||||
}
|
||||
|
||||
if (adapter && adapter.setState && adapter.config && adapter.config.params) {
|
||||
@@ -72,16 +55,16 @@ let infoRegExp = new RegExp(adapter.namespace.replace('.', '\\.') + '\\.info\\.'
|
||||
|
||||
adapter.on('stateChange', (id, state) => {
|
||||
if (state && !state.ack && id && !infoRegExp.test(id)) {
|
||||
if (!modbus) {
|
||||
if (!yuanqu) {
|
||||
adapter.log.warn('No connection')
|
||||
} else {
|
||||
if (objects[id]) {
|
||||
modbus.write(id, state);
|
||||
yuanqu.write(id, state);
|
||||
} else {
|
||||
adapter.getObject(id, (err, data) => {
|
||||
if (!err) {
|
||||
objects[id] = data;
|
||||
modbus.write(id, state);
|
||||
yuanqu.write(id, state);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -89,51 +72,7 @@ adapter.on('stateChange', (id, state) => {
|
||||
}
|
||||
});
|
||||
|
||||
function filterSerialPorts(path) {
|
||||
fs = fs || require('fs');
|
||||
// get only serial port names
|
||||
if (!(/(tty(S|ACM|USB|AMA|MFD)|rfcomm)/).test(path)) return false;
|
||||
|
||||
return fs
|
||||
.statSync(path)
|
||||
.isCharacterDevice();
|
||||
}
|
||||
|
||||
function listSerial(ports) {
|
||||
ports = ports || [];
|
||||
const path = require('path');
|
||||
fs = fs || require('fs');
|
||||
|
||||
// Filter out the devices that aren't serial ports
|
||||
let devDirName = '/dev';
|
||||
|
||||
let result;
|
||||
try {
|
||||
result = fs
|
||||
.readdirSync(devDirName)
|
||||
.map(function (file) {
|
||||
return path.join(devDirName, file);
|
||||
})
|
||||
.filter(filterSerialPorts)
|
||||
.map(function (port) {
|
||||
let found = false;
|
||||
for (let v = 0; v < ports.length; v++) {
|
||||
if (ports[v].comName === port) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) ports.push({comName: port});
|
||||
return {comName: port};
|
||||
});
|
||||
} catch (e) {
|
||||
if (require('os').platform() !== 'win32') {
|
||||
adapter.log.error('Cannot read "' + devDirName + '": ' + e);
|
||||
}
|
||||
result = [];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function addToEnum(enumName, id, callback) {
|
||||
adapter.getForeignObject(enumName, function (err, obj) {
|
||||
@@ -1193,14 +1132,9 @@ function parseConfig(callback) {
|
||||
|
||||
function main() {
|
||||
parseConfig(options => {
|
||||
let Modbus;
|
||||
if (options.config.slave) {
|
||||
Modbus = require(__dirname + '/lib/slave');
|
||||
} else {
|
||||
Modbus = require(__dirname + '/lib/master');
|
||||
}
|
||||
modbus = new Modbus(options, adapter);
|
||||
modbus.start();
|
||||
let yuanqu;
|
||||
yuanqu = new yuanqu(options, adapter);
|
||||
yuanqu.start();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user