Gr-smart meters Setup Guide: Difference between revisions

Added overview video
Tags: Mobile edit Mobile web edit
No edit summary
 
(27 intermediate revisions by 4 users not shown)
Line 1: Line 1:
The following install guide details the steps from a fresh Ubuntu 20.04 install to a fully running GNU Radio + USRP B200, HackRF and RTL-SDR frequency hopping spread spectrum setup needed to capture smart meter data.
The following install guide details the steps from a fresh Ubuntu 22.04 install to a fully running GNU Radio + USRP B200, HackRF, AirSpy and RTL-SDR frequency hopping spread spectrum setup needed to capture smart meter data.
 
'''This video shows the overall process but using a prior version of GNURadio. Instructions below are the latest.'''


<youtube width="320" height="240">fUK8tcFQwpo</youtube>
<youtube width="320" height="240">fUK8tcFQwpo</youtube>


==Install Ubuntu 20.04==
'''For other Linux distributions please see:''' [[Gr-smart meters Setup on other distros]]
There is nothing special about Ubuntu, it was chosen because it works well across different computers and has a familiar interface. Likely these instructions can be used as a rough guide for what is needed with other distro's.
 
'''For Windows Subsystem for Linux (WSL) please see:''' [[Gr-smart meters on WSL]]
 
==Install Ubuntu 22.04==
There is nothing special about Ubuntu, it was chosen because it works well across different computers and has a familiar interface. Likely these instructions can be used as a rough guide for what is needed with other distro's. See also [[Gr-smart meters Setup on other distros]]


For now, this step is to install a base version of Ubuntu 20.04, mine was a minimal install. After finishing your install ensure you update everything.
For now, this step is to install a base version of Ubuntu 20.04, mine was a minimal install. After finishing your install ensure you update everything.


<syntaxhighlight lang="bash">
<pre>
sudo apt update
sudo apt update
sudo apt upgrade
sudo apt upgrade
</pre>
Also install the following
<syntaxhighlight lang="bash">
sudo apt install libsndfile1-dev cmake
</syntaxhighlight>
</syntaxhighlight>


===Install dependencies===
====For flavors other than Ubuntu or depending on your window environment you may need:====
The block at the top is standard from the GNU Radio install guide. The two additional below are vim so you get nice colors in your editor and liborc which is needed for the additional GNU Radio blocks that will be installed.<syntaxhighlight lang="bash">
sudo apt install git cmake g++ libboost-all-dev libgmp-dev swig python3-numpy python3-mako python3-sphinx python3-lxml doxygen libfftw3-dev libsdl1.2-dev libgsl-dev libqwt-qt5-dev libqt5opengl5-dev python3-pyqt5 liblog4cpp5-dev libzmq3-dev python3-yaml python3-click python3-click-plugins python3-zmq python3-scipy python3-gi python3-gi-cairo gobject-introspection gir1.2-gtk-3.0
</syntaxhighlight><code>sudo apt install liborc-0.4-dev vim</code>
 
==Install GNU Radio 3.8==
This guide and the blocks used here are all dependent on GNU Radio 3.8. As 3.9 has been released for a while more blocks and packages are getting support so this guide may be updated in the future to support 3.9.<syntaxhighlight lang="bash">
sudo add-apt-repository ppa:gnuradio/gnuradio-releases-3.8
sudo apt update
sudo apt install gnuradio
</syntaxhighlight>
 
==For USRP B200 Support==
This is specific to the USRP B200 software defined radio, if you are using another SDR this will not be necessary.
 
===Install necessary packages===
<code>sudo apt install libuhd-dev libuhd3.15.0 uhd-host</code>
 
===Download firmware needed for different USRP devices===
If this doesn't work your files may have been installed in /usr/local/lib instead of /usr/lib
 
<code>sudo /usr/lib/uhd/utils/uhd_images_downloader.py</code>
 
===Configure USB and test USRP B200===
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
cd /usr/lib/uhd/utils/
add apt-get install -y gobject-introspection gir1.2-gtk-3.0
sudo cp uhd-usrp.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
sudo udevadm trigger
uhd_usrp_probe
</syntaxhighlight>
</syntaxhighlight>


