code: def preupdate(self, force_refresh=True):
          
          ddata = MANUAL_OP_DATA.copy()
  
          # force update to make sure status is accurate
          if force_refresh:
              self.update()
  
          # select current controller and faucet
          ddata['select_controller'] = \
              self._parent.controllers.index(self._controller)
          ddata['select_faucet'] = \
              self._controller.faucets.index(self._faucet)
  
          # check if zone is scheduled automatically (zone1_program_toggle)
          # only add zoneX_program_toogle to ddata when needed,
          # otherwise the field will be always on
          for zone in self._faucet.zones:
              attr = 'zone{}_program_toggle'.format(zone.id)
              if zone.auto_watering:
                  ddata[attr] = 'on'
  
          # check if zone current watering manually (zone1_select_manual_mode)
          for zone in self._faucet.zones:
              attr = 'zone{}_select_manual_mode'.format(zone.id)
              if zone.watering_time and attr in ddata.keys():
                  ddata[attr] = zone.watering_time
  
          # check if rain delay is selected (zone0_rain_delay_select)
          for zone in self._faucet.zones:
              attr = 'zone{}_rain_delay_select'.format(zone.id - 1)
              value = zone.rain_delay
              if value and attr in ddata.keys():
                  if int(value) >= 2 and int(value) <= 7:
                      value = str(value) + 'days'
                  else:
                      value = str(value) + 'day'
                  ddata[attr] = value
  
          return ddata
docs: Return a dict with all current options prior submitting request.