node-opcua-address-space 2.76.1 → 2.76.2

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 (289) hide show
  1. package/dist/source/address_space_ts.d.ts +118 -118
  2. package/dist/source/address_space_ts.js +17 -17
  3. package/dist/source/continuation_points/continuation_point_manager.d.ts +32 -32
  4. package/dist/source/continuation_points/continuation_point_manager.js +195 -195
  5. package/dist/source/helpers/adjust_browse_direction.d.ts +5 -5
  6. package/dist/source/helpers/adjust_browse_direction.js +11 -11
  7. package/dist/source/helpers/argument_list.d.ts +33 -33
  8. package/dist/source/helpers/argument_list.js +258 -258
  9. package/dist/source/helpers/call_helpers.d.ts +6 -6
  10. package/dist/source/helpers/call_helpers.js +70 -70
  11. package/dist/source/helpers/check_event_clause.d.ts +17 -0
  12. package/dist/source/helpers/check_event_clause.js +53 -0
  13. package/dist/source/helpers/check_event_clause.js.map +1 -0
  14. package/dist/source/helpers/coerce_enum_value.d.ts +6 -6
  15. package/dist/source/helpers/coerce_enum_value.js +33 -33
  16. package/dist/source/helpers/dump_tools.d.ts +14 -14
  17. package/dist/source/helpers/dump_tools.js +78 -78
  18. package/dist/source/helpers/ensure_secure_access.d.ts +9 -9
  19. package/dist/source/helpers/ensure_secure_access.js +76 -76
  20. package/dist/source/helpers/make_optionals_map.d.ts +21 -21
  21. package/dist/source/helpers/make_optionals_map.js +29 -29
  22. package/dist/source/helpers/multiform_func.d.ts +11 -11
  23. package/dist/source/helpers/multiform_func.js +75 -75
  24. package/dist/source/helpers/resolve_opaque_on_address_space.d.ts +3 -3
  25. package/dist/source/helpers/resolve_opaque_on_address_space.js +36 -36
  26. package/dist/source/index.d.ts +56 -56
  27. package/dist/source/index.js +83 -83
  28. package/dist/source/interfaces/alarms_and_conditions/condition_info_i.d.ts +19 -19
  29. package/dist/source/interfaces/alarms_and_conditions/condition_info_i.js +2 -2
  30. package/dist/source/interfaces/alarms_and_conditions/condition_snapshot.d.ts +193 -193
  31. package/dist/source/interfaces/alarms_and_conditions/condition_snapshot.js +2 -2
  32. package/dist/source/interfaces/alarms_and_conditions/deviation_stuff.d.ts +12 -12
  33. package/dist/source/interfaces/alarms_and_conditions/deviation_stuff.js +2 -2
  34. package/dist/source/interfaces/alarms_and_conditions/install_setpoint_options.d.ts +10 -10
  35. package/dist/source/interfaces/alarms_and_conditions/install_setpoint_options.js +2 -2
  36. package/dist/source/interfaces/alarms_and_conditions/instantiate_alarm_condition_options.d.ts +7 -7
  37. package/dist/source/interfaces/alarms_and_conditions/instantiate_alarm_condition_options.js +2 -2
  38. package/dist/source/interfaces/alarms_and_conditions/instantiate_condition_options.d.ts +7 -7
  39. package/dist/source/interfaces/alarms_and_conditions/instantiate_condition_options.js +2 -2
  40. package/dist/source/interfaces/alarms_and_conditions/instantiate_exclusive_deviation_alarm_options.d.ts +4 -4
  41. package/dist/source/interfaces/alarms_and_conditions/instantiate_exclusive_deviation_alarm_options.js +2 -2
  42. package/dist/source/interfaces/alarms_and_conditions/instantiate_exclusive_limit_alarm_options.d.ts +4 -4
  43. package/dist/source/interfaces/alarms_and_conditions/instantiate_exclusive_limit_alarm_options.js +2 -2
  44. package/dist/source/interfaces/alarms_and_conditions/instantiate_limit_alarm_options.d.ts +9 -9
  45. package/dist/source/interfaces/alarms_and_conditions/instantiate_limit_alarm_options.js +2 -2
  46. package/dist/source/interfaces/alarms_and_conditions/instantiate_non_exclusive_deviation_alarm_options.d.ts +4 -4
  47. package/dist/source/interfaces/alarms_and_conditions/instantiate_non_exclusive_deviation_alarm_options.js +2 -2
  48. package/dist/source/interfaces/alarms_and_conditions/instantiate_non_exclusive_limit_alarm_options.d.ts +4 -4
  49. package/dist/source/interfaces/alarms_and_conditions/instantiate_non_exclusive_limit_alarm_options.js +2 -2
  50. package/dist/source/interfaces/alarms_and_conditions/instantiate_off_normal_alarm_options.d.ts +20 -20
  51. package/dist/source/interfaces/alarms_and_conditions/instantiate_off_normal_alarm_options.js +2 -2
  52. package/dist/source/interfaces/alarms_and_conditions/ua_acknowledgeable_condition_ex.d.ts +23 -23
  53. package/dist/source/interfaces/alarms_and_conditions/ua_acknowledgeable_condition_ex.js +2 -2
  54. package/dist/source/interfaces/alarms_and_conditions/ua_alarm_condition_ex.d.ts +32 -32
  55. package/dist/source/interfaces/alarms_and_conditions/ua_alarm_condition_ex.js +2 -2
  56. package/dist/source/interfaces/alarms_and_conditions/ua_certificate_expiration_alarm_ex.d.ts +19 -19
  57. package/dist/source/interfaces/alarms_and_conditions/ua_certificate_expiration_alarm_ex.js +2 -2
  58. package/dist/source/interfaces/alarms_and_conditions/ua_condition_ex.d.ts +42 -42
  59. package/dist/source/interfaces/alarms_and_conditions/ua_condition_ex.js +2 -2
  60. package/dist/source/interfaces/alarms_and_conditions/ua_discrete_alarm_ex.d.ts +7 -7
  61. package/dist/source/interfaces/alarms_and_conditions/ua_discrete_alarm_ex.js +25 -25
  62. package/dist/source/interfaces/alarms_and_conditions/ua_exclusive_deviation_alarm_ex.d.ts +5 -5
  63. package/dist/source/interfaces/alarms_and_conditions/ua_exclusive_deviation_alarm_ex.js +2 -2
  64. package/dist/source/interfaces/alarms_and_conditions/ua_exclusive_limit_alarm_ex.d.ts +20 -20
  65. package/dist/source/interfaces/alarms_and_conditions/ua_exclusive_limit_alarm_ex.js +2 -2
  66. package/dist/source/interfaces/alarms_and_conditions/ua_limit_alarm_ex.d.ts +26 -26
  67. package/dist/source/interfaces/alarms_and_conditions/ua_limit_alarm_ex.js +2 -2
  68. package/dist/source/interfaces/alarms_and_conditions/ua_non_exclusive_deviation_alarm_ex.d.ts +8 -8
  69. package/dist/source/interfaces/alarms_and_conditions/ua_non_exclusive_deviation_alarm_ex.js +2 -2
  70. package/dist/source/interfaces/alarms_and_conditions/ua_non_exclusive_limit_alarm_ex.d.ts +10 -10
  71. package/dist/source/interfaces/alarms_and_conditions/ua_non_exclusive_limit_alarm_ex.js +2 -2
  72. package/dist/source/interfaces/data_access/ua_multistate_discrete_ex.d.ts +21 -21
  73. package/dist/source/interfaces/data_access/ua_multistate_discrete_ex.js +2 -2
  74. package/dist/source/interfaces/data_access/ua_multistate_value_discrete_ex.d.ts +24 -24
  75. package/dist/source/interfaces/data_access/ua_multistate_value_discrete_ex.js +2 -2
  76. package/dist/source/interfaces/data_access/ua_two_state_discrete_ex.d.ts +12 -12
  77. package/dist/source/interfaces/data_access/ua_two_state_discrete_ex.js +2 -2
  78. package/dist/source/interfaces/data_access/ua_y_array_item_ex.d.ts +8 -8
  79. package/dist/source/interfaces/data_access/ua_y_array_item_ex.js +2 -2
  80. package/dist/source/interfaces/state_machine/ua_exclusive_limit_state_machine_type_ex.d.ts +12 -12
  81. package/dist/source/interfaces/state_machine/ua_exclusive_limit_state_machine_type_ex.js +2 -2
  82. package/dist/source/interfaces/state_machine/ua_finite_state_machine_type.d.ts +49 -49
  83. package/dist/source/interfaces/state_machine/ua_finite_state_machine_type.js +2 -2
  84. package/dist/source/interfaces/state_machine/ua_program_state_machine_type.d.ts +11 -11
  85. package/dist/source/interfaces/state_machine/ua_program_state_machine_type.js +2 -2
  86. package/dist/source/interfaces/state_machine/ua_shelved_state_machine_ex.d.ts +30 -30
  87. package/dist/source/interfaces/state_machine/ua_shelved_state_machine_ex.js +2 -2
  88. package/dist/source/interfaces/state_machine/ua_state_machine_type.d.ts +222 -222
  89. package/dist/source/interfaces/state_machine/ua_state_machine_type.js +2 -2
  90. package/dist/source/interfaces/state_machine/ua_transition_ex.d.ts +6 -6
  91. package/dist/source/interfaces/state_machine/ua_transition_ex.js +2 -2
  92. package/dist/source/interfaces/ua_subscription_diagnostics_variable_ex.d.ts +8 -8
  93. package/dist/source/interfaces/ua_subscription_diagnostics_variable_ex.js +2 -2
  94. package/dist/source/loader/decode_xml_extension_object.d.ts +6 -6
  95. package/dist/source/loader/decode_xml_extension_object.js +71 -71
  96. package/dist/source/loader/ensure_datatype_extracted.d.ts +5 -5
  97. package/dist/source/loader/ensure_datatype_extracted.js +45 -45
  98. package/dist/source/loader/generateAddressSpaceRaw.d.ts +10 -10
  99. package/dist/source/loader/generateAddressSpaceRaw.js +45 -45
  100. package/dist/source/loader/load_nodeset2.d.ts +16 -16
  101. package/dist/source/loader/load_nodeset2.js +1461 -1461
  102. package/dist/source/loader/make_semver_compatible.d.ts +6 -6
  103. package/dist/source/loader/make_semver_compatible.js +25 -25
  104. package/dist/source/loader/make_xml_extension_object_parser.d.ts +28 -28
  105. package/dist/source/loader/make_xml_extension_object_parser.js +325 -325
  106. package/dist/source/loader/namespace_post_step.d.ts +10 -10
  107. package/dist/source/loader/namespace_post_step.js +61 -61
  108. package/dist/source/loader/register_node_promoter.d.ts +2 -2
  109. package/dist/source/loader/register_node_promoter.js +9 -9
  110. package/dist/source/namespace.d.ts +6 -6
  111. package/dist/source/namespace.js +2 -2
  112. package/dist/source/namespace_alarm_and_condition.d.ts +32 -32
  113. package/dist/source/namespace_alarm_and_condition.js +2 -2
  114. package/dist/source/namespace_data_access.d.ts +42 -42
  115. package/dist/source/namespace_data_access.js +2 -2
  116. package/dist/source/namespace_machine_state.d.ts +7 -7
  117. package/dist/source/namespace_machine_state.js +2 -2
  118. package/dist/source/pseudo_session.d.ts +55 -55
  119. package/dist/source/pseudo_session.js +203 -203
  120. package/dist/source/session_context.d.ts +111 -111
  121. package/dist/source/session_context.js +265 -265
  122. package/dist/source/set_namespace_meta_data.d.ts +2 -2
  123. package/dist/source/set_namespace_meta_data.js +59 -59
  124. package/dist/source/ua_root_folder.d.ts +9 -9
  125. package/dist/source/ua_root_folder.js +2 -2
  126. package/dist/source/ua_two_state_variable_ex.d.ts +23 -23
  127. package/dist/source/ua_two_state_variable_ex.js +2 -2
  128. package/dist/source/xml_writer.d.ts +9 -9
  129. package/dist/source/xml_writer.js +2 -2
  130. package/dist/src/address_space.d.ts +392 -392
  131. package/dist/src/address_space.js +1392 -1392
  132. package/dist/src/address_space_change_event_tools.d.ts +6 -6
  133. package/dist/src/address_space_change_event_tools.js +149 -149
  134. package/dist/src/address_space_private.d.ts +43 -43
  135. package/dist/src/address_space_private.js +2 -2
  136. package/dist/src/alarms_and_conditions/check_where_clause.d.ts +4 -0
  137. package/dist/src/alarms_and_conditions/check_where_clause.js +110 -0
  138. package/dist/src/alarms_and_conditions/check_where_clause.js.map +1 -0
  139. package/dist/src/alarms_and_conditions/condition.d.ts +5 -5
  140. package/dist/src/alarms_and_conditions/condition.js +78 -78
  141. package/dist/src/alarms_and_conditions/condition_info.d.ts +27 -0
  142. package/dist/src/alarms_and_conditions/condition_info.js +55 -0
  143. package/dist/src/alarms_and_conditions/condition_info.js.map +1 -0
  144. package/dist/src/alarms_and_conditions/condition_info_impl.d.ts +26 -26
  145. package/dist/src/alarms_and_conditions/condition_info_impl.js +54 -54
  146. package/dist/src/alarms_and_conditions/condition_snapshot.d.ts +233 -0
  147. package/dist/src/alarms_and_conditions/condition_snapshot.js +667 -0
  148. package/dist/src/alarms_and_conditions/condition_snapshot.js.map +1 -0
  149. package/dist/src/alarms_and_conditions/condition_snapshot_impl.d.ts +222 -222
  150. package/dist/src/alarms_and_conditions/condition_snapshot_impl.js +657 -657
  151. package/dist/src/alarms_and_conditions/deviation_alarm_helper.d.ts +9 -9
  152. package/dist/src/alarms_and_conditions/deviation_alarm_helper.js +61 -61
  153. package/dist/src/alarms_and_conditions/extract_event_fields.d.ts +10 -0
  154. package/dist/src/alarms_and_conditions/extract_event_fields.js +90 -0
  155. package/dist/src/alarms_and_conditions/extract_event_fields.js.map +1 -0
  156. package/dist/src/alarms_and_conditions/index.d.ts +16 -16
  157. package/dist/src/alarms_and_conditions/index.js +32 -32
  158. package/dist/src/alarms_and_conditions/ua_acknowledgeable_condition_impl.d.ts +44 -44
  159. package/dist/src/alarms_and_conditions/ua_acknowledgeable_condition_impl.js +244 -244
  160. package/dist/src/alarms_and_conditions/ua_alarm_condition_impl.d.ts +93 -93
  161. package/dist/src/alarms_and_conditions/ua_alarm_condition_impl.js +419 -419
  162. package/dist/src/alarms_and_conditions/ua_base_event_impl.d.ts +26 -26
  163. package/dist/src/alarms_and_conditions/ua_base_event_impl.js +38 -38
  164. package/dist/src/alarms_and_conditions/ua_certificate_expiration_alarm_impl.d.ts +44 -44
  165. package/dist/src/alarms_and_conditions/ua_certificate_expiration_alarm_impl.js +183 -183
  166. package/dist/src/alarms_and_conditions/ua_condition_impl.d.ts +153 -153
  167. package/dist/src/alarms_and_conditions/ua_condition_impl.js +1028 -1028
  168. package/dist/src/alarms_and_conditions/ua_discrete_alarm_impl.d.ts +14 -14
  169. package/dist/src/alarms_and_conditions/ua_discrete_alarm_impl.js +34 -34
  170. package/dist/src/alarms_and_conditions/ua_exclusive_deviation_alarm_impl.d.ts +24 -24
  171. package/dist/src/alarms_and_conditions/ua_exclusive_deviation_alarm_impl.js +56 -56
  172. package/dist/src/alarms_and_conditions/ua_exclusive_level_alarm_impl.d.ts +11 -11
  173. package/dist/src/alarms_and_conditions/ua_exclusive_level_alarm_impl.js +11 -11
  174. package/dist/src/alarms_and_conditions/ua_exclusive_limit_alarm_impl.d.ts +23 -23
  175. package/dist/src/alarms_and_conditions/ua_exclusive_limit_alarm_impl.js +86 -86
  176. package/dist/src/alarms_and_conditions/ua_exclusive_rate_of_change_alarm_impl.d.ts +11 -11
  177. package/dist/src/alarms_and_conditions/ua_exclusive_rate_of_change_alarm_impl.js +7 -7
  178. package/dist/src/alarms_and_conditions/ua_limit_alarm_impl.d.ts +79 -79
  179. package/dist/src/alarms_and_conditions/ua_limit_alarm_impl.js +250 -250
  180. package/dist/src/alarms_and_conditions/ua_non_exclusive_deviation_alarm_impl.d.ts +24 -24
  181. package/dist/src/alarms_and_conditions/ua_non_exclusive_deviation_alarm_impl.js +50 -50
  182. package/dist/src/alarms_and_conditions/ua_non_exclusive_limit_alarm_impl.d.ts +19 -19
  183. package/dist/src/alarms_and_conditions/ua_non_exclusive_limit_alarm_impl.js +162 -162
  184. package/dist/src/alarms_and_conditions/ua_off_normal_alarm_impl.d.ts +46 -46
  185. package/dist/src/alarms_and_conditions/ua_off_normal_alarm_impl.js +166 -166
  186. package/dist/src/alarms_and_conditions/ua_system_off_normal_alarm_impl.d.ts +18 -18
  187. package/dist/src/alarms_and_conditions/ua_system_off_normal_alarm_impl.js +17 -17
  188. package/dist/src/apply_condition_refresh.d.ts +6 -6
  189. package/dist/src/apply_condition_refresh.js +27 -27
  190. package/dist/src/base_node_impl.d.ts +281 -281
  191. package/dist/src/base_node_impl.js +1395 -1395
  192. package/dist/src/base_node_private.d.ts +61 -61
  193. package/dist/src/base_node_private.js +705 -705
  194. package/dist/src/data_access/add_dataItem_stuff.d.ts +11 -11
  195. package/dist/src/data_access/add_dataItem_stuff.js +61 -61
  196. package/dist/src/data_access/check_variant_compatibility_ua_analog_item.d.ts +1 -1
  197. package/dist/src/data_access/check_variant_compatibility_ua_analog_item.js +34 -34
  198. package/dist/src/data_access/ua_multistate_discrete_impl.d.ts +32 -32
  199. package/dist/src/data_access/ua_multistate_discrete_impl.js +130 -130
  200. package/dist/src/data_access/ua_multistate_value_discrete.d.ts +51 -0
  201. package/dist/src/data_access/ua_multistate_value_discrete.js +250 -0
  202. package/dist/src/data_access/ua_multistate_value_discrete.js.map +1 -0
  203. package/dist/src/data_access/ua_multistate_value_discrete_impl.d.ts +51 -51
  204. package/dist/src/data_access/ua_multistate_value_discrete_impl.js +249 -249
  205. package/dist/src/data_access/ua_two_state_discrete.d.ts +25 -0
  206. package/dist/src/data_access/ua_two_state_discrete.js +154 -0
  207. package/dist/src/data_access/ua_two_state_discrete.js.map +1 -0
  208. package/dist/src/data_access/ua_two_state_discrete_impl.d.ts +25 -25
  209. package/dist/src/data_access/ua_two_state_discrete_impl.js +153 -153
  210. package/dist/src/event_data.d.ts +34 -34
  211. package/dist/src/event_data.js +64 -64
  212. package/dist/src/extension_object_array_node.d.ts +61 -61
  213. package/dist/src/extension_object_array_node.js +276 -276
  214. package/dist/src/historical_access/address_space_historical_data_node.d.ts +26 -26
  215. package/dist/src/historical_access/address_space_historical_data_node.js +630 -630
  216. package/dist/src/index_current.d.ts +43 -43
  217. package/dist/src/index_current.js +74 -74
  218. package/dist/src/namespace_impl.d.ts +461 -461
  219. package/dist/src/namespace_impl.js +1732 -1732
  220. package/dist/src/namespace_private.d.ts +21 -21
  221. package/dist/src/namespace_private.js +32 -32
  222. package/dist/src/nodeid_manager.d.ts +36 -36
  223. package/dist/src/nodeid_manager.js +197 -197
  224. package/dist/src/nodeset_tools/adjust_namespace_array.d.ts +2 -2
  225. package/dist/src/nodeset_tools/adjust_namespace_array.js +13 -13
  226. package/dist/src/nodeset_tools/construct_namespace_dependency.d.ts +2 -2
  227. package/dist/src/nodeset_tools/construct_namespace_dependency.js +83 -83
  228. package/dist/src/nodeset_tools/nodeset_to_xml.d.ts +2 -2
  229. package/dist/src/nodeset_tools/nodeset_to_xml.js +1155 -1155
  230. package/dist/src/nodeset_tools/typedictionary_to_xml.d.ts +2 -2
  231. package/dist/src/nodeset_tools/typedictionary_to_xml.js +154 -154
  232. package/dist/src/reference_impl.d.ts +43 -43
  233. package/dist/src/reference_impl.js +139 -139
  234. package/dist/src/role_permissions.d.ts +2 -2
  235. package/dist/src/role_permissions.js +10 -10
  236. package/dist/src/state_machine/finite_state_machine.d.ts +67 -67
  237. package/dist/src/state_machine/finite_state_machine.js +353 -353
  238. package/dist/src/state_machine/ua_shelving_state_machine_ex.d.ts +38 -38
  239. package/dist/src/state_machine/ua_shelving_state_machine_ex.js +250 -250
  240. package/dist/src/state_machine/ua_two_state_variable.d.ts +61 -61
  241. package/dist/src/state_machine/ua_two_state_variable.js +331 -331
  242. package/dist/src/tool_isSupertypeOf.d.ts +17 -17
  243. package/dist/src/tool_isSupertypeOf.js +108 -108
  244. package/dist/src/ua_condition_type.d.ts +8 -8
  245. package/dist/src/ua_condition_type.js +2 -2
  246. package/dist/src/ua_data_type_impl.d.ts +93 -93
  247. package/dist/src/ua_data_type_impl.js +371 -371
  248. package/dist/src/ua_method_impl.d.ts +41 -41
  249. package/dist/src/ua_method_impl.js +208 -208
  250. package/dist/src/ua_object_impl.d.ts +35 -35
  251. package/dist/src/ua_object_impl.js +161 -161
  252. package/dist/src/ua_object_type_impl.d.ts +48 -48
  253. package/dist/src/ua_object_type_impl.js +124 -124
  254. package/dist/src/ua_reference_type_impl.d.ts +43 -43
  255. package/dist/src/ua_reference_type_impl.js +139 -139
  256. package/dist/src/ua_variable_impl.d.ts +351 -351
  257. package/dist/src/ua_variable_impl.js +1604 -1604
  258. package/dist/src/ua_variable_impl_ext_obj.d.ts +17 -17
  259. package/dist/src/ua_variable_impl_ext_obj.js +437 -437
  260. package/dist/src/ua_variable_type_impl.d.ts +62 -62
  261. package/dist/src/ua_variable_type_impl.js +570 -570
  262. package/dist/src/ua_view_impl.d.ts +19 -19
  263. package/dist/src/ua_view_impl.js +43 -43
  264. package/distHelpers/add_event_generator_object.d.ts +3 -3
  265. package/distHelpers/add_event_generator_object.js +64 -64
  266. package/distHelpers/alarms_and_conditions_demo.d.ts +9 -9
  267. package/distHelpers/alarms_and_conditions_demo.js +115 -115
  268. package/distHelpers/assertHasMatchingReference.d.ts +19 -19
  269. package/distHelpers/assertHasMatchingReference.js +40 -40
  270. package/distHelpers/boiler_system.d.ts +113 -113
  271. package/distHelpers/boiler_system.js +395 -395
  272. package/distHelpers/create_minimalist_address_space_nodeset.d.ts +5 -5
  273. package/distHelpers/create_minimalist_address_space_nodeset.js +171 -171
  274. package/distHelpers/date_utils.d.ts +3 -3
  275. package/distHelpers/date_utils.js +9 -9
  276. package/distHelpers/dump_statemachine.js +127 -127
  277. package/distHelpers/get_address_space_fixture.d.ts +1 -1
  278. package/distHelpers/get_address_space_fixture.js +30 -30
  279. package/distHelpers/get_mini_address_space.d.ts +7 -7
  280. package/distHelpers/get_mini_address_space.js +36 -36
  281. package/distHelpers/index.d.ts +12 -12
  282. package/distHelpers/index.js +28 -28
  283. package/distHelpers/mock_session.d.ts +14 -14
  284. package/distHelpers/mock_session.js +25 -25
  285. package/distNodeJS/generate_address_space.d.ts +4 -4
  286. package/distNodeJS/generate_address_space.js +41 -41
  287. package/distNodeJS/index.d.ts +1 -1
  288. package/distNodeJS/index.js +17 -17
  289. package/package.json +36 -35