==For HackRF Support==
==Install GNU Radio 3.10==
===Install necessary packages===
The version packaged with Ubuntu (3.10.1 as of 12-30-2022) works fine, has been tested up to 3.10.5<syntaxhighlight lang="bash">
<code>sudo apt install build-essential cmake libusb-1.0-0-dev pkg-config libfftw3-dev</code>
sudo apt-get install gnuradio
===Install HackRF from source===
<syntaxhighlight lang="bash">
git clone https://github.com/mossmann/hackrf.git
cd hackrf/host/
mkdir build
cd build
cmake ..
make -j8
sudo make install
sudo ldconfig
</syntaxhighlight>
===Install gr-osmosdr===
<syntaxhighlight lang="bash">
git clone git://git.osmocom.org/gr-osmosdr
cd gr-osmosdr/
git checkout gr3.8
mkdir build
cd build/
cmake ../
make
sudo make install
sudo ldconfig
</syntaxhighlight>
</syntaxhighlight>


== For AirSpy Support ==
==SDR Hardware Support==


=== Install necessary packages ===
===All support is now native in GNURadio 3.10.===
<syntaxhighlight lang="bash">
sudo apt install libairspy0 libairspy-dev
</syntaxhighlight>


===Install gr-osmosdr===
*UHD can be used for Ettus USRP hardware
<syntaxhighlight lang="bash">
*Soapy Custom Source is used for HackRF, AirSpy, BladeRF and RTL-SDR
git clone git://git.osmocom.org/gr-osmosdr
cd gr-osmosdr/
git checkout gr3.8
mkdir build
cd build/
cmake ../
make
sudo make install
sudo ldconfig
</syntaxhighlight>
==For RTL-SDR Support==
===Install gr-osmosdr===
<syntaxhighlight lang="bash">
git clone git://git.osmocom.org/gr-osmosdr
cd gr-osmosdr/
git checkout gr3.8
mkdir build
cd build/
cmake ../
make
sudo make install
sudo ldconfig
</syntaxhighlight>


==Install Frequency Hopping Utilities==
==Install Frequency Hopping Utilities==
Line 109: Line 44:


#[https://github.com/sandialabs/gr-pdu_utils PDU Utilities]
#[https://github.com/sandialabs/gr-pdu_utils PDU Utilities]
#[https://github.com/sandialabs/gr-fhss_utils FHSS Utilities]
#[https://github.com/sandialabs/gr-timing_utils Timing Utilities]
#[https://github.com/sandialabs/gr-timing_utils Timing Utilities]
#[https://github.com/sandialabs/gr-sandia_utils Sandia Utilities]
#[https://github.com/sandialabs/gr-sandia_utils Sandia Utilities]
#[https://github.com/sandialabs/gr-fhss_utils FHSS Utilities]


===Create a folder to organize them===
===Create a folder to organize them===
Line 124: Line 59:
git clone https://github.com/sandialabs/gr-pdu_utils.git
git clone https://github.com/sandialabs/gr-pdu_utils.git
cd gr-pdu_utils/
cd gr-pdu_utils/
git checkout maint-3.8
git checkout maint-3.10
mkdir build
mkdir build
cd build
cd build
Line 131: Line 66:
sudo make install
sudo make install
sudo ldconfig
sudo ldconfig
cd ..
cd ../..
</syntaxhighlight>
</syntaxhighlight>


===Install FHSS Utilities===
===Install Sandia Utilities===
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
git clone https://github.com/sandialabs/gr-fhss_utils.git
git clone https://github.com/sandialabs/gr-sandia_utils.git
cd gr-fhss_utils/
cd gr-sandia_utils/
git checkout maint-3.8
git checkout maint-3.10
mkdir build
mkdir build
cd build/
cd build/
Line 145: Line 80:
sudo make install
sudo make install
sudo ldconfig
sudo ldconfig
cd ..
cd ../..
</syntaxhighlight>
</syntaxhighlight>


