示例#1
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
示例#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.Event.from_event_fields(evfilter.SelectClauses,
                                               res.EventFields))
        return event_res