Sorry for throwing you in the deep end.
Load this piston using the code “simy” and take a look at it in edit mode.
WAIT statements can be quite confusing/frustrating in webcore. Many of us here struggle with them, myself included. If the status of your trigger device (your Contact Sensor 2) changes at all (ie from open to closed) during the 2 minutes WAIT, then the piston halts there and starts execution from the beginning again. That can sometimes work in your favor. In order to keep that from happening, the TCP (Task Cancellation Policy) must be set to NEVER. Search the webcore forum on TCP for lots more information.
The piston I have suggested above will send a PUSH notification if the porch door is opened. It will wait 2 minutes. Then it will check and see if the porch door is still open. If so, it will send a PUSH notification a second time.