Water Tanks

Molly runs on Diesel, ane we run on water. And it is also pretty handy for doing the dishes and keeping clean. Molly has two freshwater water tanks. The primary tank located inside the house has a capacity of 165 liters (43.5 US gals) with the secondary tank located under the truck and its capacity is 82 liters (21.5 US gals). Molly also has a 45 liters (12 US gals) gray water tank.

A general guide is that a single person should drink around 5 liters each day, and therefore our 250 liters of freshwater would last 25 days (in theory). Assuming we consume twice this amount to allow for cooking and washing, we are already down to 10 days. This simple calculation demonstrates that our water does not last that long. So it is a good idea to keep track of our water levels and our consumption.

Each tank has a water level sensor, which are connected to the house control panel. This provides an instantaneous display of the current levels in each of the three tanks. For long term record keeping of water usage, we use our monitoring system. We could use a pencil and note-book, but using a monitoring system is just more fun.

Tank Level Sensor

Each tank is fitted with a BEP Marine Ultrasonic Tank Sender, model number TS1.

Operating Depth

0 to 2,000 mm

Output Signal

0 to 5 volts (dc)

Temperature Range

4 to 65 ºC


There is one small problems with the tank level sensors, they are just not very accurate. Having said this, they certainly get the job done. They provide a sufficiently good indication of the amount of water in the two freshwater tanks to ensure we know when we are about to run out. Or to make sure we do not overfill the gray water tank.

There are a number of reasons why the sensors are not accurate. The main problem is that the sensors, they only work above a certain tank level and below a certain tank level. For example, when we fill up our water tanks, the sensors indicates that the tank is full, but we can still add another 60 liters or so. Same problem at the lower end, the sensor indicate an empty tank, but there is still 25 liters in the tank. Even between these minimum and maximum ranges, the signal can be up-to to 15 liters off the correct reading. Other more minor errors are introduced if the truck is not parked on a level surface.

Freshwater Pump

The freshwater tanks supply the house via a Whale Watermaster FW0814 pump, which automatically starts when the outlet pressure drops and stops when the pressure returns. Turning on a tap causes the water pressure to be released and turning off the tap allows it to build again. The pump is rated at 8 liters per minute (open flow) and uses a 12 volt power source.

In our setup, the rate at which water flows through the pump is very consistent, being 1 liter of water for every 10.2 seconds that the pump is running(1). This means the run-time of the pump is a very reasonable measure of water consumption. The water level sensor indicates how much water is available, but the pump running time is a much better indication of our water consumption.

It is possible to pump or move water from one tank to another or even recirculate back to the same tank. In both of these cases, the pump is running but the water is not being consumed. This would confuse the software calculation of water tank levels. But we will add extra software to compensate for these type operations and to maintain the accuracy of the water consumption.

Each tank will have the following display values on our virtual control panel.

  • Amount of water in tank, and as a % of total capacity.
  • Estimated time remaining to empty the fresh water tank or full the gray water tank.
  • Is the heater on or not. This is especially important in sub-zero conditions.
  • Is the water tank in service or not.

Totals and trends will be available in Grafana.,

Recirculation Valve

A recirculation valve is installed on the hot water line to the main sink, and is super useful as it can send cold water back to the water tank so it is not wasted when waiting for the hot water to fill the hot water line. The recirculation valve is activated via a push button switch near the sink. The monitoring system is connected to this switch and ignores pump run time of recirculation operations.

Water Operations

The monitoring system is able to automatically detect when the fresh water tanks are filled or the gray water tank is emptied via the level sensors reporting a dramatic change in level. Internal counters are adjusted automatically.

Water Tank Calibration

We often wondered just how much water our tanks could hold. So one day we conducted and semi scientific exercise to measure the tank volumes and calibrate the water level sensors. This involved completely filling the water tanks, and then measuring the pump run time and the water level sensor reading with each 4 liters of water discharged. We confirmed that the main freshwater tank holds 165 liters, and that the water level sensor is only accurate between 10% and 75% full. The chart below shows this same information in a graphical form.

The sensor reading indicated with the orange line does not follow the water level based on measurement. This chart is for the main freshwater tank, but similar results can be seen on all three water level sensors.

To empty the tank, the pump ran for 1618 seconds. Actually, 1618 seconds was need to empty 157.85 liters of water, as the last 4 liters involved lots of air and the pump ran continuously as it tried to squeeze out the last of the water. Dividing 1618 seconds by 10.2 seconds per liter, gives a of result of 158.6 liters, which is quite accurate.


The water level sensors provide a good indication of the water level, although it is good to know that the sensor readings are only valid in a certain range. The pump run hours is a much more accurate way to measure water consumption.

We created a small python script to increment a timer whenever the pump is running and the recirculation value is not being used. And a new value is sent every second.

Pump Run Time Code
from time import sleep
from widgetlords.pi_spi import *

import requests

inputs = Mod8DI()

runSeconds = 0
lastRunSeconds = 0
digitalValue = inputs.read()

url = ''

while True:
    digitalValue = inputs.read()
    if (digitalValue & 0x02) and not (digitalValue & 0x20):
         runSeconds = runSeconds + 0.1
         if runSeconds > (lastRunSeconds + 1):
               lastRunSeconds = runSeconds
               myobj = {'somekey': runSeconds}
                  x = requests.post(url, data = myobj)
               except requests.exceptions.RequestException as e:
                  print ("Error Connecting:",e)
    sleep (0.1)

The python script is executed with

$ nohup python3 -u sendPumpHours.py &

Note 1: It actually takes longer than 10.2 seconds to pump 1 liter of water, as the pump cycles on and off while the tap is fully open. The pump is rated to pump 8 liters per minute, but the actual measured flow-rate out of any of the taps is lower, and depends on the resistance (drag and throttles) in the system. For example, water from the drinking filter (with the tap wide open) flows at a rate of 1 liter every 43 seconds, and slower when the tap is only partially open. Water from the pump is absorbed by the accumulator and released when the pump is off, providing a steady flow at the tap. When using water from the secondary water tank, the pump rate changes from 10.2 seconds per liter to 14 seconds per liter.