更新 main.js
This commit is contained in:
parent
795e0bb309
commit
796d71524e
172
main.js
172
main.js
@ -89,51 +89,6 @@ 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) {
|
function addToEnum(enumName, id, callback) {
|
||||||
adapter.getForeignObject(enumName, function (err, obj) {
|
adapter.getForeignObject(enumName, function (err, obj) {
|
||||||
@ -209,35 +164,7 @@ function syncEnums(enumGroup, id, newEnumName, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const type_items_len = {
|
const type_items_len = {
|
||||||
'uint8be': 1,
|
'uint8be': 1
|
||||||
'uint8le': 1,
|
|
||||||
'int8be': 1,
|
|
||||||
'int8le': 1,
|
|
||||||
'uint16be': 1,
|
|
||||||
'uint16le': 1,
|
|
||||||
'int16be': 1,
|
|
||||||
'int16le': 1,
|
|
||||||
'int16be1': 1,
|
|
||||||
'int16le1': 1,
|
|
||||||
'uint32be': 2,
|
|
||||||
'uint32le': 2,
|
|
||||||
'uint32sw': 2,
|
|
||||||
'uint32sb': 2,
|
|
||||||
'int32be': 2,
|
|
||||||
'int32le': 2,
|
|
||||||
'int32sw': 2,
|
|
||||||
'int32sb': 2,
|
|
||||||
'uint64be': 4,
|
|
||||||
'uint64le': 4,
|
|
||||||
'int64be': 4,
|
|
||||||
'int64le': 4,
|
|
||||||
'floatbe': 2,
|
|
||||||
'floatle': 2,
|
|
||||||
'floatsw': 2,
|
|
||||||
'floatsb': 2,
|
|
||||||
'doublebe': 4,
|
|
||||||
'doublele': 4,
|
|
||||||
'string': 0
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const _rmap = {
|
const _rmap = {
|
||||||
@ -343,9 +270,6 @@ function prepareConfig(config) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let deviceIds = [];
|
let deviceIds = [];
|
||||||
checkDeviceIds(options, config.disInputs, deviceIds);
|
|
||||||
checkDeviceIds(options, config.coils, deviceIds);
|
|
||||||
checkDeviceIds(options, config.inputRegs, deviceIds);
|
|
||||||
checkDeviceIds(options, config.holdingRegs, deviceIds);
|
checkDeviceIds(options, config.holdingRegs, deviceIds);
|
||||||
deviceIds.sort();
|
deviceIds.sort();
|
||||||
|
|
||||||
@ -379,36 +303,6 @@ function prepareConfig(config) {
|
|||||||
options.devices[deviceId] = {};
|
options.devices[deviceId] = {};
|
||||||
let device = options.devices[deviceId];
|
let device = options.devices[deviceId];
|
||||||
if (options.config.slave) {
|
if (options.config.slave) {
|
||||||
device.disInputs = {
|
|
||||||
fullIds: [],
|
|
||||||
changed: true,
|
|
||||||
addressHigh: 0,
|
|
||||||
addressLow: 0,
|
|
||||||
values: [],
|
|
||||||
mapping: {},
|
|
||||||
offset: parseInt(params.disInputsOffset, 10)
|
|
||||||
};
|
|
||||||
|
|
||||||
device.coils = {
|
|
||||||
fullIds: [],
|
|
||||||
changed: true,
|
|
||||||
addressHigh: 0,
|
|
||||||
addressLow: 0,
|
|
||||||
values: [],
|
|
||||||
mapping: {},
|
|
||||||
offset: parseInt(params.coilsOffset, 10)
|
|
||||||
};
|
|
||||||
|
|
||||||
device.inputRegs = {
|
|
||||||
fullIds: [],
|
|
||||||
changed: true,
|
|
||||||
addressHigh: 0,
|
|
||||||
addressLow: 0,
|
|
||||||
values: [],
|
|
||||||
mapping: {},
|
|
||||||
offset: parseInt(params.inputRegsOffset, 10)
|
|
||||||
};
|
|
||||||
|
|
||||||
device.holdingRegs = {
|
device.holdingRegs = {
|
||||||
fullIds: [],
|
fullIds: [],
|
||||||
changed: true,
|
changed: true,
|
||||||
@ -419,34 +313,6 @@ function prepareConfig(config) {
|
|||||||
offset: parseInt(params.holdingRegsOffset, 10)
|
offset: parseInt(params.holdingRegsOffset, 10)
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
device.disInputs = {
|
|
||||||
deviceId: deviceId,
|
|
||||||
addressLow: 0,
|
|
||||||
length: 0,
|
|
||||||
config: [],
|
|
||||||
blocks: [],
|
|
||||||
offset: parseInt(params.disInputsOffset, 10)
|
|
||||||
};
|
|
||||||
|
|
||||||
device.coils = {
|
|
||||||
deviceId: deviceId,
|
|
||||||
addressLow: 0,
|
|
||||||
length: 0,
|
|
||||||
config: [],
|
|
||||||
blocks: [],
|
|
||||||
cyclicWrite: [], // only holdingRegs and coils
|
|
||||||
offset: parseInt(params.coilsOffset, 10)
|
|
||||||
};
|
|
||||||
|
|
||||||
device.inputRegs = {
|
|
||||||
deviceId: deviceId,
|
|
||||||
addressLow: 0,
|
|
||||||
length: 0,
|
|
||||||
config: [],
|
|
||||||
blocks: [],
|
|
||||||
offset: parseInt(params.inputRegsOffset, 10)
|
|
||||||
};
|
|
||||||
|
|
||||||
device.holdingRegs = {
|
device.holdingRegs = {
|
||||||
deviceId: deviceId,
|
deviceId: deviceId,
|
||||||
addressLow: 0,
|
addressLow: 0,
|
||||||
@ -498,10 +364,6 @@ function checkObjects(options, regType, regName, regFullName, tasks, newObjects)
|
|||||||
deviceId: regs[i].deviceId
|
deviceId: regs[i].deviceId
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
if (regType === 'coils') {
|
|
||||||
objects[id].native.poll = regs[i].poll;
|
|
||||||
objects[id].native.wp = regs[i].wp;
|
|
||||||
} else
|
|
||||||
if (regType === 'inputRegs' || regType === 'holdingRegs') {
|
if (regType === 'inputRegs' || regType === 'holdingRegs') {
|
||||||
objects[id].common.unit = regs[i].unit || '';
|
objects[id].common.unit = regs[i].unit || '';
|
||||||
|
|
||||||
@ -542,15 +404,6 @@ function checkObjects(options, regType, regName, regFullName, tasks, newObjects)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// localOptions = {
|
|
||||||
// multiDeviceId
|
|
||||||
// showAliases
|
|
||||||
// doNotRoundAddressToWord
|
|
||||||
// directAddresses
|
|
||||||
// isSlave
|
|
||||||
// maxBlock
|
|
||||||
// maxBoolBlock
|
|
||||||
// };
|
|
||||||
function iterateAddresses(isBools, deviceId, result, regName, regType, localOptions) {
|
function iterateAddresses(isBools, deviceId, result, regName, regType, localOptions) {
|
||||||
const config = result.config;
|
const config = result.config;
|
||||||
if (config && config.length) {
|
if (config && config.length) {
|
||||||
@ -682,11 +535,6 @@ function parseConfig(callback) {
|
|||||||
let oldObjects = list;
|
let oldObjects = list;
|
||||||
let newObjects = [];
|
let newObjects = [];
|
||||||
|
|
||||||
adapter.config.disInputs.sort(sortByAddress);
|
|
||||||
adapter.config.coils.sort(sortByAddress);
|
|
||||||
adapter.config.inputRegs.sort(sortByAddress);
|
|
||||||
adapter.config.holdingRegs.sort(sortByAddress);
|
|
||||||
|
|
||||||
let tasks = [];
|
let tasks = [];
|
||||||
|
|
||||||
for (let _deviceId in options.devices) {
|
for (let _deviceId in options.devices) {
|
||||||
@ -694,9 +542,6 @@ function parseConfig(callback) {
|
|||||||
let device = options.devices[_deviceId];
|
let device = options.devices[_deviceId];
|
||||||
let deviceId = parseInt(_deviceId, 10);
|
let deviceId = parseInt(_deviceId, 10);
|
||||||
|
|
||||||
device.disInputs.config = adapter.config.disInputs. filter(e => e.deviceId === deviceId);
|
|
||||||
device.coils.config = adapter.config.coils. filter(e => e.poll && e.deviceId === deviceId);
|
|
||||||
device.inputRegs.config = adapter.config.inputRegs. filter(e => e.deviceId === deviceId);
|
|
||||||
device.holdingRegs.config = adapter.config.holdingRegs.filter(e => e.poll && e.deviceId === deviceId);
|
device.holdingRegs.config = adapter.config.holdingRegs.filter(e => e.poll && e.deviceId === deviceId);
|
||||||
|
|
||||||
// ----------- remember poll values --------------------------
|
// ----------- remember poll values --------------------------
|
||||||
@ -722,21 +567,12 @@ function parseConfig(callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Discrete inputs
|
// Discrete inputs
|
||||||
iterateAddresses(true, deviceId, device.disInputs, 'discreteInputs', 'disInputs', localOptions);
|
|
||||||
iterateAddresses(true, deviceId, device.coils, 'coils', 'coils', localOptions);
|
|
||||||
iterateAddresses(false, deviceId, device.inputRegs, 'inputRegisters', 'inputRegs', localOptions);
|
|
||||||
iterateAddresses(false, deviceId, device.holdingRegs, 'holdingRegisters', 'holdingRegs', localOptions);
|
iterateAddresses(false, deviceId, device.holdingRegs, 'holdingRegisters', 'holdingRegs', localOptions);
|
||||||
|
|
||||||
// ------------- create states and objects ----------------------------
|
// ------------- create states and objects ----------------------------
|
||||||
checkObjects(adapter.config, 'disInputs', 'discreteInputs', 'Discrete inputs', tasks, newObjects);
|
|
||||||
checkObjects(adapter.config, 'coils', 'coils', 'Coils', tasks, newObjects);
|
|
||||||
checkObjects(adapter.config, 'inputRegs', 'inputRegisters', 'Input registers', tasks, newObjects);
|
|
||||||
checkObjects(adapter.config, 'holdingRegs', 'holdingRegisters', 'Holding registers', tasks, newObjects);
|
checkObjects(adapter.config, 'holdingRegs', 'holdingRegisters', 'Holding registers', tasks, newObjects);
|
||||||
|
|
||||||
if (options.config.slave) {
|
if (options.config.slave) {
|
||||||
device.disInputs.fullIds = adapter.config.disInputs .filter(e => e.deviceId === deviceId).map(e => e.fullId);
|
|
||||||
device.coils.fullIds = adapter.config.coils .filter(e => e.deviceId === deviceId).map(e => e.fullId);
|
|
||||||
device.inputRegs.fullIds = adapter.config.inputRegs .filter(e => e.deviceId === deviceId).map(e => e.fullId);
|
|
||||||
device.holdingRegs.fullIds = adapter.config.holdingRegs.filter(e => e.deviceId === deviceId).map(e => e.fullId);
|
device.holdingRegs.fullIds = adapter.config.holdingRegs.filter(e => e.deviceId === deviceId).map(e => e.fullId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -814,8 +650,4 @@ function main() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function sortByAddress(a, b) {
|
|
||||||
let ad = parseFloat(a.address);
|
|
||||||
let bd = parseFloat(b.address);
|
|
||||||
return ((ad < bd) ? -1 : ((ad > bd) ? 1 : 0));
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user