Time to get serious things now and put it all together.
Record waves
I will record audio waves with a first python script named recordwaves.py. This script will simply launch arecord each 60 seconds and save it under ram directory (/run/).
$ arecord -d 10 -f S16_LE -c1 -r4000 -D plughw:1 -t wav foobar.wav
The script must be launched at raspberry pi boot. We just have to add the command in crontab with command crontab -e
@reboot cd /opt/house_power/ && python3 recordwaves.py -d /run/hdata &
Current calculation
Two things with waverms.py : calculate RMS current from wavefile recorded by recordwaves.py, store value and time in csv and database sqlite3.
Then we must have to create a sqlite3 file to store value with sqlite3 command :
pi@raspberrypi:/opt/house_power $ sqlite3 housepower.db SQLite version 3.8.7.1 2014-10-29 13:59:56 Enter ".help" for usage hints. sqlite> CREATE TABLE rms (id INTEGER, recordtype VARCHAR(20), rmsvalue INTEGER, recordtime INTEGER);
To calculate rms, don’t forget that Python3 is provided with « batteries included » then there is a module for that named audioop. This module include a method simply named rms().
As recordwaves.py, the script waverms.py is launched with crontab command :
@reboot cd /opt/house_power/ && python3 waverms.py -d /run/hdata &
Web page display
For displaying datas, we will keep python3 language using module flask for web server and bokeh for graphes generation. The python3 script server is named house_power.py and need an html template named graph.html.
Flask can be installed with apt :
sudo apt-get install python3-flask
And bokeh with pip3
sudo pip3 install bokeh
And launch it also with crontab :
@reboot cd /opt/house_power/web/ && python3 house_power.py &
The graphes of electricity current house consumption is then accessible on following local networks address : http://192.168.0.10:5000/ (of course, if your raspberrypi address is 192.168.0.10).
This give us graph like it :
All codes are available on my github repository named housepower. It’s fully functionnal but not finished yet. I have to increase website functionnality. Adding days mean consumption and maybe more.