Tom-DD
Zu 1.
Dazu sollte der Shelly dort platziert werden, wo er nicht feucht wird und die Leitungen parallel an den Shelly Eingang geführt werden können. Dann ist die Pumpe ausschließlich über den Shelly schaltbar. Dieser wird per Zapfstellenschalter angesteuert.
Zu 2.
Es gelingt nur eingeschränkt, wenn ein Nutzer den Shelly auch über den virtuellen Button schalten will, weil dieses Schalten nicht verhindert werden kann. Das Einschalten kann dann per Skript zu sofortigem Ausschalten führen.
Wenn das Deaktivieren (ausschließlich) über einen Schalter erfolgen soll, dann kann dieser Schalter in Reihe zu den parallelen Zapfstellenschaltern verdrahtet werden.
Zu 3.
Dazu kann zum Einschalten ein fest einzustellender Timer genutzt werden. Alternativ gibt es einen geeigneten RPC Aufruf.
Fazit
Ohne Bedienung per WebUI, (App, Cloud), genügt die einfache Schaltung mit dem in Reihe verdrahteten Schalter (s. 2. unten).
Mit Bedienung per bspw. WebUI ist neben einem Skript ein zweiter Eingang am Shelly zielführend. An Letzterem ist der Aktivier-/Deaktivierschalter anzuschließen, dessen Zustand das Skript abfragen muss. Ist dieser bspw. auf Aus gestellt, schaltet das Skript die Pumpe nach dem Einschalten sofort wieder aus.
Zusätzlich ist es nützlich, den Zapfstellen Eingang per zweier Aktionen zu aktivieren/deaktivieren, was die Wirkung der Zapfstellenschalter freigibt/sperrt.
So oder so ist ein konfigurierbarer Timer zum schaltenden Ausgang für die maximale Einschaltdauer zu nutzen.
Deine Lösungsansätze schätze ich als wenig relevant ein. Auch das Skript zu stoppen / zu starten ist total überflüssig. Nur "Auto off nach Zeit x einrichten" ist zweckmäßig.