code: def set_noise_filter(self, user_gpio, steady, active):
          
          # pigpio message format
  
          # I p1 user_gpio
          # I p2 steady
          # I p3 4
          ## extension ##
          # I active
          extents = [struct.pack("I", active)]
          res = yield from self._pigpio_aio_command_ext(_PI_CMD_FN, user_gpio,
                                                        steady, 4, extents)
          return _u2i(res)
docs: Sets a noise filter on a GPIO.
          Level changes on the GPIO are ignored until a level which has
          been stable for [*steady*] microseconds is detected.  Level
          changes on the GPIO are then reported for [*active*]
          microseconds after which the process repeats.
          user_gpio:= 0-31
             steady:= 0-300000
             active:= 0-1000000
          Returns 0 if OK, otherwise PI_BAD_USER_GPIO, or PI_BAD_FILTER.
          This filter affects the GPIO samples returned to callbacks set up
          with [*callback*] and [*wait_for_edge*].
          It does not affect levels read by [*read*],
          [*read_bank_1*], or [*read_bank_2*].
          Level changes before and after the active period may
          be reported.  Your software must be designed to cope with
          such reports.
          ...
          pi.set_noise_filter(23, 1000, 5000)
          ...