i measure river depth using an off-the-shelf product - the hardware is usable but i replaced the windoze app by writing a simple weewx service. a differential pressure sensor has RF connection to a controller (supports up to 8 sensors). the receiver passes a record of latest sensor values over serial interface every 5 secs or so and the weewx service picks them up
"Aquagauge Differential Pressure Water Level Sensor with Receiver /Display”
this went off the market for a while but seems to be back on again
the pressure probe has been secured onto river bottom by the high-tech method of tying it to a brick and shoving it under a big tree root. it has a lead up to the transmitter box that contains batteries as power supply - they last about 6 months. the receiver/controller needs external power and serial connection to computer (i use serial/usb dongle).
handy hint: put the transmitter higher than flood level. i didn’t and my first transmitter was shorted :-( weather-proof is not water-proof
writing the weewx service was quite straightfoward. it has a thread that reads/parses records and queues the values (up to 8 sensors, remember) so that the next LOOP callback by weewx engine inserts them into the packet. the service is configured to map each sensor to a weewx data_type and unit
my configuration in weewx.conf is
#open_attempts_delay_long = 1800
so it is providing data_type ‘riverLevel’ from raw numbers in mm
(i use udev to create the constant device file i want, rather than default /dev/ttyUSB0 or similar that can change)
in my weather station i am using a vantage pro2 with its driver, which produces LOOP records about every 2.7 seconds. the aquagauge controller provides records about every 5 secs, so something is waiting in the queue about every second LOOP record. but that’s okay because weewx accumulates the values for the duration of the reporting cycle and they end up summarised in the ARCHIVE record and saved to database
i am saving ‘riverLevel’ in a database column and running reports off it e.g. tag $day.riverLevel.max.
in extensions.py i have put ‘riverLevel’ in ‘group_length’, and in weewx.conf i have set ‘group_length = cm’ because i want graphs by default to report ‘riverLevel' in cm