@ya-modbus/cli 0.4.1-refactor-scope-driver-packages.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/LICENSE +674 -0
- package/README.md +612 -0
- package/dist/bin/ya-modbus.d.ts +9 -0
- package/dist/bin/ya-modbus.d.ts.map +1 -0
- package/dist/bin/ya-modbus.js +10 -0
- package/dist/bin/ya-modbus.js.map +1 -0
- package/dist/src/commands/discover.d.ts +25 -0
- package/dist/src/commands/discover.d.ts.map +1 -0
- package/dist/src/commands/discover.js +160 -0
- package/dist/src/commands/discover.js.map +1 -0
- package/dist/src/commands/list-devices.d.ts +21 -0
- package/dist/src/commands/list-devices.d.ts.map +1 -0
- package/dist/src/commands/list-devices.js +75 -0
- package/dist/src/commands/list-devices.js.map +1 -0
- package/dist/src/commands/read.d.ts +25 -0
- package/dist/src/commands/read.d.ts.map +1 -0
- package/dist/src/commands/read.js +76 -0
- package/dist/src/commands/read.js.map +1 -0
- package/dist/src/commands/show-defaults.d.ts +21 -0
- package/dist/src/commands/show-defaults.d.ts.map +1 -0
- package/dist/src/commands/show-defaults.js +48 -0
- package/dist/src/commands/show-defaults.js.map +1 -0
- package/dist/src/commands/write.d.ts +26 -0
- package/dist/src/commands/write.d.ts.map +1 -0
- package/dist/src/commands/write.js +61 -0
- package/dist/src/commands/write.js.map +1 -0
- package/dist/src/discovery/constants.d.ts +37 -0
- package/dist/src/discovery/constants.d.ts.map +1 -0
- package/dist/src/discovery/constants.js +45 -0
- package/dist/src/discovery/constants.js.map +1 -0
- package/dist/src/discovery/device-identifier.d.ts +52 -0
- package/dist/src/discovery/device-identifier.d.ts.map +1 -0
- package/dist/src/discovery/device-identifier.js +193 -0
- package/dist/src/discovery/device-identifier.js.map +1 -0
- package/dist/src/discovery/parameter-generator-utils.d.ts +29 -0
- package/dist/src/discovery/parameter-generator-utils.d.ts.map +1 -0
- package/dist/src/discovery/parameter-generator-utils.js +59 -0
- package/dist/src/discovery/parameter-generator-utils.js.map +1 -0
- package/dist/src/discovery/parameter-generator.d.ts +97 -0
- package/dist/src/discovery/parameter-generator.d.ts.map +1 -0
- package/dist/src/discovery/parameter-generator.js +184 -0
- package/dist/src/discovery/parameter-generator.js.map +1 -0
- package/dist/src/discovery/progress.d.ts +24 -0
- package/dist/src/discovery/progress.d.ts.map +1 -0
- package/dist/src/discovery/progress.js +57 -0
- package/dist/src/discovery/progress.js.map +1 -0
- package/dist/src/discovery/scanner.d.ts +46 -0
- package/dist/src/discovery/scanner.d.ts.map +1 -0
- package/dist/src/discovery/scanner.js +143 -0
- package/dist/src/discovery/scanner.js.map +1 -0
- package/dist/src/formatters/discovery-results.d.ts +10 -0
- package/dist/src/formatters/discovery-results.d.ts.map +1 -0
- package/dist/src/formatters/discovery-results.js +57 -0
- package/dist/src/formatters/discovery-results.js.map +1 -0
- package/dist/src/formatters/json.d.ts +30 -0
- package/dist/src/formatters/json.d.ts.map +1 -0
- package/dist/src/formatters/json.js +33 -0
- package/dist/src/formatters/json.js.map +1 -0
- package/dist/src/formatters/performance.d.ts +19 -0
- package/dist/src/formatters/performance.d.ts.map +1 -0
- package/dist/src/formatters/performance.js +24 -0
- package/dist/src/formatters/performance.js.map +1 -0
- package/dist/src/formatters/table.d.ts +10 -0
- package/dist/src/formatters/table.d.ts.map +1 -0
- package/dist/src/formatters/table.js +91 -0
- package/dist/src/formatters/table.js.map +1 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +154 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/utils/commands.d.ts +191 -0
- package/dist/src/utils/commands.d.ts.map +1 -0
- package/dist/src/utils/commands.js +400 -0
- package/dist/src/utils/commands.js.map +1 -0
- package/dist/src/utils/object-utils.d.ts +20 -0
- package/dist/src/utils/object-utils.d.ts.map +1 -0
- package/dist/src/utils/object-utils.js +28 -0
- package/dist/src/utils/object-utils.js.map +1 -0
- package/dist/src/utils/validation.d.ts +70 -0
- package/dist/src/utils/validation.d.ts.map +1 -0
- package/dist/src/utils/validation.js +158 -0
- package/dist/src/utils/validation.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { loadDriver } from '@ya-modbus/driver-loader';
|
|
2
|
+
import { ProgressTracker } from '../discovery/progress.js';
|
|
3
|
+
import { scanForDevices } from '../discovery/scanner.js';
|
|
4
|
+
import { formatDiscoveryJSON, formatDiscoveryTable } from '../formatters/discovery-results.js';
|
|
5
|
+
/**
|
|
6
|
+
* Discover command implementation
|
|
7
|
+
*
|
|
8
|
+
* Scans for Modbus RTU devices on the specified port by testing
|
|
9
|
+
* different slave IDs and serial parameters.
|
|
10
|
+
*
|
|
11
|
+
* @param options - Command options
|
|
12
|
+
*/
|
|
13
|
+
export async function discoverCommand(options) {
|
|
14
|
+
const strategy = options.strategy ?? 'quick';
|
|
15
|
+
const timeout = options.timeout ?? 1000; // Device response timeout
|
|
16
|
+
const delay = options.delay ?? 100; // Inter-command delay for bus recovery
|
|
17
|
+
const format = options.format ?? 'table';
|
|
18
|
+
const maxDevices = options.maxDevices ?? 1; // Default: stop after finding 1 device
|
|
19
|
+
const verbose = options.verbose ?? false;
|
|
20
|
+
const silent = options.silent ?? false;
|
|
21
|
+
if (!silent) {
|
|
22
|
+
console.log(`Starting Modbus device discovery on ${options.port}...`);
|
|
23
|
+
console.log(`Strategy: ${strategy}`);
|
|
24
|
+
console.log(`Timeout: ${timeout}ms, Delay: ${delay}ms`);
|
|
25
|
+
if (maxDevices === 0) {
|
|
26
|
+
console.log('Mode: Find all devices');
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
console.log(`Mode: Find up to ${maxDevices} device(s)`);
|
|
30
|
+
}
|
|
31
|
+
if (verbose) {
|
|
32
|
+
console.log('Verbose: Enabled');
|
|
33
|
+
}
|
|
34
|
+
console.log('');
|
|
35
|
+
}
|
|
36
|
+
// Try to load driver metadata (explicit --driver or auto-detect from cwd)
|
|
37
|
+
let driverMetadata;
|
|
38
|
+
try {
|
|
39
|
+
driverMetadata = await loadDriver(options.driver ? { driverPackage: options.driver } : {});
|
|
40
|
+
if (!silent) {
|
|
41
|
+
if (options.driver) {
|
|
42
|
+
console.log(`Using driver: ${options.driver}`);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
console.log('Using local driver package');
|
|
46
|
+
}
|
|
47
|
+
if (driverMetadata?.defaultConfig) {
|
|
48
|
+
console.log('Using driver DEFAULT_CONFIG for parameter prioritization');
|
|
49
|
+
}
|
|
50
|
+
if (driverMetadata?.supportedConfig) {
|
|
51
|
+
console.log('Using driver SUPPORTED_CONFIG to limit parameter combinations');
|
|
52
|
+
}
|
|
53
|
+
console.log('');
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
// Driver loading failed - continue with generic Modbus parameters
|
|
58
|
+
if (!silent) {
|
|
59
|
+
console.log('No driver available, using generic Modbus parameters...');
|
|
60
|
+
if (verbose) {
|
|
61
|
+
console.log(` (${error.message})`);
|
|
62
|
+
}
|
|
63
|
+
console.log('');
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Create progress tracker (calculate total combinations without materializing)
|
|
67
|
+
const { countParameterCombinations } = await import('../discovery/parameter-generator-utils.js');
|
|
68
|
+
// Build generator options conditionally to avoid passing undefined
|
|
69
|
+
const generatorOptions = {
|
|
70
|
+
strategy,
|
|
71
|
+
};
|
|
72
|
+
if (driverMetadata?.defaultConfig && 'baudRate' in driverMetadata.defaultConfig) {
|
|
73
|
+
generatorOptions.defaultConfig = driverMetadata.defaultConfig;
|
|
74
|
+
}
|
|
75
|
+
if (driverMetadata?.supportedConfig && 'validBaudRates' in driverMetadata.supportedConfig) {
|
|
76
|
+
generatorOptions.supportedConfig = driverMetadata.supportedConfig;
|
|
77
|
+
}
|
|
78
|
+
const totalCombinations = countParameterCombinations(generatorOptions);
|
|
79
|
+
const progress = new ProgressTracker(totalCombinations);
|
|
80
|
+
if (!silent) {
|
|
81
|
+
console.log(`Testing ${totalCombinations} parameter combinations...`);
|
|
82
|
+
console.log('');
|
|
83
|
+
}
|
|
84
|
+
// Build scan options conditionally
|
|
85
|
+
const scanOptions = {
|
|
86
|
+
port: options.port,
|
|
87
|
+
timeout,
|
|
88
|
+
delayMs: delay,
|
|
89
|
+
maxDevices,
|
|
90
|
+
verbose,
|
|
91
|
+
onProgress: (current, _total, devicesFound) => {
|
|
92
|
+
// Only show progress bar if not in verbose mode, silent mode, or json format
|
|
93
|
+
if (!verbose && !silent) {
|
|
94
|
+
const progressText = progress.update(current, devicesFound);
|
|
95
|
+
if (progressText && format !== 'json') {
|
|
96
|
+
// Clear line and write progress
|
|
97
|
+
process.stdout.clearLine?.(0);
|
|
98
|
+
process.stdout.cursorTo?.(0);
|
|
99
|
+
process.stdout.write(progressText);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
onDeviceFound: (device) => {
|
|
104
|
+
if (!silent && format !== 'json') {
|
|
105
|
+
// Clear progress line (if not verbose)
|
|
106
|
+
if (!verbose) {
|
|
107
|
+
process.stdout.clearLine?.(0);
|
|
108
|
+
process.stdout.cursorTo?.(0);
|
|
109
|
+
}
|
|
110
|
+
// Show found device
|
|
111
|
+
console.log(`✓ Found device: Slave ID ${device.slaveId} @ ${device.baudRate},${device.parity === 'none' ? 'N' : device.parity === 'even' ? 'E' : 'O'},${device.dataBits},${device.stopBits}`);
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
// Add verbose callback if verbose mode is enabled (and not silent)
|
|
116
|
+
if (verbose && !silent) {
|
|
117
|
+
scanOptions.onTestAttempt = (params, result) => {
|
|
118
|
+
if (format !== 'json') {
|
|
119
|
+
const parityChar = params.parity === 'none' ? 'N' : params.parity === 'even' ? 'E' : 'O';
|
|
120
|
+
const status = result === 'found' ? '✓' : result === 'testing' ? '·' : '✗';
|
|
121
|
+
const paramStr = `${params.slaveId}@${params.baudRate},${parityChar},${params.dataBits},${params.stopBits}`;
|
|
122
|
+
if (result === 'testing') {
|
|
123
|
+
// Show what we're testing
|
|
124
|
+
process.stdout.clearLine?.(0);
|
|
125
|
+
process.stdout.cursorTo?.(0);
|
|
126
|
+
process.stdout.write(`${status} Testing: ${paramStr}`);
|
|
127
|
+
}
|
|
128
|
+
else if (result === 'found') {
|
|
129
|
+
// Device found - print on new line
|
|
130
|
+
process.stdout.clearLine?.(0);
|
|
131
|
+
process.stdout.cursorTo?.(0);
|
|
132
|
+
console.log(`${status} Found: ${paramStr}`);
|
|
133
|
+
}
|
|
134
|
+
// Don't print anything for 'not-found' - just move to next test
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
// Scan for devices
|
|
139
|
+
const devices = await scanForDevices(generatorOptions, scanOptions);
|
|
140
|
+
// Clear progress line (if not silent)
|
|
141
|
+
if (!silent && format !== 'json') {
|
|
142
|
+
process.stdout.clearLine?.(0);
|
|
143
|
+
process.stdout.cursorTo?.(0);
|
|
144
|
+
}
|
|
145
|
+
if (!silent) {
|
|
146
|
+
console.log('');
|
|
147
|
+
console.log(`Discovery complete! Found ${devices.length} device(s).`);
|
|
148
|
+
console.log('');
|
|
149
|
+
}
|
|
150
|
+
// Format and display results (always show, even in silent mode)
|
|
151
|
+
if (devices.length > 0) {
|
|
152
|
+
if (format === 'json') {
|
|
153
|
+
console.log(formatDiscoveryJSON(devices));
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
console.log(formatDiscoveryTable(devices));
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=discover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../src/commands/discover.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* List devices command
|
|
3
|
+
*
|
|
4
|
+
* Displays supported devices from a driver package's DEVICES export.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Options for list-devices command
|
|
8
|
+
*/
|
|
9
|
+
export interface ListDevicesOptions {
|
|
10
|
+
/** Driver package name (auto-detects from cwd if not specified) */
|
|
11
|
+
driver?: string;
|
|
12
|
+
/** Output format: 'table' or 'json' */
|
|
13
|
+
format?: 'table' | 'json';
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* List devices command handler
|
|
17
|
+
*
|
|
18
|
+
* @param options - Command options
|
|
19
|
+
*/
|
|
20
|
+
export declare function listDevicesCommand(options: ListDevicesOptions): Promise<void>;
|
|
21
|
+
//# sourceMappingURL=list-devices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-devices.d.ts","sourceRoot":"","sources":["../../../src/commands/list-devices.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,uCAAuC;IACvC,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;CAC1B;AAoBD;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0DnF"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* List devices command
|
|
3
|
+
*
|
|
4
|
+
* Displays supported devices from a driver package's DEVICES export.
|
|
5
|
+
*/
|
|
6
|
+
import { loadDriver } from '@ya-modbus/driver-loader';
|
|
7
|
+
import Table from 'cli-table3';
|
|
8
|
+
/**
|
|
9
|
+
* Format default config as a short string
|
|
10
|
+
*/
|
|
11
|
+
function formatDefaultConfig(config) {
|
|
12
|
+
if (!config)
|
|
13
|
+
return '-';
|
|
14
|
+
if ('baudRate' in config) {
|
|
15
|
+
// Serial config
|
|
16
|
+
const parityChar = config.parity === 'none' ? 'N' : config.parity === 'even' ? 'E' : 'O';
|
|
17
|
+
return `${config.baudRate} ${config.dataBits}${parityChar}${config.stopBits}`;
|
|
18
|
+
}
|
|
19
|
+
else if ('defaultPort' in config) {
|
|
20
|
+
// TCP config
|
|
21
|
+
return `TCP:${config.defaultPort}`;
|
|
22
|
+
}
|
|
23
|
+
return '-';
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* List devices command handler
|
|
27
|
+
*
|
|
28
|
+
* @param options - Command options
|
|
29
|
+
*/
|
|
30
|
+
export async function listDevicesCommand(options) {
|
|
31
|
+
// Load driver metadata (auto-detects from cwd if no --driver specified)
|
|
32
|
+
const driverMetadata = await loadDriver(options.driver ? { driverPackage: options.driver } : {});
|
|
33
|
+
if (options.format === 'json') {
|
|
34
|
+
// JSON output
|
|
35
|
+
console.log(JSON.stringify({
|
|
36
|
+
devices: driverMetadata.devices ?? null,
|
|
37
|
+
defaultConfig: driverMetadata.defaultConfig,
|
|
38
|
+
supportedConfig: driverMetadata.supportedConfig,
|
|
39
|
+
}, null, 2));
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
// Human-readable table output
|
|
43
|
+
const devices = driverMetadata.devices;
|
|
44
|
+
if (!devices || Object.keys(devices).length === 0) {
|
|
45
|
+
console.log('This driver does not export a DEVICES registry.');
|
|
46
|
+
console.log('It is a single-device driver.\n');
|
|
47
|
+
if (driverMetadata.defaultConfig) {
|
|
48
|
+
console.log('Default config:', formatDefaultConfig(driverMetadata.defaultConfig));
|
|
49
|
+
}
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
console.log('Supported Devices\n');
|
|
53
|
+
// Create table
|
|
54
|
+
const table = new Table({
|
|
55
|
+
head: ['Device', 'Manufacturer', 'Model', 'Config', 'Description'],
|
|
56
|
+
style: {
|
|
57
|
+
head: ['cyan', 'bold'],
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
// Add rows
|
|
61
|
+
const entries = Object.entries(devices);
|
|
62
|
+
for (const [key, info] of entries) {
|
|
63
|
+
const config = info.defaultConfig ?? driverMetadata.defaultConfig;
|
|
64
|
+
table.push([
|
|
65
|
+
key,
|
|
66
|
+
info.manufacturer,
|
|
67
|
+
info.model,
|
|
68
|
+
formatDefaultConfig(config),
|
|
69
|
+
info.description ?? '',
|
|
70
|
+
]);
|
|
71
|
+
}
|
|
72
|
+
console.log(table.toString());
|
|
73
|
+
console.log(`\nTotal: ${entries.length} device(s)`);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=list-devices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-devices.js","sourceRoot":"","sources":["../../../src/commands/list-devices.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read command options
|
|
3
|
+
*/
|
|
4
|
+
export interface ReadOptions {
|
|
5
|
+
port?: string;
|
|
6
|
+
baudRate?: number;
|
|
7
|
+
dataBits?: number;
|
|
8
|
+
parity?: string;
|
|
9
|
+
stopBits?: number;
|
|
10
|
+
host?: string;
|
|
11
|
+
slaveId: number;
|
|
12
|
+
timeout?: number;
|
|
13
|
+
driver?: string;
|
|
14
|
+
device?: string;
|
|
15
|
+
dataPoint?: string[];
|
|
16
|
+
all?: boolean;
|
|
17
|
+
format: 'table' | 'json';
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Read command implementation
|
|
21
|
+
*
|
|
22
|
+
* @param options - Command options
|
|
23
|
+
*/
|
|
24
|
+
export declare function readCommand(options: ReadOptions): Promise<void>;
|
|
25
|
+
//# sourceMappingURL=read.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../../src/commands/read.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,WAAW,WAAW;IAE1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IAGjB,IAAI,CAAC,EAAE,MAAM,CAAA;IAGb,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAGhB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IAGf,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,GAAG,CAAC,EAAE,OAAO,CAAA;IAGb,MAAM,EAAE,OAAO,GAAG,MAAM,CAAA;CACzB;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA2ErE"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { formatJSON } from '../formatters/json.js';
|
|
2
|
+
import { formatPerformance } from '../formatters/performance.js';
|
|
3
|
+
import { formatTable } from '../formatters/table.js';
|
|
4
|
+
import { isReadable, withDriver } from '../utils/commands.js';
|
|
5
|
+
/**
|
|
6
|
+
* Read command implementation
|
|
7
|
+
*
|
|
8
|
+
* @param options - Command options
|
|
9
|
+
*/
|
|
10
|
+
export async function readCommand(options) {
|
|
11
|
+
const startTime = performance.now();
|
|
12
|
+
await withDriver(options, async (driver, mergedOptions) => {
|
|
13
|
+
// Determine which data points to read
|
|
14
|
+
let dataPointIds;
|
|
15
|
+
if (options.all) {
|
|
16
|
+
// Read all readable data points
|
|
17
|
+
dataPointIds = driver.dataPoints.filter(isReadable).map((dp) => dp.id);
|
|
18
|
+
}
|
|
19
|
+
else if (options.dataPoint && options.dataPoint.length > 0) {
|
|
20
|
+
dataPointIds = options.dataPoint;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
throw new Error('Either --data-point or --all must be specified');
|
|
24
|
+
}
|
|
25
|
+
// Validate data points exist and are readable (O(N) using Map lookup)
|
|
26
|
+
const dataPointMap = new Map(driver.dataPoints.map((dp) => [dp.id, dp]));
|
|
27
|
+
for (const id of dataPointIds) {
|
|
28
|
+
const dataPoint = dataPointMap.get(id);
|
|
29
|
+
if (!dataPoint) {
|
|
30
|
+
throw new Error(`Data point not found: ${id}`);
|
|
31
|
+
}
|
|
32
|
+
if (!isReadable(dataPoint)) {
|
|
33
|
+
throw new Error(`Data point is write-only: ${id}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// Read data points
|
|
37
|
+
let values;
|
|
38
|
+
if (dataPointIds.length === 1) {
|
|
39
|
+
// Single data point - use readDataPoint
|
|
40
|
+
const dataPointId = dataPointIds[0]; // length === 1, so [0] is guaranteed to exist
|
|
41
|
+
const value = await driver.readDataPoint(dataPointId);
|
|
42
|
+
values = { [dataPointId]: value };
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
// Multiple data points - use batch read
|
|
46
|
+
values = await driver.readDataPoints(dataPointIds);
|
|
47
|
+
}
|
|
48
|
+
// Calculate performance metrics
|
|
49
|
+
const endTime = performance.now();
|
|
50
|
+
const metrics = {
|
|
51
|
+
responseTimeMs: endTime - startTime,
|
|
52
|
+
operations: dataPointIds.length,
|
|
53
|
+
errors: 0, // Errors cause exceptions, so this is always 0 for successful reads
|
|
54
|
+
};
|
|
55
|
+
// Format output
|
|
56
|
+
if (options.format === 'json') {
|
|
57
|
+
const output = formatJSON(driver.dataPoints.filter((dp) => dp.id in values), values, {
|
|
58
|
+
driver: options.driver,
|
|
59
|
+
connection: options.host
|
|
60
|
+
? { host: options.host, slaveId: mergedOptions.slaveId }
|
|
61
|
+
: mergedOptions.port && typeof mergedOptions.port === 'string'
|
|
62
|
+
? { port: mergedOptions.port, slaveId: mergedOptions.slaveId }
|
|
63
|
+
: undefined,
|
|
64
|
+
performance: metrics,
|
|
65
|
+
});
|
|
66
|
+
console.log(output);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
// Table format (default)
|
|
70
|
+
const table = formatTable(driver.dataPoints.filter((dp) => dp.id in values), values);
|
|
71
|
+
console.log(table);
|
|
72
|
+
console.log(formatPerformance(metrics));
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/commands/read.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Show driver defaults command
|
|
3
|
+
*
|
|
4
|
+
* Displays DEFAULT_CONFIG and SUPPORTED_CONFIG from a driver package.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Options for show-defaults command
|
|
8
|
+
*/
|
|
9
|
+
export interface ShowDefaultsOptions {
|
|
10
|
+
/** Driver package name (auto-detects from cwd if not specified) */
|
|
11
|
+
driver?: string;
|
|
12
|
+
/** Output format: 'table' or 'json' */
|
|
13
|
+
format?: 'table' | 'json';
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Show driver defaults command handler
|
|
17
|
+
*
|
|
18
|
+
* @param options - Command options
|
|
19
|
+
*/
|
|
20
|
+
export declare function showDefaultsCommand(options: ShowDefaultsOptions): Promise<void>;
|
|
21
|
+
//# sourceMappingURL=show-defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"show-defaults.d.ts","sourceRoot":"","sources":["../../../src/commands/show-defaults.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,uCAAuC;IACvC,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;CAC1B;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCrF"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Show driver defaults command
|
|
3
|
+
*
|
|
4
|
+
* Displays DEFAULT_CONFIG and SUPPORTED_CONFIG from a driver package.
|
|
5
|
+
*/
|
|
6
|
+
import { loadDriver } from '@ya-modbus/driver-loader';
|
|
7
|
+
/**
|
|
8
|
+
* Show driver defaults command handler
|
|
9
|
+
*
|
|
10
|
+
* @param options - Command options
|
|
11
|
+
*/
|
|
12
|
+
export async function showDefaultsCommand(options) {
|
|
13
|
+
// Load driver metadata (auto-detects from cwd if no --driver specified)
|
|
14
|
+
const driverMetadata = await loadDriver(options.driver ? { driverPackage: options.driver } : {});
|
|
15
|
+
if (options.format === 'json') {
|
|
16
|
+
// JSON output
|
|
17
|
+
console.log(JSON.stringify({
|
|
18
|
+
defaultConfig: driverMetadata.defaultConfig,
|
|
19
|
+
supportedConfig: driverMetadata.supportedConfig,
|
|
20
|
+
}, null, 2));
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
// Human-readable table output
|
|
24
|
+
console.log('Driver Defaults');
|
|
25
|
+
console.log('===============\n');
|
|
26
|
+
if (driverMetadata.defaultConfig) {
|
|
27
|
+
console.log('DEFAULT_CONFIG:');
|
|
28
|
+
for (const [key, value] of Object.entries(driverMetadata.defaultConfig)) {
|
|
29
|
+
console.log(` ${key}: ${JSON.stringify(value)}`);
|
|
30
|
+
}
|
|
31
|
+
console.log();
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
console.log('No DEFAULT_CONFIG exported by this driver.\n');
|
|
35
|
+
}
|
|
36
|
+
if (driverMetadata.supportedConfig) {
|
|
37
|
+
console.log('SUPPORTED_CONFIG:');
|
|
38
|
+
for (const [key, value] of Object.entries(driverMetadata.supportedConfig)) {
|
|
39
|
+
console.log(` ${key}: ${JSON.stringify(value)}`);
|
|
40
|
+
}
|
|
41
|
+
console.log();
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
console.log('No SUPPORTED_CONFIG exported by this driver.\n');
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=show-defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"show-defaults.js","sourceRoot":"","sources":["../../../src/commands/show-defaults.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAarD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAA4B;IACpE,wEAAwE;IACxE,MAAM,cAAc,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAEhG,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC9B,cAAc;QACd,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;YACE,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,eAAe,EAAE,cAAc,CAAC,eAAe;SAChD,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAA;IACH,CAAC;SAAM,CAAC;QACN,8BAA8B;QAC9B,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;QAC9B,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;QAEhC,IAAI,cAAc,CAAC,aAAa,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;YAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC;gBACxE,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YACnD,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAA;QACf,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAA;QAC7D,CAAC;QAED,IAAI,cAAc,CAAC,eAAe,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;YAChC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC1E,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YACnD,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAA;QACf,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAA;QAC/D,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Write command options
|
|
3
|
+
*/
|
|
4
|
+
export interface WriteOptions {
|
|
5
|
+
port?: string;
|
|
6
|
+
baudRate?: number;
|
|
7
|
+
dataBits?: number;
|
|
8
|
+
parity?: string;
|
|
9
|
+
stopBits?: number;
|
|
10
|
+
host?: string;
|
|
11
|
+
slaveId: number;
|
|
12
|
+
timeout?: number;
|
|
13
|
+
driver?: string;
|
|
14
|
+
device?: string;
|
|
15
|
+
dataPoint: string;
|
|
16
|
+
value: string;
|
|
17
|
+
yes?: boolean;
|
|
18
|
+
verify?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Write command implementation
|
|
22
|
+
*
|
|
23
|
+
* @param options - Command options
|
|
24
|
+
*/
|
|
25
|
+
export declare function writeCommand(options: WriteOptions): Promise<void>;
|
|
26
|
+
//# sourceMappingURL=write.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../../src/commands/write.ts"],"names":[],"mappings":"AAYA;;GAEG;AACH,MAAM,WAAW,YAAY;IAE3B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IAGjB,IAAI,CAAC,EAAE,MAAM,CAAA;IAGb,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAGhB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IAGf,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAmEvE"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { confirm, findWritableDataPoint, floatsEqual, isReadable, parseValue, validateValue, withDriver, } from '../utils/commands.js';
|
|
3
|
+
/**
|
|
4
|
+
* Write command implementation
|
|
5
|
+
*
|
|
6
|
+
* @param options - Command options
|
|
7
|
+
*/
|
|
8
|
+
export async function writeCommand(options) {
|
|
9
|
+
await withDriver(options, async (driver) => {
|
|
10
|
+
// Find and validate writable data point
|
|
11
|
+
const dataPoint = findWritableDataPoint(driver, options.dataPoint);
|
|
12
|
+
// Parse and validate value
|
|
13
|
+
const parsedValue = parseValue(options.value, dataPoint);
|
|
14
|
+
validateValue(parsedValue, dataPoint);
|
|
15
|
+
// Show current value if readable and request confirmation
|
|
16
|
+
if (!options.yes) {
|
|
17
|
+
if (isReadable(dataPoint)) {
|
|
18
|
+
try {
|
|
19
|
+
const currentValue = await driver.readDataPoint(options.dataPoint);
|
|
20
|
+
console.log(chalk.cyan(`Current value: ${String(currentValue)}`));
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
console.log(chalk.yellow('Could not read current value'));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
console.log(chalk.cyan(`New value: ${String(parsedValue)}`));
|
|
27
|
+
const confirmed = await confirm(chalk.bold(`Write ${String(parsedValue)} to ${options.dataPoint}?`));
|
|
28
|
+
if (!confirmed) {
|
|
29
|
+
console.log('Write aborted');
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// Write value
|
|
34
|
+
await driver.writeDataPoint(options.dataPoint, parsedValue);
|
|
35
|
+
console.log(chalk.green(`Successfully wrote ${String(parsedValue)} to ${options.dataPoint}`));
|
|
36
|
+
// Verify if requested
|
|
37
|
+
if (options.verify) {
|
|
38
|
+
if (!isReadable(dataPoint)) {
|
|
39
|
+
console.log(chalk.yellow('Cannot verify write-only data point'));
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
const readValue = await driver.readDataPoint(options.dataPoint);
|
|
44
|
+
// Compare values (handle floating point precision)
|
|
45
|
+
const match = dataPoint.type === 'float'
|
|
46
|
+
? floatsEqual(readValue, parsedValue)
|
|
47
|
+
: readValue === parsedValue;
|
|
48
|
+
if (match) {
|
|
49
|
+
console.log(chalk.green(`Verification: OK (read back ${String(readValue)})`));
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
console.log(chalk.red(`Verification: MISMATCH (expected ${String(parsedValue)}, got ${String(readValue)})`));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
console.log(chalk.red(`Verification failed: ${error.message}`));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write.js","sourceRoot":"","sources":["../../../src/commands/write.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { BaudRate, DataBits, Parity, StopBits } from '@ya-modbus/driver-types';
|
|
2
|
+
/**
|
|
3
|
+
* Standard Modbus baud rates for thorough scanning
|
|
4
|
+
* Ordered by commonality (most common first)
|
|
5
|
+
*/
|
|
6
|
+
export declare const STANDARD_BAUD_RATES: readonly BaudRate[];
|
|
7
|
+
/**
|
|
8
|
+
* Common baud rates for quick scanning
|
|
9
|
+
*/
|
|
10
|
+
export declare const COMMON_BAUD_RATES: readonly BaudRate[];
|
|
11
|
+
/**
|
|
12
|
+
* Standard Modbus parity settings
|
|
13
|
+
* Ordered by commonality
|
|
14
|
+
*/
|
|
15
|
+
export declare const STANDARD_PARITY: readonly Parity[];
|
|
16
|
+
/**
|
|
17
|
+
* Standard data bits options
|
|
18
|
+
*/
|
|
19
|
+
export declare const STANDARD_DATA_BITS: readonly DataBits[];
|
|
20
|
+
/**
|
|
21
|
+
* Common data bits for quick scanning
|
|
22
|
+
*/
|
|
23
|
+
export declare const COMMON_DATA_BITS: readonly DataBits[];
|
|
24
|
+
/**
|
|
25
|
+
* Standard stop bits options
|
|
26
|
+
*/
|
|
27
|
+
export declare const STANDARD_STOP_BITS: readonly StopBits[];
|
|
28
|
+
/**
|
|
29
|
+
* Common stop bits for quick scanning
|
|
30
|
+
*/
|
|
31
|
+
export declare const COMMON_STOP_BITS: readonly StopBits[];
|
|
32
|
+
/**
|
|
33
|
+
* Valid Modbus slave address range (0 is broadcast, 248-255 reserved)
|
|
34
|
+
*/
|
|
35
|
+
export declare const MIN_SLAVE_ID = 1;
|
|
36
|
+
export declare const MAX_SLAVE_ID = 247;
|
|
37
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/discovery/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAEnF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,QAAQ,EASzC,CAAA;AAEV;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,QAAQ,EAA2B,CAAA;AAE5E;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAAqC,CAAA;AAElF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,QAAQ,EAAoB,CAAA;AAEtE;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,QAAQ,EAAiB,CAAA;AAEjE;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,QAAQ,EAAoB,CAAA;AAEtE;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,QAAQ,EAAiB,CAAA;AAEjE;;GAEG;AACH,eAAO,MAAM,YAAY,IAAI,CAAA;AAC7B,eAAO,MAAM,YAAY,MAAM,CAAA"}
|