node.py
Go to the documentation of this file.
1 """
2 High level node object, to access node attribute
3 and browse address space
4 """
5 
6 from opcua import ua
7 from opcua.common import events
8 import opcua.common
9 
10 class Node(object):
11 
12  """
13  High level node object, to access node attribute,
14  browse and populate address space.
15  Node objects are usefull as-is but they do not expose the entire
16  OPC-UA protocol. Feel free to look at the code of this class and call
17  directly UA services methods to optimize your code
18  """
19 
20  def __init__(self, server, nodeid):
21  self.server = server
22  self.nodeid = None
23  if isinstance(nodeid, Node):
24  self.nodeid = nodeid.nodeid
25  elif isinstance(nodeid, ua.NodeId):
26  self.nodeid = nodeid
27  elif type(nodeid) in (str, bytes):
28  self.nodeid = ua.NodeId.from_string(nodeid)
29  elif isinstance(nodeid, int):
30  self.nodeid = ua.NodeId(nodeid, 0)
31  else:
32  raise ua.UaError("argument to node must be a NodeId object or a string defining a nodeid found {0} of type {1}".format(nodeid, type(nodeid)))
33 
34  def __eq__(self, other):
35  if isinstance(other, Node) and self.nodeid == other.nodeid:
36  return True
37  return False
38 
39  def __ne__(self, other):
40  return not self.__eq__(other)
41 
42  def __str__(self):
43  return "Node({0})".format(self.nodeid)
44  __repr__ = __str__
45 
46  def __hash__(self):
47  return self.nodeid.__hash__()
48 
49  def get_browse_name(self):
50  """
51  Get browse name of a node. A browse name is a QualifiedName object
52  composed of a string(name) and a namespace index.
53  """
54  result = self.get_attribute(ua.AttributeIds.BrowseName)
55  return result.Value.Value
56 
57  def get_display_name(self):
58  """
59  get description attribute of node
60  """
61  result = self.get_attribute(ua.AttributeIds.DisplayName)
62  return result.Value.Value
63 
64  def get_data_type(self):
65  """
66  get data type of node as NodeId
67  """
68  result = self.get_attribute(ua.AttributeIds.DataType)
69  return result.Value.Value
70 
72  """
73  get data type of node as VariantType
74  This only works if node is a variable, otherwise type
75  may not be convertible to VariantType
76  """
77  result = self.get_attribute(ua.AttributeIds.DataType)
78  return ua.datatype_to_varianttype(result.Value.Value)
79 
80  def get_access_level(self):
81  """
82  Get the access level attribute of the node as a set of AccessLevel enum values.
83  """
84  result = self.get_attribute(ua.AttributeIds.AccessLevel)
85  return ua.AccessLevel.parse_bitfield(result.Value.Value)
86 
88  """
89  Get the user access level attribute of the node as a set of AccessLevel enum values.
90  """
91  result = self.get_attribute(ua.AttributeIds.UserAccessLevel)
92  return ua.AccessLevel.parse_bitfield(result.Value.Value)
93 
94  def get_event_notifier(self):
95  """
96  Get the event notifier attribute of the node as a set of EventNotifier enum values.
97  """
98  result = self.get_attribute(ua.AttributeIds.EventNotifier)
99  return ua.EventNotifier.parse_bitfield(result.Value.Value)
100 
101  def set_event_notifier(self, values):
102  """
103  Set the event notifier attribute.
104 
105  :param values: an iterable of EventNotifier enum values.
106  """
107  event_notifier_bitfield = ua.EventNotifier.to_bitfield(values)
108  self.set_attribute(ua.AttributeIds.EventNotifier, ua.DataValue(ua.Variant(event_notifier_bitfield, ua.VariantType.Byte)))
109 
110  def get_node_class(self):
111  """
112  get node class attribute of node
113  """
114  result = self.get_attribute(ua.AttributeIds.NodeClass)
115  return result.Value.Value
116 
117  def get_description(self):
118  """
119  get description attribute class of node
120  """
121  result = self.get_attribute(ua.AttributeIds.Description)
122  return result.Value.Value
123 
124  def get_value(self):
125  """
126  Get value of a node as a python type. Only variables ( and properties) have values.
127  An exception will be generated for other node types.
128  """
129  result = self.get_data_value()
130  return result.Value.Value
131 
132  def get_data_value(self):
133  """
134  Get value of a node as a DataValue object. Only variables (and properties) have values.
135  An exception will be generated for other node types.
136  DataValue contain a variable value as a variant as well as server and source timestamps
137  """
138  return self.get_attribute(ua.AttributeIds.Value)
139 
140  def set_array_dimensions(self, value):
141  """
142  Set attribute ArrayDimensions of node
143  make sure it has the correct data type
144  """
145  v = ua.Variant(value, ua.VariantType.UInt32)
146  self.set_attribute(ua.AttributeIds.ArrayDimensions, ua.DataValue(v))
147 
149  """
150  Read and return ArrayDimensions attribute of node
151  """
152  res = self.get_attribute(ua.AttributeIds.ArrayDimensions)
153  return res.Value.Value
154 
155  def set_value_rank(self, value):
156  """
157  Set attribute ArrayDimensions of node
158  """
159  v = ua.Variant(value, ua.VariantType.Int32)
160  self.set_attribute(ua.AttributeIds.ValueRank, ua.DataValue(v))
161 
162  def get_value_rank(self):
163  """
164  Read and return ArrayDimensions attribute of node
165  """
166  res = self.get_attribute(ua.AttributeIds.ValueRank)
167  return res.Value.Value
168 
169  def set_value(self, value, varianttype=None):
170  """
171  Set value of a node. Only variables(properties) have values.
172  An exception will be generated for other node types.
173  value argument is either:
174  * a python built-in type, converted to opc-ua
175  optionnaly using the variantype argument.
176  * a ua.Variant, varianttype is then ignored
177  * a ua.DataValue, you then have full control over data send to server
178  """
179  datavalue = None
180  if isinstance(value, ua.DataValue):
181  datavalue = value
182  elif isinstance(value, ua.Variant):
183  datavalue = ua.DataValue(value)
184  else:
185  datavalue = ua.DataValue(ua.Variant(value, varianttype))
186  self.set_attribute(ua.AttributeIds.Value, datavalue)
187 
188  set_data_value = set_value
189 
190  def set_writable(self, writable=True):
191  """
192  Set node as writable by clients.
193  A node is always writable on server side.
194  """
195  if writable:
196  self.set_attr_bit(ua.AttributeIds.AccessLevel, ua.AccessLevel.CurrentWrite)
197  self.set_attr_bit(ua.AttributeIds.UserAccessLevel, ua.AccessLevel.CurrentWrite)
198  else:
199  self.unset_attr_bit(ua.AttributeIds.AccessLevel, ua.AccessLevel.CurrentWrite)
200  self.unset_attr_bit(ua.AttributeIds.UserAccessLevel, ua.AccessLevel.CurrentWrite)
201 
202  def set_attr_bit(self, attr, bit):
203  val = self.get_attribute(attr)
204  val.Value.Value = ua.ua_binary.set_bit(val.Value.Value, bit)
205  self.set_attribute(attr, val)
206 
207  def unset_attr_bit(self, attr, bit):
208  val = self.get_attribute(attr)
209  val.Value.Value = ua.ua_binary.unset_bit(val.Value.Value, bit)
210  self.set_attribute(attr, val)
211 
212  def set_read_only(self):
213  """
214  Set a node as read-only for clients.
215  A node is always writable on server side.
216  """
217  return self.set_writable(False)
218 
219  def set_attribute(self, attributeid, datavalue):
220  """
221  Set an attribute of a node
222  attributeid is a member of ua.AttributeIds
223  datavalue is a ua.DataValue object
224  """
225  attr = ua.WriteValue()
226  attr.NodeId = self.nodeid
227  attr.AttributeId = attributeid
228  attr.Value = datavalue
229  params = ua.WriteParameters()
230  params.NodesToWrite = [attr]
231  result = self.server.write(params)
232  result[0].check()
233 
234  def get_attribute(self, attr):
235  """
236  Read one attribute of a node
237  result code from server is checked and an exception is raised in case of error
238  """
239  rv = ua.ReadValueId()
240  rv.NodeId = self.nodeid
241  rv.AttributeId = attr
242  params = ua.ReadParameters()
243  params.NodesToRead.append(rv)
244  result = self.server.read(params)
245  result[0].StatusCode.check()
246  return result[0]
247 
248  def get_attributes(self, attrs):
249  """
250  Read several attributes of a node
251  list of DataValue is returned
252  """
253  params = ua.ReadParameters()
254  for attr in attrs:
255  rv = ua.ReadValueId()
256  rv.NodeId = self.nodeid
257  rv.AttributeId = attr
258  params.NodesToRead.append(rv)
259 
260  results = self.server.read(params)
261  return results
262 
263  def get_children(self, refs=ua.ObjectIds.HierarchicalReferences, nodeclassmask=ua.NodeClass.Unspecified):
264  """
265  Get all children of a node. By default hierarchical references and all node classes are returned.
266  Other reference types may be given:
267  References = 31
268  NonHierarchicalReferences = 32
269  HierarchicalReferences = 33
270  HasChild = 34
271  Organizes = 35
272  HasEventSource = 36
273  HasModellingRule = 37
274  HasEncoding = 38
275  HasDescription = 39
276  HasTypeDefinition = 40
277  GeneratesEvent = 41
278  Aggregates = 44
279  HasSubtype = 45
280  HasProperty = 46
281  HasComponent = 47
282  HasNotifier = 48
283  HasOrderedComponent = 49
284  """
285  return self.get_referenced_nodes(refs, ua.BrowseDirection.Forward, nodeclassmask)
286 
287  def get_properties(self):
288  """
289  return properties of node.
290  properties are child nodes with a reference of type HasProperty and a NodeClass of Variable
291  """
292  return self.get_children(refs=ua.ObjectIds.HasProperty, nodeclassmask=ua.NodeClass.Variable)
293 
294  def get_variables(self):
295  """
296  return variables of node.
297  properties are child nodes with a reference of type HasComponent and a NodeClass of Variable
298  """
299  return self.get_children(refs=ua.ObjectIds.HasComponent, nodeclassmask=ua.NodeClass.Variable)
300 
301  def get_methods(self):
302  """
303  return methods of node.
304  properties are child nodes with a reference of type HasComponent and a NodeClass of Method
305  """
306  return self.get_children(refs=ua.ObjectIds.HasComponent, nodeclassmask=ua.NodeClass.Method)
307 
308  def get_children_descriptions(self, refs=ua.ObjectIds.HierarchicalReferences, nodeclassmask=ua.NodeClass.Unspecified, includesubtypes=True):
309  return self.get_references(refs, ua.BrowseDirection.Forward, nodeclassmask, includesubtypes)
310 
311  def get_references(self, refs=ua.ObjectIds.References, direction=ua.BrowseDirection.Both, nodeclassmask=ua.NodeClass.Unspecified, includesubtypes=True):
312  """
313  returns references of the node based on specific filter defined with:
314 
315  refs = ObjectId of the Reference
316  direction = Browse direction for references
317  nodeclassmask = filter nodes based on specific class
318  includesubtypes = If true subtypes of the reference (ref) are also included
319  """
320  desc = ua.BrowseDescription()
321  desc.BrowseDirection = direction
322  desc.ReferenceTypeId = ua.TwoByteNodeId(refs)
323  desc.IncludeSubtypes = includesubtypes
324  desc.NodeClassMask = nodeclassmask
325  desc.ResultMask = ua.BrowseResultMask.All
326 
327  desc.NodeId = self.nodeid
328  params = ua.BrowseParameters()
329  params.View.Timestamp = ua.get_win_epoch()
330  params.NodesToBrowse.append(desc)
331  results = self.server.browse(params)
332  return results[0].References
333 
334  def get_referenced_nodes(self, refs=ua.ObjectIds.References, direction=ua.BrowseDirection.Both, nodeclassmask=ua.NodeClass.Unspecified, includesubtypes=True):
335  """
336  returns referenced nodes based on specific filter
337  Paramters are the same as for get_references
338 
339  """
340  references = self.get_references(refs, direction, nodeclassmask, includesubtypes)
341  nodes = []
342  for desc in references:
343  node = Node(self.server, desc.NodeId)
344  nodes.append(node)
345  return nodes
346 
348  """
349  returns type definition of the node.
350  """
351  references = self.get_references(refs=ua.ObjectIds.HasTypeDefinition, direction=ua.BrowseDirection.Forward)
352  if len(references) == 0:
353  return None
354  return references[0].NodeId
355 
356  def get_path_as_string(self, max_length=20):
357  """
358  Attempt to find path of node from root node and return it as a list of strings.
359  There might several possible paths to a node, this function will return one
360  Some nodes may be missing references, so this method may
361  return an empty list
362  Since address space may have circular references, a max length is specified
363 
364  """
365  path = self._get_path(max_length)
366  path = [ref.BrowseName.to_string() for ref in path]
367  path.append(self.get_browse_name().to_string())
368  return path
369 
370  def get_path(self, max_length=20):
371  """
372  Attempt to find path of node from root node and return it as a list of Nodes.
373  There might several possible paths to a node, this function will return one
374  Some nodes may be missing references, so this method may
375  return an empty list
376  Since address space may have circular references, a max length is specified
377 
378  """
379  path = self._get_path(max_length)
380  path = [Node(self.server, ref.NodeId) for ref in path]
381  path.append(self)
382  return path
383 
384  def _get_path(self, max_length=20):
385  """
386  Attempt to find path of node from root node and return it as a list of Nodes.
387  There might several possible paths to a node, this function will return one
388  Some nodes may be missing references, so this method may
389  return an empty list
390  Since address space may have circular references, a max length is specified
391 
392  """
393  path = []
394  node = self
395  while True:
396  refs = node.get_references(refs=ua.ObjectIds.HierarchicalReferences, direction=ua.BrowseDirection.Inverse)
397  if len(refs) > 0:
398  path.insert(0, refs[0])
399  node = Node(self.server, refs[0].NodeId)
400  if len(path) >= (max_length -1):
401  return path
402  else:
403  return path
404 
405  def get_parent(self):
406  """
407  returns parent of the node.
408  A Node may have several parents, the first found is returned.
409  This method uses reverse references, a node might be missing such a link,
410  thus we will not find its parent.
411  """
412  refs = self.get_references(refs=ua.ObjectIds.HierarchicalReferences, direction=ua.BrowseDirection.Inverse)
413  if len(refs) > 0:
414  return Node(self.server, refs[0].NodeId)
415  else:
416  return None
417 
418  def get_child(self, path):
419  """
420  get a child specified by its path from this node.
421  A path might be:
422  * a string representing a qualified name.
423  * a qualified name
424  * a list of string
425  * a list of qualified names
426  """
427  if type(path) not in (list, tuple):
428  path = [path]
429  rpath = self._make_relative_path(path)
430  bpath = ua.BrowsePath()
431  bpath.StartingNode = self.nodeid
432  bpath.RelativePath = rpath
433  result = self.server.translate_browsepaths_to_nodeids([bpath])
434  result = result[0]
435  result.StatusCode.check()
436  # FIXME: seems this method may return several nodes
437  return Node(self.server, result.Targets[0].TargetId)
438 
439  def _make_relative_path(self, path):
440  rpath = ua.RelativePath()
441  for item in path:
443  el.ReferenceTypeId = ua.TwoByteNodeId(ua.ObjectIds.HierarchicalReferences)
444  el.IsInverse = False
445  el.IncludeSubtypes = True
446  if isinstance(item, ua.QualifiedName):
447  el.TargetName = item
448  else:
449  el.TargetName = ua.QualifiedName.from_string(item)
450  rpath.Elements.append(el)
451  return rpath
452 
453  def read_raw_history(self, starttime=None, endtime=None, numvalues=0):
454  """
455  Read raw history of a node
456  result code from server is checked and an exception is raised in case of error
457  If numvalues is > 0 and number of events in period is > numvalues
458  then result will be truncated
459  """
460  details = ua.ReadRawModifiedDetails()
461  details.IsReadModified = False
462  if starttime:
463  details.StartTime = starttime
464  else:
465  details.StartTime = ua.get_win_epoch()
466  if endtime:
467  details.EndTime = endtime
468  else:
469  details.EndTime = ua.get_win_epoch()
470  details.NumValuesPerNode = numvalues
471  details.ReturnBounds = True
472  result = self.history_read(details)
473  return result.HistoryData.DataValues
474 
475  def history_read(self, details):
476  """
477  Read raw history of a node, low-level function
478  result code from server is checked and an exception is raised in case of error
479  """
480  valueid = ua.HistoryReadValueId()
481  valueid.NodeId = self.nodeid
482  valueid.IndexRange = ''
483 
484  params = ua.HistoryReadParameters()
485  params.HistoryReadDetails = details
486  params.TimestampsToReturn = ua.TimestampsToReturn.Both
487  params.ReleaseContinuationPoints = False
488  params.NodesToRead.append(valueid)
489  result = self.server.history_read(params)[0]
490  return result
491 
492  def read_event_history(self, starttime=None, endtime=None, numvalues=0, evtypes=ua.ObjectIds.BaseEventType):
493  """
494  Read event history of a source node
495  result code from server is checked and an exception is raised in case of error
496  If numvalues is > 0 and number of events in period is > numvalues
497  then result will be truncated
498  """
499 
500  details = ua.ReadEventDetails()
501  if starttime:
502  details.StartTime = starttime
503  else:
504  details.StartTime = ua.get_win_epoch()
505  if endtime:
506  details.EndTime = endtime
507  else:
508  details.EndTime = ua.get_win_epoch()
509  details.NumValuesPerNode = numvalues
510 
511  if not isinstance(evtypes, (list, tuple)):
512  evtypes = [evtypes]
513 
514  evtypes = [Node(self.server, evtype) for evtype in evtypes]
515 
516  evfilter = events.get_filter_from_event_type(evtypes)
517  details.Filter = evfilter
518 
519  result = self.history_read_events(details)
520  event_res = []
521  for res in result.HistoryData.Events:
522  event_res.append(events.Event.from_event_fields(evfilter.SelectClauses, res.EventFields))
523  return event_res
524 
525  def history_read_events(self, details):
526  """
527  Read event history of a node, low-level function
528  result code from server is checked and an exception is raised in case of error
529  """
530  valueid = ua.HistoryReadValueId()
531  valueid.NodeId = self.nodeid
532  valueid.IndexRange = ''
533 
534  params = ua.HistoryReadParameters()
535  params.HistoryReadDetails = details
536  params.TimestampsToReturn = ua.TimestampsToReturn.Both
537  params.ReleaseContinuationPoints = False
538  params.NodesToRead.append(valueid)
539  result = self.server.history_read(params)[0]
540  return result
541 
542  def delete(self, delete_references=True):
543  """
544  Delete node from address space
545  """
546  ditem = ua.DeleteNodesItem()
547  ditem.NodeId = self.nodeid
548  ditem.DeleteTargetReferences = delete_references
549  params = ua.DeleteNodesParameters()
550  params.NodesToDelete = [ditem]
551  result = self.server.delete_nodes(params)
552  result[0].check()
553 
554  def add_folder(self, nodeid, bname):
555  return opcua.common.manage_nodes.create_folder(self, nodeid, bname)
556 
557  def add_object(self, nodeid, bname, objecttype=None):
558  return opcua.common.manage_nodes.create_object(self, nodeid, bname, objecttype)
559 
560  def add_variable(self, nodeid, bname, val, varianttype=None, datatype=None):
561  return opcua.common.manage_nodes.create_variable(self, nodeid, bname, val, varianttype, datatype)
562 
563  def add_object_type(self, nodeid, bname):
564  return opcua.common.manage_nodes.create_object_type(self, nodeid, bname)
565 
566  def add_variable_type(self, nodeid, bname, datatype):
567  return opcua.common.manage_nodes.create_variable_type(self, nodeid, bname, datatype)
568 
569  def add_data_type(self, nodeid, bname, description=None):
570  return opcua.common.manage_nodes.create_data_type(self, nodeid, bname, description=None)
571 
572  def add_property(self, nodeid, bname, val, varianttype=None, datatype=None):
573  return opcua.common.manage_nodes.create_property(self, nodeid, bname, val, varianttype, datatype)
574 
575  def add_method(self, *args):
576  return opcua.common.manage_nodes.create_method(self, *args)
577 
578  def add_reference_type(self, parent, nodeid, bname):
579  return opcua.common.manage_nodes.create_reference_type(parent, nodeid, bname)
580 
581  def call_method(self, methodid, *args):
582  return opcua.common.methods.call_method(self, methodid, *args)
def read_event_history(self, starttime=None, endtime=None, numvalues=0, evtypes=ua.ObjectIds.BaseEventType)
Definition: node.py:492
def add_variable(self, nodeid, bname, val, varianttype=None, datatype=None)
Definition: node.py:560
def set_array_dimensions(self, value)
Definition: node.py:140
def get_child(self, path)
Definition: node.py:418
def _get_path(self, max_length=20)
Definition: node.py:384
def get_data_type(self)
Definition: node.py:64
def set_value_rank(self, value)
Definition: node.py:155
def get_node_class(self)
Definition: node.py:110
def add_variable_type(self, nodeid, bname, datatype)
Definition: node.py:566
def get_event_notifier(self)
Definition: node.py:94
def get_path(self, max_length=20)
Definition: node.py:370
def get_children(self, refs=ua.ObjectIds.HierarchicalReferences, nodeclassmask=ua.NodeClass.Unspecified)
Definition: node.py:263
def get_description(self)
Definition: node.py:117
def delete(self, delete_references=True)
Definition: node.py:542
def __init__(self, server, nodeid)
Definition: node.py:20
def get_data_type_as_variant_type(self)
Definition: node.py:71
def set_attribute(self, attributeid, datavalue)
Definition: node.py:219
def get_referenced_nodes(self, refs=ua.ObjectIds.References, direction=ua.BrowseDirection.Both, nodeclassmask=ua.NodeClass.Unspecified, includesubtypes=True)
Definition: node.py:334
def set_attr_bit(self, attr, bit)
Definition: node.py:202
def get_path_as_string(self, max_length=20)
Definition: node.py:356
def create_object(parent, nodeid, bname, objecttype=None)
Definition: manage_nodes.py:44
def history_read(self, details)
Definition: node.py:475
def get_access_level(self)
Definition: node.py:80
def call_method(parent, methodid, args)
Definition: methods.py:9
def get_display_name(self)
Definition: node.py:57
def __hash__(self)
Definition: node.py:46
def get_data_value(self)
Definition: node.py:132
def add_data_type(self, nodeid, bname, description=None)
Definition: node.py:569
def add_folder(self, nodeid, bname)
Definition: node.py:554
def get_variables(self)
Definition: node.py:294
def set_writable(self, writable=True)
Definition: node.py:190
def create_folder(parent, nodeid, bname)
Definition: manage_nodes.py:34
def get_attribute(self, attr)
Definition: node.py:234
def create_data_type(parent, nodeid, bname, description=None)
def add_property(self, nodeid, bname, val, varianttype=None, datatype=None)
Definition: node.py:572
def __str__(self)
Definition: node.py:42
def get_value_rank(self)
Definition: node.py:162
def add_method(self, args)
Definition: node.py:575
def get_browse_name(self)
Definition: node.py:49
def add_object_type(self, nodeid, bname)
Definition: node.py:563
def create_property(parent, nodeid, bname, val, varianttype=None, datatype=None)
Definition: manage_nodes.py:60
def set_event_notifier(self, values)
Definition: node.py:101
def get_array_dimensions(self)
Definition: node.py:148
def history_read_events(self, details)
Definition: node.py:525
def unset_attr_bit(self, attr, bit)
Definition: node.py:207
def _make_relative_path(self, path)
Definition: node.py:439
def add_reference_type(self, parent, nodeid, bname)
Definition: node.py:578
def get_user_access_level(self)
Definition: node.py:87
def call_method(self, methodid, args)
Definition: node.py:581
def create_object_type(parent, nodeid, bname)
def create_reference_type(parent, nodeid, bname)
def create_variable_type(parent, nodeid, bname, datatype)
Definition: manage_nodes.py:91
def get_attributes(self, attrs)
Definition: node.py:248
def get_properties(self)
Definition: node.py:287
def get_value(self)
Definition: node.py:124
def add_object(self, nodeid, bname, objecttype=None)
Definition: node.py:557
def create_variable(parent, nodeid, bname, val, varianttype=None, datatype=None)
Definition: manage_nodes.py:75
def create_method(parent, args)
def set_read_only(self)
Definition: node.py:212
def __ne__(self, other)
Definition: node.py:39
def get_type_definition(self)
Definition: node.py:347
def read_raw_history(self, starttime=None, endtime=None, numvalues=0)
Definition: node.py:453
def __eq__(self, other)
Definition: node.py:34
def get_references(self, refs=ua.ObjectIds.References, direction=ua.BrowseDirection.Both, nodeclassmask=ua.NodeClass.Unspecified, includesubtypes=True)
Definition: node.py:311
def get_children_descriptions(self, refs=ua.ObjectIds.HierarchicalReferences, nodeclassmask=ua.NodeClass.Unspecified, includesubtypes=True)
Definition: node.py:308
def get_parent(self)
Definition: node.py:405
def get_methods(self)
Definition: node.py:301
def set_value(self, value, varianttype=None)
Definition: node.py:169


ros_opcua_impl_python_opcua
Author(s): Denis Štogl , Daniel Draper
autogenerated on Tue Jan 19 2021 03:12:44