예제 #1
0
    def subscribe_events(self,
                         sourcenode=ua.ObjectIds.Server,
                         evtypes=ua.ObjectIds.BaseEventType,
                         evfilter=None,
                         queuesize=0):
        """
        Subscribe to events from a node. Default node is Server node.
        In most servers the server node is the only one you can subscribe to.
        if evtypes is not provided, evtype defaults to BaseEventType
        if evtypes is a list or tuple of custom event types, the events will be filtered to the supplied types
        Return a handle which can be used to unsubscribe
        """
        sourcenode = Node(self.server, sourcenode)

        if evfilter is None:
            if not type(evtypes) in (list, tuple):
                evtypes = [evtypes]

            evtypes = [Node(self.server, evtype) for evtype in evtypes]

            evfilter = events.get_filter_from_event_type(evtypes)
        return self._subscribe(sourcenode,
                               ua.AttributeIds.EventNotifier,
                               evfilter,
                               queuesize=queuesize)
예제 #2
0
    def read_event_history(self, starttime=None, endtime=None, numvalues=0, evtype=ua.ObjectIds.BaseEventType):
        """
        Read event history of a source node 
        result code from server is checked and an exception is raised in case of error
        If numvalues is > 0 and number of events in period is > numvalues
        then result will be truncated
        """

        # FIXME event filter must be supplied externally, the problem is the node class doesn't have a way to get
        # FIXME another node from the address space as these methods are at the server level, therefore there is
        # FIXME no way to build an event filter here (although it could be nicer for a user who doesn't want a filter)

        details = ua.ReadEventDetails()
        if starttime:
            details.StartTime = starttime
        else:
            details.StartTime = ua.DateTimeMinValue
        if endtime:
            details.EndTime = endtime
        else:
            details.EndTime = ua.DateTimeMinValue
        details.NumValuesPerNode = numvalues

        evfilter = events.get_filter_from_event_type(Node(self.server, evtype))
        details.Filter = evfilter

        result = self.history_read_events(details)
        event_res = []
        for res in result.HistoryData.Events:
            event_res.append(events.EventResult.from_event_fields(evfilter.SelectClauses, res.EventFields))
        return event_res
예제 #3
0
    def read_event_history(self, starttime=None, endtime=None, numvalues=0, evtypes=ua.ObjectIds.BaseEventType):
        """
        Read event history of a source node
        result code from server is checked and an exception is raised in case of error
        If numvalues is > 0 and number of events in period is > numvalues
        then result will be truncated
        """

        details = ua.ReadEventDetails()
        if starttime:
            details.StartTime = starttime
        else:
            details.StartTime = ua.get_win_epoch()
        if endtime:
            details.EndTime = endtime
        else:
            details.EndTime = ua.get_win_epoch()
        details.NumValuesPerNode = numvalues

        if not isinstance(evtypes, (list, tuple)):
            evtypes = [evtypes]

        evtypes = [Node(self.server, evtype) for evtype in evtypes]

        evfilter = events.get_filter_from_event_type(evtypes)
        details.Filter = evfilter

        result = self.history_read_events(details)
        event_res = []
        for res in result.HistoryData.Events:
            event_res.append(events.Event.from_event_fields(evfilter.SelectClauses, res.EventFields))
        return event_res
예제 #4
0
    def read_event_history(self, starttime=None, endtime=None, numvalues=0, evtypes=ua.ObjectIds.BaseEventType):
        """
        Read event history of a source node
        result code from server is checked and an exception is raised in case of error
        If numvalues is > 0 and number of events in period is > numvalues
        then result will be truncated
        """

        details = ua.ReadEventDetails()
        if starttime:
            details.StartTime = starttime
        else:
            details.StartTime = ua.DateTimeMinValue
        if endtime:
            details.EndTime = endtime
        else:
            details.EndTime = ua.DateTimeMinValue
        details.NumValuesPerNode = numvalues

        if not isinstance(evtypes, (list, tuple)):
            evtypes = [evtypes]

        evtypes = [Node(self.server, evtype) for evtype in evtypes]

        evfilter = events.get_filter_from_event_type(evtypes)
        details.Filter = evfilter

        result = self.history_read_events(details)
        event_res = []
        for res in result.HistoryData.Events:
            event_res.append(events.Event.from_event_fields(evfilter.SelectClauses, res.EventFields))
        return event_res
