There are a lot of ways to approach this, but for me, let the Activity carry the delay in this case. Here’s my version:
This is as simple as it looks. There are no options, no delays, no tricks, no nothing. Just a straight test of the virtual switch state.
This is the part that’s just a tiny bit crafty, and warrants some explanation. When the virtual switch is turned on, the “is TRUE” activity is run, of course, and the first thing it does is turn on the pump (I used a switch labeled “Heater” in the screen shots, so just follow that). Then we delay; I put 15 seconds for testing purposes, but you’ll want to use 900 (15 minutes) or whatever your goal runtime is. After the delay expires, the final action in the activity is run: turn off the virtual switch (not the heater/pump). This, of course, triggers the condition to re-evaluate and it will now be false (the virtual switch is not on), so the group’s “is FALSE” activity will then run, turning off the heater/pump at that point.
Here’s the crafty part. If a human turns off the virtual switch during the delay period, the test condition goes false, and Reactor then wants to run the “is FALSE” activity. Reactor’s rule is that the “is TRUE” and “is FALSE” activities cannot be running at the same time; that’s verboten. So, before starting the “is FALSE” activity to turn off the heater/pump, Reactor will cancel the remaining delay and all unfinished tasks from the “is TRUE” activity. So this is how the delayed-off is reset, in effect.