docs: async def async_change_special_device(
              self, device_id: int, group_number: int, unit_number: int,
              enable_status: ESFlags, switches: SwitchFlags,
              special_status: SSFlags, high_limit: Optional[Union[int, float]],
              low_limit: Optional[Union[int, float]],
              control_high_limit: Optional[Union[int, float]],
              control_low_limit: Optional[Union[int, float]]) -> None:
          """
          Change settings for a 'Special' device on the base unit.
  
          :param device_id: unique identifier for the device to be changed
          :param group_number: group number the device is to be assigned to
          :param unit_number: unit number the device is to be assigned to
          :param enable_status: flags indicating settings to enable
          :param switches: indicates switches that will be activated when device is triggered
          :param special_status: flags indicating 'Special' settings to enable
          :param high_limit: triggers on readings higher than value
          :param low_limit: triggers on readings lower than value
          :param control_high_limit: trigger switch for readings higher than value
          :param control_low_limit: trigger switch for readings lower than value
          """
  
          # Lookup device using zone to obtain an accurate index and current
          # values, which will be needed to perform the change command
          device = self._devices[device_id]
  
          # Verify it is a Special device
          if not isinstance(device, SpecialDevice):
              raise ValueError("Device to be changed is not a Special device")
  
          response = await self._protocol.async_execute(
              GetDeviceCommand(device.category, device.group_number, device.unit_number))
          if isinstance(response, DeviceInfoResponse):
              # Control limits only specified when they are supported
              if response.control_limit_fields_exist:
                  command = ChangeSpecial2DeviceCommand(
                      device.category, response.index, group_number, unit_number,
                      enable_status, switches, response.current_status, response.down_count,
                      response.message_attribute, response.current_reading, special_status,
                      high_limit, low_limit, control_high_limit, control_low_limit)
              else:
                  command = ChangeSpecialDeviceCommand(
                      device.category, response.index, group_number, unit_number,
                      enable_status, switches, response.current_status, response.down_count,
                      response.message_attribute, response.current_reading, special_status,
                      high_limit, low_limit)
              response = await self._protocol.async_execute(command)
              if isinstance(response, DeviceSettingsResponse):
                  device._handle_response(response) # pylint: disable=protected-access
          if isinstance(response, DeviceNotFoundResponse):
              raise ValueError("Device to be changed was not found")