The Ruuvi includes an X-Y-Z accelerometer. When the tag is not moving, the Z component reflects the orientation of the tag.
I have mounted a piece of 1/2" PVC pipe to a pivot bolt on the post at the bottom of one of our bird nesting boxes see photos below. There is a float on the bottom end. A ruuvi is taped near the pivot (above the highest anticipated water level) with the Z-axis horizontal when the pipe is vertical.
As the meadow floods, the float rises causing the pipe to swing at an angle changing the orientation of the Ruuvi in proportion to the depth of the water. Mounted on the bird box is a Pycom Gpy module which includes bluetooth and cellular radios. The Gpy goes to deepSLeep for 20 minutes to minimize battery usage. When it wakes up it listens for the Ruuvi packet, connects to the cellular network and transmits a syslog message to a Raspberry Pi at our house. Periodically the Raspberry Pi formats the messages into a web page and posts it to my web server.
Here 's an example report produced after a dry spell followed by a thunderstorm resulting in 4 inches of rain at our house. The swamp acts as a collection basin and exaggerates the rainfall. Notice that the movement counter (mov) stayed at 144 for a long time. I believe the float was stuck on some grass and eventually popped up resulting in a single movement at 07-10 21:10. This caused the Z reading to jump to 3.3. Over the next 2 hours, as the flood water receded, the Z-axis orientation of the Ruuvi returned to the 0.0 value.
The Ruuvi tag is running factory installed standard 2.5.9 firmware