node-opcua-aggregates 2.54.0 → 2.57.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.
Files changed (53) hide show
  1. package/.mocharc.yml +7 -7
  2. package/LICENSE +20 -20
  3. package/bin/sample_aggregate_server.js +14 -14
  4. package/dist/aggregates.js +2 -2
  5. package/dist/aggregates.js.map +1 -1
  6. package/dist/average.js +6 -5
  7. package/dist/average.js.map +1 -1
  8. package/dist/common.js +12 -2
  9. package/dist/common.js.map +1 -1
  10. package/dist/index.d.ts +1 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/interpolate.d.ts +1 -1
  13. package/dist/interpolate.js +8 -12
  14. package/dist/interpolate.js.map +1 -1
  15. package/dist/minmax.js +3 -2
  16. package/dist/minmax.js.map +1 -1
  17. package/dist/read_processed_details.d.ts +2 -2
  18. package/dist/read_processed_details.js +41 -38
  19. package/dist/read_processed_details.js.map +1 -1
  20. package/nyc.config.js +16 -16
  21. package/package.json +17 -15
  22. package/source/aggregates.ts +284 -277
  23. package/source/average.ts +71 -74
  24. package/source/common.ts +23 -10
  25. package/source/index.ts +11 -17
  26. package/source/interpolate.ts +14 -20
  27. package/source/interval.ts +3 -3
  28. package/source/minmax.ts +231 -231
  29. package/source/read_processed_details.ts +149 -139
  30. package/dist2/aggregates.d.ts +0 -7
  31. package/dist2/aggregates.js +0 -201
  32. package/dist2/aggregates.js.map +0 -1
  33. package/dist2/average.d.ts +0 -3
  34. package/dist2/average.js +0 -61
  35. package/dist2/average.js.map +0 -1
  36. package/dist2/common.d.ts +0 -8
  37. package/dist2/common.js +0 -89
  38. package/dist2/common.js.map +0 -1
  39. package/dist2/index.d.ts +0 -11
  40. package/dist2/index.js +0 -29
  41. package/dist2/index.js.map +0 -1
  42. package/dist2/interpolate.d.ts +0 -16
  43. package/dist2/interpolate.js +0 -135
  44. package/dist2/interpolate.js.map +0 -1
  45. package/dist2/interval.d.ts +0 -49
  46. package/dist2/interval.js +0 -165
  47. package/dist2/interval.js.map +0 -1
  48. package/dist2/minmax.d.ts +0 -18
  49. package/dist2/minmax.js +0 -149
  50. package/dist2/minmax.js.map +0 -1
  51. package/dist2/read_processed_details.d.ts +0 -6
  52. package/dist2/read_processed_details.js +0 -116
  53. package/dist2/read_processed_details.js.map +0 -1