Line 152: Line 87:
git clone https://github.com/sandialabs/gr-timing_utils.git
git clone https://github.com/sandialabs/gr-timing_utils.git
cd gr-timing_utils/
cd gr-timing_utils/
git checkout maint-3.8
git checkout maint-3.10
mkdir build
mkdir build
cd build
cd build
Line 159: Line 94:
sudo make install
sudo make install
sudo ldconfig
sudo ldconfig
cd ..
cd ../..
</syntaxhighlight>
</syntaxhighlight>


===Install Sandia Utilities===
===Install FHSS Utilities===
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
git clone https://github.com/sandialabs/gr-sandia_utils.git
git clone https://github.com/sandialabs/gr-fhss_utils.git
cd gr-sandia_utils/
cd gr-fhss_utils/
git checkout maint-3.8
git checkout maint-3.10
mkdir build
mkdir build
cd build/
cd build/
Line 173: Line 108:
sudo make install
sudo make install
sudo ldconfig
sudo ldconfig
cd ..
cd ../..
</syntaxhighlight>
</syntaxhighlight>


==Setup PYTHONPATH==
===Finish up===
gnuradio-companion will give you errors if it can't find your python libraries that were just installed. Also highly suggest starting gnuradio-companion from a terminal as opposed to the icon in Ubuntu. It gives you a nice way to see console output and you have to configure path variables in other places to run gnuradio-companion with the icon.
 
#Figure out where your dist-packages is located
#Open your .bashrc file and add that path
#close all open terminals and re-open them
 
===Figure out where dist-packages is located===
If your system is like mine they will be in:
 
<code>/usr/local/lib/python3/dist-packages</code>
 
You can easily confirm by using "ls" to show all the files there, if you see folder names corresponding to the packages installed above you have the correct folder. If not, try searching for other occurrences of "dist-packages" on your system where they may have been placed.
 
===Edit .bashrc and add PYTHONPATH===
Add the following to the end of your .bashrc if there is no PYTHONPATH variable.
 
<code>export PYTHONPATH=/usr/local/lib/python3/dist-packages/</code>
 
====Finish up====
Close all open terminal windows and then open a new one.
Close all open terminal windows and then open a new one.


Line 204: Line 120:
git clone https://github.com/BitBangingBytes/gr-smart_meters.git
git clone https://github.com/BitBangingBytes/gr-smart_meters.git
cd gr-smart_meters/
cd gr-smart_meters/
git checkout maint-3.10
mkdir build
mkdir build
cd build/
cd build/
Line 211: Line 128:
sudo ldconfig
sudo ldconfig
</syntaxhighlight>
</syntaxhighlight>
===Install python packages needed for Google Maps and Google Earth===
If pip isn't installed: <pre> sudo apt install python3-pip </pre>
Then:
<syntaxhighlight lang="bash">
pip install gmplot simplekml
</syntaxhighlight>
===Start GNU Radio from a terminal window===
===Start GNU Radio from a terminal window===
<code>gnuradio-companion</code>
<code>gnuradio-companion</code>
===Open flowgraph for your SDR===
===Open flowgraph for your SDR===
In GNU Radio open a flowgraph and navigate to the gr-smart_meters/flowgraph folder. If you have installed everything above you should be able to run it and see smart meter data!
In GNU Radio open a flowgraph and navigate to the gr-smart_meters/examples folder. If you have installed everything above you should be able to run it and see smart meter data!
==Determining your power providers CRC==
==Determining your power providers CRC==
CRC check is set to false in the sample flowgraphs so you will see data but can't be sure there aren't any errors. Every power provider is assigned a unique CRC so neighboring smart meter systems do not interfere with each other. To determine this you need to capture at least 4 good packets and use reveng to reverse the CRC.
CRC check is set to false in the sample flowgraphs so you will see data but can't be sure there aren't any errors. Every power provider is assigned a unique CRC so neighboring smart meter systems do not interfere with each other. To determine this you need to capture at least 4 good packets and use reveng to reverse the CRC.
Line 242: Line 167:


The init value is what you enter into the GridStream block, you can now enable the CRC and know you have correct data!
The init value is what you enter into the GridStream block, you can now enable the CRC and know you have correct data!
{{#widget:CRCprefix}}