async def modify_monitored_item(self, handle: int, new_samp_time, new_queuesize=0, mod_filter_val=-1): """ Modify a monitored item. :param handle: Handle returned when originally subscribing :param new_samp_time: New wanted sample time :param new_queuesize: New wanted queuesize, default is 0 :param mod_filter_val: New deadband filter value :return: Return a Modify Monitored Item Result """ # Find the monitored item in the monitored item registry. item_to_change = next(item for item in self._monitored_items.values() if item.server_handle == handle) if not item_to_change: raise ValueError('The monitored item was not found.') if mod_filter_val is None: mod_filter = None elif mod_filter_val < 0: mod_filter = item_to_change.mfilter else: mod_filter = ua.DataChangeFilter() # send notification when status or value change mod_filter.Trigger = ua.DataChangeTrigger(1) mod_filter.DeadbandType = 1 # absolute float value or from 0 to 100 for percentage deadband mod_filter.DeadbandValue = mod_filter_val modif_item = ua.MonitoredItemModifyRequest() modif_item.MonitoredItemId = handle modif_item.RequestedParameters = self._modify_monitored_item_request( new_queuesize, new_samp_time, mod_filter, item_to_change.client_handle ) params = ua.ModifyMonitoredItemsParameters() params.SubscriptionId = self.subscription_id params.ItemsToModify.append(modif_item) results = await self.server.modify_monitored_items(params) item_to_change.mfilter = results[0].FilterResult return results
def deadband_monitor(self, var, deadband_val, deadbandtype=1, queuesize=0, attr=ua.AttributeIds.Value): """ Method to create a subscription with a Deadband Value. Default deadband value type is absolute. Return a handle which can be used to unsubscribe :param var: Variable to which you want to subscribe :param deadband_val: Absolute float value :param deadbandtype: Default value is 1 (absolute), change to 2 for percentage deadband :param queuesize: Wanted queue size, default is 1 :param attr: Attribute ID """ deadband_filter = ua.DataChangeFilter() # send notification when status or value change deadband_filter.Trigger = ua.DataChangeTrigger(1) deadband_filter.DeadbandType = deadbandtype # absolute float value or from 0 to 100 for percentage deadband deadband_filter.DeadbandValue = deadband_val return self._subscribe(var, attr, deadband_filter, queuesize)