Context
I am from a software engineering background, so I don't know too much about electric engineering apart from basic stuff like Ohm's Law (but willing to learn if needed). I'm building a garden irrigation system for my home. The valves are latching solenoids operating at 9 V (25ms impulse, 350-500mA according to manufacturer). I've built myself a custom distribution unit with 6 solenoids. This unit is underground inside a "valve shaft" like this:
The valves are operated by an ESP32 that communicates over WiFi with some in-house server. I can then use an app or web interface to control the ESP32.
Problem
My current issue is powering this ESP32. Although unpractical, I want to be able to open and close the valves any time, for show's sake. Furthermore I wanted to make use of the deep sleep capabilities of the ESP32 so it could run on a battery and wouldn't need a dedicated power supply. However, according the data from this blog, I found that constant accessibility and power saving won't both be possible.
Possible Solutions
I thought about packing a bigger battery in there, but i think this still won't be enough to achieve my goal of constant availability, without having to change out the batteries every week or so.
I thought about reducing power consumption by using a less power consuming system than WiFi, maybe something like LoRaWan.
Another solution would be to harness the energy in the water pressure and flow, by including a small hydroeletric generator in the distribution unit, which would then charge a battery every time the valves are opened.
However the garden is only watered for around 1-2 hours per day, so the generator would have to be able to harness as much energy in 1-2 hours as the esp32 consumes in 24 hours. I was not able to find a generator that fitted those specs.
Questions
Is there any way to achieve my goals of not needing a dedicated power line while also being able to instantly open and close the valves? Is there a way to remotely wake the ESP32 from it's deep sleep, without it needing to wake up, connect to the WiFi and check every 10 seconds?