OR without scripts you set a variable to the game timer then check if 30 seconds has past by setting another timer to a variable and checking it repeatedly against the first.
One moment while I make an event to show you what I mean.
Edit
Ok I made a working Potato harvesting event that will have it count the timer even if you are not on the map, or in battle. The only thing is that it will take up 3 variables for each and every potato event you have.
Here is the first page, pretty standard. Except when you Harvest the potato it sets a variable to the current game timer.

Then on the second page in a parallel process I have it Looping constantly checking if enough time has past or not using the built in game timer.
To do this, Every single time it loops you set a 2nd variable to the current time.
IMPORTANT: You must have have a wait in there or it will freeze your game. The longer the wait the the more potato events to can have, but the less accurate the timers will be.
next you have to set a 3rd variable to the difference of the 2nd minus the 1st Using Script input
$game_variables[#2] - $game_variables[#1]
Where #1 is the number of your first variable and #2 is the number of your second variable.
And Finally you have to check if the 3rd variable is Grater than or Equal to your desired length, in this case 30!
If it is then you turn off the self switch and
EXIT EVENT PROCESSING If you don't it will keep looping in the 2nd page.