@@ -1,658 +1,658 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ConditionSnapshotImpl = void 0;
4
- /**
5
- * @module node-opcua-address-space.AlarmsAndConditions
6
- */
7
- const events_1 = require("events");
8
- const node_opcua_assert_1 = require("node-opcua-assert");
9
- const node_opcua_data_model_1 = require("node-opcua-data-model");
10
- const node_opcua_debug_1 = require("node-opcua-debug");
11
- const node_opcua_nodeid_1 = require("node-opcua-nodeid");
12
- const node_opcua_status_code_1 = require("node-opcua-status-code");
13
- const node_opcua_types_1 = require("node-opcua-types");
14
- const node_opcua_variant_1 = require("node-opcua-variant");
15
- const event_data_1 = require("../event_data");
16
- const ua_two_state_variable_1 = require("../state_machine/ua_two_state_variable");
17
- const condition_1 = require("./condition");
18
- const ua_condition_impl_1 = require("./ua_condition_impl");
19
- const debugLog = (0, node_opcua_debug_1.make_debugLog)(__filename);
20
- const doDebug = (0, node_opcua_debug_1.checkDebugFlag)(__filename);
21
- function normalizeName(str) {
22
- // return str.split(".").map(utils.lowerFirstLetter).join(".");
23
- return str;
24
- }
25
- function _visit(self, node, prefix) {
26
- const aggregates = node.getAggregates();
27
- for (const aggregate of aggregates) {
28
- if (aggregate.nodeClass === node_opcua_data_model_1.NodeClass.Variable) {
29
- const name = aggregate.browseName.toString();
30
- const key = prefix + name;
31
- // istanbul ignore next
32
- if (doDebug) {
33
- debugLog("adding key =", key);
34
- }
35
- const aggregateVariable = aggregate;
36
- self._map[key] = aggregateVariable.readValue().value;
37
- self._node_index[key] = aggregateVariable;
38
- _visit(self, aggregate, prefix + name + ".");
39
- }
40
- }
41
- }
42
- function _record_condition_state(self, condition) {
43
- self._map = {};
44
- self._node_index = {};
45
- (0, node_opcua_assert_1.assert)(condition instanceof ua_condition_impl_1.UAConditionImpl);
46
- _visit(self, condition, "");
47
- }
48
- function _installOnChangeEventHandlers(self, node, prefix) {
49
- const aggregates = node.getAggregates();
50
- for (const aggregate of aggregates) {
51
- if (aggregate.nodeClass === node_opcua_data_model_1.NodeClass.Variable) {
52
- const name = aggregate.browseName.toString();
53
- const key = prefix + name;
54
- // istanbul ignore next
55
- if (doDebug) {
56
- debugLog("adding key =", key);
57
- }
58
- aggregate.on("value_changed", (newDataValue) => {
59
- self._map[key] = newDataValue.value;
60
- self._node_index[key] = aggregate;
61
- });
62
- _installOnChangeEventHandlers(self, aggregate, prefix + name + ".");
63
- }
64
- }
65
- }
66
- function _ensure_condition_values_correctness(self, node, prefix, error) {
67
- const displayError = !!error;
68
- error = error || [];
69
- const aggregates = node.getAggregates();
70
- for (const aggregate of aggregates) {
71
- if (aggregate.nodeClass === node_opcua_data_model_1.NodeClass.Variable) {
72
- const name = aggregate.browseName.toString();
73
- const key = prefix + name;
74
- const snapshot_value = self._map[key].toString();
75
- const aggregateVariable = aggregate;
76
- const condition_value = aggregateVariable.readValue().value.toString();
77
- if (snapshot_value !== condition_value) {
78
- error.push(" Condition Branch0 is not in sync with node values for " +
79
- key +
80
- "\n v1= " +
81
- snapshot_value +
82
- "\n v2= " +
83
- condition_value);
84
- }
85
- self._node_index[key] = aggregate;
86
- _ensure_condition_values_correctness(self, aggregate, prefix + name + ".", error);
87
- }
88
- }
89
- if (displayError && error.length) {
90
- throw new Error(error.join("\n"));
91
- }
92
- }
93
- const disabledVar = new node_opcua_variant_1.Variant({
94
- dataType: "StatusCode",
95
- value: node_opcua_status_code_1.StatusCodes.BadConditionDisabled
96
- });
97
- // list of Condition variables that should not be published as BadConditionDisabled when the condition
98
- // is in a disabled state.
99
- const _varTable = {
100
- BranchId: 1,
101
- ConditionClassId: 1,
102
- ConditionClassName: 1,
103
- ConditionName: 1,
104
- EnabledState: 1,
105
- "EnabledState.EffectiveDisplayName": 1,
106
- "EnabledState.Id": 1,
107
- "EnabledState.TransitionTime": 1,
108
- EventId: 1,
109
- EventType: 1,
110
- LocalTime: 1,
111
- SourceName: 1,
112
- SourceNode: 1,
113
- Time: 1
114
- };
115
- class ConditionSnapshotImpl extends events_1.EventEmitter {
116
- /**
117
- * @class ConditionSnapshot
118
- * @extends EventEmitter
119
- * @param condition
120
- * @param branchId
121
- * @constructor
122
- */
123
- constructor(condition, branchId) {
124
- super();
125
- this.eventData = null;
126
- this.branchId = null;
127
- this._map = {};
128
- this._node_index = {};
129
- (0, node_opcua_assert_1.assert)(branchId instanceof node_opcua_nodeid_1.NodeId);
130
- // xx self.branchId = branchId;
131
- this.condition = condition;
132
- this.eventData = new event_data_1.EventData(condition);
133
- // a nodeId/Variant map
134
- _record_condition_state(this, condition);
135
- if ((0, node_opcua_nodeid_1.sameNodeId)(branchId, node_opcua_nodeid_1.NodeId.nullNodeId)) {
136
- _installOnChangeEventHandlers(this, condition, "");
137
- }
138
- this._set_var("BranchId", node_opcua_variant_1.DataType.NodeId, branchId);
139
- }
140
- _constructEventData() {
141
- if (this.branchId && (0, node_opcua_nodeid_1.sameNodeId)(this.branchId, node_opcua_nodeid_1.NodeId.nullNodeId)) {
142
- _ensure_condition_values_correctness(this, this.condition, "", []);
143
- }
144
- const c = this.condition;
145
- const isDisabled = !c.getEnabledState();
146
- const eventData = new event_data_1.EventData(this.condition);
147
- for (const fullBrowsePath of Object.keys(this._map)) {
148
- const node = this._node_index[fullBrowsePath];
149
- if (!node) {
150
- debugLog("cannot node for find key", fullBrowsePath);
151
- continue;
152
- }
153
- if (isDisabled && !Object.prototype.hasOwnProperty.call(_varTable, fullBrowsePath)) {
154
- eventData._createValue(fullBrowsePath, node, disabledVar);
155
- }
156
- else {
157
- eventData._createValue(fullBrowsePath, node, this._map[fullBrowsePath]);
158
- }
159
- }
160
- return eventData;
161
- }
162
- // /**
163
- // *
164
- // */
165
- // public readValue(sessionContext: ISessionContext, nodeId: NodeId, selectClause: SimpleAttributeOperand): Variant {
166
- // const c = this.condition as UAConditionImpl;
167
- // const isDisabled = !c.getEnabledState();
168
- // if (isDisabled) {
169
- // return disabledVar;
170
- // }
171
- // const key = nodeId.toString();
172
- // const variant = this._map[key];
173
- // if (!variant) {
174
- // // the value is not handled by us .. let's delegate
175
- // // to the eventData helper object
176
- // return this.eventData?.readValue(sessionContext, nodeId, selectClause) || disabledVar;
177
- // }
178
- // return variant;
179
- // }
180
- _get_var(varName) {
181
- const c = this.condition;
182
- if (!c.getEnabledState() && !Object.prototype.hasOwnProperty.call(_varTable, varName)) {
183
- // xx console.log("ConditionSnapshot#_get_var condition enabled =", self.condition.getEnabledState());
184
- return disabledVar;
185
- }
186
- const key = normalizeName(varName);
187
- const variant = this._map[key];
188
- if (!variant) {
189
- throw new Error("cannot find key " + key);
190
- }
191
- return variant.value;
192
- }
193
- _set_var(varName, dataType, value) {
194
- const key = normalizeName(varName);
195
- // istanbul ignore next
196
- if (!Object.prototype.hasOwnProperty.call(this._map, key)) {
197
- if (doDebug) {
198
- debugLog(" cannot find node " + varName);
199
- debugLog(" map=", Object.keys(this._map).join(" "));
200
- }
201
- }
202
- this._map[key] = new node_opcua_variant_1.Variant({
203
- dataType,
204
- value
205
- });
206
- if (this._map[key + ".SourceTimestamp"]) {
207
- this._map[key + ".SourceTimestamp"] = new node_opcua_variant_1.Variant({
208
- dataType: node_opcua_variant_1.DataType.DateTime,
209
- value: new Date()
210
- });
211
- }
212
- const variant = this._map[key];
213
- const node = this._node_index[key];
214
- if (!node) {
215
- // for instance localTime is optional
216
- debugLog("Cannot serVar " + varName + " dataType " + node_opcua_variant_1.DataType[dataType]);
217
- return;
218
- }
219
- (0, node_opcua_assert_1.assert)(node.nodeClass === node_opcua_data_model_1.NodeClass.Variable);
220
- this.emit("value_changed", node, variant);
221
- }
222
- /**
223
- * @method getBrandId
224
- * @return {NodeId}
225
- */
226
- getBranchId() {
227
- return this._get_var("BranchId");
228
- }
229
- /**
230
- * @method getEventId
231
- * @return {ByteString}
232
- */
233
- getEventId() {
234
- return this._get_var("EventId");
235
- }
236
- /**
237
- * @method getRetain
238
- * @return {Boolean}
239
- */
240
- getRetain() {
241
- return this._get_var("Retain");
242
- }
243
- /**
244
- *
245
- * @method setRetain
246
- * @param retainFlag {Boolean}
247
- */
248
- setRetain(retainFlag) {
249
- retainFlag = !!retainFlag;
250
- return this._set_var("Retain", node_opcua_variant_1.DataType.Boolean, retainFlag);
251
- }
252
- /**
253
- * @method renewEventId
254
- *
255
- */
256
- renewEventId() {
257
- const addressSpace = this.condition.addressSpace;
258
- // create a new event Id for this new condition
259
- const eventId = addressSpace.generateEventId();
260
- const ret = this._set_var("EventId", node_opcua_variant_1.DataType.ByteString, eventId.value);
261
- // xx var branch = self; console.log("MMMMMMMMrenewEventId branch " +
262
- // branch.getBranchId().toString() + " eventId = " + branch.getEventId().toString("hex"));
263
- return ret;
264
- }
265
- /**
266
- * @method getEnabledState
267
- * @return {Boolean}
268
- */
269
- getEnabledState() {
270
- return this._get_twoStateVariable("EnabledState");
271
- }
272
- /**
273
- * @method setEnabledState
274
- * @param value {Boolean}
275
- * @return void
276
- */
277
- setEnabledState(value) {
278
- return this._set_twoStateVariable("EnabledState", value);
279
- }
280
- /**
281
- * @method getEnabledStateAsString
282
- * @return {String}
283
- */
284
- getEnabledStateAsString() {
285
- return this._get_var("EnabledState").text;
286
- }
287
- /**
288
- * @method getComment
289
- * @return {LocalizedText}
290
- */
291
- getComment() {
292
- return this._get_var("Comment");
293
- }
294
- /**
295
- * Set condition comment
296
- *
297
- * Comment contains the last comment provided for a certain state (ConditionBranch). It may
298
- * have been provided by an AddComment Method, some other Method or in some other
299
- * manner. The initial value of this Variable is null, unless it is provided in some other manner. If
300
- * a Method provides as an option the ability to set a Comment, then the value of this Variable is
301
- * reset to null if an optional comment is not provided.
302
- *
303
- * @method setComment
304
- * @param txtMessage {LocalizedText}
305
- */
306
- setComment(txtMessage) {
307
- const txtMessage1 = (0, node_opcua_data_model_1.coerceLocalizedText)(txtMessage);
308
- this._set_var("Comment", node_opcua_variant_1.DataType.LocalizedText, txtMessage1);
309
- }
310
- /**
311
- *
312
- * @method setMessage
313
- * @param txtMessage {LocalizedText}
314
- */
315
- setMessage(txtMessage) {
316
- const txtMessage1 = (0, node_opcua_data_model_1.coerceLocalizedText)(txtMessage);
317
- return this._set_var("Message", node_opcua_variant_1.DataType.LocalizedText, txtMessage1);
318
- }
319
- /**
320
- * @method setClientUserId
321
- * @param userIdentity {String}
322
- */
323
- setClientUserId(userIdentity) {
324
- return this._set_var("ClientUserId", node_opcua_variant_1.DataType.String, userIdentity.toString());
325
- }
326
- /*
327
- *
328
- *
329
- * as per spec 1.0.3 - Part 9
330
- *
331
- * Quality reveals the status of process values or other resources that this Condition instance is
332
- * based upon. If, for example, a process value is “Uncertain”, the associated “LevelAlarm”
333
- * Condition is also questionable. Values for the Quality can be any of the OPC StatusCodes
334
- * defined in Part 8 as well as Good, Uncertain and Bad as defined in Part 4. These
335
- * StatusCodes are similar to but slightly more generic than the description of data quality in the
336
- * various field bus specifications. It is the responsibility of the Server to map internal status
337
- * information to these codes. A Server which supports no quality information shall return Good.
338
- * This quality can also reflect the communication status associated with the system that this
339
- * value or resource is based on and from which this Alarm was received. For communication
340
- * errors to the underlying system, especially those that result in some unavailable Event fields,
341
- * the quality shall be BadNoCommunication error.
342
- *
343
- * Quality refers to the quality of the data value(s) upon which this Condition is based. Since a
344
- * Condition is usually based on one or more Variables, the Condition inherits the quality of
345
- * these Variables. E.g., if the process value is “Uncertain”, the “LevelAlarm” Condition is also
346
- * questionable. If more than one variable is represented by a given condition or if the condition
347
- * is from an underlining system and no direct mapping to a variable is available, it is up to the
348
- * application to determine what quality is displayed as part of the condition.
349
- */
350
- /**
351
- * set the condition quality
352
- * @method setQuality
353
- * @param quality {StatusCode}
354
- */
355
- setQuality(quality) {
356
- this._set_var("Quality", node_opcua_variant_1.DataType.StatusCode, quality);
357
- }
358
- /**
359
- * @method getQuality
360
- * @return {StatusCode}
361
- */
362
- getQuality() {
363
- return this._get_var("Quality");
364
- }
365
- /*
366
- * as per spec 1.0.3 - Part 9
367
- * The Severity of a Condition is inherited from the base Event model defined in Part 5. It
368
- * indicates the urgency of the Condition and is also commonly called ‘priority’, especially in
369
- * relation to Alarms in the ProcessConditionClass.
370
- *
371
- * as per spec 1.0.3 - PArt 5
372
- * Severity is an indication of the urgency of the Event. This is also commonly called “priority”.
373
- * Values will range from 1 to 1 000, with 1 being the lowest severity and 1 000 being the highest.
374
- * Typically, a severity of 1 would indicate an Event which is informational in nature, while a value
375
- * of 1 000 would indicate an Event of catastrophic nature, which could potentially result in severe
376
- * financial loss or loss of life.
377
- * It is expected that very few Server implementations will support 1 000 distinct severity levels.
378
- * Therefore, Server developers are responsible for distributing their severity levels across the
379
- * 1 to 1 000 range in such a manner that clients can assume a linear distribution. For example, a
380
- * client wishing to present five severity levels to a user should be able to do the following
381
- * mapping:
382
- * Client Severity OPC Severity
383
- * HIGH 801 – 1 000
384
- * MEDIUM HIGH 601 – 800
385
- * MEDIUM 401 – 600
386
- * MEDIUM LOW 201 – 400
387
- * LOW 1 – 200
388
- * In many cases a strict linear mapping of underlying source severities to the OPC Severity range
389
- * is not appropriate. The Server developer will instead intelligently map the underlying source
390
- * severities to the 1 to 1 000 OPC Severity range in some other fashion. In particular, it is
391
- * recommended that Server developers map Events of high urgency into the OPC severity range
392
- * of 667 to 1 000, Events of medium urgency into the OPC severity range of 334 to 666 and
393
- * Events of low urgency into OPC severities of 1 to 333.
394
- */
395
- /**
396
- * @method setSeverity
397
- * @param severity {UInt16}
398
- */
399
- setSeverity(severity) {
400
- (0, node_opcua_assert_1.assert)(isFinite(severity), "expecting a UInt16");
401
- // record automatically last severity
402
- const lastSeverity = this.getSeverity();
403
- this.setLastSeverity(lastSeverity);
404
- this._set_var("Severity", node_opcua_variant_1.DataType.UInt16, severity);
405
- }
406
- /**
407
- * @method getSeverity
408
- * @return {UInt16}
409
- */
410
- getSeverity() {
411
- const c = this.condition;
412
- (0, node_opcua_assert_1.assert)(c.getEnabledState(), "condition must be enabled");
413
- const value = this._get_var("Severity");
414
- return +value;
415
- }
416
- /*
417
- * as per spec 1.0.3 - part 9:
418
- * LastSeverity provides the previous severity of the ConditionBranch. Initially this Variable
419
- * contains a zero value; it will return a value only after a severity change. The new severity is
420
- * supplied via the Severity Property which is inherited from the BaseEventType.
421
- *
422
- */
423
- /**
424
- * @method setLastSeverity
425
- * @param severity {UInt16}
426
- */
427
- setLastSeverity(severity) {
428
- severity = +severity;
429
- return this._set_var("LastSeverity", node_opcua_variant_1.DataType.UInt16, severity);
430
- }
431
- /**
432
- * @method getLastSeverity
433
- * @return {UInt16}
434
- */
435
- getLastSeverity() {
436
- const value = this._get_var("LastSeverity");
437
- return +value;
438
- }
439
- /**
440
- * setReceiveTime
441
- *
442
- * (as per OPCUA 1.0.3 part 5)
443
- *
444
- * ReceiveTime provides the time the OPC UA Server received the Event from the underlying
445
- * device of another Server.
446
- *
447
- * ReceiveTime is analogous to ServerTimestamp defined in Part 4, i.e.
448
- * in the case where the OPC UA Server gets an Event from another OPC UA Server, each Server
449
- * applies its own ReceiveTime. That implies that a Client may get the same Event, having the
450
- * same EventId, from different Servers having different values of the ReceiveTime.
451
- *
452
- * The ReceiveTime shall always be returned as value and the Server is not allowed to return a
453
- * StatusCode for the ReceiveTime indicating an error.
454
- *
455
- * @method setReceiveTime
456
- * @param time {Date} : UTCTime
457
- */
458
- setReceiveTime(time) {
459
- (0, node_opcua_assert_1.assert)(time instanceof Date);
460
- return this._set_var("ReceiveTime", node_opcua_variant_1.DataType.DateTime, time);
461
- }
462
- /**
463
- * (as per OPCUA 1.0.3 part 5)
464
- * Time provides the time the Event occurred. This value is set as close to the event generator as
465
- * possible. It often comes from the underlying system or device. Once set, intermediate OPC UA
466
- * Servers shall not alter the value.
467
- *
468
- * @method setTime
469
- * @param time {Date}
470
- */
471
- setTime(time) {
472
- (0, node_opcua_assert_1.assert)(time instanceof Date);
473
- return this._set_var("Time", node_opcua_variant_1.DataType.DateTime, time);
474
- }
475
- /**
476
- * LocalTime is a structure containing the Offset and the DaylightSavingInOffset flag. The Offset
477
- * specifies the time difference (in minutes) between the Time Property and the time at the location
478
- * in which the event was issued. If DaylightSavingInOffset is TRUE, then Standard/Daylight
479
- * savings time (DST) at the originating location is in effect and Offset includes the DST c orrection.
480
- * If FALSE then the Offset does not include DST correction and DST may or may not have been
481
- * in effect.
482
- * @method setLocalTime
483
- * @param localTime {TimeZone}
484
- */
485
- setLocalTime(localTime) {
486
- (0, node_opcua_assert_1.assert)(localTime instanceof node_opcua_types_1.TimeZoneDataType);
487
- return this._set_var("LocalTime", node_opcua_variant_1.DataType.ExtensionObject, new node_opcua_types_1.TimeZoneDataType(localTime));
488
- }
489
- // read only !
490
- getSourceName() {
491
- return this._get_var("SourceName");
492
- }
493
- /**
494
- * @method getSourceNode
495
- * return {NodeId}
496
- */
497
- getSourceNode() {
498
- return this._get_var("SourceNode");
499
- }
500
- /**
501
- * @method getEventType
502
- * return {NodeId}
503
- */
504
- getEventType() {
505
- return this._get_var("EventType");
506
- }
507
- getMessage() {
508
- return this._get_var("Message");
509
- }
510
- isCurrentBranch() {
511
- return (0, node_opcua_nodeid_1.sameNodeId)(this._get_var("BranchId"), node_opcua_nodeid_1.NodeId.nullNodeId);
512
- }
513
- // -- ACKNOWLEDGEABLE -------------------------------------------------------------------
514
- getAckedState() {
515
- const acknowledgeableCondition = this.condition;
516
- if (!acknowledgeableCondition.ackedState) {
517
- throw new Error("Node " +
518
- acknowledgeableCondition.browseName.toString() +
519
- " of type " +
520
- acknowledgeableCondition.typeDefinitionObj.browseName.toString() +
521
- " has no AckedState");
522
- }
523
- return this._get_twoStateVariable("AckedState");
524
- }
525
- setAckedState(ackedState) {
526
- ackedState = !!ackedState;
527
- return (0, condition_1._setAckedState)(this, ackedState);
528
- }
529
- getConfirmedState() {
530
- const acknowledgeableCondition = this.condition;
531
- (0, node_opcua_assert_1.assert)(acknowledgeableCondition.confirmedState, "Must have a confirmed state");
532
- return this._get_twoStateVariable("ConfirmedState");
533
- }
534
- setConfirmedStateIfExists(confirmedState) {
535
- confirmedState = !!confirmedState;
536
- const acknowledgeableCondition = this.condition;
537
- if (!acknowledgeableCondition.confirmedState) {
538
- // no condition node has been defined (this is valid)
539
- // confirm state cannot be set
540
- return;
541
- }
542
- // todo deal with Error code BadConditionBranchAlreadyConfirmed
543
- return this._set_twoStateVariable("ConfirmedState", confirmedState);
544
- }
545
- setConfirmedState(confirmedState) {
546
- const acknowledgeableCondition = this.condition;
547
- (0, node_opcua_assert_1.assert)(acknowledgeableCondition.confirmedState, "Must have a confirmed state. Add ConfirmedState to the optionals");
548
- return this.setConfirmedStateIfExists(confirmedState);
549
- }
550
- // ---- Shelving
551
- /**
552
- * @class ConditionSnapshot
553
- */
554
- /**
555
- * @method getSuppressedState
556
- * @return {Boolean}
557
- */
558
- getSuppressedState() {
559
- return this._get_twoStateVariable("SuppressedState");
560
- }
561
- /**
562
- * @method setSuppressedState
563
- * @param suppressed {Boolean}
564
- */
565
- setSuppressedState(suppressed) {
566
- suppressed = !!suppressed;
567
- this._set_twoStateVariable("SuppressedState", suppressed);
568
- }
569
- getActiveState() {
570
- return this._get_twoStateVariable("ActiveState");
571
- }
572
- setActiveState(newActiveState) {
573
- // xx var activeState = self.getActiveState();
574
- // xx if (activeState === newActiveState) {
575
- // xx return StatusCodes.Bad;
576
- // xx }
577
- this._set_twoStateVariable("ActiveState", newActiveState);
578
- return node_opcua_status_code_1.StatusCodes.Good;
579
- }
580
- // tslint:disable:no-empty
581
- setShelvingState() {
582
- // todo
583
- }
584
- toString() {
585
- // public condition: any = null;
586
- // public eventData: any = null;
587
- // public branchId: NodeId | null = null;
588
- const t = this.condition.addressSpace.findNode(this.condition.typeDefinition);
589
- return ("" +
590
- "condition: " +
591
- (this.condition.browseName.toString() + " " + this.condition.nodeId.toString()) +
592
- ", type: " +
593
- (t.browseName.toString() + " " + t.nodeId.toString()) +
594
- ", branchId: " +
595
- (this.branchId ? this.branchId.toString() : "<null>") +
596
- ", acked: " +
597
- this.getAckedState() +
598
- ", confirmed: " +
599
- this.getConfirmedState() +
600
- ", activeState: " +
601
- this.getActiveState() +
602
- // + ", suppressed: " + this.getSuppressedState()
603
- ", retain: " +
604
- this.getRetain() +
605
- ", message: " +
606
- this.getMessage() +
607
- ", comment: " +
608
- this.getComment());
609
- }
610
- /**
611
- * @class ConditionSnapshot
612
- * @param varName
613
- * @param value
614
- * @private
615
- */
616
- _set_twoStateVariable(varName, value) {
617
- value = !!value;
618
- const hrKey = ConditionSnapshotImpl.normalizeName(varName);
619
- const idKey = ConditionSnapshotImpl.normalizeName(varName + ".Id");
620
- const variant = new node_opcua_variant_1.Variant({ dataType: node_opcua_variant_1.DataType.Boolean, value });
621
- this._map[idKey] = variant;
622
- // also change varName with human readable text
623
- const twoStateNode = this._node_index[hrKey];
624
- if (!twoStateNode) {
625
- throw new Error("Cannot find twoState Variable with name " + varName);
626
- }
627
- if (!(twoStateNode instanceof ua_two_state_variable_1.UATwoStateVariableImpl)) {
628
- throw new Error("Cannot find twoState Variable with name " + varName + " " + twoStateNode);
629
- }
630
- const hrValue = new node_opcua_variant_1.Variant({
631
- dataType: node_opcua_variant_1.DataType.LocalizedText,
632
- value: value ? twoStateNode.getTrueState() : twoStateNode.getFalseState()
633
- });
634
- this._map[hrKey] = hrValue;
635
- const node = this._node_index[idKey];
636
- // also change ConditionNode if we are on currentBranch
637
- if (this.isCurrentBranch()) {
638
- (0, node_opcua_assert_1.assert)(twoStateNode instanceof ua_two_state_variable_1.UATwoStateVariableImpl);
639
- twoStateNode.setValue(value);
640
- // xx console.log("Is current branch", twoStateNode.toString(),variant.toString());
641
- // xx console.log(" = ",twoStateNode.getValue());
642
- }
643
- this.emit("value_changed", node, variant);
644
- }
645
- _get_twoStateVariable(varName) {
646
- const key = ConditionSnapshotImpl.normalizeName(varName) + ".Id";
647
- const variant = this._map[key];
648
- // istanbul ignore next
649
- if (!variant) {
650
- return "???";
651
- // throw new Error("Cannot find TwoStateVariable with name " + varName);
652
- }
653
- return variant.value;
654
- }
655
- }
656
- exports.ConditionSnapshotImpl = ConditionSnapshotImpl;
657
- ConditionSnapshotImpl.normalizeName = normalizeName;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConditionSnapshotImpl = void 0;
4
+ /**
5
+ * @module node-opcua-address-space.AlarmsAndConditions
6
+ */
7
+ const events_1 = require("events");
8
+ const node_opcua_assert_1 = require("node-opcua-assert");
9
+ const node_opcua_data_model_1 = require("node-opcua-data-model");
10
+ const node_opcua_debug_1 = require("node-opcua-debug");
11
+ const node_opcua_nodeid_1 = require("node-opcua-nodeid");
12
+ const node_opcua_status_code_1 = require("node-opcua-status-code");
13
+ const node_opcua_types_1 = require("node-opcua-types");
14
+ const node_opcua_variant_1 = require("node-opcua-variant");
15
+ const event_data_1 = require("../event_data");
16
+ const ua_two_state_variable_1 = require("../state_machine/ua_two_state_variable");
17
+ const condition_1 = require("./condition");
18
+ const ua_condition_impl_1 = require("./ua_condition_impl");
19
+ const debugLog = (0, node_opcua_debug_1.make_debugLog)(__filename);
20
+ const doDebug = (0, node_opcua_debug_1.checkDebugFlag)(__filename);
21
+ function normalizeName(str) {
22
+ // return str.split(".").map(utils.lowerFirstLetter).join(".");
23
+ return str;
24
+ }
25
+ function _visit(self, node, prefix) {
26
+ const aggregates = node.getAggregates();
27
+ for (const aggregate of aggregates) {
28
+ if (aggregate.nodeClass === node_opcua_data_model_1.NodeClass.Variable) {
29
+ const name = aggregate.browseName.toString();
30
+ const key = prefix + name;
31
+ // istanbul ignore next
32
+ if (doDebug) {
33
+ debugLog("adding key =", key);
34
+ }
35
+ const aggregateVariable = aggregate;
36
+ self._map[key] = aggregateVariable.readValue().value;
37
+ self._node_index[key] = aggregateVariable;
38
+ _visit(self, aggregate, prefix + name + ".");
39
+ }
40
+ }
41
+ }
42
+ function _record_condition_state(self, condition) {
43
+ self._map = {};
44
+ self._node_index = {};
45
+ (0, node_opcua_assert_1.assert)(condition instanceof ua_condition_impl_1.UAConditionImpl);
46
+ _visit(self, condition, "");
47
+ }
48
+ function _installOnChangeEventHandlers(self, node, prefix) {
49
+ const aggregates = node.getAggregates();
50
+ for (const aggregate of aggregates) {
51
+ if (aggregate.nodeClass === node_opcua_data_model_1.NodeClass.Variable) {
52
+ const name = aggregate.browseName.toString();
53
+ const key = prefix + name;
54
+ // istanbul ignore next
55
+ if (doDebug) {
56
+ debugLog("adding key =", key);
57
+ }
58
+ aggregate.on("value_changed", (newDataValue) => {
59
+ self._map[key] = newDataValue.value;
60
+ self._node_index[key] = aggregate;
61
+ });
62
+ _installOnChangeEventHandlers(self, aggregate, prefix + name + ".");
63
+ }
64
+ }
65
+ }
66
+ function _ensure_condition_values_correctness(self, node, prefix, error) {
67
+ const displayError = !!error;
68
+ error = error || [];
69
+ const aggregates = node.getAggregates();
70
+ for (const aggregate of aggregates) {
71
+ if (aggregate.nodeClass === node_opcua_data_model_1.NodeClass.Variable) {
72
+ const name = aggregate.browseName.toString();
73
+ const key = prefix + name;
74
+ const snapshot_value = self._map[key].toString();
75
+ const aggregateVariable = aggregate;
76
+ const condition_value = aggregateVariable.readValue().value.toString();
77
+ if (snapshot_value !== condition_value) {
78
+ error.push(" Condition Branch0 is not in sync with node values for " +
79
+ key +
80
+ "\n v1= " +
81
+ snapshot_value +
82
+ "\n v2= " +
83
+ condition_value);
84
+ }
85
+ self._node_index[key] = aggregate;
86
+ _ensure_condition_values_correctness(self, aggregate, prefix + name + ".", error);
87
+ }
88
+ }
89
+ if (displayError && error.length) {
90
+ throw new Error(error.join("\n"));
91
+ }
92
+ }
93
+ const disabledVar = new node_opcua_variant_1.Variant({
94
+ dataType: "StatusCode",
95
+ value: node_opcua_status_code_1.StatusCodes.BadConditionDisabled
96
+ });
97
+ // list of Condition variables that should not be published as BadConditionDisabled when the condition
98
+ // is in a disabled state.
99
+ const _varTable = {
100
+ BranchId: 1,
101
+ ConditionClassId: 1,
102
+ ConditionClassName: 1,
103
+ ConditionName: 1,
104
+ EnabledState: 1,
105
+ "EnabledState.EffectiveDisplayName": 1,
106
+ "EnabledState.Id": 1,
107
+ "EnabledState.TransitionTime": 1,
108
+ EventId: 1,
109
+ EventType: 1,
110
+ LocalTime: 1,
111
+ SourceName: 1,
112
+ SourceNode: 1,
113
+ Time: 1
114
+ };
115
+ class ConditionSnapshotImpl extends events_1.EventEmitter {
116
+ /**
117
+ * @class ConditionSnapshot
118
+ * @extends EventEmitter
119
+ * @param condition
120
+ * @param branchId
121
+ * @constructor
122
+ */
123
+ constructor(condition, branchId) {
124
+ super();
125
+ this.eventData = null;
126
+ this.branchId = null;
127
+ this._map = {};
128
+ this._node_index = {};
129
+ (0, node_opcua_assert_1.assert)(branchId instanceof node_opcua_nodeid_1.NodeId);
130
+ // xx self.branchId = branchId;
131
+ this.condition = condition;
132
+ this.eventData = new event_data_1.EventData(condition);
133
+ // a nodeId/Variant map
134
+ _record_condition_state(this, condition);
135
+ if ((0, node_opcua_nodeid_1.sameNodeId)(branchId, node_opcua_nodeid_1.NodeId.nullNodeId)) {
136
+ _installOnChangeEventHandlers(this, condition, "");
137
+ }
138
+ this._set_var("BranchId", node_opcua_variant_1.DataType.NodeId, branchId);
139
+ }
140
+ _constructEventData() {
141
+ if (this.branchId && (0, node_opcua_nodeid_1.sameNodeId)(this.branchId, node_opcua_nodeid_1.NodeId.nullNodeId)) {
142
+ _ensure_condition_values_correctness(this, this.condition, "", []);
143
+ }
144
+ const c = this.condition;
145
+ const isDisabled = !c.getEnabledState();
146
+ const eventData = new event_data_1.EventData(this.condition);
147
+ for (const fullBrowsePath of Object.keys(this._map)) {
148
+ const node = this._node_index[fullBrowsePath];
149
+ if (!node) {
150
+ debugLog("cannot node for find key", fullBrowsePath);
151
+ continue;
152
+ }
153
+ if (isDisabled && !Object.prototype.hasOwnProperty.call(_varTable, fullBrowsePath)) {
154
+ eventData._createValue(fullBrowsePath, node, disabledVar);
155
+ }
156
+ else {
157
+ eventData._createValue(fullBrowsePath, node, this._map[fullBrowsePath]);
158
+ }
159
+ }
160
+ return eventData;
161
+ }
162
+ // /**
163
+ // *
164
+ // */
165
+ // public readValue(sessionContext: ISessionContext, nodeId: NodeId, selectClause: SimpleAttributeOperand): Variant {
166
+ // const c = this.condition as UAConditionImpl;
167
+ // const isDisabled = !c.getEnabledState();
168
+ // if (isDisabled) {
169
+ // return disabledVar;
170
+ // }
171
+ // const key = nodeId.toString();
172
+ // const variant = this._map[key];
173
+ // if (!variant) {
174
+ // // the value is not handled by us .. let's delegate
175
+ // // to the eventData helper object
176
+ // return this.eventData?.readValue(sessionContext, nodeId, selectClause) || disabledVar;
177
+ // }
178
+ // return variant;
179
+ // }
180
+ _get_var(varName) {
181
+ const c = this.condition;
182
+ if (!c.getEnabledState() && !Object.prototype.hasOwnProperty.call(_varTable, varName)) {
183
+ // xx console.log("ConditionSnapshot#_get_var condition enabled =", self.condition.getEnabledState());
184
+ return disabledVar;
185
+ }
186
+ const key = normalizeName(varName);
187
+ const variant = this._map[key];
188
+ if (!variant) {
189
+ throw new Error("cannot find key " + key);
190
+ }
191
+ return variant.value;
192
+ }
193
+ _set_var(varName, dataType, value) {
194
+ const key = normalizeName(varName);
195
+ // istanbul ignore next
196
+ if (!Object.prototype.hasOwnProperty.call(this._map, key)) {
197
+ if (doDebug) {
198
+ debugLog(" cannot find node " + varName);
199
+ debugLog(" map=", Object.keys(this._map).join(" "));
200
+ }
201
+ }
202
+ this._map[key] = new node_opcua_variant_1.Variant({
203
+ dataType,
204
+ value
205
+ });
206
+ if (this._map[key + ".SourceTimestamp"]) {
207
+ this._map[key + ".SourceTimestamp"] = new node_opcua_variant_1.Variant({
208
+ dataType: node_opcua_variant_1.DataType.DateTime,
209
+ value: new Date()
210
+ });
211
+ }
212
+ const variant = this._map[key];
213
+ const node = this._node_index[key];
214
+ if (!node) {
215
+ // for instance localTime is optional
216
+ debugLog("Cannot serVar " + varName + " dataType " + node_opcua_variant_1.DataType[dataType]);
217
+ return;
218
+ }
219
+ (0, node_opcua_assert_1.assert)(node.nodeClass === node_opcua_data_model_1.NodeClass.Variable);
220
+ this.emit("value_changed", node, variant);
221
+ }
222
+ /**
223
+ * @method getBrandId
224
+ * @return {NodeId}
225
+ */
226
+ getBranchId() {
227
+ return this._get_var("BranchId");
228
+ }
229
+ /**
230
+ * @method getEventId
231
+ * @return {ByteString}
232
+ */
233
+ getEventId() {
234
+ return this._get_var("EventId");
235
+ }
236
+ /**
237
+ * @method getRetain
238
+ * @return {Boolean}
239
+ */
240
+ getRetain() {
241
+ return this._get_var("Retain");
242
+ }
243
+ /**
244
+ *
245
+ * @method setRetain
246
+ * @param retainFlag {Boolean}
247
+ */
248
+ setRetain(retainFlag) {
249
+ retainFlag = !!retainFlag;
250
+ return this._set_var("Retain", node_opcua_variant_1.DataType.Boolean, retainFlag);
251
+ }
252
+ /**
253
+ * @method renewEventId
254
+ *
255
+ */
256
+ renewEventId() {
257
+ const addressSpace = this.condition.addressSpace;
258
+ // create a new event Id for this new condition
259
+ const eventId = addressSpace.generateEventId();
260
+ const ret = this._set_var("EventId", node_opcua_variant_1.DataType.ByteString, eventId.value);
261
+ // xx var branch = self; console.log("MMMMMMMMrenewEventId branch " +
262
+ // branch.getBranchId().toString() + " eventId = " + branch.getEventId().toString("hex"));
263
+ return ret;
264
+ }
265
+ /**
266
+ * @method getEnabledState
267
+ * @return {Boolean}
268
+ */
269
+ getEnabledState() {
270
+ return this._get_twoStateVariable("EnabledState");
271
+ }
272
+ /**
273
+ * @method setEnabledState
274
+ * @param value {Boolean}
275
+ * @return void
276
+ */
277
+ setEnabledState(value) {
278
+ return this._set_twoStateVariable("EnabledState", value);
279
+ }
280
+ /**
281
+ * @method getEnabledStateAsString
282
+ * @return {String}
283
+ */
284
+ getEnabledStateAsString() {
285
+ return this._get_var("EnabledState").text;
286
+ }
287
+ /**
288
+ * @method getComment
289
+ * @return {LocalizedText}
290
+ */
291
+ getComment() {
292
+ return this._get_var("Comment");
293
+ }
294
+ /**
295
+ * Set condition comment
296
+ *
297
+ * Comment contains the last comment provided for a certain state (ConditionBranch). It may
298
+ * have been provided by an AddComment Method, some other Method or in some other
299
+ * manner. The initial value of this Variable is null, unless it is provided in some other manner. If
300
+ * a Method provides as an option the ability to set a Comment, then the value of this Variable is
301
+ * reset to null if an optional comment is not provided.
302
+ *
303
+ * @method setComment
304
+ * @param txtMessage {LocalizedText}
305
+ */
306
+ setComment(txtMessage) {
307
+ const txtMessage1 = (0, node_opcua_data_model_1.coerceLocalizedText)(txtMessage);
308
+ this._set_var("Comment", node_opcua_variant_1.DataType.LocalizedText, txtMessage1);
309
+ }
310
+ /**
311
+ *
312
+ * @method setMessage
313
+ * @param txtMessage {LocalizedText}
314
+ */
315
+ setMessage(txtMessage) {
316
+ const txtMessage1 = (0, node_opcua_data_model_1.coerceLocalizedText)(txtMessage);
317
+ return this._set_var("Message", node_opcua_variant_1.DataType.LocalizedText, txtMessage1);
318
+ }
319
+ /**
320
+ * @method setClientUserId
321
+ * @param userIdentity {String}
322
+ */
323
+ setClientUserId(userIdentity) {
324
+ return this._set_var("ClientUserId", node_opcua_variant_1.DataType.String, userIdentity.toString());
325
+ }
326
+ /*
327
+ *
328
+ *
329
+ * as per spec 1.0.3 - Part 9
330
+ *
331
+ * Quality reveals the status of process values or other resources that this Condition instance is
332
+ * based upon. If, for example, a process value is “Uncertain”, the associated “LevelAlarm”
333
+ * Condition is also questionable. Values for the Quality can be any of the OPC StatusCodes
334
+ * defined in Part 8 as well as Good, Uncertain and Bad as defined in Part 4. These
335
+ * StatusCodes are similar to but slightly more generic than the description of data quality in the
336
+ * various field bus specifications. It is the responsibility of the Server to map internal status
337
+ * information to these codes. A Server which supports no quality information shall return Good.
338
+ * This quality can also reflect the communication status associated with the system that this
339
+ * value or resource is based on and from which this Alarm was received. For communication
340
+ * errors to the underlying system, especially those that result in some unavailable Event fields,
341
+ * the quality shall be BadNoCommunication error.
342
+ *
343
+ * Quality refers to the quality of the data value(s) upon which this Condition is based. Since a
344
+ * Condition is usually based on one or more Variables, the Condition inherits the quality of
345
+ * these Variables. E.g., if the process value is “Uncertain”, the “LevelAlarm” Condition is also
346
+ * questionable. If more than one variable is represented by a given condition or if the condition
347
+ * is from an underlining system and no direct mapping to a variable is available, it is up to the
348
+ * application to determine what quality is displayed as part of the condition.
349
+ */
350
+ /**
351
+ * set the condition quality
352
+ * @method setQuality
353
+ * @param quality {StatusCode}
354
+ */
355
+ setQuality(quality) {
356
+ this._set_var("Quality", node_opcua_variant_1.DataType.StatusCode, quality);
357
+ }
358
+ /**
359
+ * @method getQuality
360
+ * @return {StatusCode}
361
+ */
362
+ getQuality() {
363
+ return this._get_var("Quality");
364
+ }
365
+ /*
366
+ * as per spec 1.0.3 - Part 9
367
+ * The Severity of a Condition is inherited from the base Event model defined in Part 5. It
368
+ * indicates the urgency of the Condition and is also commonly called ‘priority’, especially in
369
+ * relation to Alarms in the ProcessConditionClass.
370
+ *
371
+ * as per spec 1.0.3 - PArt 5
372
+ * Severity is an indication of the urgency of the Event. This is also commonly called “priority”.
373
+ * Values will range from 1 to 1 000, with 1 being the lowest severity and 1 000 being the highest.
374
+ * Typically, a severity of 1 would indicate an Event which is informational in nature, while a value
375
+ * of 1 000 would indicate an Event of catastrophic nature, which could potentially result in severe
376
+ * financial loss or loss of life.
377
+ * It is expected that very few Server implementations will support 1 000 distinct severity levels.
378
+ * Therefore, Server developers are responsible for distributing their severity levels across the
379
+ * 1 to 1 000 range in such a manner that clients can assume a linear distribution. For example, a
380
+ * client wishing to present five severity levels to a user should be able to do the following
381
+ * mapping:
382
+ * Client Severity OPC Severity
383
+ * HIGH 801 – 1 000
384
+ * MEDIUM HIGH 601 – 800
385
+ * MEDIUM 401 – 600
386
+ * MEDIUM LOW 201 – 400
387
+ * LOW 1 – 200
388
+ * In many cases a strict linear mapping of underlying source severities to the OPC Severity range
389
+ * is not appropriate. The Server developer will instead intelligently map the underlying source
390
+ * severities to the 1 to 1 000 OPC Severity range in some other fashion. In particular, it is
391
+ * recommended that Server developers map Events of high urgency into the OPC severity range
392
+ * of 667 to 1 000, Events of medium urgency into the OPC severity range of 334 to 666 and
393
+ * Events of low urgency into OPC severities of 1 to 333.
394
+ */
395
+ /**
396
+ * @method setSeverity
397
+ * @param severity {UInt16}
398
+ */
399
+ setSeverity(severity) {
400
+ (0, node_opcua_assert_1.assert)(isFinite(severity), "expecting a UInt16");
401
+ // record automatically last severity
402
+ const lastSeverity = this.getSeverity();
403
+ this.setLastSeverity(lastSeverity);
404
+ this._set_var("Severity", node_opcua_variant_1.DataType.UInt16, severity);
405
+ }
406
+ /**
407
+ * @method getSeverity
408
+ * @return {UInt16}
409
+ */
410
+ getSeverity() {
411
+ const c = this.condition;
412
+ (0, node_opcua_assert_1.assert)(c.getEnabledState(), "condition must be enabled");
413
+ const value = this._get_var("Severity");
414
+ return +value;
415
+ }
416
+ /*
417
+ * as per spec 1.0.3 - part 9:
418
+ * LastSeverity provides the previous severity of the ConditionBranch. Initially this Variable
419
+ * contains a zero value; it will return a value only after a severity change. The new severity is
420
+ * supplied via the Severity Property which is inherited from the BaseEventType.
421
+ *
422
+ */
423
+ /**
424
+ * @method setLastSeverity
425
+ * @param severity {UInt16}
426
+ */
427
+ setLastSeverity(severity) {
428
+ severity = +severity;
429
+ return this._set_var("LastSeverity", node_opcua_variant_1.DataType.UInt16, severity);
430
+ }
431
+ /**
432
+ * @method getLastSeverity
433
+ * @return {UInt16}
434
+ */
435
+ getLastSeverity() {
436
+ const value = this._get_var("LastSeverity");
437
+ return +value;
438
+ }
439
+ /**
440
+ * setReceiveTime
441
+ *
442
+ * (as per OPCUA 1.0.3 part 5)
443
+ *
444
+ * ReceiveTime provides the time the OPC UA Server received the Event from the underlying
445
+ * device of another Server.
446
+ *
447
+ * ReceiveTime is analogous to ServerTimestamp defined in Part 4, i.e.
448
+ * in the case where the OPC UA Server gets an Event from another OPC UA Server, each Server
449
+ * applies its own ReceiveTime. That implies that a Client may get the same Event, having the
450
+ * same EventId, from different Servers having different values of the ReceiveTime.
451
+ *
452
+ * The ReceiveTime shall always be returned as value and the Server is not allowed to return a
453
+ * StatusCode for the ReceiveTime indicating an error.
454
+ *
455
+ * @method setReceiveTime
456
+ * @param time {Date} : UTCTime
457
+ */
458
+ setReceiveTime(time) {
459
+ (0, node_opcua_assert_1.assert)(time instanceof Date);
460
+ return this._set_var("ReceiveTime", node_opcua_variant_1.DataType.DateTime, time);
461
+ }
462
+ /**
463
+ * (as per OPCUA 1.0.3 part 5)
464
+ * Time provides the time the Event occurred. This value is set as close to the event generator as
465
+ * possible. It often comes from the underlying system or device. Once set, intermediate OPC UA
466
+ * Servers shall not alter the value.
467
+ *
468
+ * @method setTime
469
+ * @param time {Date}
470
+ */
471
+ setTime(time) {
472
+ (0, node_opcua_assert_1.assert)(time instanceof Date);
473
+ return this._set_var("Time", node_opcua_variant_1.DataType.DateTime, time);
474
+ }
475
+ /**
476
+ * LocalTime is a structure containing the Offset and the DaylightSavingInOffset flag. The Offset
477
+ * specifies the time difference (in minutes) between the Time Property and the time at the location
478
+ * in which the event was issued. If DaylightSavingInOffset is TRUE, then Standard/Daylight
479
+ * savings time (DST) at the originating location is in effect and Offset includes the DST c orrection.
480
+ * If FALSE then the Offset does not include DST correction and DST may or may not have been
481
+ * in effect.
482
+ * @method setLocalTime
483
+ * @param localTime {TimeZone}
484
+ */
485
+ setLocalTime(localTime) {
486
+ (0, node_opcua_assert_1.assert)(localTime instanceof node_opcua_types_1.TimeZoneDataType);
487
+ return this._set_var("LocalTime", node_opcua_variant_1.DataType.ExtensionObject, new node_opcua_types_1.TimeZoneDataType(localTime));
488
+ }
489
+ // read only !
490
+ getSourceName() {
491
+ return this._get_var("SourceName");
492
+ }
493
+ /**
494
+ * @method getSourceNode
495
+ * return {NodeId}
496
+ */
497
+ getSourceNode() {
498
+ return this._get_var("SourceNode");
499
+ }
500
+ /**
501
+ * @method getEventType
502
+ * return {NodeId}
503
+ */
504
+ getEventType() {
505
+ return this._get_var("EventType");
506
+ }
507
+ getMessage() {
508
+ return this._get_var("Message");
509
+ }
510
+ isCurrentBranch() {
511
+ return (0, node_opcua_nodeid_1.sameNodeId)(this._get_var("BranchId"), node_opcua_nodeid_1.NodeId.nullNodeId);
512
+ }
513
+ // -- ACKNOWLEDGEABLE -------------------------------------------------------------------
514
+ getAckedState() {
515
+ const acknowledgeableCondition = this.condition;
516
+ if (!acknowledgeableCondition.ackedState) {
517
+ throw new Error("Node " +
518
+ acknowledgeableCondition.browseName.toString() +
519
+ " of type " +
520
+ acknowledgeableCondition.typeDefinitionObj.browseName.toString() +
521
+ " has no AckedState");
522
+ }
523
+ return this._get_twoStateVariable("AckedState");
524
+ }
525
+ setAckedState(ackedState) {
526
+ ackedState = !!ackedState;
527
+ return (0, condition_1._setAckedState)(this, ackedState);
528
+ }
529
+ getConfirmedState() {
530
+ const acknowledgeableCondition = this.condition;
531
+ (0, node_opcua_assert_1.assert)(acknowledgeableCondition.confirmedState, "Must have a confirmed state");
532
+ return this._get_twoStateVariable("ConfirmedState");
533
+ }
534
+ setConfirmedStateIfExists(confirmedState) {
535
+ confirmedState = !!confirmedState;
536
+ const acknowledgeableCondition = this.condition;
537
+ if (!acknowledgeableCondition.confirmedState) {
538
+ // no condition node has been defined (this is valid)
539
+ // confirm state cannot be set
540
+ return;
541
+ }
542
+ // todo deal with Error code BadConditionBranchAlreadyConfirmed
543
+ return this._set_twoStateVariable("ConfirmedState", confirmedState);
544
+ }
545
+ setConfirmedState(confirmedState) {
546
+ const acknowledgeableCondition = this.condition;
547
+ (0, node_opcua_assert_1.assert)(acknowledgeableCondition.confirmedState, "Must have a confirmed state. Add ConfirmedState to the optionals");
548
+ return this.setConfirmedStateIfExists(confirmedState);
549
+ }
550
+ // ---- Shelving
551
+ /**
552
+ * @class ConditionSnapshot
553
+ */
554
+ /**
555
+ * @method getSuppressedState
556
+ * @return {Boolean}
557
+ */
558
+ getSuppressedState() {
559
+ return this._get_twoStateVariable("SuppressedState");
560
+ }
561
+ /**
562
+ * @method setSuppressedState
563
+ * @param suppressed {Boolean}
564
+ */
565
+ setSuppressedState(suppressed) {
566
+ suppressed = !!suppressed;
567
+ this._set_twoStateVariable("SuppressedState", suppressed);
568
+ }
569
+ getActiveState() {
570
+ return this._get_twoStateVariable("ActiveState");
571
+ }
572
+ setActiveState(newActiveState) {
573
+ // xx var activeState = self.getActiveState();
574
+ // xx if (activeState === newActiveState) {
575
+ // xx return StatusCodes.Bad;
576
+ // xx }
577
+ this._set_twoStateVariable("ActiveState", newActiveState);
578
+ return node_opcua_status_code_1.StatusCodes.Good;
579
+ }
580
+ // tslint:disable:no-empty
581
+ setShelvingState() {
582
+ // todo
583
+ }
584
+ toString() {
585
+ // public condition: any = null;
586
+ // public eventData: any = null;
587
+ // public branchId: NodeId | null = null;
588
+ const t = this.condition.addressSpace.findNode(this.condition.typeDefinition);
589
+ return ("" +
590
+ "condition: " +
591
+ (this.condition.browseName.toString() + " " + this.condition.nodeId.toString()) +
592
+ ", type: " +
593
+ (t.browseName.toString() + " " + t.nodeId.toString()) +
594
+ ", branchId: " +
595
+ (this.branchId ? this.branchId.toString() : "<null>") +
596
+ ", acked: " +
597
+ this.getAckedState() +
598
+ ", confirmed: " +
599
+ this.getConfirmedState() +
600
+ ", activeState: " +
601
+ this.getActiveState() +
602
+ // + ", suppressed: " + this.getSuppressedState()
603
+ ", retain: " +
604
+ this.getRetain() +
605
+ ", message: " +
606
+ this.getMessage() +
607
+ ", comment: " +
608
+ this.getComment());
609
+ }
610
+ /**
611
+ * @class ConditionSnapshot
612
+ * @param varName
613
+ * @param value
614
+ * @private
615
+ */
616
+ _set_twoStateVariable(varName, value) {
617
+ value = !!value;
618
+ const hrKey = ConditionSnapshotImpl.normalizeName(varName);
619
+ const idKey = ConditionSnapshotImpl.normalizeName(varName + ".Id");
620
+ const variant = new node_opcua_variant_1.Variant({ dataType: node_opcua_variant_1.DataType.Boolean, value });
621
+ this._map[idKey] = variant;
622
+ // also change varName with human readable text
623
+ const twoStateNode = this._node_index[hrKey];
624
+ if (!twoStateNode) {
625
+ throw new Error("Cannot find twoState Variable with name " + varName);
626
+ }
627
+ if (!(twoStateNode instanceof ua_two_state_variable_1.UATwoStateVariableImpl)) {
628
+ throw new Error("Cannot find twoState Variable with name " + varName + " " + twoStateNode);
629
+ }
630
+ const hrValue = new node_opcua_variant_1.Variant({
631
+ dataType: node_opcua_variant_1.DataType.LocalizedText,
632
+ value: value ? twoStateNode.getTrueState() : twoStateNode.getFalseState()
633
+ });
634
+ this._map[hrKey] = hrValue;
635
+ const node = this._node_index[idKey];
636
+ // also change ConditionNode if we are on currentBranch
637
+ if (this.isCurrentBranch()) {
638
+ (0, node_opcua_assert_1.assert)(twoStateNode instanceof ua_two_state_variable_1.UATwoStateVariableImpl);
639
+ twoStateNode.setValue(value);
640
+ // xx console.log("Is current branch", twoStateNode.toString(),variant.toString());
641
+ // xx console.log(" = ",twoStateNode.getValue());
642
+ }
643
+ this.emit("value_changed", node, variant);
644
+ }
645
+ _get_twoStateVariable(varName) {
646
+ const key = ConditionSnapshotImpl.normalizeName(varName) + ".Id";
647
+ const variant = this._map[key];
648
+ // istanbul ignore next
649
+ if (!variant) {
650
+ return "???";
651
+ // throw new Error("Cannot find TwoStateVariable with name " + varName);
652
+ }
653
+ return variant.value;
654
+ }
655
+ }
656
+ exports.ConditionSnapshotImpl = ConditionSnapshotImpl;
657
+ ConditionSnapshotImpl.normalizeName = normalizeName;
658
658
  //# sourceMappingURL=condition_snapshot_impl.js.map