Difference between revisions of "Gr-smart meters Setup Guide"
(19 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
− | The following install guide details the steps from a fresh Ubuntu | + | 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 | + | '''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. | ||
− | < | + | <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> | ||
− | === | + | ====For flavors other than Ubuntu or depending on your window environment you may need:==== |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | + | add apt-get install -y gobject-introspection gir1.2-gtk-3.0 | |
− | |||
− | |||
− | |||
− | |||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ==Install GNU Radio 3.10== | |
− | + | 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"> | |
− | + | sudo apt-get install gnuradio | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | <syntaxhighlight lang="bash"> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</syntaxhighlight> | </syntaxhighlight> | ||
− | == | + | ==SDR Hardware Support== |
− | === | + | ===All support is now native in GNURadio 3.10.=== |
− | |||
− | |||
− | |||
− | + | *UHD can be used for Ettus USRP hardware | |
− | + | *Soapy Custom Source is used for HackRF, AirSpy, BladeRF and RTL-SDR | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
==Install Frequency Hopping Utilities== | ==Install Frequency Hopping Utilities== | ||
Line 112: | 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-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 127: | 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. | + | git checkout maint-3.10 |
mkdir build | mkdir build | ||
cd build | cd build | ||
Line 137: | Line 69: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | ===Install | + | ===Install Sandia Utilities=== |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | git clone https://github.com/sandialabs/gr- | + | git clone https://github.com/sandialabs/gr-sandia_utils.git |
− | cd gr- | + | cd gr-sandia_utils/ |
− | git checkout | + | git checkout maint-3.10 |
mkdir build | mkdir build | ||
cd build/ | cd build/ | ||
Line 155: | 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 | + | git checkout maint-3.10 |
mkdir build | mkdir build | ||
cd build | cd build | ||
Line 165: | Line 97: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | ===Install | + | ===Install FHSS Utilities=== |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | git clone https://github.com/sandialabs/gr- | + | git clone https://github.com/sandialabs/gr-fhss_utils.git |
− | cd gr- | + | cd gr-fhss_utils/ |
− | git checkout | + | git checkout maint-3.10 |
mkdir build | mkdir build | ||
cd build/ | cd build/ | ||
Line 179: | Line 111: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ===Finish up=== | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Close all open terminal windows and then open a new one. | Close all open terminal windows and then open a new one. | ||
==Setup gr-smart_meters== | ==Setup gr-smart_meters== | ||
This contains the GridStream block that will be used to decode Landis+Gyr Smart Meter data along with pre-configured flowgraphs for USRP B200, HackRF and RTL-SDR and a script to decode GPS data transmitted in some cases. | This contains the GridStream block that will be used to decode Landis+Gyr Smart Meter data along with pre-configured flowgraphs for USRP B200, HackRF and RTL-SDR and a script to decode GPS data transmitted in some cases. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
===Install gr-smart_meters=== | ===Install gr-smart_meters=== | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
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 | + | git checkout maint-3.10 |
mkdir build | mkdir build | ||
cd build/ | cd build/ | ||
Line 222: | 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> | ||
Line 253: | 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}} |
Latest revision as of 23:40, 13 April 2024
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.
For other Linux distributions please see: Gr-smart meters Setup on other distros
For Windows Subsystem for Linux (WSL) please see: Gr-smart meters on WSL
Contents
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.
sudo apt update sudo apt upgrade
Also install the following
sudo apt install libsndfile1-dev cmake
For flavors other than Ubuntu or depending on your window environment you may need:
add apt-get install -y gobject-introspection gir1.2-gtk-3.0
Install GNU Radio 3.10
The version packaged with Ubuntu (3.10.1 as of 12-30-2022) works fine, has been tested up to 3.10.5
sudo apt-get install gnuradio
SDR Hardware Support
All support is now native in GNURadio 3.10.
- UHD can be used for Ettus USRP hardware
- Soapy Custom Source is used for HackRF, AirSpy, BladeRF and RTL-SDR
Install Frequency Hopping Utilities
If you already have GNU Radio and your SDR setup you should start here to install the Sandia Laboratories out of tree (OOT) modules. Four different OOT modules are needed.
Create a folder to organize them
cd
mkdir FHSS_Utils
cd FHSS_Utils
Install PDU Utilities
git clone https://github.com/sandialabs/gr-pdu_utils.git
cd gr-pdu_utils/
git checkout maint-3.10
mkdir build
cd build
cmake ..
make -j8
sudo make install
sudo ldconfig
cd ../..
Install Sandia Utilities
git clone https://github.com/sandialabs/gr-sandia_utils.git
cd gr-sandia_utils/
git checkout maint-3.10
mkdir build
cd build/
cmake ..
make -j8
sudo make install
sudo ldconfig
cd ../..
Install Timing Utilities
git clone https://github.com/sandialabs/gr-timing_utils.git
cd gr-timing_utils/
git checkout maint-3.10
mkdir build
cd build
cmake ..
make -j8
sudo make install
sudo ldconfig
cd ../..
Install FHSS Utilities
git clone https://github.com/sandialabs/gr-fhss_utils.git
cd gr-fhss_utils/
git checkout maint-3.10
mkdir build
cd build/
cmake ..
make -j8
sudo make install
sudo ldconfig
cd ../..
Finish up
Close all open terminal windows and then open a new one.
Setup gr-smart_meters
This contains the GridStream block that will be used to decode Landis+Gyr Smart Meter data along with pre-configured flowgraphs for USRP B200, HackRF and RTL-SDR and a script to decode GPS data transmitted in some cases.
Install gr-smart_meters
git clone https://github.com/BitBangingBytes/gr-smart_meters.git
cd gr-smart_meters/
git checkout maint-3.10
mkdir build
cd build/
cmake ..
make -j8
sudo make install
sudo ldconfig
Install python packages needed for Google Maps and Google Earth
If pip isn't installed:
sudo apt install python3-pip
Then:
pip install gmplot simplekml
Start GNU Radio from a terminal window
gnuradio-companion
Open flowgraph for your SDR
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
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.
Install reveng
It's on sourceforge: https://reveng.sourceforge.io/ Documentation is at: https://reveng.sourceforge.io/readme.htm Download the .zip in the latest releases folder: https://sourceforge.net/projects/reveng/files/2.1.1/ Follow instructions to make
Provide reveng four good packets
I find the easiest way to do this is to limit the Packet Type to 0x55 and Packet Length to 0x23. Edit the GridStream block and make those changes then run the flowgraph making sure CRC Enable is set to False.
You will get data that looks like this below.
00FF2A55002330FFFFFFFFFFFF50CF5DD9E2C0B80065F5D1A483F0FBBC6F01001E6C043B517E90B286
You need to remove the first 6 bytes and provide the rest as inputs to reveng, CRC isn't calculated on those bytes.
00FF2A550023 <-- Discard | 30FFFFFFFFFFFF50CF5DD9E2C0B80065F5D1A483F0FBBC6F01001E6C043B517E90B286
Now provide four samples to reveng
./reveng -w 16 -s 30FFFFFFFFFFFF50CF5DD9E2C0B80065F5D1A483F0FBBC6F01001E6C043B517E90B286 30FFFFFFFFFFFF50CF2DD9E560560065F5D5A483F0C000650100176C033FF77E901766 30FFFFFFFFFFFF50CF95D9E5E01A0065F5D9A483F0515A0201001E6C042A177E90BDA4 30FFFFFFFFFFFF50CF8DD9E6A0F00065F5EBA483F0EBFD4A0100206C0433A97E90B04C
You should get the following output below if you used this data to test
width=16 poly=0x1021 init=0x5fd6 refin=false refout=false xorout=0x0000 check=0x139e residue=0x0000 name=(none)
The init value is what you enter into the GridStream block, you can now enable the CRC and know you have correct data!
CRC Prefix Calculator by L0scher
Enter a string of hex bytes in the box and hit the Find CRC init button searches for the initial CRC value which would make the calculated CRC equal to zero. It uses the 0x1021 polynomial value. If it cannot find such a value, it will leave the value unchanged.