@@ -1,139 +1,149 @@
1
- import * as async from "async";
2
- import { AggregateFunction } from "node-opcua-constants";
3
- import { ISessionContext, ContinuationPoint, UAVariable } from "node-opcua-address-space";
4
- import { NumericRange } from "node-opcua-numeric-range";
5
- import { QualifiedNameLike } from "node-opcua-data-model";
6
- import { CallbackT, StatusCodes } from "node-opcua-status-code";
7
- import { DataValue } from "node-opcua-data-value";
8
- import { ObjectIds } from "node-opcua-constants";
9
- import { NodeId } from "node-opcua-nodeid";
10
- import { getMinData, getMaxData } from "./minmax";
11
- import {
12
- HistoryData,
13
- HistoryReadResult,
14
- ReadAtTimeDetails,
15
- ReadEventDetails,
16
- ReadProcessedDetails,
17
- ReadRawModifiedDetails
18
- } from "node-opcua-service-history";
19
-
20
- import { getInterpolatedData } from "./interpolate";
21
- import { getAverageData } from "./average";
22
-
23
- export function readProcessedDetails(
24
- variable: UAVariable,
25
- context: ISessionContext,
26
- historyReadDetails: ReadProcessedDetails,
27
- indexRange: NumericRange | null,
28
- dataEncoding: QualifiedNameLike | null,
29
- continuationPoint: ContinuationPoint | null,
30
- callback: CallbackT<HistoryReadResult>
31
- ) {
32
- // OPC Unified Architecture, Part 11 27 Release 1.03
33
- //
34
- // This structure is used to compute Aggregate values, qualities, and timestamps from data in
35
- // the history database for the specified time domain for one or more HistoricalDataNodes. The
36
- // time domain is divided into intervals of duration ProcessingInterval. The specified Aggregate
37
- // Type is calculated for each interval beginning with startTime by using the data within the next
38
- // ProcessingInterval.
39
- // For example, this function can provide hourly statistics such as Maximum, Minimum , and
40
- // Average for each item during the specified time domain when ProcessingInterval is 1 hour.
41
- // The domain of the request is defined by startTime, endTime, and ProcessingInterval. All three
42
- // shall be specified. If endTime is less than startTime then the data shall be returned in reverse
43
- // order with the later data coming first. If startTime and endTime are the same then the Server
44
- // shall return Bad_InvalidArgument as there is no meaningful way to interpret such a case. If
45
- // the ProcessingInterval is specified as 0 then Aggregates shall be calculated using one interval
46
- // starting at startTime and ending at endTime.
47
- // The aggregateType[] parameter allows a Client to request multiple Aggregate calculations per
48
- // requested NodeId. If multiple Aggregates are requested then a corresponding number of
49
- // entries are required in the NodesToRead array.
50
- // For example, to request Min Aggregate for NodeId FIC101, FIC102, and both Min and Max
51
- // Aggregates for NodeId FIC103 would require NodeId FIC103 to appear twice in the
52
- // NodesToRead array request parameter.
53
- // aggregateType[] NodesToRead[]
54
- // Min FIC101
55
- // Min FIC102
56
- // Min FIC103
57
- // Max FIC103
58
- // If the array of Aggregates does not match the array of NodesToRead then the Server shall
59
- // return a StatusCode of Bad_AggregateListMismatch.
60
- // The aggregateConfiguration parameter allows a Client to override the Aggregate configuration
61
- // settings supplied by the AggregateConfiguration Object on a per call basis. See Part 13 for
62
- // more information on Aggregate configurations. If the Server does not support the ability to
63
- // override the Aggregate configuration settings then it shall return a StatusCode of Bad_
64
- // AggregateConfigurationRejected. If the Aggregate is not valid for the Node then the
65
- // StatusCode shall be Bad_AggregateNotSupported.
66
- // The values used in computing the Aggregate for each interval shall include any value that
67
- // falls exactly on the timestamp at the beginning of the interval, but shall not include any value
68
- // that falls directly on the timestamp ending the interval. Thus, each value shall be included
69
- // only once in the calculation. If the time domain is in reverse order then we consider the later
70
- // timestamp to be the one beginning the sub interval, and the earlier timestamp to be the one
71
- // ending it. Note that this means that simply swapping the start and end times will not result in
72
- // getting the same values back in reverse order as the intervals being requested in the two
73
- // cases are not the same.
74
- // If an Aggregate is taking a long time to calculate then the Server can return partial results
75
- // with a continuation point. This might be done if the calculation is going to take more time th an
76
- // the Client timeout hint. In some cases it may take longer than the Client timeout hint to
77
- // calculate even one Aggregate result. Then the Server may return zero results with a
78
- // continuation point that allows the Server to resume the calculation on the next Client read
79
- // call.
80
- const startTime = historyReadDetails.startTime;
81
- const endTime = historyReadDetails.endTime;
82
- if (!startTime || !endTime) {
83
- return callback(null, new HistoryReadResult({ statusCode: StatusCodes.BadInvalidArgument }));
84
- }
85
- if (startTime.getTime() === endTime.getTime()) {
86
- // Start = End Int = Anything No intervals. Returns a Bad_InvalidArgument StatusCode,
87
- // regardless of whether there is data at the specified time or not
88
- return callback(null, new HistoryReadResult({ statusCode: StatusCodes.BadInvalidArgument }));
89
- }
90
-
91
- const aggregateTypes: NodeId[] = historyReadDetails.aggregateType || [];
92
-
93
- // If the ProcessingInterval is specified as 0 then Aggregates shall be calculated using one interval
94
- // starting at startTime and ending at endTime.
95
- const processingInterval = historyReadDetails.processingInterval || endTime.getTime() - startTime.getTime();
96
-
97
- // tslint:disable-next-line: prefer-for-of
98
-
99
- function applyAggregate(aggregateType: NodeId, callback2: (err: Error | null, result: HistoryReadResult) => void) {
100
- function buildResult(err: Error | null, dataValues?: DataValue[]) {
101
- if (err) {
102
- return callback2(null, new HistoryReadResult({ statusCode: StatusCodes.BadInternalError }));
103
- }
104
- const result = new HistoryReadResult({
105
- historyData: new HistoryData({
106
- dataValues
107
- }),
108
- statusCode: StatusCodes.Good
109
- });
110
- return callback2(null, result);
111
- }
112
-
113
- if (!startTime || !endTime) {
114
- return buildResult(new Error("Invalid date time"));
115
- }
116
- switch (aggregateType.value) {
117
- case AggregateFunction.Minimum:
118
- getMinData(variable, processingInterval, startTime, endTime, buildResult);
119
- break;
120
- case AggregateFunction.Maximum:
121
- getMaxData(variable, processingInterval, startTime, endTime, buildResult);
122
- break;
123
- case AggregateFunction.Interpolative:
124
- getInterpolatedData(variable, processingInterval, startTime, endTime, buildResult);
125
- break;
126
- case AggregateFunction.Average:
127
- getAverageData(variable, processingInterval, startTime, endTime, buildResult);
128
- break;
129
- case AggregateFunction.Count:
130
- default:
131
- // todo provide correct implementation
132
- return callback2(null, new HistoryReadResult({ statusCode: StatusCodes.BadAggregateNotSupported }));
133
- }
134
- }
135
- if (historyReadDetails.aggregateType?.length !== 1) {
136
- return callback(null, new HistoryReadResult({ statusCode: StatusCodes.BadInternalError }));
137
- }
138
- return applyAggregate(aggregateTypes[0], callback);
139
- }
1
+ import * as async from "async";
2
+ import { AggregateFunction } from "node-opcua-constants";
3
+ import { ISessionContext, ContinuationPoint, UAVariable, ContinuationData } from "node-opcua-address-space";
4
+ import { NumericRange } from "node-opcua-numeric-range";
5
+ import { QualifiedNameLike } from "node-opcua-data-model";
6
+ import { CallbackT, StatusCodes } from "node-opcua-status-code";
7
+ import { DataValue } from "node-opcua-data-value";
8
+ import { ObjectIds } from "node-opcua-constants";
9
+ import { NodeId } from "node-opcua-nodeid";
10
+ import {
11
+ HistoryData,
12
+ HistoryReadResult,
13
+ ReadAtTimeDetails,
14
+ ReadEventDetails,
15
+ ReadProcessedDetails,
16
+ ReadRawModifiedDetails
17
+ } from "node-opcua-service-history";
18
+
19
+ import { getMinData, getMaxData } from "./minmax";
20
+
21
+ import { getInterpolatedData } from "./interpolate";
22
+ import { getAverageData } from "./average";
23
+
24
+ function _buildResult(err: Error | null, dataValues: DataValue[] | undefined, callback2: CallbackT<HistoryReadResult>) {
25
+ if (err) {
26
+ return callback2(null, new HistoryReadResult({ statusCode: StatusCodes.BadInternalError }));
27
+ }
28
+ const result = new HistoryReadResult({
29
+ historyData: new HistoryData({
30
+ dataValues
31
+ }),
32
+ statusCode: StatusCodes.Good
33
+ });
34
+ return callback2(null, result);
35
+ }
36
+
37
+ function applyAggregate(
38
+ variable: UAVariable,
39
+ processingInterval: number,
40
+ startTime: Date,
41
+ endTime: Date,
42
+ aggregateType: NodeId,
43
+ callback2: CallbackT<HistoryReadResult>
44
+ ) {
45
+ if (!startTime || !endTime) {
46
+ return _buildResult(new Error("Invalid date time"), undefined, callback2);
47
+ }
48
+ const buildResult = (err: Error | null, dataValues: DataValue[] | undefined) => {
49
+ _buildResult(err, dataValues, callback2);
50
+ };
51
+ switch (aggregateType.value) {
52
+ case AggregateFunction.Minimum:
53
+ getMinData(variable, processingInterval, startTime, endTime, buildResult);
54
+ break;
55
+ case AggregateFunction.Maximum:
56
+ getMaxData(variable, processingInterval, startTime, endTime, buildResult);
57
+ break;
58
+ case AggregateFunction.Interpolative:
59
+ getInterpolatedData(variable, processingInterval, startTime, endTime, buildResult);
60
+ break;
61
+ case AggregateFunction.Average:
62
+ getAverageData(variable, processingInterval, startTime, endTime, buildResult);
63
+ break;
64
+ case AggregateFunction.Count:
65
+ default:
66
+ // todo provide correct implementation
67
+ return callback2(null, new HistoryReadResult({ statusCode: StatusCodes.BadAggregateNotSupported }));
68
+ }
69
+ }
70
+ export function readProcessedDetails(
71
+ variable: UAVariable,
72
+ context: ISessionContext,
73
+ historyReadDetails: ReadProcessedDetails,
74
+ indexRange: NumericRange | null,
75
+ dataEncoding: QualifiedNameLike | null,
76
+ continuationData: ContinuationData,
77
+ callback: CallbackT<HistoryReadResult>
78
+ ): void {
79
+ // OPC Unified Architecture, Part 11 27 Release 1.03
80
+ //
81
+ // This structure is used to compute Aggregate values, qualities, and timestamps from data in
82
+ // the history database for the specified time domain for one or more HistoricalDataNodes. The
83
+ // time domain is divided into intervals of duration ProcessingInterval. The specified Aggregate
84
+ // Type is calculated for each interval beginning with startTime by using the data within the next
85
+ // ProcessingInterval.
86
+ // For example, this function can provide hourly statistics such as Maximum, Minimum , and
87
+ // Average for each item during the specified time domain when ProcessingInterval is 1 hour.
88
+ // The domain of the request is defined by startTime, endTime, and ProcessingInterval. All three
89
+ // shall be specified. If endTime is less than startTime then the data shall be returned in reverse
90
+ // order with the later data coming first. If startTime and endTime are the same then the Server
91
+ // shall return Bad_InvalidArgument as there is no meaningful way to interpret such a case. If
92
+ // the ProcessingInterval is specified as 0 then Aggregates shall be calculated using one interval
93
+ // starting at startTime and ending at endTime.
94
+ // The aggregateType[] parameter allows a Client to request multiple Aggregate calculations per
95
+ // requested NodeId. If multiple Aggregates are requested then a corresponding number of
96
+ // entries are required in the NodesToRead array.
97
+ // For example, to request Min Aggregate for NodeId FIC101, FIC102, and both Min and Max
98
+ // Aggregates for NodeId FIC103 would require NodeId FIC103 to appear twice in the
99
+ // NodesToRead array request parameter.
100
+ // aggregateType[] NodesToRead[]
101
+ // Min FIC101
102
+ // Min FIC102
103
+ // Min FIC103
104
+ // Max FIC103
105
+ // If the array of Aggregates does not match the array of NodesToRead then the Server shall
106
+ // return a StatusCode of Bad_AggregateListMismatch.
107
+ // The aggregateConfiguration parameter allows a Client to override the Aggregate configuration
108
+ // settings supplied by the AggregateConfiguration Object on a per call basis. See Part 13 for
109
+ // more information on Aggregate configurations. If the Server does not support the ability to
110
+ // override the Aggregate configuration settings then it shall return a StatusCode of Bad_
111
+ // AggregateConfigurationRejected. If the Aggregate is not valid for the Node then the
112
+ // StatusCode shall be Bad_AggregateNotSupported.
113
+ // The values used in computing the Aggregate for each interval shall include any value that
114
+ // falls exactly on the timestamp at the beginning of the interval, but shall not include any value
115
+ // that falls directly on the timestamp ending the interval. Thus, each value shall be included
116
+ // only once in the calculation. If the time domain is in reverse order then we consider the later
117
+ // timestamp to be the one beginning the sub interval, and the earlier timestamp to be the one
118
+ // ending it. Note that this means that simply swapping the start and end times will not result in
119
+ // getting the same values back in reverse order as the intervals being requested in the two
120
+ // cases are not the same.
121
+ // If an Aggregate is taking a long time to calculate then the Server can return partial results
122
+ // with a continuation point. This might be done if the calculation is going to take more time th an
123
+ // the Client timeout hint. In some cases it may take longer than the Client timeout hint to
124
+ // calculate even one Aggregate result. Then the Server may return zero results with a
125
+ // continuation point that allows the Server to resume the calculation on the next Client read
126
+ // call.
127
+ const startTime = historyReadDetails.startTime;
128
+ const endTime = historyReadDetails.endTime;
129
+ if (!startTime || !endTime) {
130
+ return callback(null, new HistoryReadResult({ statusCode: StatusCodes.BadInvalidArgument }));
131
+ }
132
+ if (startTime.getTime() === endTime.getTime()) {
133
+ // Start = End Int = Anything No intervals. Returns a Bad_InvalidArgument StatusCode,
134
+ // regardless of whether there is data at the specified time or not
135
+ return callback(null, new HistoryReadResult({ statusCode: StatusCodes.BadInvalidArgument }));
136
+ }
137
+
138
+ const aggregateTypes: NodeId[] = historyReadDetails.aggregateType || [];
139
+
140
+ // If the ProcessingInterval is specified as 0 then Aggregates shall be calculated using one interval
141
+ // starting at startTime and ending at endTime.
142
+ const processingInterval = historyReadDetails.processingInterval || endTime.getTime() - startTime.getTime();
143
+
144
+ // tslint:disable-next-line: prefer-for-of
145
+ if (historyReadDetails.aggregateType?.length !== 1) {
146
+ return callback(null, new HistoryReadResult({ statusCode: StatusCodes.BadInternalError }));
147
+ }
148
+ return applyAggregate(variable, processingInterval, startTime, endTime, aggregateTypes[0], callback);
149
+ }
@@ -1,7 +0,0 @@
1
- import { AddressSpace, BaseNode, UAObject, UAServerCapabilities, UAVariable } from "node-opcua-address-space";
2
- import { AggregateConfigurationOptionsEx } from "./interval";
3
- export declare function createHistoryServerCapabilities(addressSpace: AddressSpace, serverCapabilities: UAServerCapabilities): UAObject;
4
- export declare type AggregateFunctionName = "AnnotationCount" | "Average" | "Count" | "Delta" | "DeltaBounds" | "DurationBad" | "DurationGood" | "DurationInStateNonZero" | "DurationInStateZero" | "EndBound" | "Interpolative" | "Maximum" | "Maximum2" | "MaximumActualTime" | "MaximumActualTime2" | "Minimum" | "Minimum2" | "MinimumActualTime" | "MinimumActualTime2" | "NumberOfTransitions" | "PercentBad" | "PercentGood" | "Range" | "Range2" | "StandardDeviationPopulation" | "StandardDeviationSample" | "Start" | "StartBound" | "TimeAverage" | "TimeAverage2" | "Total" | "Total2" | "VariancePopulation" | "VarianceSample" | "WorstQuality" | "WorstQuality2";
5
- export declare function addAggregateSupport(addressSpace: AddressSpace): void;
6
- export declare function installAggregateConfigurationOptions(node: UAVariable, options: AggregateConfigurationOptionsEx): void;
7
- export declare function getAggregateConfiguration(node: BaseNode): AggregateConfigurationOptionsEx;
@@ -1,201 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getAggregateConfiguration = exports.installAggregateConfigurationOptions = exports.addAggregateSupport = exports.createHistoryServerCapabilities = void 0;
4
- /**
5
- * @module node-opcua-aggregates
6
- */
7
- const node_opcua_constants_1 = require("node-opcua-constants");
8
- const node_opcua_nodeid_1 = require("node-opcua-nodeid");
9
- const utils = require("node-opcua-utils");
10
- const node_opcua_variant_1 = require("node-opcua-variant");
11
- const read_processed_details_1 = require("./read_processed_details");
12
- // import { HistoryServerCapabilities } from "node-opcua-server";
13
- /*
14
- HasProperty Variable AccessHistoryDataCapability Boolean PropertyType Mandatory
15
- HasProperty Variable AccessHistoryEventsCapability Boolean PropertyType Mandatory
16
- HasProperty Variable MaxReturnDataValues UInt32 PropertyType Mandatory
17
- HasProperty Variable MaxReturnEventValues UInt32 PropertyType Mandatory
18
- HasProperty Variable InsertDataCapability Boolean PropertyType Mandatory
19
- HasProperty Variable ReplaceDataCapability Boolean PropertyType Mandatory
20
- HasProperty Variable UpdateDataCapability Boolean PropertyType Mandatory
21
- HasProperty Variable DeleteRawCapability Boolean PropertyType Mandatory
22
- HasProperty Variable DeleteAtTimeCapability Boolean PropertyType Mandatory
23
- HasProperty Variable InsertEventCapability Boolean PropertyType Mandatory
24
- HasProperty Variable ReplaceEventCapability Boolean PropertyType Mandatory
25
- HasProperty Variable UpdateEventCapability Boolean PropertyType Mandatory
26
- HasProperty Variable DeleteEventCapability Boolean PropertyType Mandatory
27
- HasProperty Variable InsertAnnotationsCapability Boolean PropertyType Mandatory
28
- */
29
- const historicalCapabilitiesDefaultProperties /*: HistoryServerCapabilities */ = {
30
- accessHistoryDataCapability: true,
31
- accessHistoryEventsCapability: true,
32
- deleteAtTimeCapability: false,
33
- deleteEventCapability: false,
34
- deleteRawCapability: false,
35
- insertAnnotationCapability: false,
36
- insertDataCapability: false,
37
- insertEventCapability: false,
38
- maxReturnDataValues: 0,
39
- maxReturnEventValues: 0,
40
- replaceDataCapability: false,
41
- replaceEventCapability: false,
42
- updateDataCapability: false,
43
- updateEventCapability: false // Boolean PropertyType Mandatory
44
- };
45
- function createHistoryServerCapabilities(addressSpace, serverCapabilities) {
46
- /* istanbul ignore next */
47
- if (serverCapabilities.browseName.toString() !== "ServerCapabilities") {
48
- throw new Error("Expecting server Capabilities");
49
- }
50
- const historyServerCapabilitiesType = addressSpace.getNamespace(0).findObjectType("HistoryServerCapabilitiesType");
51
- /* istanbul ignore next */
52
- if (!historyServerCapabilitiesType) {
53
- throw new Error("Cannot find HistoryServerCapabilitiesType");
54
- }
55
- return historyServerCapabilitiesType.instantiate({
56
- browseName: "HistoryServerCapabilities",
57
- componentOf: serverCapabilities
58
- });
59
- }
60
- exports.createHistoryServerCapabilities = createHistoryServerCapabilities;
61
- function setHistoricalServerCapabilities(historyServerCapabilities, defaultProperties) {
62
- function setBoolean(propName) {
63
- const lowerCase = utils.lowerFirstLetter(propName);
64
- /* istanbul ignore next */
65
- if (!defaultProperties.hasOwnProperty(lowerCase)) {
66
- throw new Error("cannot find " + lowerCase);
67
- }
68
- const value = defaultProperties[lowerCase];
69
- const prop = historyServerCapabilities.getChildByName(propName);
70
- /* istanbul ignore next */
71
- if (!prop) {
72
- throw new Error(" Cannot find property " + propName);
73
- }
74
- prop.setValueFromSource({ dataType: node_opcua_variant_1.DataType.Boolean, value });
75
- }
76
- function setUInt32(propName) {
77
- const lowerCase = utils.lowerFirstLetter(propName);
78
- /* istanbul ignore next */
79
- if (!historyServerCapabilities.hasOwnProperty(lowerCase)) {
80
- throw new Error("cannot find " + lowerCase);
81
- }
82
- const value = defaultProperties[lowerCase];
83
- const prop = historyServerCapabilities.getChildByName(propName);
84
- prop.setValueFromSource({ dataType: node_opcua_variant_1.DataType.UInt32, value });
85
- }
86
- setBoolean("AccessHistoryDataCapability");
87
- setBoolean("AccessHistoryEventsCapability");
88
- setUInt32("MaxReturnDataValues");
89
- setUInt32("MaxReturnEventValues");
90
- setBoolean("InsertDataCapability");
91
- setBoolean("ReplaceDataCapability");
92
- setBoolean("UpdateDataCapability");
93
- setBoolean("DeleteRawCapability");
94
- setBoolean("DeleteAtTimeCapability");
95
- setBoolean("InsertEventCapability");
96
- setBoolean("ReplaceEventCapability");
97
- setBoolean("UpdateEventCapability");
98
- setBoolean("DeleteEventCapability");
99
- /// FOUND A BUG HERE spec says InsertAnnotationsCapability
100
- /// Standard nodeset2 says InsertAnnotationCapability ( without s )
101
- // xx setBoolean("InsertAnnotationsCapability");
102
- }
103
- function addAggregateFunctionSupport(addressSpace, functionName) {
104
- /* istanbul ignore next */
105
- if (!functionName) {
106
- throw new Error("Invalid function name");
107
- }
108
- const serverCapabilities = addressSpace.rootFolder.objects.server.serverCapabilities;
109
- /* istanbul ignore next */
110
- if (!serverCapabilities.historyServerCapabilities) {
111
- throw new Error("missing serverCapabilities.historyServerCapabilities");
112
- }
113
- const aggregateFunctions = serverCapabilities.aggregateFunctions;
114
- const aggregateFunctionsInHist = serverCapabilities.historyServerCapabilities.aggregateFunctions;
115
- const functionNodeId = node_opcua_nodeid_1.makeNodeId(functionName);
116
- const functionNode = addressSpace.getNamespace(0).findNode(functionNodeId);
117
- /* istanbul ignore next */
118
- if (!functionNode) {
119
- throw new Error("Cannot find node " + functionName + " in addressSpace");
120
- }
121
- aggregateFunctions.addReference({
122
- nodeId: functionNode.nodeId,
123
- referenceType: "Organizes"
124
- });
125
- aggregateFunctionsInHist.addReference({
126
- nodeId: functionNode.nodeId,
127
- referenceType: "Organizes"
128
- });
129
- }
130
- function addAggregateSupport(addressSpace) {
131
- const aggregateConfigurationType = addressSpace.getNamespace(0).findObjectType("AggregateConfigurationType");
132
- /* istanbul ignore next */
133
- if (!aggregateConfigurationType) {
134
- throw new Error("addressSpace do not expose AggregateConfigurationType");
135
- }
136
- const aggregateFunctionType = addressSpace.getNamespace(0).findObjectType("AggregateFunctionType");
137
- /* istanbul ignore next */
138
- if (!aggregateFunctionType) {
139
- throw new Error("addressSpace do not expose AggregateFunctionType");
140
- }
141
- const serverObject = addressSpace.rootFolder.objects.getFolderElementByName("Server");
142
- /* istanbul ignore next */
143
- if (!serverObject) {
144
- throw new Error("addressSpace do not expose a ServerObject");
145
- }
146
- // xx serverObject.
147
- const serverCapabilities = serverObject.getChildByName("ServerCapabilities");
148
- // Let see if HistoryServer Capabilities object exists
149
- let historyServerCapabilities = serverCapabilities.getChildByName("HistoryServerCapabilities");
150
- /* istanbul ignore next */
151
- if (!historyServerCapabilities) {
152
- historyServerCapabilities = createHistoryServerCapabilities(addressSpace, serverCapabilities);
153
- }
154
- setHistoricalServerCapabilities(historyServerCapabilities, historicalCapabilitiesDefaultProperties);
155
- addAggregateFunctionSupport(addressSpace, node_opcua_constants_1.AggregateFunction.Interpolative);
156
- addAggregateFunctionSupport(addressSpace, node_opcua_constants_1.AggregateFunction.Minimum);
157
- addAggregateFunctionSupport(addressSpace, node_opcua_constants_1.AggregateFunction.Maximum);
158
- addAggregateFunctionSupport(addressSpace, node_opcua_constants_1.AggregateFunction.Average);
159
- const addressSpaceInternal = addressSpace;
160
- addressSpaceInternal._readProcessedDetails = read_processed_details_1.readProcessedDetails;
161
- }
162
- exports.addAggregateSupport = addAggregateSupport;
163
- function installAggregateConfigurationOptions(node, options) {
164
- const nodePriv = node;
165
- const aggregateConfiguration = nodePriv.$historicalDataConfiguration.aggregateConfiguration;
166
- aggregateConfiguration.percentDataBad.setValueFromSource({ dataType: "Byte", value: options.percentDataBad });
167
- aggregateConfiguration.percentDataGood.setValueFromSource({ dataType: "Byte", value: options.percentDataGood });
168
- aggregateConfiguration.treatUncertainAsBad.setValueFromSource({
169
- dataType: "Boolean",
170
- value: options.treatUncertainAsBad
171
- });
172
- aggregateConfiguration.useSlopedExtrapolation.setValueFromSource({
173
- dataType: "Boolean",
174
- value: options.useSlopedExtrapolation
175
- });
176
- nodePriv.$historicalDataConfiguration.stepped.setValueFromSource({
177
- dataType: "Boolean",
178
- value: options.stepped
179
- });
180
- }
181
- exports.installAggregateConfigurationOptions = installAggregateConfigurationOptions;
182
- function getAggregateConfiguration(node) {
183
- const nodePriv = node;
184
- /* istanbul ignore next */
185
- if (!nodePriv.$historicalDataConfiguration) {
186
- throw new Error("internal error");
187
- }
188
- const aggregateConfiguration = nodePriv.$historicalDataConfiguration.aggregateConfiguration;
189
- // Beware ! Stepped value comes from Historical Configuration !
190
- const stepped = nodePriv.$historicalDataConfiguration.stepped.readValue().value.value;
191
- return {
192
- percentDataBad: aggregateConfiguration.percentDataBad.readValue().value.value,
193
- percentDataGood: aggregateConfiguration.percentDataGood.readValue().value.value,
194
- stepped,
195
- treatUncertainAsBad: aggregateConfiguration.treatUncertainAsBad.readValue().value.value,
196
- // xx stepped: aggregateConfiguration.stepped.readValue().value,
197
- useSlopedExtrapolation: aggregateConfiguration.useSlopedExtrapolation.readValue().value.value
198
- };
199
- }
200
- exports.getAggregateConfiguration = getAggregateConfiguration;
201
- //# sourceMappingURL=aggregates.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"aggregates.js","sourceRoot":"","sources":["../source/aggregates.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { UAVariable } from "node-opcua-address-space";
2
- import { DataValue } from "node-opcua-data-value";
3
- export declare function getAverageData(node: UAVariable, processingInterval: number, startDate: Date, endDate: Date, callback: (err: Error | null, dataValues?: DataValue[]) => void): void;
package/dist2/average.js DELETED
@@ -1,61 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getAverageData = void 0;
4
- const node_opcua_data_value_1 = require("node-opcua-data-value");
5
- const node_opcua_variant_1 = require("node-opcua-variant");
6
- const common_1 = require("./common");
7
- const interval_1 = require("./interval");
8
- const node_opcua_status_code_1 = require("node-opcua-status-code");
9
- function calculateIntervalAverageValue(interval, options) {
10
- const indexStart = interval.index;
11
- let statusCode;
12
- let isPartial = interval.isPartial;
13
- let isRaw = false;
14
- let hasBad = false;
15
- const values = [];
16
- for (let i = indexStart; i < indexStart + interval.count; i++) {
17
- const dataValue = interval.dataValues[i];
18
- if (dataValue.statusCode === node_opcua_status_code_1.StatusCodes.BadNoData) {
19
- isPartial = true;
20
- continue;
21
- }
22
- if (!interval_1.isGood(dataValue.statusCode)) {
23
- hasBad = true;
24
- continue;
25
- }
26
- values.push(dataValue.value.value);
27
- }
28
- if (isRaw) {
29
- if (hasBad) {
30
- statusCode = node_opcua_status_code_1.StatusCodes.UncertainDataSubNormal;
31
- }
32
- else {
33
- statusCode = node_opcua_status_code_1.StatusCodes.Good;
34
- }
35
- }
36
- else if (hasBad) {
37
- statusCode = node_opcua_status_code_1.StatusCode.makeStatusCode(node_opcua_status_code_1.StatusCodes.UncertainDataSubNormal, "HistorianCalculated");
38
- }
39
- else {
40
- statusCode = node_opcua_status_code_1.StatusCode.makeStatusCode(node_opcua_status_code_1.StatusCodes.Good, "HistorianCalculated");
41
- }
42
- if (values.length === 0) {
43
- return new node_opcua_data_value_1.DataValue({
44
- sourceTimestamp: interval.startTime,
45
- statusCode: node_opcua_status_code_1.StatusCodes.BadNoData,
46
- });
47
- }
48
- const mean = values.reduce((p, c) => p + c, 0) / values.length;
49
- return new node_opcua_data_value_1.DataValue({
50
- sourceTimestamp: interval.startTime,
51
- statusCode: statusCode,
52
- value: {
53
- dataType: node_opcua_variant_1.DataType.Double, value: mean
54
- }
55
- });
56
- }
57
- function getAverageData(node, processingInterval, startDate, endDate, callback) {
58
- return common_1.getAggregateData(node, processingInterval, startDate, endDate, calculateIntervalAverageValue, callback);
59
- }
60
- exports.getAverageData = getAverageData;
61
- //# sourceMappingURL=average.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"average.js","sourceRoot":"","sources":["../source/average.ts"],"names":[],"mappings":";;;AACA,iEAAkD;AAClD,2DAAuD;AACvD,qCAA4C;AAC5C,yCAA6E;AAC7E,mEAAiE;AAEjE,SAAS,6BAA6B,CAClC,QAAkB,EAClB,OAAsC;IAGtC,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC;IAClC,IAAI,UAAsB,CAAC;IAC3B,IAAI,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;IAEnC,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,UAAU,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QAE3D,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAEzC,IAAI,SAAS,CAAC,UAAU,KAAK,oCAAW,CAAC,SAAS,EAAE;YAChD,SAAS,GAAG,IAAI,CAAC;YACjB,SAAS;SACZ;QAED,IAAI,CAAC,iBAAM,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE;YAC/B,MAAM,GAAG,IAAI,CAAC;YACd,SAAS;SACZ;QACD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KACtC;IAED,IAAI,KAAK,EAAE;QACP,IAAI,MAAM,EAAE;YACR,UAAU,GAAG,oCAAW,CAAC,sBAAsB,CAAC;SACnD;aAAM;YACH,UAAU,GAAG,oCAAW,CAAC,IAAI,CAAC;SACjC;KACJ;SAAM,IAAI,MAAM,EAAE;QACf,UAAU,GAAG,mCAAU,CAAC,cAAc,CAAC,oCAAW,CAAC,sBAAsB,EAAE,qBAAqB,CAAC,CAAC;KACrG;SAAM;QACH,UAAU,GAAG,mCAAU,CAAC,cAAc,CAAC,oCAAW,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;KACnF;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QACrB,OAAO,IAAI,iCAAS,CAAC;YACjB,eAAe,EAAE,QAAQ,CAAC,SAAS;YACnC,UAAU,EAAE,oCAAW,CAAC,SAAS;SACpC,CAAC,CAAC;KACN;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IAE/D,OAAO,IAAI,iCAAS,CAAC;QACjB,eAAe,EAAE,QAAQ,CAAC,SAAS;QACnC,UAAU,EAAE,UAAwB;QACpC,KAAK,EAAE;YACH,QAAQ,EAAE,6BAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI;SACzC;KACJ,CAAC,CAAC;AACP,CAAC;AAED,SAAgB,cAAc,CAC1B,IAAgB,EAChB,kBAA0B,EAC1B,SAAe,EACf,OAAa,EACb,QAA+D;IAE/D,OAAO,yBAAgB,CAAC,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,OAAO,EAAE,6BAA6B,EAAE,QAAQ,CAAC,CAAC;AACnH,CAAC;AARD,wCAQC"}
package/dist2/common.d.ts DELETED
@@ -1,8 +0,0 @@
1
- /**
2
- * @module node-opca-aggregates
3
- */
4
- import { UAVariable } from "node-opcua-address-space";
5
- import { DataValue } from "node-opcua-data-value";
6
- import { Interval, AggregateConfigurationOptionsEx } from "./interval";
7
- export declare function getAggregateData(node: UAVariable, processingInterval: number, startDate: Date, endDate: Date, lambda: (interval: Interval, aggregateConfiguration: AggregateConfigurationOptionsEx) => DataValue, callback: (err: Error | null, dataValues?: DataValue[]) => void): void;
8
- export declare function interpolateValue(dataValue1: DataValue, dataValue2: DataValue, date: Date): DataValue;