예제 #5
0
 def subscribe_events(self, sourcenode=ua.ObjectIds.Server, evtype=ua.ObjectIds.BaseEventType, evfilter=None):
     """
     Subscribe to events from a node. Default node is Server node.
     In most servers the server node is the only one you can subscribe to.
     if evfilter is provided, evtype is ignored
     Return a handle which can be used to unsubscribe
     """
     sourcenode = Node(self.server, sourcenode)
     if evfilter is None:
         evfilter = events.get_filter_from_event_type(Node(self.server, evtype))
     return self._subscribe(sourcenode, ua.AttributeIds.EventNotifier, evfilter)
예제 #6
0
 def subscribe_events(self,
                      sourcenode=ua.ObjectIds.Server,
                      evtype=ua.ObjectIds.BaseEventType,
                      evfilter=None):
     """
     Subscribe to events from a node. Default node is Server node.
     In most servers the server node is the only one you can subscribe to.
     if evfilter is provided, evtype is ignored
     Return a handle which can be used to unsubscribe
     """
     sourcenode = Node(self.server, sourcenode)
     if evfilter is None:
         evfilter = events.get_filter_from_event_type(
             Node(self.server, evtype))
     return self._subscribe(sourcenode, ua.AttributeIds.EventNotifier,
                            evfilter)
예제 #7
0
    def subscribe_events(self, sourcenode=ua.ObjectIds.Server, evtypes=ua.ObjectIds.BaseEventType, evfilter=None):
        """
        Subscribe to events from a node. Default node is Server node.
        In most servers the server node is the only one you can subscribe to.
        if evtypes is not provided, evtype defaults to BaseEventType
        if evtypes is a list or tuple of custom event types, the events will be filtered to the supplied types
        Return a handle which can be used to unsubscribe
        """
        sourcenode = Node(self.server, sourcenode)

        if evfilter is None:
            if not type(evtypes) in (list, tuple):
                evtypes = [evtypes]

            evtypes = [Node(self.server, evtype) for evtype in evtypes]

            evfilter = events.get_filter_from_event_type(evtypes)
        return self._subscribe(sourcenode, ua.AttributeIds.EventNotifier, evfilter)
예제 #8
0
파일: node.py 프로젝트: Joy963/python-opcua
    def read_event_history(self,
                           starttime=None,
                           endtime=None,
                           numvalues=0,
                           evtype=ua.ObjectIds.BaseEventType):
        """
        Read event history of a source node 
        result code from server is checked and an exception is raised in case of error
        If numvalues is > 0 and number of events in period is > numvalues
        then result will be truncated
        """

        # FIXME event filter must be supplied externally, the problem is the node class doesn't have a way to get
        # FIXME another node from the address space as these methods are at the server level, therefore there is
        # FIXME no way to build an event filter here (although it could be nicer for a user who doesn't want a filter)

        details = ua.ReadEventDetails()
        if starttime:
            details.StartTime = starttime
        else:
            details.StartTime = ua.DateTimeMinValue
        if endtime:
            details.EndTime = endtime
        else:
            details.EndTime = ua.DateTimeMinValue
        details.NumValuesPerNode = numvalues

        evfilter = events.get_filter_from_event_type(Node(self.server, evtype))
        details.Filter = evfilter

        result = self.history_read_events(details)
        event_res = []
        for res in result.HistoryData.Events:
            event_res.append(
                events.Event.from_event_fields(evfilter.SelectClauses,
                                               res.EventFields))
        return event_res