def datachange_callback(self, handle, value, error=None):
     if error:
         self.logger.info(
             "subscription %s: datachange callback called with handle '%s' and erorr '%s'",
             self, handle, error)
         self.trigger_statuschange(error)
     else:
         self.logger.info(
             "subscription %s: datachange callback called with handle '%s' and value '%s'",
             self, handle, value.Value)
         event = ua.MonitoredItemNotification()
         with self._lock:
             mid = self._monitored_datachange[handle]
             mdata = self._monitored_items[mid]
             mdata.mvalue.set_current_value(value.Value.Value)
             if mdata.filter:
                 deadband_flag_pass = self.deadband_callback(
                     mdata.mvalue, mdata.filter)
             else:
                 deadband_flag_pass = True
             if deadband_flag_pass:
                 event.ClientHandle = mdata.client_handle
                 event.Value = value
                 self.isub.enqueue_datachange_event(mid, event,
                                                    mdata.queue_size)
 def datachange_callback(self, handle, value):
     self.logger.info("subscription %s: datachange callback called with handle '%s' and value '%s'", self, handle, value.Value)
     event = ua.MonitoredItemNotification()
     with self._lock:
         mid = self._monitored_datachange[handle]
         mdata = self._monitored_items[mid]
         event.ClientHandle = mdata.client_handle
         event.Value = value
         self.isub.enqueue_datachange_event(mid, event, mdata.parameters.RevisedQueueSize)