class Event(object): """ Create an event based on an event type. Per default is BaseEventType used. arguments are: server: The InternalSession object to use for query and event triggering source: The emiting source for the node, either an objectId, NodeId or a Node etype: The event type, either an objectId, a NodeId or a Node object """ def __init__(self, isession, etype=ObjectIds.BaseEventType, source=ObjectIds.Server): self.isession = isession if isinstance(etype, Node): self.node = etype elif isinstance(etype, ua.NodeId): self.node = Node(self.isession, etype) else: self.node = Node(self.isession, ua.NodeId(etype)) self.set_members_from_node(self.node) if isinstance(source, Node): self.SourceNode = source.NodeId elif isinstance(etype, ua.NodeId): self.SourceNode = source.NodeId else: self.SourceNode = ua.NodeId(source) # set some default values for attributes from BaseEventType, thus that all event must have self.EventId = uuid.uuid4().bytes self.EventType = self.node.nodeid self.LocaleTime = datetime.now() self.ReceiveTime = datetime.now() self.Time = datetime.now() self.Message = ua.LocalizedText() self.Severity = ua.Variant(1, ua.VariantType.UInt16) self.SourceName = "Server" # og set some node attributed we also are expected to have self.BrowseName = self.node.get_browse_name() self.DisplayName = self.node.get_display_name() self.NodeId = self.node.nodeid self.NodeClass = self.node.get_node_class() self.Description = self.node.get_description() def __str__(self): return "Event(Type:{}, Source:{}, Time:{}, Message: {})".format(self.EventType, self.SourceNode, self.Time, self.Message) __repr__ = __str__ def trigger(self): self.isession.subscription_service.trigger_event(self) def set_members_from_node(self, node): references = node.get_children_descriptions(refs=ua.ObjectIds.HasProperty) for desc in references: node = Node(self.isession, desc.NodeId) setattr(self, desc.BrowseName.Name, node.get_value())
class Event(object): """ Create an event based on an event type. Per default is BaseEventType used. arguments are: server: The InternalSession object to use for query and event triggering source: The emiting source for the node, either an objectId, NodeId or a Node etype: The event type, either an objectId, a NodeId or a Node object """ def __init__(self, isession, etype=ua.ObjectIds.BaseEventType, source=ua.ObjectIds.Server): self.isession = isession if isinstance(etype, Node): self.node = etype elif isinstance(etype, ua.NodeId): self.node = Node(self.isession, etype) else: self.node = Node(self.isession, ua.NodeId(etype)) self.set_members_from_node(self.node) if isinstance(source, Node): self.SourceNode = source.NodeId elif isinstance(etype, ua.NodeId): self.SourceNode = source.NodeId else: self.SourceNode = ua.NodeId(source) # set some default values for attributes from BaseEventType, thus that all event must have self.EventId = uuid.uuid4().bytes self.EventType = self.node.nodeid self.LocaleTime = datetime.now() self.ReceiveTime = datetime.now() self.Time = datetime.now() self.Message = ua.LocalizedText() self.Severity = ua.Variant(1, ua.VariantType.UInt16) self.SourceName = "Server" # og set some node attributed we also are expected to have self.BrowseName = self.node.get_browse_name() self.DisplayName = self.node.get_display_name() self.NodeId = self.node.nodeid self.NodeClass = self.node.get_node_class() self.Description = self.node.get_description() def __str__(self): return "Event(Type:{}, Source:{}, Time:{}, Message: {})".format(self.EventType, self.SourceNode, self.Time, self.Message) __repr__ = __str__ def trigger(self): self.isession.subscription_service.trigger_event(self) def set_members_from_node(self, node): references = node.get_children_descriptions(refs=ua.ObjectIds.HasProperty) for desc in references: node = Node(self.isession, desc.NodeId) setattr(self, desc.BrowseName.Name, node.get_value())
def __init__(self, isession, etype=None, emitting_node=ua.ObjectIds.Server): if not etype: etype = event_objects.BaseEvent() self.logger = logging.getLogger(__name__) self.isession = isession self.event = None node = None if isinstance(etype, event_objects.BaseEvent): self.event = etype elif isinstance(etype, Node): node = etype elif isinstance(etype, ua.NodeId): node = Node(self.isession, etype) else: node = Node(self.isession, ua.NodeId(etype)) if node: self.event = events.get_event_obj_from_type_node(node) if isinstance(emitting_node, Node): pass elif isinstance(emitting_node, ua.NodeId): emitting_node = Node(isession, emitting_node) else: emitting_node = Node(isession, ua.NodeId(emitting_node)) self.event.emitting_node = emitting_node.nodeid if not self.event.SourceNode: self.event.SourceNode = emitting_node.nodeid self.event.SourceName = emitting_node.get_browse_name().Name emitting_node.set_event_notifier([ua.EventNotifier.SubscribeToEvents]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = ua.NodeId(ua.ObjectIds.GeneratesEvent) ref.SourceNodeId = emitting_node.nodeid ref.TargetNodeClass = ua.NodeClass.ObjectType ref.TargetNodeId = self.event.EventType refs.append(ref) results = self.isession.add_references(refs) # result.StatusCode.check() self.emitting_node = emitting_node
def __init__(self, isession, etype=None, source=ua.ObjectIds.Server): if not etype: etype = ua.BaseEvent() self.logger = logging.getLogger(__name__) self.isession = isession self.event = None node = None if isinstance(etype, ua.BaseEvent): self.event = etype elif isinstance(etype, Node): node = etype elif isinstance(etype, ua.NodeId): node = Node(self.isession, etype) else: node = Node(self.isession, ua.NodeId(etype)) if node: self.event = get_event_from_type_node(node) if isinstance(source, Node): pass elif isinstance(source, ua.NodeId): source = Node(isession, source) else: source = Node(isession, ua.NodeId(source)) if self.event.SourceNode: if source.nodeid != self.event.SourceNode: self.logger.warning( "Source NodeId: '%s' and event SourceNode: '%s' are not the same. Using '%s' as SourceNode", str(source.nodeid), str(self.event.SourceNode), str(self.event.SourceNode)) source = Node(self.isession, self.event.SourceNode) self.event.SourceNode = source.nodeid self.event.SourceName = source.get_browse_name().Name source.set_attribute(ua.AttributeIds.EventNotifier, ua.DataValue(ua.Variant(1, ua.VariantType.Byte))) refs = [] ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = ua.NodeId(ua.ObjectIds.GeneratesEvent) ref.SourceNodeId = source.nodeid ref.TargetNodeClass = ua.NodeClass.ObjectType ref.TargetNodeId = self.event.EventType refs.append(ref) results = self.isession.add_references(refs)
def __init__(self, isession, etype=None, source=ua.ObjectIds.Server): if not etype: etype = event_objects.BaseEvent() self.logger = logging.getLogger(__name__) self.isession = isession self.event = None node = None if isinstance(etype, event_objects.BaseEvent): self.event = etype elif isinstance(etype, Node): node = etype elif isinstance(etype, ua.NodeId): node = Node(self.isession, etype) else: node = Node(self.isession, ua.NodeId(etype)) if node: self.event = events.get_event_obj_from_type_node(node) if isinstance(source, Node): pass elif isinstance(source, ua.NodeId): source = Node(isession, source) else: source = Node(isession, ua.NodeId(source)) if self.event.SourceNode: if source.nodeid != self.event.SourceNode: self.logger.warning( "Source NodeId: '%s' and event SourceNode: '%s' are not the same. Using '%s' as SourceNode", str(source.nodeid), str(self.event.SourceNode), str(self.event.SourceNode)) source = Node(self.isession, self.event.SourceNode) self.event.SourceNode = source.nodeid self.event.SourceName = source.get_browse_name().Name source.set_event_notifier([ua.EventNotifier.SubscribeToEvents]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = ua.NodeId(ua.ObjectIds.GeneratesEvent) ref.SourceNodeId = source.nodeid ref.TargetNodeClass = ua.NodeClass.ObjectType ref.TargetNodeId = self.event.EventType refs.append(ref) results = self.isession.add_references(refs)
def __init__(self, isession, etype=None, emitting_node=ua.ObjectIds.Server): if not etype: etype = event_objects.BaseEvent() self.logger = logging.getLogger(__name__) self.isession = isession self.event = None node = None if isinstance(etype, event_objects.BaseEvent): self.event = etype elif isinstance(etype, Node): node = etype elif isinstance(etype, ua.NodeId): node = Node(self.isession, etype) else: node = Node(self.isession, ua.NodeId(etype)) if node: self.event = events.get_event_obj_from_type_node(node) if isinstance(emitting_node, Node): pass elif isinstance(emitting_node, ua.NodeId): emitting_node = Node(isession, emitting_node) else: emitting_node = Node(isession, ua.NodeId(emitting_node)) self.event.emitting_node = emitting_node.nodeid if not self.event.SourceNode: self.event.SourceNode = emitting_node.nodeid self.event.SourceName = emitting_node.get_browse_name().Name emitting_node.set_event_notifier([ua.EventNotifier.SubscribeToEvents]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = ua.NodeId(ua.ObjectIds.GeneratesEvent) ref.SourceNodeId = emitting_node.nodeid ref.TargetNodeClass = ua.NodeClass.ObjectType ref.TargetNodeId = self.event.EventType refs.append(ref) results = self.isession.add_references(refs) # result.StatusCode.check() self.emitting_node = emitting_node
def get_node_path(self, node: Node): return '\\.'.join(node.get_browse_name().Name for node in node.get_path(200000))