Update main.js

This commit is contained in:
2018-11-08 00:28:28 +08:00
parent 5c313169c2
commit a0d959003f
+14 -80
View File
@@ -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();
});
}