node-opcua-address-space 2.78.0 → 2.79.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/dist/src/alarms_and_conditions/ua_limit_alarm_impl.d.ts +1 -1
- package/dist/src/base_node_impl.d.ts +1 -0
- package/dist/src/base_node_impl.js +30 -3
- package/dist/src/base_node_impl.js.map +1 -1
- package/dist/src/historical_access/address_space_historical_data_node.js +14 -3
- package/dist/src/historical_access/address_space_historical_data_node.js.map +1 -1
- package/dist/src/nodeset_tools/nodeset_to_xml.js +45 -9
- package/dist/src/nodeset_tools/nodeset_to_xml.js.map +1 -1
- package/dist/src/ua_method_impl.d.ts +2 -1
- package/dist/src/ua_method_impl.js +9 -1
- package/dist/src/ua_method_impl.js.map +1 -1
- package/dist/src/ua_variable_impl.d.ts +5 -0
- package/dist/src/ua_variable_impl.js +32 -2
- package/dist/src/ua_variable_impl.js.map +1 -1
- package/package.json +26 -26
- package/src/alarms_and_conditions/ua_limit_alarm_impl.ts +1 -1
- package/src/base_node_impl.ts +34 -3
- package/src/historical_access/address_space_historical_data_node.ts +18 -3
- package/src/nodeset_tools/nodeset_to_xml.ts +57 -13
- package/src/ua_method_impl.ts +9 -3
- package/src/ua_variable_impl.ts +36 -4
- package/test_helpers/test_fixtures/mini.Node.Set2.xml +178 -0
- package/dist/source/helpers/check_event_clause.d.ts +0 -17
- package/dist/source/helpers/check_event_clause.js +0 -53
- package/dist/source/helpers/check_event_clause.js.map +0 -1
- package/dist/src/alarms_and_conditions/check_where_clause.d.ts +0 -4
- package/dist/src/alarms_and_conditions/check_where_clause.js +0 -110
- package/dist/src/alarms_and_conditions/check_where_clause.js.map +0 -1
- package/dist/src/alarms_and_conditions/condition_info.d.ts +0 -27
- package/dist/src/alarms_and_conditions/condition_info.js +0 -55
- package/dist/src/alarms_and_conditions/condition_info.js.map +0 -1
- package/dist/src/alarms_and_conditions/condition_snapshot.d.ts +0 -233
- package/dist/src/alarms_and_conditions/condition_snapshot.js +0 -667
- package/dist/src/alarms_and_conditions/condition_snapshot.js.map +0 -1
- package/dist/src/alarms_and_conditions/extract_event_fields.d.ts +0 -10
- package/dist/src/alarms_and_conditions/extract_event_fields.js +0 -90
- package/dist/src/alarms_and_conditions/extract_event_fields.js.map +0 -1
- package/dist/src/data_access/ua_multistate_value_discrete.d.ts +0 -51
- package/dist/src/data_access/ua_multistate_value_discrete.js +0 -250
- package/dist/src/data_access/ua_multistate_value_discrete.js.map +0 -1
- package/dist/src/data_access/ua_two_state_discrete.d.ts +0 -25
- package/dist/src/data_access/ua_two_state_discrete.js +0 -154
- package/dist/src/data_access/ua_two_state_discrete.js.map +0 -1
- package/dist/src/nodeset_tools/typedictionary_to_xml.d.ts +0 -2
- package/dist/src/nodeset_tools/typedictionary_to_xml.js +0 -155
- package/dist/src/nodeset_tools/typedictionary_to_xml.js.map +0 -1
|
@@ -4555,4 +4555,182 @@
|
|
|
4555
4555
|
<Field Name="Opaque" Value="3" />
|
|
4556
4556
|
</Definition>
|
|
4557
4557
|
</UADataType>
|
|
4558
|
+
|
|
4559
|
+
<UAObjectType NodeId="i=11187" BrowseName="AggregateConfigurationType">
|
|
4560
|
+
<DisplayName>AggregateConfigurationType</DisplayName>
|
|
4561
|
+
<References>
|
|
4562
|
+
<Reference ReferenceType="HasProperty">i=11188</Reference>
|
|
4563
|
+
<Reference ReferenceType="HasProperty">i=11189</Reference>
|
|
4564
|
+
<Reference ReferenceType="HasProperty">i=11190</Reference>
|
|
4565
|
+
<Reference ReferenceType="HasProperty">i=11191</Reference>
|
|
4566
|
+
<Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
|
|
4567
|
+
</References>
|
|
4568
|
+
</UAObjectType>
|
|
4569
|
+
<UAVariable NodeId="i=11188" BrowseName="TreatUncertainAsBad" ParentNodeId="i=11187" DataType="Boolean">
|
|
4570
|
+
<DisplayName>TreatUncertainAsBad</DisplayName>
|
|
4571
|
+
<References>
|
|
4572
|
+
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
|
|
4573
|
+
<Reference ReferenceType="HasModellingRule">i=78</Reference>
|
|
4574
|
+
<Reference ReferenceType="HasProperty" IsForward="false">i=11187</Reference>
|
|
4575
|
+
</References>
|
|
4576
|
+
</UAVariable>
|
|
4577
|
+
<UAVariable NodeId="i=11189" BrowseName="PercentDataBad" ParentNodeId="i=11187" DataType="Byte">
|
|
4578
|
+
<DisplayName>PercentDataBad</DisplayName>
|
|
4579
|
+
<References>
|
|
4580
|
+
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
|
|
4581
|
+
<Reference ReferenceType="HasModellingRule">i=78</Reference>
|
|
4582
|
+
<Reference ReferenceType="HasProperty" IsForward="false">i=11187</Reference>
|
|
4583
|
+
</References>
|
|
4584
|
+
</UAVariable>
|
|
4585
|
+
<UAVariable NodeId="i=11190" BrowseName="PercentDataGood" ParentNodeId="i=11187" DataType="Byte">
|
|
4586
|
+
<DisplayName>PercentDataGood</DisplayName>
|
|
4587
|
+
<References>
|
|
4588
|
+
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
|
|
4589
|
+
<Reference ReferenceType="HasModellingRule">i=78</Reference>
|
|
4590
|
+
<Reference ReferenceType="HasProperty" IsForward="false">i=11187</Reference>
|
|
4591
|
+
</References>
|
|
4592
|
+
</UAVariable>
|
|
4593
|
+
<UAVariable NodeId="i=11191" BrowseName="UseSlopedExtrapolation" ParentNodeId="i=11187" DataType="Boolean">
|
|
4594
|
+
<DisplayName>UseSlopedExtrapolation</DisplayName>
|
|
4595
|
+
<References>
|
|
4596
|
+
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
|
|
4597
|
+
<Reference ReferenceType="HasModellingRule">i=78</Reference>
|
|
4598
|
+
<Reference ReferenceType="HasProperty" IsForward="false">i=11187</Reference>
|
|
4599
|
+
</References>
|
|
4600
|
+
</UAVariable>
|
|
4601
|
+
|
|
4602
|
+
<UAObjectType NodeId="i=2318" BrowseName="HistoricalDataConfigurationType">
|
|
4603
|
+
<DisplayName>HistoricalDataConfigurationType</DisplayName>
|
|
4604
|
+
<References>
|
|
4605
|
+
<Reference ReferenceType="HasComponent">i=3059</Reference>
|
|
4606
|
+
<Reference ReferenceType="HasComponent">i=11876</Reference>
|
|
4607
|
+
<Reference ReferenceType="HasProperty">i=2323</Reference>
|
|
4608
|
+
<Reference ReferenceType="HasProperty">i=2324</Reference>
|
|
4609
|
+
<Reference ReferenceType="HasProperty">i=2325</Reference>
|
|
4610
|
+
<Reference ReferenceType="HasProperty">i=2326</Reference>
|
|
4611
|
+
<Reference ReferenceType="HasProperty">i=2327</Reference>
|
|
4612
|
+
<Reference ReferenceType="HasProperty">i=2328</Reference>
|
|
4613
|
+
<Reference ReferenceType="HasProperty">i=11499</Reference>
|
|
4614
|
+
<Reference ReferenceType="HasProperty">i=11500</Reference>
|
|
4615
|
+
<Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
|
|
4616
|
+
</References>
|
|
4617
|
+
</UAObjectType>
|
|
4618
|
+
<UAVariable NodeId="i=2323" BrowseName="Stepped" ParentNodeId="i=2318" DataType="Boolean">
|
|
4619
|
+
<DisplayName>Stepped</DisplayName>
|
|
4620
|
+
<References>
|
|
4621
|
+
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
|
|
4622
|
+
<Reference ReferenceType="HasModellingRule">i=78</Reference>
|
|
4623
|
+
<Reference ReferenceType="HasProperty" IsForward="false">i=2318</Reference>
|
|
4624
|
+
</References>
|
|
4625
|
+
</UAVariable>
|
|
4626
|
+
<UAVariable NodeId="i=2324" BrowseName="Definition" ParentNodeId="i=2318" DataType="String">
|
|
4627
|
+
<DisplayName>Definition</DisplayName>
|
|
4628
|
+
<References>
|
|
4629
|
+
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
|
|
4630
|
+
<Reference ReferenceType="HasModellingRule">i=80</Reference>
|
|
4631
|
+
<Reference ReferenceType="HasProperty" IsForward="false">i=2318</Reference>
|
|
4632
|
+
</References>
|
|
4633
|
+
</UAVariable>
|
|
4634
|
+
<UAVariable NodeId="i=2325" BrowseName="MaxTimeInterval" ParentNodeId="i=2318" DataType="i=290">
|
|
4635
|
+
<DisplayName>MaxTimeInterval</DisplayName>
|
|
4636
|
+
<References>
|
|
4637
|
+
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
|
|
4638
|
+
<Reference ReferenceType="HasModellingRule">i=80</Reference>
|
|
4639
|
+
<Reference ReferenceType="HasProperty" IsForward="false">i=2318</Reference>
|
|
4640
|
+
</References>
|
|
4641
|
+
</UAVariable>
|
|
4642
|
+
<UAVariable NodeId="i=2326" BrowseName="MinTimeInterval" ParentNodeId="i=2318" DataType="i=290">
|
|
4643
|
+
<DisplayName>MinTimeInterval</DisplayName>
|
|
4644
|
+
<References>
|
|
4645
|
+
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
|
|
4646
|
+
<Reference ReferenceType="HasModellingRule">i=80</Reference>
|
|
4647
|
+
<Reference ReferenceType="HasProperty" IsForward="false">i=2318</Reference>
|
|
4648
|
+
</References>
|
|
4649
|
+
</UAVariable>
|
|
4650
|
+
<UAVariable NodeId="i=2327" BrowseName="ExceptionDeviation" ParentNodeId="i=2318" DataType="Double">
|
|
4651
|
+
<DisplayName>ExceptionDeviation</DisplayName>
|
|
4652
|
+
<References>
|
|
4653
|
+
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
|
|
4654
|
+
<Reference ReferenceType="HasModellingRule">i=80</Reference>
|
|
4655
|
+
<Reference ReferenceType="HasProperty" IsForward="false">i=2318</Reference>
|
|
4656
|
+
</References>
|
|
4657
|
+
</UAVariable>
|
|
4658
|
+
<UAVariable NodeId="i=2328" BrowseName="ExceptionDeviationFormat" ParentNodeId="i=2318" DataType="i=890">
|
|
4659
|
+
<DisplayName>ExceptionDeviationFormat</DisplayName>
|
|
4660
|
+
<References>
|
|
4661
|
+
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
|
|
4662
|
+
<Reference ReferenceType="HasModellingRule">i=80</Reference>
|
|
4663
|
+
<Reference ReferenceType="HasProperty" IsForward="false">i=2318</Reference>
|
|
4664
|
+
</References>
|
|
4665
|
+
</UAVariable>
|
|
4666
|
+
<UAVariable NodeId="i=11499" BrowseName="StartOfArchive" ParentNodeId="i=2318" DataType="i=294">
|
|
4667
|
+
<DisplayName>StartOfArchive</DisplayName>
|
|
4668
|
+
<References>
|
|
4669
|
+
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
|
|
4670
|
+
<Reference ReferenceType="HasModellingRule">i=80</Reference>
|
|
4671
|
+
<Reference ReferenceType="HasProperty" IsForward="false">i=2318</Reference>
|
|
4672
|
+
</References>
|
|
4673
|
+
</UAVariable>
|
|
4674
|
+
<UAVariable NodeId="i=11500" BrowseName="StartOfOnlineArchive" ParentNodeId="i=2318" DataType="i=294">
|
|
4675
|
+
<DisplayName>StartOfOnlineArchive</DisplayName>
|
|
4676
|
+
<References>
|
|
4677
|
+
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
|
|
4678
|
+
<Reference ReferenceType="HasModellingRule">i=80</Reference>
|
|
4679
|
+
<Reference ReferenceType="HasProperty" IsForward="false">i=2318</Reference>
|
|
4680
|
+
</References>
|
|
4681
|
+
</UAVariable>
|
|
4682
|
+
|
|
4683
|
+
<UAObject NodeId="i=3059" BrowseName="AggregateConfiguration" ParentNodeId="i=2318">
|
|
4684
|
+
<DisplayName>AggregateConfiguration</DisplayName>
|
|
4685
|
+
<References>
|
|
4686
|
+
<Reference ReferenceType="HasProperty">i=11168</Reference>
|
|
4687
|
+
<Reference ReferenceType="HasProperty">i=11169</Reference>
|
|
4688
|
+
<Reference ReferenceType="HasProperty">i=11170</Reference>
|
|
4689
|
+
<Reference ReferenceType="HasProperty">i=11171</Reference>
|
|
4690
|
+
<Reference ReferenceType="HasTypeDefinition">i=11187</Reference>
|
|
4691
|
+
<Reference ReferenceType="HasModellingRule">i=78</Reference>
|
|
4692
|
+
<Reference ReferenceType="HasComponent" IsForward="false">i=2318</Reference>
|
|
4693
|
+
</References>
|
|
4694
|
+
</UAObject>
|
|
4695
|
+
<UAVariable NodeId="i=11168" BrowseName="TreatUncertainAsBad" ParentNodeId="i=3059" DataType="Boolean">
|
|
4696
|
+
<DisplayName>TreatUncertainAsBad</DisplayName>
|
|
4697
|
+
<References>
|
|
4698
|
+
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
|
|
4699
|
+
<Reference ReferenceType="HasModellingRule">i=78</Reference>
|
|
4700
|
+
<Reference ReferenceType="HasProperty" IsForward="false">i=3059</Reference>
|
|
4701
|
+
</References>
|
|
4702
|
+
</UAVariable>
|
|
4703
|
+
<UAVariable NodeId="i=11169" BrowseName="PercentDataBad" ParentNodeId="i=3059" DataType="Byte">
|
|
4704
|
+
<DisplayName>PercentDataBad</DisplayName>
|
|
4705
|
+
<References>
|
|
4706
|
+
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
|
|
4707
|
+
<Reference ReferenceType="HasModellingRule">i=78</Reference>
|
|
4708
|
+
<Reference ReferenceType="HasProperty" IsForward="false">i=3059</Reference>
|
|
4709
|
+
</References>
|
|
4710
|
+
</UAVariable>
|
|
4711
|
+
<UAVariable NodeId="i=11170" BrowseName="PercentDataGood" ParentNodeId="i=3059" DataType="Byte">
|
|
4712
|
+
<DisplayName>PercentDataGood</DisplayName>
|
|
4713
|
+
<References>
|
|
4714
|
+
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
|
|
4715
|
+
<Reference ReferenceType="HasModellingRule">i=78</Reference>
|
|
4716
|
+
<Reference ReferenceType="HasProperty" IsForward="false">i=3059</Reference>
|
|
4717
|
+
</References>
|
|
4718
|
+
</UAVariable>
|
|
4719
|
+
<UAVariable NodeId="i=11171" BrowseName="UseSlopedExtrapolation" ParentNodeId="i=3059" DataType="Boolean">
|
|
4720
|
+
<DisplayName>UseSlopedExtrapolation</DisplayName>
|
|
4721
|
+
<References>
|
|
4722
|
+
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
|
|
4723
|
+
<Reference ReferenceType="HasModellingRule">i=78</Reference>
|
|
4724
|
+
<Reference ReferenceType="HasProperty" IsForward="false">i=3059</Reference>
|
|
4725
|
+
</References>
|
|
4726
|
+
</UAVariable>
|
|
4727
|
+
<UAObject NodeId="i=11876" BrowseName="AggregateFunctions" ParentNodeId="i=2318">
|
|
4728
|
+
<DisplayName>AggregateFunctions</DisplayName>
|
|
4729
|
+
<References>
|
|
4730
|
+
<Reference ReferenceType="HasTypeDefinition">i=61</Reference>
|
|
4731
|
+
<Reference ReferenceType="HasModellingRule">i=80</Reference>
|
|
4732
|
+
<Reference ReferenceType="HasComponent" IsForward="false">i=2318</Reference>
|
|
4733
|
+
</References>
|
|
4734
|
+
</UAObject>
|
|
4735
|
+
|
|
4558
4736
|
</UANodeSet>
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { SimpleAttributeOperand } from "node-opcua-service-filter";
|
|
2
|
-
import { StatusCode } from "node-opcua-status-code";
|
|
3
|
-
import { BaseNode, UAObjectType } from "node-opcua-address-space-base";
|
|
4
|
-
/**
|
|
5
|
-
* @method checkSelectClause
|
|
6
|
-
* @param parentNode
|
|
7
|
-
* @param selectClause
|
|
8
|
-
* @return {Array<StatusCode>}
|
|
9
|
-
*/
|
|
10
|
-
export declare function checkSelectClause(parentNode: BaseNode, selectClause: SimpleAttributeOperand): StatusCode;
|
|
11
|
-
/**
|
|
12
|
-
* @method checkSelectClauses
|
|
13
|
-
* @param eventTypeNode
|
|
14
|
-
* @param selectClauses
|
|
15
|
-
* @return an array of StatusCode
|
|
16
|
-
*/
|
|
17
|
-
export declare function checkSelectClauses(eventTypeNode: UAObjectType, selectClauses: SimpleAttributeOperand[]): StatusCode[];
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.checkSelectClauses = exports.checkSelectClause = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* @module node-opcua-address-space
|
|
6
|
-
*/
|
|
7
|
-
// tslint:disable:no-console
|
|
8
|
-
const node_opcua_data_model_1 = require("node-opcua-data-model");
|
|
9
|
-
const node_opcua_service_translate_browse_path_1 = require("node-opcua-service-translate-browse-path");
|
|
10
|
-
const node_opcua_status_code_1 = require("node-opcua-status-code");
|
|
11
|
-
/**
|
|
12
|
-
* @method checkSelectClause
|
|
13
|
-
* @param parentNode
|
|
14
|
-
* @param selectClause
|
|
15
|
-
* @return {Array<StatusCode>}
|
|
16
|
-
*/
|
|
17
|
-
function checkSelectClause(parentNode, selectClause) {
|
|
18
|
-
//
|
|
19
|
-
const addressSpace = parentNode.addressSpace;
|
|
20
|
-
// istanbul ignore next
|
|
21
|
-
if (selectClause.typeDefinitionId.isEmpty()) {
|
|
22
|
-
return node_opcua_status_code_1.StatusCodes.Good;
|
|
23
|
-
}
|
|
24
|
-
const eventTypeNode = addressSpace.findEventType(selectClause.typeDefinitionId);
|
|
25
|
-
if (!eventTypeNode || !(eventTypeNode.nodeClass === node_opcua_data_model_1.NodeClass.ObjectType)) {
|
|
26
|
-
// xx console.log("eventTypeNode = ",selectClause.typeDefinitionId.toString());
|
|
27
|
-
// xx console.log("eventTypeNode = ",eventTypeNode);
|
|
28
|
-
// istanbul ignore next
|
|
29
|
-
if (eventTypeNode) {
|
|
30
|
-
console.log(eventTypeNode.toString());
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
// istanbul ignore next
|
|
34
|
-
if (eventTypeNode.nodeClass !== node_opcua_data_model_1.NodeClass.ObjectType) {
|
|
35
|
-
throw new Error("Expecting a ObjectType");
|
|
36
|
-
}
|
|
37
|
-
// navigate to the innerNode specified by the browsePath [ QualifiedName]
|
|
38
|
-
const browsePath = (0, node_opcua_service_translate_browse_path_1.constructBrowsePathFromQualifiedName)(eventTypeNode, selectClause.browsePath);
|
|
39
|
-
const browsePathResult = addressSpace.browsePath(browsePath);
|
|
40
|
-
return browsePathResult.statusCode;
|
|
41
|
-
}
|
|
42
|
-
exports.checkSelectClause = checkSelectClause;
|
|
43
|
-
/**
|
|
44
|
-
* @method checkSelectClauses
|
|
45
|
-
* @param eventTypeNode
|
|
46
|
-
* @param selectClauses
|
|
47
|
-
* @return an array of StatusCode
|
|
48
|
-
*/
|
|
49
|
-
function checkSelectClauses(eventTypeNode, selectClauses) {
|
|
50
|
-
return selectClauses.map(checkSelectClause.bind(null, eventTypeNode));
|
|
51
|
-
}
|
|
52
|
-
exports.checkSelectClauses = checkSelectClauses;
|
|
53
|
-
//# sourceMappingURL=check_event_clause.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"check_event_clause.js","sourceRoot":"","sources":["../../../source/helpers/check_event_clause.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,4BAA4B;AAC5B,iEAAkD;AAElD,uGAAgG;AAChG,mEAAiE;AAGjE;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,UAAoB,EAAE,YAAoC;IACxF,EAAE;IACF,MAAM,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;IAE7C,uBAAuB;IACvB,IAAI,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE,EAAE;QACzC,OAAO,oCAAW,CAAC,IAAI,CAAC;KAC3B;IACD,MAAM,aAAa,GAAG,YAAY,CAAC,aAAa,CAAC,YAAY,CAAC,gBAAgB,CAAE,CAAC;IAEjF,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,aAAa,CAAC,SAAS,KAAK,iCAAS,CAAC,UAAU,CAAC,EAAE;QACvE,+EAA+E;QAC/E,oDAAoD;QACpD,uBAAuB;QACvB,IAAI,aAAa,EAAE;YACf,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;SACzC;KACJ;IAED,uBAAuB;IACvB,IAAI,aAAa,CAAC,SAAS,KAAK,iCAAS,CAAC,UAAU,EAAE;QAClD,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;KAC7C;IAED,yEAAyE;IACzE,MAAM,UAAU,GAAG,IAAA,+EAAoC,EAAC,aAAa,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IAChG,MAAM,gBAAgB,GAAG,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC7D,OAAO,gBAAgB,CAAC,UAAU,CAAC;AACvC,CAAC;AA5BD,8CA4BC;AAED;;;;;GAKG;AACH,SAAgB,kBAAkB,CAAC,aAA2B,EAAE,aAAuC;IACnG,OAAO,aAAa,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;AAC1E,CAAC;AAFD,gDAEC"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { ContentFilter } from "node-opcua-types";
|
|
2
|
-
import { IAddressSpace, IEventData, ISessionContext } from "node-opcua-address-space-base";
|
|
3
|
-
export declare function __checkWhereClause(addressSpace: IAddressSpace, sessionContext: ISessionContext, whereClause: ContentFilter, index: number, eventData: IEventData): boolean;
|
|
4
|
-
export declare function checkWhereClause(addressSpace: IAddressSpace, sessionContext: ISessionContext, whereClause: ContentFilter, eventData: IEventData): boolean;
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.checkWhereClause = exports.__checkWhereClause = void 0;
|
|
4
|
-
const node_opcua_types_1 = require("node-opcua-types");
|
|
5
|
-
const node_opcua_variant_1 = require("node-opcua-variant");
|
|
6
|
-
const node_opcua_data_model_1 = require("node-opcua-data-model");
|
|
7
|
-
const node_opcua_nodeid_1 = require("node-opcua-nodeid");
|
|
8
|
-
const session_context_1 = require("../../source/session_context");
|
|
9
|
-
const extract_event_fields_1 = require("./extract_event_fields");
|
|
10
|
-
function checkNot(addressSpace, sessionContext, whereClause, eventData, filteredOperands) {
|
|
11
|
-
if (filteredOperands[0] instanceof node_opcua_types_1.ElementOperand) {
|
|
12
|
-
const index = filteredOperands[0].index;
|
|
13
|
-
return !__checkWhereClause(addressSpace, sessionContext, whereClause, index, eventData);
|
|
14
|
-
}
|
|
15
|
-
return false;
|
|
16
|
-
}
|
|
17
|
-
function checkOfType(addressSpace, ofType, eventData) {
|
|
18
|
-
var _a;
|
|
19
|
-
// istanbul ignore next
|
|
20
|
-
if (!ofType) {
|
|
21
|
-
throw new Error("invalid operand");
|
|
22
|
-
}
|
|
23
|
-
// istanbul ignore next
|
|
24
|
-
if (ofType.value.dataType !== node_opcua_variant_1.DataType.NodeId) {
|
|
25
|
-
throw new Error("invalid operand type (expecting Nodeid");
|
|
26
|
-
}
|
|
27
|
-
const ofTypeNode = addressSpace.findNode(ofType.value.value);
|
|
28
|
-
// istanbul ignore next
|
|
29
|
-
if (!ofTypeNode) {
|
|
30
|
-
return false; // the ofType node is not known, we don't know what to do
|
|
31
|
-
}
|
|
32
|
-
// istanbul ignore next
|
|
33
|
-
if (ofTypeNode.nodeClass !== node_opcua_data_model_1.NodeClass.ObjectType) {
|
|
34
|
-
throw new Error("operand should be a ObjectType " + ofTypeNode.nodeId.toString());
|
|
35
|
-
}
|
|
36
|
-
const node = eventData.$eventDataSource;
|
|
37
|
-
if (!node) {
|
|
38
|
-
throw new Error("cannot find node " + ((_a = eventData.$eventDataSource) === null || _a === void 0 ? void 0 : _a.toString()));
|
|
39
|
-
}
|
|
40
|
-
if (node.nodeClass === node_opcua_data_model_1.NodeClass.ObjectType) {
|
|
41
|
-
return node.isSupertypeOf(ofTypeNode);
|
|
42
|
-
}
|
|
43
|
-
if (node.nodeClass === node_opcua_data_model_1.NodeClass.Object && node.typeDefinitionObj) {
|
|
44
|
-
return node.typeDefinitionObj.isSupertypeOf(ofTypeNode);
|
|
45
|
-
}
|
|
46
|
-
return true;
|
|
47
|
-
}
|
|
48
|
-
function _extractValue(operand, eventData) {
|
|
49
|
-
// eventData.readValue;
|
|
50
|
-
const v = (0, extract_event_fields_1.extractEventFields)(session_context_1.SessionContext.defaultContext, [operand], eventData)[0];
|
|
51
|
-
return v.value;
|
|
52
|
-
}
|
|
53
|
-
function checkInList(addressSpace, filterOperands, eventData) {
|
|
54
|
-
const operand0 = filterOperands[0];
|
|
55
|
-
if (!(operand0 instanceof node_opcua_types_1.SimpleAttributeOperand)) {
|
|
56
|
-
// unsupported case
|
|
57
|
-
return false;
|
|
58
|
-
}
|
|
59
|
-
const nodeId = _extractValue(operand0, eventData);
|
|
60
|
-
if (!nodeId) {
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
63
|
-
function _is(nodeId1, operandX) {
|
|
64
|
-
const operandNode = addressSpace.findNode(operandX.value.value);
|
|
65
|
-
if (!operandNode) {
|
|
66
|
-
return false;
|
|
67
|
-
}
|
|
68
|
-
return (0, node_opcua_nodeid_1.sameNodeId)(nodeId1, operandNode.nodeId);
|
|
69
|
-
}
|
|
70
|
-
for (let i = 1; i < filterOperands.length; i++) {
|
|
71
|
-
const filterOperand = filterOperands[i];
|
|
72
|
-
if (filterOperand instanceof node_opcua_types_1.LiteralOperand && _is(nodeId, filterOperand)) {
|
|
73
|
-
return true;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
function __checkWhereClause(addressSpace, sessionContext, whereClause, index, eventData) {
|
|
79
|
-
if (!whereClause.elements || whereClause.elements.length === 0) {
|
|
80
|
-
return true;
|
|
81
|
-
}
|
|
82
|
-
const element = whereClause.elements[index];
|
|
83
|
-
if (!element) {
|
|
84
|
-
return true;
|
|
85
|
-
}
|
|
86
|
-
switch (element.filterOperator) {
|
|
87
|
-
case node_opcua_types_1.FilterOperator.Not:
|
|
88
|
-
return checkNot(addressSpace, sessionContext, whereClause, eventData, element.filterOperands);
|
|
89
|
-
case node_opcua_types_1.FilterOperator.OfType:
|
|
90
|
-
return checkOfType(addressSpace, element.filterOperands[0], eventData);
|
|
91
|
-
case node_opcua_types_1.FilterOperator.InList:
|
|
92
|
-
return checkInList(addressSpace, element.filterOperands, eventData);
|
|
93
|
-
default:
|
|
94
|
-
// from Spec OPC Unified Architecture, Part 4 133 Release 1.04
|
|
95
|
-
// Any basic FilterOperator in Table 119 may be used in the whereClause, however, only the
|
|
96
|
-
// OfType_14 FilterOperator from Table 120 is permitted.
|
|
97
|
-
// tslint:disable-next-line: no-console
|
|
98
|
-
console.log("whereClause = ", whereClause.toString());
|
|
99
|
-
throw new Error("Only OfType operator are allowed in checkWhereClause");
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
exports.__checkWhereClause = __checkWhereClause;
|
|
103
|
-
function checkWhereClause(addressSpace, sessionContext, whereClause, eventData) {
|
|
104
|
-
if (!whereClause.elements || whereClause.elements.length === 0) {
|
|
105
|
-
return true;
|
|
106
|
-
}
|
|
107
|
-
return __checkWhereClause(addressSpace, sessionContext, whereClause, 0, eventData);
|
|
108
|
-
}
|
|
109
|
-
exports.checkWhereClause = checkWhereClause;
|
|
110
|
-
//# sourceMappingURL=check_where_clause.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"check_where_clause.js","sourceRoot":"","sources":["../../../src/alarms_and_conditions/check_where_clause.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { UInt16 } from "node-opcua-basic-types";
|
|
2
|
-
import { LocalizedText } from "node-opcua-data-model";
|
|
3
|
-
import { StatusCode } from "node-opcua-status-code";
|
|
4
|
-
import { ConditionInfoOptions } from "../../source/interfaces/alarms_and_conditions/condition_info_i";
|
|
5
|
-
export interface ConditionInfo {
|
|
6
|
-
message: LocalizedText | null;
|
|
7
|
-
quality: StatusCode | null;
|
|
8
|
-
severity: UInt16 | null;
|
|
9
|
-
retain: boolean | null;
|
|
10
|
-
isDifferentFrom(otherConditionInfo: ConditionInfo): boolean;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* @class ConditionInfo
|
|
14
|
-
* @param options {Object}
|
|
15
|
-
* @param options.message {String|LocalizedText} the event message
|
|
16
|
-
* @param options.severity {UInt16} severity
|
|
17
|
-
* @param options.quality {StatusCode} quality
|
|
18
|
-
* @param options.retain {Boolean} retain flag
|
|
19
|
-
* @constructor
|
|
20
|
-
*/
|
|
21
|
-
export declare class ConditionInfo {
|
|
22
|
-
message: LocalizedText | null;
|
|
23
|
-
quality: StatusCode | null;
|
|
24
|
-
severity: UInt16 | null;
|
|
25
|
-
retain: boolean | null;
|
|
26
|
-
constructor(options: ConditionInfoOptions);
|
|
27
|
-
}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ConditionInfo = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* @module node-opcua-address-space.AlarmsAndConditions
|
|
6
|
-
*/
|
|
7
|
-
const node_opcua_assert_1 = require("node-opcua-assert");
|
|
8
|
-
const node_opcua_data_model_1 = require("node-opcua-data-model");
|
|
9
|
-
/**
|
|
10
|
-
* @class ConditionInfo
|
|
11
|
-
* @param options {Object}
|
|
12
|
-
* @param options.message {String|LocalizedText} the event message
|
|
13
|
-
* @param options.severity {UInt16} severity
|
|
14
|
-
* @param options.quality {StatusCode} quality
|
|
15
|
-
* @param options.retain {Boolean} retain flag
|
|
16
|
-
* @constructor
|
|
17
|
-
*/
|
|
18
|
-
class ConditionInfo {
|
|
19
|
-
constructor(options) {
|
|
20
|
-
this.message = null;
|
|
21
|
-
this.quality = null;
|
|
22
|
-
this.severity = 0;
|
|
23
|
-
this.retain = false;
|
|
24
|
-
this.severity = null;
|
|
25
|
-
this.quality = null;
|
|
26
|
-
this.message = null;
|
|
27
|
-
this.retain = null;
|
|
28
|
-
if (Object.prototype.hasOwnProperty.call(options, "message") && options.message) {
|
|
29
|
-
this.message = node_opcua_data_model_1.LocalizedText.coerce(options.message);
|
|
30
|
-
}
|
|
31
|
-
if (Object.prototype.hasOwnProperty.call(options, "quality") && options.quality !== null) {
|
|
32
|
-
this.quality = options.quality;
|
|
33
|
-
}
|
|
34
|
-
if (Object.prototype.hasOwnProperty.call(options, "severity") && options.severity !== null) {
|
|
35
|
-
(0, node_opcua_assert_1.assert)(typeof options.severity === "number");
|
|
36
|
-
this.severity = options.severity;
|
|
37
|
-
}
|
|
38
|
-
if (Object.prototype.hasOwnProperty.call(options, "retain") && options.retain !== null) {
|
|
39
|
-
(0, node_opcua_assert_1.assert)(typeof options.retain === "boolean");
|
|
40
|
-
this.retain = options.retain;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* @method isDifferentFrom
|
|
45
|
-
* @param otherConditionInfo {ConditionInfo}
|
|
46
|
-
* @return {Boolean}
|
|
47
|
-
*/
|
|
48
|
-
isDifferentFrom(otherConditionInfo) {
|
|
49
|
-
return (this.severity !== otherConditionInfo.severity ||
|
|
50
|
-
this.quality !== otherConditionInfo.quality ||
|
|
51
|
-
this.message !== otherConditionInfo.message);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
exports.ConditionInfo = ConditionInfo;
|
|
55
|
-
//# sourceMappingURL=condition_info.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"condition_info.js","sourceRoot":"","sources":["../../../src/alarms_and_conditions/condition_info.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,yDAA2C;AAE3C,iEAAyE;AAWzE;;;;;;;;GAQG;AACH,MAAa,aAAa;IAMtB,YAAY,OAA6B;QALlC,YAAO,GAAyB,IAAI,CAAC;QACrC,YAAO,GAAsB,IAAI,CAAC;QAClC,aAAQ,GAAkB,CAAC,CAAC;QAC5B,WAAM,GAAmB,KAAK,CAAC;QAGlC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAEnB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE;YAC7E,IAAI,CAAC,OAAO,GAAG,qCAAa,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;SACxD;QACD,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE;YACtF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAQ,CAAC;SACnC;QACD,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE;YACxF,IAAA,0BAAM,EAAC,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;YAC7C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAS,CAAC;SACrC;QACD,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE;YACpF,IAAA,0BAAM,EAAC,OAAO,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;YAC5C,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAO,CAAC;SACjC;IACL,CAAC;IAED;;;;OAIG;IACI,eAAe,CAAC,kBAAiC;QACpD,OAAO,CACH,IAAI,CAAC,QAAQ,KAAK,kBAAkB,CAAC,QAAQ;YAC7C,IAAI,CAAC,OAAO,KAAK,kBAAkB,CAAC,OAAO;YAC3C,IAAI,CAAC,OAAO,KAAK,kBAAkB,CAAC,OAAO,CAC9C,CAAC;IACN,CAAC;CACJ;AAxCD,sCAwCC"}
|