Home Automation‎ > ‎

Water meter reading with a cheap webcam and Dialeye

My house has an analogue water meter reader with dials, so the only way to read it is using an image and getting the reading from it.

A cheap usb webcam with LED lights was used.
Application used to take images is fswebcam (apt-get install fswebcam)


Dialeye is configured to read the image using Python. DialEye has great instructions for setting it up: http://olammi.iki.fi/sw/dialEye/
After calibration the image looked like this

The test run looked like this


Running the Dialeye python command turns out as a number like this

$ python dialEye.py -r meter docs/dialeye_calibration.jpg

Writing dialeye_result.png
0692



Every five minutes a cronjob is run that takes a photo, reads the image with DialEye and stores the results in a file. It is then uploaded to Openhab with curl using the REST API.
The old result is stored each time so a cumulative and a 5 minute average is read.

$ more dialeye.sh
#!/bin/bash

#Cleanhouse and log results
cat /home/pi/scripts/dialeye/dialeye_result.txt >> /home/pi/scripts/dialeye/dialeye_result.log
mv /home/pi/scripts/dialeye/dialeye_result.txt /home/pi/scripts/dialeye/dialeye_result_previous.txt

#Take snapshot and read with Dialeye
fswebcam -r 640x480 --jpeg 95 /home/pi/images/dialeye.jpg
python /home/pi/scripts/dialeye/dialEye/dialEye.py -f /home/pi/scripts/dialeye/dialEye/dialEye.conf meter /home/pi/images/dialeye.jpg > /home/pi/scripts/dialeye/dialeye_result.txt

#post to Openhab via curl, read variable from text file
read -r -d '' str < <(cat /home/pi/scripts/dialeye/dialeye_result.txt)
curl --header "Content-Type: text/plain" --request POST --data $str http://192.168.1.45:8080/rest/items/Vedenkulutus

#Count average water 5 minute consumption and send to Openhab
read -r -d '' strold < <(cat /home/pi/scripts/dialeye/dialeye_result_previous.txt)
COUNT=`expr $str - $strold`
curl --header "Content-Type: text/plain" --request POST --data $COUNT http://192.168.1.45:8080/rest/items/Vedenkulutus_now


This results in Openhab with a total litres (according to the meter) and a 5 minute average.

Finally I configured the Cacti to read the Openhab REST API and draw Graphs from the data.
This is done similarly as in this post

Below are live graphs of water consumption and the webcam image of the water meter.






Comments