<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.recessim.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=L0scher</id>
	<title>RECESSIM - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.recessim.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=L0scher"/>
	<link rel="alternate" type="text/html" href="https://wiki.recessim.com/view/Special:Contributions/L0scher"/>
	<updated>2026-05-09T04:41:15Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Dump_EEPROM&amp;diff=2839</id>
		<title>Dump EEPROM</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Dump_EEPROM&amp;diff=2839"/>
		<updated>2025-03-16T21:25:03Z</updated>

		<summary type="html">&lt;p&gt;L0scher: /* Identify the device */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A serial EEPROM is a small IC that stores data in a physically compact package.  These are often used in electronic equipment and it's useful to dump the contents of such devices to do a thorough job of reverse engineering.  &lt;br /&gt;
&lt;br /&gt;
== Using a Raspberry Pi ==&lt;br /&gt;
Because many of these devices are 3.3V parts, it's often possible to dump the contents of such devices using nothing more than a Raspberry Pi, some micrograbbers and jumpers.  As an example of this, we'll show the steps involved in using a Raspberry Pi Zero W to read the contents of the EEPROM in a L+G meter board.&lt;br /&gt;
&lt;br /&gt;
== Identify the device ==&lt;br /&gt;
The EEPROM in the L+G Focus meter is an Atmel (formerly Adesto) [https://www.digikey.com/htmldatasheets/production/1309927/0/0/1/at45db081d-datasheet.html 45DB081D], which is an 8-megabit flash memory that has a [https://en.wikipedia.org/wiki/Serial_Peripheral_Interface SPI bus] interface.  Since this part can be powered by 3.3V and the Raspberry Pi already has a SPI bus, all that's required is to connect the two. &lt;br /&gt;
&lt;br /&gt;
Here is one way to do that:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function !! EEPROM pin # !! Pi pin #&lt;br /&gt;
|-&lt;br /&gt;
| MOSI || 1 || 19&lt;br /&gt;
|-&lt;br /&gt;
| SCLK || 2 || 23&lt;br /&gt;
|-&lt;br /&gt;
| #RESET || 3 || VCC&lt;br /&gt;
|-&lt;br /&gt;
| #CS || 4 || 24&lt;br /&gt;
|-&lt;br /&gt;
| #WP || 5 || VCC&lt;br /&gt;
|-&lt;br /&gt;
| VCC || 6 || 17&lt;br /&gt;
|-&lt;br /&gt;
| GND || 7 || 25&lt;br /&gt;
|-&lt;br /&gt;
| MISO || 8 || 21&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Double check your wiring before powering up the Raspberry Pi!''' Failure do so can permanently damage either the Pi, your Pi power supply, the device to which you're connecting ''or all three.''&lt;br /&gt;
&lt;br /&gt;
One additional connection is needed, which is to connect the microprocessor's #RESET line to a logic low to keep the processor in reset so that it does not interfere with the Pi reading the memory.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Once this is all done reading the EEPROM is as simple as executing this command on the Pi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;flashrom --read dump.bin -p linux_spi:dev=/dev/spidev0.0,spispeed=10000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The speed is specified in kHz, so this corresponds to 50MHz.&lt;/div&gt;</summary>
		<author><name>L0scher</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Advanced_Metering_Infrastructure&amp;diff=2838</id>
		<title>Advanced Metering Infrastructure</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Advanced_Metering_Infrastructure&amp;diff=2838"/>
		<updated>2025-03-16T21:24:13Z</updated>

		<summary type="html">&lt;p&gt;L0scher: /* Firmware Extraction &amp;amp; Analysis */ added link to Dump EEPROM&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Advanced Metering Infrastructure (AMI)&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Smart_meter#Advanced_Metering_Infrastructure&amp;lt;/ref&amp;gt; refers to systems that measure, collect, and analyze energy usage, and communicate with metering devices such as electricity meters, gas meters, heat meters, and water meters, either on request or on a schedule.&lt;br /&gt;
[[File:LandisGyrResidentialMeter1.JPG|thumb|Landis+Gyr Residential Power Meter]]&lt;br /&gt;
There are various methods used to report power usage back to the utility including cellular, power-line and mesh networked power meters operating in the ISM bands&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/ISM_band&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube width=&amp;quot;320&amp;quot; height=&amp;quot;240&amp;quot;&amp;gt;gYowTR3Dfdk&amp;lt;/youtube&amp;gt;&lt;br /&gt;
==Electricity Metering Systems==&lt;br /&gt;
[[Itron Residential Meter]]&lt;br /&gt;
&lt;br /&gt;
[[Landis+Gyr GridStream Protocol]]&lt;br /&gt;
&lt;br /&gt;
[[Landis+Gyr Residential Meter]]&lt;br /&gt;
&lt;br /&gt;
[[Landis+Gyr Commercial Meter]]&lt;br /&gt;
&lt;br /&gt;
[[Landis+Gyr Collector]]&lt;br /&gt;
&lt;br /&gt;
[[Landis+Gyr Integrated WanGate Radio (IWR)]]&lt;br /&gt;
&lt;br /&gt;
[[Silver Spring Networks Protocol]]&lt;br /&gt;
&lt;br /&gt;
[[Silver Spring Networks Access Point]]&lt;br /&gt;
&lt;br /&gt;
[[Silver Spring Networks Relay]]&lt;br /&gt;
&lt;br /&gt;
[[Sangamo FM2S]]&lt;br /&gt;
&lt;br /&gt;
==Data Capture using Software Defined Radio==&lt;br /&gt;
[[gr-smart_meters Setup Guide]]&lt;br /&gt;
&lt;br /&gt;
==Firmware Extraction &amp;amp; Analysis==&lt;br /&gt;
[[Extract Firmware - Landis+Gyr (M16C)]]&lt;br /&gt;
&lt;br /&gt;
[[Extract Firmware - Landis+Gyr (ARM)]]&lt;br /&gt;
&lt;br /&gt;
[[Ghidra Configuration - M16C Processor]]&lt;br /&gt;
&lt;br /&gt;
[[Dump EEPROM]]&lt;br /&gt;
&lt;br /&gt;
==Other==&lt;br /&gt;
[[Landis+Gyr DCW]]&lt;br /&gt;
&lt;br /&gt;
==Schematics==&lt;br /&gt;
[https://github.com/BitBangingBytes/LandisGyr-FocusAXR_Schematics Landis+Gyr FocusAXR-SD Schematic]&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>L0scher</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Dump_EEPROM&amp;diff=2837</id>
		<title>Dump EEPROM</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Dump_EEPROM&amp;diff=2837"/>
		<updated>2025-03-16T21:21:32Z</updated>

		<summary type="html">&lt;p&gt;L0scher: Created page with &amp;quot;A serial EEPROM is a small IC that stores data in a physically compact package.  These are often used in electronic equipment and it's useful to dump the contents of such devi...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A serial EEPROM is a small IC that stores data in a physically compact package.  These are often used in electronic equipment and it's useful to dump the contents of such devices to do a thorough job of reverse engineering.  &lt;br /&gt;
&lt;br /&gt;
== Using a Raspberry Pi ==&lt;br /&gt;
Because many of these devices are 3.3V parts, it's often possible to dump the contents of such devices using nothing more than a Raspberry Pi, some micrograbbers and jumpers.  As an example of this, we'll show the steps involved in using a Raspberry Pi Zero W to read the contents of the EEPROM in a L+G meter board.&lt;br /&gt;
&lt;br /&gt;
== Identify the device ==&lt;br /&gt;
The EEPROM in the L+G Focus meter is an Atmel (formerly Adesto) [https://www.digikey.com/htmldatasheets/production/1309927/0/0/1/at45db081d-datasheet.html 45DB081D], which is an 8-megabit flash memory that has a [https://en.wikipedia.org/wiki/Serial_Peripheral_Interface SPI bus] interface.  Since this part can be powered by 3.3V and the Raspberry Pi already has a SPI bus, all that's required is to connect the two. &lt;br /&gt;
&lt;br /&gt;
Here is one way to do that:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function !! EEPROM pin # !! Pi pin #&lt;br /&gt;
|-&lt;br /&gt;
| MOSI || 1 || 19&lt;br /&gt;
|-&lt;br /&gt;
| SCLK || 2 || 23&lt;br /&gt;
|-&lt;br /&gt;
| #RESET || 3 || VCC&lt;br /&gt;
|-&lt;br /&gt;
| #CS || 4 || 24&lt;br /&gt;
|-&lt;br /&gt;
| #WP || 5 || VCC&lt;br /&gt;
|-&lt;br /&gt;
| VCC || 6 || 17&lt;br /&gt;
|-&lt;br /&gt;
| GND || 7 || 25&lt;br /&gt;
|-&lt;br /&gt;
| MISO || 8 || 21&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Double check your wiring before powering up the Raspberry Pi!''' Failure do so can permanently damage either the Pi, your Pi power supply, the device to which you're connecting ''or all three.''&lt;br /&gt;
&lt;br /&gt;
One addition connection is needed, which is to connect the microprocessor's #RESET line to a logic low to keep the processor in reset so that it does not interfere with the Pi reading the memory.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Once this is all done reading the EEPROM is as simple as executing this command on the Pi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;flashrom --read dump.bin -p linux_spi:dev=/dev/spidev0.0,spispeed=10000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The speed is specified in kHz, so this corresponds to 50MHz.&lt;/div&gt;</summary>
		<author><name>L0scher</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Gr-smart_meters_Setup_on_other_distros&amp;diff=2252</id>
		<title>Gr-smart meters Setup on other distros</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Gr-smart_meters_Setup_on_other_distros&amp;diff=2252"/>
		<updated>2024-02-08T19:37:23Z</updated>

		<summary type="html">&lt;p&gt;L0scher: added missing word&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [[Gr-smart meters Setup Guide]] describes how to build the gr-smart meters setup on Ubuntu.  This page documents how to do so on other Linux distributions.  Note that the patches applied (&amp;lt;code&amp;gt;pull_23&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;gr-pdu_utils&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;pull_9&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;gr-timing_utils&amp;lt;/code&amp;gt;) apply pull requests that have not yet been accepted into the respective Sandia Labs repositories.  If and when they are ever merged into the main line code, these patches will no longer be necessary.  Also note that with these patches applied, it is no longer necessary to build or use the &amp;lt;code&amp;gt;gr-sandia_utils&amp;lt;/code&amp;gt; code.&lt;br /&gt;
&lt;br /&gt;
For each distribution below, what is shown is a container file (for use with Docker or Podman) that shows how to build the relevant modules within a container based on the relevant distro.  This is done to both make it absolutely clear which steps need to be done and which order, and also to provide a convenient way to test and these recipes to other Linux distributions.&lt;br /&gt;
&lt;br /&gt;
To run these commands on a real distribution (that is, not in a container), you can simply execute each &amp;quot;RUN&amp;quot; command exactly as it appears and then substitute `cd` commands for the &amp;quot;WORKDIR&amp;quot; lines (or use &amp;lt;code&amp;gt;pushd&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;popd&amp;lt;/code&amp;gt; pairs as shown in the example below).  You can ignore the &amp;quot;FROM&amp;quot; line.  You will want to adjust the directories for your own computer.  So for example, for Arch one could use the following commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir FHSS_Utils&lt;br /&gt;
cd FHSS_Utils&lt;br /&gt;
pacman --noconfirm -Sy git make cmake gcc gnuradio boost doxygen graphviz pybind11&lt;br /&gt;
git clone https://github.com/sandialabs/gr-pdu_utils.git&lt;br /&gt;
git clone https://github.com/sandialabs/gr-timing_utils.git&lt;br /&gt;
git clone https://github.com/sandialabs/gr-fhss_utils.git&lt;br /&gt;
for fn in * ; do pushd $fn &amp;amp;&amp;amp; git checkout maint-3.10 &amp;amp;&amp;amp; popd ; done&lt;br /&gt;
pushd gr-pdu_utils&lt;br /&gt;
git fetch origin refs/pull/23/head:pull_23&lt;br /&gt;
git checkout pull_23&lt;br /&gt;
cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
popd&lt;br /&gt;
pushd gr-timing_utils&lt;br /&gt;
git fetch origin refs/pull/9/head:pull_9&lt;br /&gt;
git checkout pull_9&lt;br /&gt;
cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
popd&lt;br /&gt;
pushd gr-fhss_utils&lt;br /&gt;
RUN cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
popd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note too, that you may need to use &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt; to install.  If that's the case, you can replace this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
with this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cmake -B build &lt;br /&gt;
cmake --build build&lt;br /&gt;
sudo cmake --build build -t install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It's recommended to build an ordinary user and only use &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt; for installing, as shown above. To speed up compiling on multicore machines, you can append &amp;lt;code&amp;gt;-j&amp;lt;/code&amp;gt; to build commands as in &amp;lt;code&amp;gt;cmake --build build -j&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
These notes generally apply to all of the distributions listed below.&lt;br /&gt;
&lt;br /&gt;
== Arch ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;docker&amp;quot;&amp;gt;&lt;br /&gt;
FROM archlinux:base-20240101.0.204074&lt;br /&gt;
RUN mkdir -p /tmp/work&lt;br /&gt;
WORKDIR /tmp/work&lt;br /&gt;
RUN pacman --noconfirm -Sy git make cmake gcc gnuradio boost doxygen graphviz pybind11&lt;br /&gt;
RUN git clone https://github.com/sandialabs/gr-pdu_utils.git&lt;br /&gt;
RUN git clone https://github.com/sandialabs/gr-timing_utils.git&lt;br /&gt;
RUN git clone https://github.com/sandialabs/gr-fhss_utils.git&lt;br /&gt;
RUN for fn in * ; do pushd $fn &amp;amp;&amp;amp; git checkout maint-3.10 &amp;amp;&amp;amp; popd ; done&lt;br /&gt;
WORKDIR /tmp/work/gr-pdu_utils&lt;br /&gt;
RUN git fetch origin refs/pull/23/head:pull_23&lt;br /&gt;
RUN git checkout pull_23&lt;br /&gt;
RUN cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
WORKDIR /tmp/work/gr-timing_utils&lt;br /&gt;
RUN git fetch origin refs/pull/9/head:pull_9&lt;br /&gt;
RUN git checkout pull_9&lt;br /&gt;
RUN cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
WORKDIR /tmp/work/gr-fhss_utils&lt;br /&gt;
RUN cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>L0scher</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Gr-smart_meters_Setup_on_other_distros&amp;diff=2251</id>
		<title>Gr-smart meters Setup on other distros</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Gr-smart_meters_Setup_on_other_distros&amp;diff=2251"/>
		<updated>2024-02-08T19:36:45Z</updated>

		<summary type="html">&lt;p&gt;L0scher: reorganized structure of page to put only distro-specific things under each distro heading.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [[Gr-smart meters Setup Guide]] describes how to build the gr-smart meters setup on Ubuntu.  This page documents how to do so on other Linux distributions.  Note that the patches applied (&amp;lt;code&amp;gt;pull_23&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;gr-pdu_utils&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;pull_9&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;gr-timing_utils&amp;lt;/code&amp;gt;) apply pull requests that have not yet been accepted into the respective Sandia Labs repositories.  If and when they are ever merged into the main line code, these patches will no longer be necessary.  Also note that with these patches applied, it is no longer necessary to build or use the &amp;lt;code&amp;gt;gr-sandia_utils&amp;lt;/code&amp;gt; code.&lt;br /&gt;
&lt;br /&gt;
For each distribution below, what is shown is a container file (for use with Docker or Podman) that shows how to build the relevant modules within a container based on the relevant distro.  This is done to both make it absolutely clear which steps need to be done and which order, and also to provide a convenient way to test and these recipes to other Linux distributions.&lt;br /&gt;
&lt;br /&gt;
To run these commands on a real distribution (that is, not in a container), you can simply execute each &amp;quot;RUN&amp;quot; command exactly as it appears and then substitute `cd` commands for the &amp;quot;WORKDIR&amp;quot; lines (or use &amp;lt;code&amp;gt;pushd&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;popd&amp;lt;/code&amp;gt; pairs as shown in the example below).  You can ignore the &amp;quot;FROM&amp;quot; line.  You will want to adjust the directories for your own computer.  So for example, for Arch could use the following commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir FHSS_Utils&lt;br /&gt;
cd FHSS_Utils&lt;br /&gt;
pacman --noconfirm -Sy git make cmake gcc gnuradio boost doxygen graphviz pybind11&lt;br /&gt;
git clone https://github.com/sandialabs/gr-pdu_utils.git&lt;br /&gt;
git clone https://github.com/sandialabs/gr-timing_utils.git&lt;br /&gt;
git clone https://github.com/sandialabs/gr-fhss_utils.git&lt;br /&gt;
for fn in * ; do pushd $fn &amp;amp;&amp;amp; git checkout maint-3.10 &amp;amp;&amp;amp; popd ; done&lt;br /&gt;
pushd gr-pdu_utils&lt;br /&gt;
git fetch origin refs/pull/23/head:pull_23&lt;br /&gt;
git checkout pull_23&lt;br /&gt;
cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
popd&lt;br /&gt;
pushd gr-timing_utils&lt;br /&gt;
git fetch origin refs/pull/9/head:pull_9&lt;br /&gt;
git checkout pull_9&lt;br /&gt;
cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
popd&lt;br /&gt;
pushd gr-fhss_utils&lt;br /&gt;
RUN cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
popd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note too, that you may need to use &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt; to install.  If that's the case, you can replace this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
with this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cmake -B build &lt;br /&gt;
cmake --build build&lt;br /&gt;
sudo cmake --build build -t install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It's recommended to build an ordinary user and only use &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt; for installing, as shown above. To speed up compiling on multicore machines, you can append &amp;lt;code&amp;gt;-j&amp;lt;/code&amp;gt; to build commands as in &amp;lt;code&amp;gt;cmake --build build -j&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
These notes generally apply to all of the distributions listed below.&lt;br /&gt;
&lt;br /&gt;
== Arch ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;docker&amp;quot;&amp;gt;&lt;br /&gt;
FROM archlinux:base-20240101.0.204074&lt;br /&gt;
RUN mkdir -p /tmp/work&lt;br /&gt;
WORKDIR /tmp/work&lt;br /&gt;
RUN pacman --noconfirm -Sy git make cmake gcc gnuradio boost doxygen graphviz pybind11&lt;br /&gt;
RUN git clone https://github.com/sandialabs/gr-pdu_utils.git&lt;br /&gt;
RUN git clone https://github.com/sandialabs/gr-timing_utils.git&lt;br /&gt;
RUN git clone https://github.com/sandialabs/gr-fhss_utils.git&lt;br /&gt;
RUN for fn in * ; do pushd $fn &amp;amp;&amp;amp; git checkout maint-3.10 &amp;amp;&amp;amp; popd ; done&lt;br /&gt;
WORKDIR /tmp/work/gr-pdu_utils&lt;br /&gt;
RUN git fetch origin refs/pull/23/head:pull_23&lt;br /&gt;
RUN git checkout pull_23&lt;br /&gt;
RUN cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
WORKDIR /tmp/work/gr-timing_utils&lt;br /&gt;
RUN git fetch origin refs/pull/9/head:pull_9&lt;br /&gt;
RUN git checkout pull_9&lt;br /&gt;
RUN cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
WORKDIR /tmp/work/gr-fhss_utils&lt;br /&gt;
RUN cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>L0scher</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Gr-smart_meters_Setup_on_other_distros&amp;diff=2250</id>
		<title>Gr-smart meters Setup on other distros</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Gr-smart_meters_Setup_on_other_distros&amp;diff=2250"/>
		<updated>2024-02-08T19:31:14Z</updated>

		<summary type="html">&lt;p&gt;L0scher: /* Arch */ added detail about the proper use of sudo if required.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [[Gr-smart meters Setup Guide]] describes how to build the gr-smart meters setup on Ubuntu.  This page documents how to do so on other Linux distributions.  Note that the patches applied (&amp;lt;code&amp;gt;pull_23&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;gr-pdu_utils&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;pull_9&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;gr-timing_utils&amp;lt;/code&amp;gt;) apply pull requests that have not yet been accepted into the respective Sandia Labs repositories.  If and when they are ever merged into the main line code, these patches will no longer be necessary.  Also note that with these patches applied, it is no longer necessary to build or use the &amp;lt;code&amp;gt;gr-sandia_utils&amp;lt;/code&amp;gt; code.&lt;br /&gt;
&lt;br /&gt;
== Arch ==&lt;br /&gt;
This is a container file (for use with Docker or Podman) that shows how to build the relevant modules under Arch Linux.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;docker&amp;quot;&amp;gt;&lt;br /&gt;
FROM archlinux:base-20240101.0.204074&lt;br /&gt;
RUN mkdir -p /tmp/work&lt;br /&gt;
WORKDIR /tmp/work&lt;br /&gt;
RUN pacman --noconfirm -Sy git make cmake gcc gnuradio boost doxygen graphviz pybind11&lt;br /&gt;
RUN git clone https://github.com/sandialabs/gr-pdu_utils.git&lt;br /&gt;
RUN git clone https://github.com/sandialabs/gr-timing_utils.git&lt;br /&gt;
RUN git clone https://github.com/sandialabs/gr-fhss_utils.git&lt;br /&gt;
RUN for fn in * ; do pushd $fn &amp;amp;&amp;amp; git checkout maint-3.10 &amp;amp;&amp;amp; popd ; done&lt;br /&gt;
WORKDIR /tmp/work/gr-pdu_utils&lt;br /&gt;
RUN git fetch origin refs/pull/23/head:pull_23&lt;br /&gt;
RUN git checkout pull_23&lt;br /&gt;
RUN cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
WORKDIR /tmp/work/gr-timing_utils&lt;br /&gt;
RUN git fetch origin refs/pull/9/head:pull_9&lt;br /&gt;
RUN git checkout pull_9&lt;br /&gt;
RUN cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
WORKDIR /tmp/work/gr-fhss_utils&lt;br /&gt;
RUN cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To run these commands on a real distribution (that is, not in a container), you can simply execute each &amp;quot;RUN&amp;quot; command exactly as it appears and then substitute `cd` commands for the &amp;quot;WORKDIR&amp;quot; lines (or use &amp;lt;code&amp;gt;pushd&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;popd&amp;lt;/code&amp;gt; pairs as shown in the example below).  You can ignore the &amp;quot;FROM&amp;quot; line.  You will want to adjust the directories for your own computer.  So for example, one could use the following commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir FHSS_Utils&lt;br /&gt;
cd FHSS_Utils&lt;br /&gt;
pacman --noconfirm -Sy git make cmake gcc gnuradio boost doxygen graphviz pybind11&lt;br /&gt;
git clone https://github.com/sandialabs/gr-pdu_utils.git&lt;br /&gt;
git clone https://github.com/sandialabs/gr-timing_utils.git&lt;br /&gt;
git clone https://github.com/sandialabs/gr-fhss_utils.git&lt;br /&gt;
for fn in * ; do pushd $fn &amp;amp;&amp;amp; git checkout maint-3.10 &amp;amp;&amp;amp; popd ; done&lt;br /&gt;
pushd gr-pdu_utils&lt;br /&gt;
git fetch origin refs/pull/23/head:pull_23&lt;br /&gt;
git checkout pull_23&lt;br /&gt;
cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
popd&lt;br /&gt;
pushd gr-timing_utils&lt;br /&gt;
git fetch origin refs/pull/9/head:pull_9&lt;br /&gt;
git checkout pull_9&lt;br /&gt;
cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
popd&lt;br /&gt;
pushd gr-fhss_utils&lt;br /&gt;
RUN cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
popd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note too, that you may need to use &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt; to install.  If that's the case, you can replace this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
with this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cmake -B build &lt;br /&gt;
cmake --build build&lt;br /&gt;
sudo cmake --build build -t install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It's recommended to build an ordinary user and only use &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt; for installing, as shown above. To speed up compiling on multicore machines, you can append &amp;lt;code&amp;gt;-j&amp;lt;/code&amp;gt; to build commands as in &amp;lt;code&amp;gt;cmake --build build -j&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>L0scher</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Gr-smart_meters_Setup_on_other_distros&amp;diff=2249</id>
		<title>Gr-smart meters Setup on other distros</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Gr-smart_meters_Setup_on_other_distros&amp;diff=2249"/>
		<updated>2024-02-08T13:47:05Z</updated>

		<summary type="html">&lt;p&gt;L0scher: /* Arch */ show equivalent bash commands&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [[Gr-smart meters Setup Guide]] describes how to build the gr-smart meters setup on Ubuntu.  This page documents how to do so on other Linux distributions.  Note that the patches applied (&amp;lt;code&amp;gt;pull_23&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;gr-pdu_utils&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;pull_9&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;gr-timing_utils&amp;lt;/code&amp;gt;) apply pull requests that have not yet been accepted into the respective Sandia Labs repositories.  If and when they are ever merged into the main line code, these patches will no longer be necessary.  Also note that with these patches applied, it is no longer necessary to build or use the &amp;lt;code&amp;gt;gr-sandia_utils&amp;lt;/code&amp;gt; code.&lt;br /&gt;
&lt;br /&gt;
== Arch ==&lt;br /&gt;
This is a container file (for use with Docker or Podman) that shows how to build the relevant modules under Arch Linux.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;docker&amp;quot;&amp;gt;&lt;br /&gt;
FROM archlinux:base-20240101.0.204074&lt;br /&gt;
RUN mkdir -p /tmp/work&lt;br /&gt;
WORKDIR /tmp/work&lt;br /&gt;
RUN pacman --noconfirm -Sy git make cmake gcc gnuradio boost doxygen graphviz pybind11&lt;br /&gt;
RUN git clone https://github.com/sandialabs/gr-pdu_utils.git&lt;br /&gt;
RUN git clone https://github.com/sandialabs/gr-timing_utils.git&lt;br /&gt;
RUN git clone https://github.com/sandialabs/gr-fhss_utils.git&lt;br /&gt;
RUN for fn in * ; do pushd $fn &amp;amp;&amp;amp; git checkout maint-3.10 &amp;amp;&amp;amp; popd ; done&lt;br /&gt;
WORKDIR /tmp/work/gr-pdu_utils&lt;br /&gt;
RUN git fetch origin refs/pull/23/head:pull_23&lt;br /&gt;
RUN git checkout pull_23&lt;br /&gt;
RUN cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
WORKDIR /tmp/work/gr-timing_utils&lt;br /&gt;
RUN git fetch origin refs/pull/9/head:pull_9&lt;br /&gt;
RUN git checkout pull_9&lt;br /&gt;
RUN cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
WORKDIR /tmp/work/gr-fhss_utils&lt;br /&gt;
RUN cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To run these commands on a real distribution (that is, not in a container), you can simply execute each &amp;quot;RUN&amp;quot; command exactly as it appears and then substitute `cd` commands for the &amp;quot;WORKDIR&amp;quot; lines (or use &amp;lt;code&amp;gt;pushd&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;popd&amp;lt;/code&amp;gt; pairs as shown in the example below).  You can ignore the &amp;quot;FROM&amp;quot; line.  You will want to adjust the directories for your own computer.  So for example, one could use the following commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir FHSS_Utils&lt;br /&gt;
cd FHSS_Utils&lt;br /&gt;
pacman --noconfirm -Sy git make cmake gcc gnuradio boost doxygen graphviz pybind11&lt;br /&gt;
git clone https://github.com/sandialabs/gr-pdu_utils.git&lt;br /&gt;
git clone https://github.com/sandialabs/gr-timing_utils.git&lt;br /&gt;
git clone https://github.com/sandialabs/gr-fhss_utils.git&lt;br /&gt;
for fn in * ; do pushd $fn &amp;amp;&amp;amp; git checkout maint-3.10 &amp;amp;&amp;amp; popd ; done&lt;br /&gt;
pushd gr-pdu_utils&lt;br /&gt;
git fetch origin refs/pull/23/head:pull_23&lt;br /&gt;
git checkout pull_23&lt;br /&gt;
cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
popd&lt;br /&gt;
pushd gr-timing_utils&lt;br /&gt;
git fetch origin refs/pull/9/head:pull_9&lt;br /&gt;
git checkout pull_9&lt;br /&gt;
cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
popd&lt;br /&gt;
pushd gr-fhss_utils&lt;br /&gt;
RUN cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
popd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>L0scher</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Gr-smart_meters_Setup_on_other_distros&amp;diff=2248</id>
		<title>Gr-smart meters Setup on other distros</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Gr-smart_meters_Setup_on_other_distros&amp;diff=2248"/>
		<updated>2024-02-08T13:40:45Z</updated>

		<summary type="html">&lt;p&gt;L0scher: Add some notes about patches.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [[Gr-smart meters Setup Guide]] describes how to build the gr-smart meters setup on Ubuntu.  This page documents how to do so on other Linux distributions.  Note that the patches applied (&amp;lt;code&amp;gt;pull_23&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;gr-pdu_utils&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;pull_9&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;gr-timing_utils&amp;lt;/code&amp;gt;) apply pull requests that have not yet been accepted into the respective Sandia Labs repositories.  If and when they are ever merged into the main line code, these patches will no longer be necessary.  Also note that with these patches applied, it is no longer necessary to build or use the &amp;lt;code&amp;gt;gr-sandia_utils&amp;lt;/code&amp;gt; code.&lt;br /&gt;
&lt;br /&gt;
== Arch ==&lt;br /&gt;
This is a container file (for use with Docker or Podman) that shows how to build the relevant modules under Arch Linux.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;docker&amp;quot;&amp;gt;&lt;br /&gt;
FROM archlinux:base-20240101.0.204074&lt;br /&gt;
RUN mkdir -p /tmp/work&lt;br /&gt;
WORKDIR /tmp/work&lt;br /&gt;
RUN pacman --noconfirm -Sy git make cmake gcc gnuradio boost doxygen graphviz pybind11&lt;br /&gt;
RUN git clone https://github.com/sandialabs/gr-pdu_utils.git&lt;br /&gt;
RUN git clone https://github.com/sandialabs/gr-timing_utils.git&lt;br /&gt;
RUN git clone https://github.com/sandialabs/gr-fhss_utils.git&lt;br /&gt;
RUN for fn in * ; do pushd $fn &amp;amp;&amp;amp; git checkout maint-3.10 &amp;amp;&amp;amp; popd ; done&lt;br /&gt;
WORKDIR /tmp/work/gr-pdu_utils&lt;br /&gt;
RUN git fetch origin refs/pull/23/head:pull_23&lt;br /&gt;
RUN git checkout pull_23&lt;br /&gt;
RUN cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
WORKDIR /tmp/work/gr-timing_utils&lt;br /&gt;
RUN git fetch origin refs/pull/9/head:pull_9&lt;br /&gt;
RUN git checkout pull_9&lt;br /&gt;
RUN cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
WORKDIR /tmp/work/gr-fhss_utils&lt;br /&gt;
RUN cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To run these commands on a real distribution (that is, not in a container), you can simply execute each &amp;quot;RUN&amp;quot; command exactly as it appears and then substitute `cd` commands for the &amp;quot;WORKDIR&amp;quot; lines.  You can ignore the &amp;quot;FROM&amp;quot; line.  You will want to adjust the directories for your own computer.&lt;/div&gt;</summary>
		<author><name>L0scher</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Gr-smart_meters_Setup_Guide&amp;diff=2247</id>
		<title>Gr-smart meters Setup Guide</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Gr-smart_meters_Setup_Guide&amp;diff=2247"/>
		<updated>2024-02-08T13:30:55Z</updated>

		<summary type="html">&lt;p&gt;L0scher: /* Install Ubuntu 22.04 */ point to other distros page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
'''This video shows the overall process but using a prior version of GNURadio. Instructions below are the latest.'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube width=&amp;quot;320&amp;quot; height=&amp;quot;240&amp;quot;&amp;gt;fUK8tcFQwpo&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Install Ubuntu 22.04==&lt;br /&gt;
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]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Also install the following&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install libsndfile1-dev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====For flavors other than Ubuntu or depending on your window environment you may need:====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
add apt-get install -y gobject-introspection gir1.2-gtk-3.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Install GNU Radio 3.10==&lt;br /&gt;
The version packaged with Ubuntu (3.10.1 as of 12-30-2022) works fine, has been tested up to 3.10.5&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install gnuradio&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SDR Hardware Support==&lt;br /&gt;
&lt;br /&gt;
===All support is now native in GNURadio 3.10.===&lt;br /&gt;
&lt;br /&gt;
*UHD can be used for Ettus USRP hardware&lt;br /&gt;
*Soapy Custom Source is used for HackRF, AirSpy, BladeRF and RTL-SDR&lt;br /&gt;
&lt;br /&gt;
==Install Frequency Hopping Utilities==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
#[https://github.com/sandialabs/gr-pdu_utils PDU Utilities]&lt;br /&gt;
#[https://github.com/sandialabs/gr-timing_utils Timing Utilities]&lt;br /&gt;
#[https://github.com/sandialabs/gr-sandia_utils Sandia Utilities]&lt;br /&gt;
#[https://github.com/sandialabs/gr-fhss_utils FHSS Utilities]&lt;br /&gt;
&lt;br /&gt;
===Create a folder to organize them===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd&lt;br /&gt;
mkdir FHSS_Utils&lt;br /&gt;
cd FHSS_Utils&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Install PDU Utilities===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/sandialabs/gr-pdu_utils.git&lt;br /&gt;
cd gr-pdu_utils/&lt;br /&gt;
git checkout maint-3.10&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
cd ../..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Install Sandia Utilities===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/sandialabs/gr-sandia_utils.git&lt;br /&gt;
cd gr-sandia_utils/&lt;br /&gt;
git checkout maint-3.10&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build/&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
cd ../..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Install Timing Utilities===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/sandialabs/gr-timing_utils.git&lt;br /&gt;
cd gr-timing_utils/&lt;br /&gt;
git checkout maint-3.10&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
cd ../..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Install FHSS Utilities===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/sandialabs/gr-fhss_utils.git&lt;br /&gt;
cd gr-fhss_utils/&lt;br /&gt;
git checkout maint-3.10&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build/&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
cd ../..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Finish up===&lt;br /&gt;
Close all open terminal windows and then open a new one.&lt;br /&gt;
&lt;br /&gt;
==Setup gr-smart_meters==&lt;br /&gt;
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. &lt;br /&gt;
===Install gr-smart_meters===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/BitBangingBytes/gr-smart_meters.git&lt;br /&gt;
cd gr-smart_meters/&lt;br /&gt;
git checkout main&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build/&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j8&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install python packages needed for Google Maps and Google Earth ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install gmplot simplekml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Start GNU Radio from a terminal window===&lt;br /&gt;
&amp;lt;code&amp;gt;gnuradio-companion&amp;lt;/code&amp;gt;&lt;br /&gt;
===Open flowgraph for your SDR===&lt;br /&gt;
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!&lt;br /&gt;
==Determining your power providers CRC==&lt;br /&gt;
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.&lt;br /&gt;
===Install reveng===&lt;br /&gt;
It's on sourceforge: https://reveng.sourceforge.io/&lt;br /&gt;
Documentation is at: https://reveng.sourceforge.io/readme.htm&lt;br /&gt;
Download the .zip in the latest releases folder: https://sourceforge.net/projects/reveng/files/2.1.1/&lt;br /&gt;
Follow instructions to make&lt;br /&gt;
===Provide reveng four good packets===&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
You will get data that looks like this below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;00FF2A55002330FFFFFFFFFFFF50CF5DD9E2C0B80065F5D1A483F0FBBC6F01001E6C043B517E90B286&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You need to remove the first 6 bytes and provide the rest as inputs to reveng, CRC isn't calculated on those bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;00FF2A550023 &amp;lt;-- Discard | 30FFFFFFFFFFFF50CF5DD9E2C0B80065F5D1A483F0FBBC6F01001E6C043B517E90B286&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now provide four samples to reveng&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;./reveng -w 16 -s 30FFFFFFFFFFFF50CF5DD9E2C0B80065F5D1A483F0FBBC6F01001E6C043B517E90B286 30FFFFFFFFFFFF50CF2DD9E560560065F5D5A483F0C000650100176C033FF77E901766 30FFFFFFFFFFFF50CF95D9E5E01A0065F5D9A483F0515A0201001E6C042A177E90BDA4 30FFFFFFFFFFFF50CF8DD9E6A0F00065F5EBA483F0EBFD4A0100206C0433A97E90B04C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should get the following output below if you used this data to test&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;width=16  poly=0x1021  init=0x5fd6  refin=false  refout=false  xorout=0x0000  check=0x139e  residue=0x0000  name=(none)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The init value is what you enter into the GridStream block, you can now enable the CRC and know you have correct data!&lt;br /&gt;
&lt;br /&gt;
{{#widget:CRCprefix}}&lt;/div&gt;</summary>
		<author><name>L0scher</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Gr-smart_meters_Setup_on_other_distros&amp;diff=2246</id>
		<title>Gr-smart meters Setup on other distros</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Gr-smart_meters_Setup_on_other_distros&amp;diff=2246"/>
		<updated>2024-02-08T13:19:10Z</updated>

		<summary type="html">&lt;p&gt;L0scher: /* Arch */ fixed formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [[Gr-smart meters Setup Guide]] describes how to build the gr-smart meters setup on Ubuntu.  This page documents how to do so on other Linux distributions.&lt;br /&gt;
&lt;br /&gt;
== Arch ==&lt;br /&gt;
This is a container file (for use with Docker or Podman) that shows how to build the relevant modules under Arch Linux.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;docker&amp;quot;&amp;gt;&lt;br /&gt;
FROM archlinux:base-20240101.0.204074&lt;br /&gt;
RUN mkdir -p /tmp/work&lt;br /&gt;
WORKDIR /tmp/work&lt;br /&gt;
RUN pacman --noconfirm -Sy git make cmake gcc gnuradio boost doxygen graphviz pybind11&lt;br /&gt;
RUN git clone https://github.com/sandialabs/gr-pdu_utils.git&lt;br /&gt;
RUN git clone https://github.com/sandialabs/gr-timing_utils.git&lt;br /&gt;
RUN git clone https://github.com/sandialabs/gr-fhss_utils.git&lt;br /&gt;
RUN for fn in * ; do pushd $fn &amp;amp;&amp;amp; git checkout maint-3.10 &amp;amp;&amp;amp; popd ; done&lt;br /&gt;
WORKDIR /tmp/work/gr-pdu_utils&lt;br /&gt;
RUN git fetch origin refs/pull/23/head:pull_23&lt;br /&gt;
RUN git checkout pull_23&lt;br /&gt;
RUN cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
WORKDIR /tmp/work/gr-timing_utils&lt;br /&gt;
RUN git fetch origin refs/pull/9/head:pull_9&lt;br /&gt;
RUN git checkout pull_9&lt;br /&gt;
RUN cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
WORKDIR /tmp/work/gr-fhss_utils&lt;br /&gt;
RUN cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To run these commands on a real distribution (that is, not in a container), you can simply execute each &amp;quot;RUN&amp;quot; command exactly as it appears and then substitute `cd` commands for the &amp;quot;WORKDIR&amp;quot; lines.  You can ignore the &amp;quot;FROM&amp;quot; line.  You will want to adjust the directories for your own computer.&lt;/div&gt;</summary>
		<author><name>L0scher</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Gr-smart_meters_Setup_on_other_distros&amp;diff=2245</id>
		<title>Gr-smart meters Setup on other distros</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Gr-smart_meters_Setup_on_other_distros&amp;diff=2245"/>
		<updated>2024-02-08T13:17:20Z</updated>

		<summary type="html">&lt;p&gt;L0scher: added instructions for how to build on Arch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [[Gr-smart meters Setup Guide]] describes how to build the gr-smart meters setup on Ubuntu.  This page documents how to do so on other Linux distributions.&lt;br /&gt;
&lt;br /&gt;
== Arch ==&lt;br /&gt;
This is a container file (for use with Docker or Podman) that shows how to build the relevant modules under Arch Linux.&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
FROM archlinux:base-20240101.0.204074&lt;br /&gt;
RUN mkdir -p /tmp/work&lt;br /&gt;
WORKDIR /tmp/work&lt;br /&gt;
RUN pacman --noconfirm -Sy git make cmake gcc gnuradio boost doxygen graphviz pybind11&lt;br /&gt;
RUN git clone https://github.com/sandialabs/gr-pdu_utils.git&lt;br /&gt;
RUN git clone https://github.com/sandialabs/gr-timing_utils.git&lt;br /&gt;
RUN git clone https://github.com/sandialabs/gr-fhss_utils.git&lt;br /&gt;
RUN for fn in * ; do pushd $fn &amp;amp;&amp;amp; git checkout maint-3.10 &amp;amp;&amp;amp; popd ; done&lt;br /&gt;
WORKDIR /tmp/work/gr-pdu_utils&lt;br /&gt;
RUN git fetch origin refs/pull/23/head:pull_23&lt;br /&gt;
RUN git checkout pull_23&lt;br /&gt;
RUN cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
WORKDIR /tmp/work/gr-timing_utils&lt;br /&gt;
RUN git fetch origin refs/pull/9/head:pull_9&lt;br /&gt;
RUN git checkout pull_9&lt;br /&gt;
RUN cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
WORKDIR /tmp/work/gr-fhss_utils&lt;br /&gt;
RUN cmake -B build &amp;amp;&amp;amp; cmake --build build -t install&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
To run these commands on a real distribution (that is, not in a container), you can simply execute each &amp;quot;RUN&amp;quot; command exactly as it appears and then substitute `cd` commands for the &amp;quot;WORKDIR&amp;quot; lines.  You can ignore the &amp;quot;FROM&amp;quot; line.  You will want to adjust the directories for your own computer.&lt;/div&gt;</summary>
		<author><name>L0scher</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Electronic_Tools&amp;diff=1942</id>
		<title>Electronic Tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Electronic_Tools&amp;diff=1942"/>
		<updated>2023-10-07T13:10:38Z</updated>

		<summary type="html">&lt;p&gt;L0scher: corrected plural of radio&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;templatestyles src=&amp;quot;Template:Main_page/styles.css&amp;quot; /&amp;gt;&lt;br /&gt;
[[File:Electronic Tools.jpeg|thumb|Oscilloscope and various multimeters]]&lt;br /&gt;
Multimeters, Function Generators, Oscilloscopes, Logic Analyzers, Spectrum Analyzers, Software Defined Radios and Open Source/Community Designed Tools. If you used it while reverse engineering, list it here!&lt;br /&gt;
==Tool Index==&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;tools_row1&amp;quot; class=&amp;quot;mainpage_row&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;mainpage_box&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;h3&amp;gt;[[File:OOjs UI icon viewCompact.png|link=|alt=|20x20px]] &amp;lt;span&amp;gt;Software Defined Radios&amp;lt;/span&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
		&amp;lt;div id=&amp;quot;Electronic_Tools-SDR&amp;quot; title=&amp;quot;Software Defined Radios&amp;quot; class=&amp;quot;items&amp;quot;&amp;gt;&lt;br /&gt;
[https://www.rtl-sdr.com/about-rtl-sdr/ RTL-SDR] - Very low cost (~$30) receiver operating from about 52MHz to 2200MHz.&lt;br /&gt;
&lt;br /&gt;
[https://www.sdrplay.com/rsp1a/ SDRPlay RSP1a] - Medium cost (~$160) receiver operating from 100 Khz to 2000 MHZ. Device includes a lot of selectable filters (to cancel broadcast FM, WiFi interference, PC interference etc).&lt;br /&gt;
&lt;br /&gt;
[https://greatscottgadgets.com/hackrf/one/ HackRF One] - Capable of transmission or reception of radio signals from 1 MHz to 6 GHz. Open source hardware platform that can be used as a USB peripheral or programmed for stand-alone operation. Cost ~$340&lt;br /&gt;
&lt;br /&gt;
[https://www.ettus.com/all-products/ub200-kit/ Ettus Research USRP B200] - Universal Software Radio Peripheral with continuous frequency coverage from 70 MHz –6 GHz. Wider bandwidth and higher resolution ADC/DAC than the HackRF; cost with enclosure ~$875.&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;div class=&amp;quot;mainpage_box&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;h3&amp;gt;[[File:OOjs UI icon viewCompact.png|link=|alt=|20x20px]] &amp;lt;span&amp;gt;Debugging Tools&amp;lt;/span&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
		&amp;lt;div id=&amp;quot;Debugging_Tools&amp;quot; title=&amp;quot;Debugging Tools&amp;quot; class=&amp;quot;items&amp;quot;&amp;gt;&lt;br /&gt;
[[JTAGulator]] - open source hardware tool that assists in identifying OCD connections from test points, vias, or component pads on a target device.&lt;br /&gt;
&lt;br /&gt;
[https://www.tincantools.com/product/flyswatter2/ FlySwatter2] - In-circuit JTAG debugger and programmer.&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;tools_row2&amp;quot; class=&amp;quot;mainpage_row&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;mainpage_box&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;h3&amp;gt;[[File:OOjs UI icon viewCompact.png|link=|alt=|20x20px]] &amp;lt;span&amp;gt;Test Enclosures&amp;lt;/span&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
		&amp;lt;div id=&amp;quot;Test_Enclosures&amp;quot; title=&amp;quot;Test Enclosures&amp;quot; class=&amp;quot;items&amp;quot;&amp;gt;&lt;br /&gt;
[[Ramsey STE-3000 Shielded Test Enclosure]] - Faraday cage for isolating RF signals&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;mainpage_box&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;h3&amp;gt;[[File:OOjs UI icon viewCompact.png|link=|alt=|20x20px]] &amp;lt;span&amp;gt;IC Decapsulating&amp;lt;/span&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
		&amp;lt;div id=&amp;quot;IC_Decapsulating&amp;quot; title=&amp;quot;IC Decapsulating&amp;quot; class=&amp;quot;items&amp;quot;&amp;gt;&lt;br /&gt;
[[B&amp;amp;G International Decapsulator Model 250]] - Acid etching decapsulation tool from the early 2000's&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>L0scher</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Mechanical_Tools&amp;diff=1941</id>
		<title>Mechanical Tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Mechanical_Tools&amp;diff=1941"/>
		<updated>2023-10-07T12:52:36Z</updated>

		<summary type="html">&lt;p&gt;L0scher: /* USB microscopes */ Added several kinds of inexpensive magnification devices.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Mechanical Tools.jpeg|thumb|Lathe and drill press]]&lt;br /&gt;
Grinders, Drills, Lathes, Milling Machines, Welders and any other tools used to modify hardware. If you used it while reverse engineering, list it here!&lt;br /&gt;
==Tool Index==&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Essential tools and consumables for manipulating PCBAs (Printed Circuit Board Assemblies)==&lt;br /&gt;
&lt;br /&gt;
===Soldering Irons===&lt;br /&gt;
&lt;br /&gt;
====Knockoff JBC station with original JBC soldering tips====&lt;br /&gt;
Fix me: Photos and text&lt;br /&gt;
&lt;br /&gt;
====Weller Station====&lt;br /&gt;
Fix me: Photos and text&lt;br /&gt;
&lt;br /&gt;
===Tweezers===&lt;br /&gt;
Manipulating PCBAs often involves handling small and/or hot components while soldering. Most types of tweezers are made of some kind of steel, which can make them susceptible to get magnetized, which is not ideal if that is not done intentionally by using a magnetize tool. This accidental magnetization can be avoided by using tweezers made of titanium. The minimal set of tweezers should consist of following types:&lt;br /&gt;
&lt;br /&gt;
====Straight, fine tweezers====&lt;br /&gt;
&lt;br /&gt;
====Angled, fine tweezers====&lt;br /&gt;
&lt;br /&gt;
====Straight, coarse tweezers with riffles====&lt;br /&gt;
This type of tweezers come in handy when something has to be gripped securely in order to be able to bend / shape them in a controlled manner. These tweezers have a thick metal parts that are not easily bend out of shape like the fine tweezers.&lt;br /&gt;
&lt;br /&gt;
====Straight, self-holding tweezers====&lt;br /&gt;
&lt;br /&gt;
===Scalpels===&lt;br /&gt;
There are many types of straight edged and round edged scalpels beside the ones listed below. The one mentioned here are the essential types needed to attach botch wires and sniffing wires to signal tracks covered by solder mask. The fixed connection between the handle and the blade of the disposable version makes this type of scalpel a little bit more precise than the scalpel handle with exchangeable blades. Naughty people even cut through pins of ICs with scalpels to remove ICs without the use of a heat-gun, but you didn't read that here, as that dulls a blade pretty quickly and should only be used in a pinch. &lt;br /&gt;
&lt;br /&gt;
====Straight edged scalpels====&lt;br /&gt;
[[Image:ScalpelNo11.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
The sharp tip of this type of scalpel makes it ideal to cut the conductor track without nicking nearby tracks. The blade #11 has a short, straight edge that gives good control over the cut. &lt;br /&gt;
&lt;br /&gt;
====Round edged scalpels====&lt;br /&gt;
[[Image:ScalpelNo23.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
The copper tracks on the top layer of a PCB are usually covered with a layer of (green) solder mask, which can be carefully scraped away from the portions of the track that are about to be soldered to say attach a wire. The round shape of the blade #23 (there are other blades with a rounded edge) allows the user to only remove the solder mask from the track of interest, which will make the soldering process later on very easy, since the remaining solder mask will prevent the solder to stick to the covered tracks. Exposing the other tracks by scraping too much solder mask away may result in a much more difficult soldering job.&lt;br /&gt;
&lt;br /&gt;
===Soldering Flux===&lt;br /&gt;
Soldering flux is the magic ingredient for a soldering job with many functions that makes it a breeze. It cleans and de-greases the components, promotes wetting (makes solder stick to the components instead of balling up) and reduces oxidation. The &amp;quot;tacky&amp;quot; variety also helps to keep the component in place so the usual step of &amp;quot;tacking down&amp;quot; a component can be skipped with enough soldering skill.&lt;br /&gt;
&lt;br /&gt;
===Soldering Fixtures / work piece holders===&lt;br /&gt;
====Soldering Fixtures for flat, smartphone sized PCBAs====&lt;br /&gt;
Fix me&lt;br /&gt;
&lt;br /&gt;
====Work piece holders for PCBAs with large TH (through hole) components====&lt;br /&gt;
&lt;br /&gt;
=====Panavise 333=====&lt;br /&gt;
Fix me&lt;br /&gt;
&lt;br /&gt;
===Magnification devices===&lt;br /&gt;
&lt;br /&gt;
==== Eye Loupe ====&lt;br /&gt;
A simple 7x eye loupe is a small, useful tool for examining small parts.  There are single monocular loupes, or for a bit higher cost, head-mounted eyeglass style stereoscopic loupes which may or may not feature replaceable optics.&lt;br /&gt;
&lt;br /&gt;
==== Headband magnifier ====&lt;br /&gt;
There are many kinds of head-mounted stereoscopic or single-element magnifying devices available.  Some are equipped with LED lights, which is handy but not strictly necessary.  The picture below shows one that was purchased from a discount tool store for less than US$10.&lt;br /&gt;
[[File:Headband magnifier.jpg|none|thumb|headband magnifier]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====USB microscopes====&lt;br /&gt;
A microscope is handy for examining small parts or PCB traces.  There are many inexpensive ones available.  A stand is very useful as well for both precise positioning and to keep the camera steady.&lt;br /&gt;
[[File:USB microscope with stand.jpg|none|thumb|USB microscope with stand]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Advanced tools for manipulating PCBAs==&lt;br /&gt;
&lt;br /&gt;
===Magnification devices===&lt;br /&gt;
&lt;br /&gt;
====Stereoscopic microscope (analog)====&lt;br /&gt;
&lt;br /&gt;
=====AmScope SM-4NTP=====&lt;br /&gt;
This stereo microscope has a lockable double arm boom stand and a magnification range of 7X to 45X (zoom) and is great for component level repairs / modifications. The boom stand allows to quickly change between the normal view onto the work piece in the soldering fixture and a side-view while holding the work piece in the hand without the need to touch the focus and magnifications settings. You just pull out the head over the edge of the table to have room to turn the work piece in the hand to be able to get a side-view of pin-less IC-packages or other things that are difficult to see in the normal view.&lt;br /&gt;
&lt;br /&gt;
Fix me: add photos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Stereoscopic microscope (digital)====&lt;br /&gt;
Fix me: add links and photos&lt;br /&gt;
&lt;br /&gt;
=====The Stereo Ninja Project=====&lt;br /&gt;
Fix me: add links and photos&lt;/div&gt;</summary>
		<author><name>L0scher</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:Headband_magnifier.jpg&amp;diff=1940</id>
		<title>File:Headband magnifier.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:Headband_magnifier.jpg&amp;diff=1940"/>
		<updated>2023-10-07T12:42:25Z</updated>

		<summary type="html">&lt;p&gt;L0scher: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;headband magnifier&lt;/div&gt;</summary>
		<author><name>L0scher</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:USB_microscope_with_stand.jpg&amp;diff=1939</id>
		<title>File:USB microscope with stand.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:USB_microscope_with_stand.jpg&amp;diff=1939"/>
		<updated>2023-10-07T12:39:57Z</updated>

		<summary type="html">&lt;p&gt;L0scher: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;USB microscope with stand&lt;/div&gt;</summary>
		<author><name>L0scher</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Silver_Spring_Networks_Protocol&amp;diff=1718</id>
		<title>Silver Spring Networks Protocol</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Silver_Spring_Networks_Protocol&amp;diff=1718"/>
		<updated>2022-06-11T18:14:41Z</updated>

		<summary type="html">&lt;p&gt;L0scher: Added more information about the Itron/SSN traffic&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Data capture from a Silver Spring Networks smart meter that was initially powered on. The text is very wide so open the file in a text editor, it won't look right in the browser most likely.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Initial capture of data - small file'''&lt;br /&gt;
&lt;br /&gt;
[https://wiki.recessim.com/w/images/2/24/Silver_Spring_Networks_Smart_Meter_00135005008C900A.txt Silver_Spring_Networks_Smart_Meter_00135005008C900A.txt]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''170 samples sorted by &amp;quot;Mask&amp;quot; column, notice the data appears similar for each mask, need to figure out how it's being transformed.'''&lt;br /&gt;
&lt;br /&gt;
[https://wiki.recessim.com/w/images/4/40/Silver_Spring_Networks_Extended_Parsed_02-22-2022_00135005008C900A.txt Silver_Spring_Networks_Extended_Parsed_02-22-2022_00135005008C900A.txt]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Capturing Itron/SSN traffic===&lt;br /&gt;
In 2012 a permissive change was filed at the FCC to certify and document an RF mode not initially supported.  Specifically, it uses 2-FSK over 64 channels from 902.4MHz to 927.6MHz (inclusive) and a data rate of 150kbps.  This appears to be the predominantly used mode today among such devices.  A summary of all modes of FCC ID SK9AMI7 are shown below.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Modulation&lt;br /&gt;
!Frequency range (MHz)&lt;br /&gt;
!Number of channels&lt;br /&gt;
!Channel separation (kHz)&lt;br /&gt;
!Data rates supported (kbps)&lt;br /&gt;
|-&lt;br /&gt;
|FSK&lt;br /&gt;
|902.25 - 927.75&lt;br /&gt;
|52&lt;br /&gt;
|500&lt;br /&gt;
|19.2&lt;br /&gt;
|-&lt;br /&gt;
|FSK&lt;br /&gt;
|902.25 - 927.75&lt;br /&gt;
|52&lt;br /&gt;
|500&lt;br /&gt;
|152.3&lt;br /&gt;
|-&lt;br /&gt;
|OOK&lt;br /&gt;
|909.6 - 921.8&lt;br /&gt;
|50&lt;br /&gt;
|200&lt;br /&gt;
|16.4&lt;br /&gt;
|-&lt;br /&gt;
|FSK&lt;br /&gt;
|902.4 - 927.6&lt;br /&gt;
|64&lt;br /&gt;
|400&lt;br /&gt;
|150.0&lt;br /&gt;
|}&lt;br /&gt;
The following capture file was created using this gnuradio file.  It has the 64 channels explicitly listed within the Center Freq Estimation block.  It uses a syncword of 0xAAAAAAAA (which is probably too short) and makes the assumption that data is transmitted most significant bit first, but this is an unverified guess.  No checking is done of the packets, so there are very likely to be many packets with errors.  In looking through this capture file, the majority of packets start with &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
aa aa aa aa aa aa aa aa de 9d 27 27 16 66 f0 6c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For that reason, it's likely that those packets are probably mostly correct, while the others should be viewed with suspicion.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Meter data capture.grc.txt|left|thumb|capture grc file (rename from txt to just .grc to run)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Raw itron packet dump.zip|left|thumb|Raw dump of an Itron/Silver Springs Networks network.]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>L0scher</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Silver_Spring_Networks_Protocol&amp;diff=1717</id>
		<title>Silver Spring Networks Protocol</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Silver_Spring_Networks_Protocol&amp;diff=1717"/>
		<updated>2022-06-11T17:52:39Z</updated>

		<summary type="html">&lt;p&gt;L0scher: add grc file for capturing Itron data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Data capture from a Silver Spring Networks smart meter that was initially powered on. The text is very wide so open the file in a text editor, it won't look right in the browser most likely.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Initial capture of data - small file'''&lt;br /&gt;
&lt;br /&gt;
[https://wiki.recessim.com/w/images/2/24/Silver_Spring_Networks_Smart_Meter_00135005008C900A.txt Silver_Spring_Networks_Smart_Meter_00135005008C900A.txt]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''170 samples sorted by &amp;quot;Mask&amp;quot; column, notice the data appears similar for each mask, need to figure out how it's being transformed.'''&lt;br /&gt;
&lt;br /&gt;
[https://wiki.recessim.com/w/images/4/40/Silver_Spring_Networks_Extended_Parsed_02-22-2022_00135005008C900A.txt Silver_Spring_Networks_Extended_Parsed_02-22-2022_00135005008C900A.txt]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following capture file was created using this gnuradio file:&lt;br /&gt;
[[File:Meter data capture.grc.txt|left|thumb|capture grc file (rename from txt to just .grc to run)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Raw itron packet dump.zip|left|thumb|Raw dump of an Itron/Silver Springs Networks network.]]&lt;br /&gt;
'''2950 sample packets in a zip file (one file per packet)'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>L0scher</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:Meter_data_capture.grc.txt&amp;diff=1716</id>
		<title>File:Meter data capture.grc.txt</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:Meter_data_capture.grc.txt&amp;diff=1716"/>
		<updated>2022-06-11T17:50:20Z</updated>

		<summary type="html">&lt;p&gt;L0scher: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Derived from fhss_detector_reference for capturing Itron meter network traffic&lt;/div&gt;</summary>
		<author><name>L0scher</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Silver_Spring_Networks_Protocol&amp;diff=1715</id>
		<title>Silver Spring Networks Protocol</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Silver_Spring_Networks_Protocol&amp;diff=1715"/>
		<updated>2022-06-11T17:38:30Z</updated>

		<summary type="html">&lt;p&gt;L0scher: added zip file capture&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Data capture from a Silver Spring Networks smart meter that was initially powered on. The text is very wide so open the file in a text editor, it won't look right in the browser most likely.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Initial capture of data - small file'''&lt;br /&gt;
&lt;br /&gt;
[https://wiki.recessim.com/w/images/2/24/Silver_Spring_Networks_Smart_Meter_00135005008C900A.txt Silver_Spring_Networks_Smart_Meter_00135005008C900A.txt]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''170 samples sorted by &amp;quot;Mask&amp;quot; column, notice the data appears similar for each mask, need to figure out how it's being transformed.'''&lt;br /&gt;
&lt;br /&gt;
[https://wiki.recessim.com/w/images/4/40/Silver_Spring_Networks_Extended_Parsed_02-22-2022_00135005008C900A.txt Silver_Spring_Networks_Extended_Parsed_02-22-2022_00135005008C900A.txt]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Raw itron packet dump.zip|left|thumb|Raw dump of an Itron/Silver Springs Networks network.]]&lt;br /&gt;
'''2950 sample packets in a zip file (one file per packet)'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>L0scher</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:Raw_itron_packet_dump.zip&amp;diff=1714</id>
		<title>File:Raw itron packet dump.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:Raw_itron_packet_dump.zip&amp;diff=1714"/>
		<updated>2022-06-11T16:57:17Z</updated>

		<summary type="html">&lt;p&gt;L0scher: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This contains 2950 packets that were captured over the air on 11 June 2022.  Many are likely to have errors or corruption.&lt;/div&gt;</summary>
		<author><name>L0scher</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Landis%2BGyr_GridStream_Protocol&amp;diff=1443</id>
		<title>Landis+Gyr GridStream Protocol</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Landis%2BGyr_GridStream_Protocol&amp;diff=1443"/>
		<updated>2021-05-07T20:47:55Z</updated>

		<summary type="html">&lt;p&gt;L0scher: /* Packet Structure */ Added link to open source gpsdecode library&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:LandisGyrResidentialMeter1.JPG|thumb]]&lt;br /&gt;
&lt;br /&gt;
==Protocol Analysis==&lt;br /&gt;
Analysis and decoding of the packets used on the Landis+Gyr GridStream mesh network.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===Packet Structure===&lt;br /&gt;
&lt;br /&gt;
====Sync and Header====&lt;br /&gt;
----The sync word that the Landis+Gyr smart meters send is shown below, this can be used in GNU Radio or other tools to receive only packets transmitted by the meters. Note that at the start of the header we begin using start and stop bits. These must be stripped off of the rest of the data packet during processing.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Sync and Header&lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; |Sync&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |Header&lt;br /&gt;
|-&lt;br /&gt;
!0xAA&lt;br /&gt;
!0xAA&lt;br /&gt;
!0xAA&lt;br /&gt;
!0xAA&lt;br /&gt;
!0xAA&lt;br /&gt;
!0xA&lt;br /&gt;
!0x00&lt;br /&gt;
!0xFF&lt;br /&gt;
!0x2A&lt;br /&gt;
|-&lt;br /&gt;
|10101010&lt;br /&gt;
|10101010&lt;br /&gt;
|10101010&lt;br /&gt;
|10101010&lt;br /&gt;
|10101010&lt;br /&gt;
|1010&lt;br /&gt;
|0 '''00000000''' 1&lt;br /&gt;
|0 '''11111111''' 1&lt;br /&gt;
|0 '''00101010''' 1&lt;br /&gt;
|}&lt;br /&gt;
Using GNU Radio it was found that shortening the Sync requirements a bit and incorporating part of the header leads to the cleanest data for further downstream processing. The modified sync shown in 8 bit chunks is shown below.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Sync Word used with GNURadio&lt;br /&gt;
!0xAA&lt;br /&gt;
!0xAA&lt;br /&gt;
!0xAA&lt;br /&gt;
!0xAA&lt;br /&gt;
!0xA0&lt;br /&gt;
!0x05&lt;br /&gt;
!0xFF&lt;br /&gt;
|-&lt;br /&gt;
|10101010&lt;br /&gt;
|10101010&lt;br /&gt;
|10101010&lt;br /&gt;
|10101010&lt;br /&gt;
|10100000&lt;br /&gt;
|00000101&lt;br /&gt;
|11111111&lt;br /&gt;
|}&lt;br /&gt;
The final byte of the sync (0x2A) along with it's start and stop bits are discarded as part of the processing.&lt;br /&gt;
----&amp;lt;br /&amp;gt;&lt;br /&gt;
====Type, Length and Sub Type====&lt;br /&gt;
----So far only two types of packets have been observed, a 0x55 and a 0xD5 packet. Multiple lengths and SubTypes of these are listed below.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!&lt;br /&gt;
!Type&lt;br /&gt;
!Length&lt;br /&gt;
!SubType&lt;br /&gt;
!Packets Purpose&lt;br /&gt;
|-&lt;br /&gt;
!1&lt;br /&gt;
|0x55&lt;br /&gt;
|0x0023&lt;br /&gt;
|0x30&lt;br /&gt;
|Report up-time and other unknown data&lt;br /&gt;
|-&lt;br /&gt;
!2&lt;br /&gt;
|0x55&lt;br /&gt;
|0x0028&lt;br /&gt;
|0x30&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!3&lt;br /&gt;
|0xD5&lt;br /&gt;
|0x0011&lt;br /&gt;
|0x21&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!4&lt;br /&gt;
|0xD5&lt;br /&gt;
|0x0011&lt;br /&gt;
|0x22&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!5&lt;br /&gt;
|0xD5&lt;br /&gt;
|0x0011&lt;br /&gt;
|0x29&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!6&lt;br /&gt;
|0xD5&lt;br /&gt;
|0x0016&lt;br /&gt;
|0x21&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!8&lt;br /&gt;
|0xD5&lt;br /&gt;
|0x0016&lt;br /&gt;
|0x29&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!7&lt;br /&gt;
|0xD5&lt;br /&gt;
|0x0017&lt;br /&gt;
|0x21&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!9&lt;br /&gt;
|0xD5&lt;br /&gt;
|0x0017&lt;br /&gt;
|0x29&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!10&lt;br /&gt;
|0xD5&lt;br /&gt;
|0x001C&lt;br /&gt;
|0x21&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!11&lt;br /&gt;
|0xD5&lt;br /&gt;
|0x001C&lt;br /&gt;
|0x29&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!12&lt;br /&gt;
|0xD5&lt;br /&gt;
|0x001D&lt;br /&gt;
|0x29&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!13&lt;br /&gt;
|0xD5&lt;br /&gt;
|0x0047&lt;br /&gt;
|0x51&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!14&lt;br /&gt;
|0xD5&lt;br /&gt;
|0x00FD&lt;br /&gt;
|0xC0&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
----&amp;lt;br /&amp;gt;&lt;br /&gt;
====Data====&lt;br /&gt;
----Data varies per packet type but a common theme is the 0x55 packets appear to be broadcasts from the meters with only their own ID. 0xD5 packets usually contain two ID's and appear to be how data is routed across the network. Sometimes one of the meter ID's in a 0xD5 packet is FFFFFFFF which may be a broadcast packet. This was observed when packets were sent that appear to be updating the system time of the meters.&lt;br /&gt;
----&amp;lt;br /&amp;gt;&lt;br /&gt;
====Checksum====&lt;br /&gt;
----&lt;br /&gt;
C++ source code below used to calculate the CRC, different energy providers use a different initial CRC value. Assume this is to segment traffic, unsure if Routers/Collectors are shared by different providers to return traffic or not. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
uint16_t Landis_crc16 (uint16_t crc, const std::vector&amp;lt;uint8_t&amp;gt; &amp;amp;data, size_t size) { &lt;br /&gt;
// CoServ CRC = 0x45F8 &lt;br /&gt;
// Oncor CRC = 0x5FD6 &lt;br /&gt;
// Hard coded Poly 0x1021&lt;br /&gt;
    uint16_t i = 0;&lt;br /&gt;
    while (size--) {&lt;br /&gt;
        crc ^= data[i] &amp;lt;&amp;lt; 8; &lt;br /&gt;
        i++; &lt;br /&gt;
        for (unsigned k = 0; k &amp;lt; 8; k++) &lt;br /&gt;
            crc = crc &amp;amp; 0x8000 ? (crc &amp;lt;&amp;lt; 1) ^ 0x1021 : crc &amp;lt;&amp;lt; 1;&lt;br /&gt;
    }&lt;br /&gt;
    return crc; &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Captured Meter Data===&lt;br /&gt;
There have been two packet types observed thus far, a 0x55 and a 0xD5 packet.&lt;br /&gt;
&lt;br /&gt;
*0x55 appears to be broadcasts from the meters and happen frequently. They have been observed multiple times per minute from a single meter.&lt;br /&gt;
&lt;br /&gt;
*0xD5 appears to be a packet for transporting data across the mesh network. Each D5 packet will contain two meter ID's, Meter ID #1 and Meter ID #2. There are many 0xD5 packet length and types that have been observed, some are shown below.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====0x55 Meter Data====&lt;br /&gt;
The data below was captured from the same meter (F0EE36DB) and shows some of the values that can change with each transmission. Different meters have different fixed data and some of the data changes less frequently as well.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
0x55 Captured packets from Meter F0EE36DB (Oncor)&lt;br /&gt;
! rowspan=&amp;quot;3&amp;quot; |Pkt&lt;br /&gt;
!1&lt;br /&gt;
!2&lt;br /&gt;
!3&lt;br /&gt;
!4&lt;br /&gt;
!5&lt;br /&gt;
!6&lt;br /&gt;
!7&lt;br /&gt;
!8&lt;br /&gt;
!9&lt;br /&gt;
!10&lt;br /&gt;
!11&lt;br /&gt;
!12&lt;br /&gt;
!13&lt;br /&gt;
!14&lt;br /&gt;
!15&lt;br /&gt;
!16&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |Not part of CRC calc&lt;br /&gt;
! colspan=&amp;quot;11&amp;quot; |Data&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
!Header&lt;br /&gt;
!Type&lt;br /&gt;
!Length&lt;br /&gt;
!SubType&lt;br /&gt;
!Unknown&lt;br /&gt;
!WAN Address&lt;br /&gt;
!Counter&lt;br /&gt;
!Uptime&lt;br /&gt;
!Unknown&lt;br /&gt;
!LAN Address&lt;br /&gt;
!Unknown&lt;br /&gt;
!Unknown&lt;br /&gt;
!Timing &lt;br /&gt;
(0.01 increments)&lt;br /&gt;
!Unknown&lt;br /&gt;
!Checksum&lt;br /&gt;
!Trailing&lt;br /&gt;
|-&lt;br /&gt;
!1&lt;br /&gt;
|00FF2A&lt;br /&gt;
|55&lt;br /&gt;
|0023&lt;br /&gt;
|30&lt;br /&gt;
|FFFFFFFFFFFF&lt;br /&gt;
|50CF8DD9E2C0&lt;br /&gt;
|'''0C'''&lt;br /&gt;
|'''0001ECBF'''&lt;br /&gt;
|A483&lt;br /&gt;
|F0EE36DB&lt;br /&gt;
|0100&lt;br /&gt;
|213204&lt;br /&gt;
|'''384F'''&lt;br /&gt;
|7E80&lt;br /&gt;
|0896&lt;br /&gt;
|04&lt;br /&gt;
|-&lt;br /&gt;
!2&lt;br /&gt;
|00FF2A&lt;br /&gt;
|55&lt;br /&gt;
|0023&lt;br /&gt;
|30&lt;br /&gt;
|FFFFFFFFFFFF&lt;br /&gt;
|50CF8DD9E2C0&lt;br /&gt;
|'''16'''&lt;br /&gt;
|'''0001ECC6'''&lt;br /&gt;
|A483&lt;br /&gt;
|F0EE36DB&lt;br /&gt;
|0100&lt;br /&gt;
|213204&lt;br /&gt;
|'''3AC5'''&lt;br /&gt;
|7E80&lt;br /&gt;
|F47E&lt;br /&gt;
|04&lt;br /&gt;
|-&lt;br /&gt;
!3&lt;br /&gt;
|00FF2A&lt;br /&gt;
|55&lt;br /&gt;
|0023&lt;br /&gt;
|30&lt;br /&gt;
|FFFFFFFFFFFF&lt;br /&gt;
|50CF8DD9E2C0&lt;br /&gt;
|'''2A'''&lt;br /&gt;
|'''0001ED05'''&lt;br /&gt;
|A483&lt;br /&gt;
|F0EE36DB&lt;br /&gt;
|0100&lt;br /&gt;
|213204&lt;br /&gt;
|'''1207'''&lt;br /&gt;
|7E80&lt;br /&gt;
|A412&lt;br /&gt;
|04&lt;br /&gt;
|-&lt;br /&gt;
!4&lt;br /&gt;
|00FF2A&lt;br /&gt;
|55&lt;br /&gt;
|0023&lt;br /&gt;
|30&lt;br /&gt;
|FFFFFFFFFFFF&lt;br /&gt;
|50CF8DD9E2C0&lt;br /&gt;
|'''34'''&lt;br /&gt;
|'''0001ED29'''&lt;br /&gt;
|A483&lt;br /&gt;
|F0EE36DB&lt;br /&gt;
|0100&lt;br /&gt;
|213204&lt;br /&gt;
|'''1FF9'''&lt;br /&gt;
|7E80&lt;br /&gt;
|D9C4&lt;br /&gt;
|04&lt;br /&gt;
|-&lt;br /&gt;
!5&lt;br /&gt;
|00FF2A&lt;br /&gt;
|55&lt;br /&gt;
|0023&lt;br /&gt;
|30&lt;br /&gt;
|FFFFFFFFFFFF&lt;br /&gt;
|50CF8DD9E2C0&lt;br /&gt;
|'''38'''&lt;br /&gt;
|'''0001ED37'''&lt;br /&gt;
|A483&lt;br /&gt;
|F0EE36DB&lt;br /&gt;
|0100&lt;br /&gt;
|213204&lt;br /&gt;
|'''2571'''&lt;br /&gt;
|7E80&lt;br /&gt;
|963C&lt;br /&gt;
|04&lt;br /&gt;
|-&lt;br /&gt;
!6&lt;br /&gt;
|00FF2A&lt;br /&gt;
|55&lt;br /&gt;
|0023&lt;br /&gt;
|30&lt;br /&gt;
|FFFFFFFFFFFF&lt;br /&gt;
|50CF8DD9E2C0&lt;br /&gt;
|'''42'''&lt;br /&gt;
|'''0001ED5C'''&lt;br /&gt;
|A483&lt;br /&gt;
|F0EE36DB&lt;br /&gt;
|0100&lt;br /&gt;
|213204&lt;br /&gt;
|'''33A9'''&lt;br /&gt;
|7E80&lt;br /&gt;
|8384&lt;br /&gt;
|04&lt;br /&gt;
|-&lt;br /&gt;
!7&lt;br /&gt;
|00FF2A&lt;br /&gt;
|55&lt;br /&gt;
|0023&lt;br /&gt;
|30&lt;br /&gt;
|FFFFFFFFFFFF&lt;br /&gt;
|50CF8DD9E2C0&lt;br /&gt;
|'''4C'''&lt;br /&gt;
|'''0001ED60'''&lt;br /&gt;
|A483&lt;br /&gt;
|F0EE36DB&lt;br /&gt;
|0100&lt;br /&gt;
|213204&lt;br /&gt;
|'''354D'''&lt;br /&gt;
|7E80&lt;br /&gt;
|2CB6&lt;br /&gt;
|04&lt;br /&gt;
|-&lt;br /&gt;
!8&lt;br /&gt;
|00FF2A&lt;br /&gt;
|55&lt;br /&gt;
|0023&lt;br /&gt;
|30&lt;br /&gt;
|FFFFFFFFFFFF&lt;br /&gt;
|50CF8DD9E2C0&lt;br /&gt;
|'''4E'''&lt;br /&gt;
|'''0001ED79'''&lt;br /&gt;
|A483&lt;br /&gt;
|F0EE36DB&lt;br /&gt;
|0100&lt;br /&gt;
|213204&lt;br /&gt;
|'''3F25'''&lt;br /&gt;
|7E80&lt;br /&gt;
|871A&lt;br /&gt;
|04&lt;br /&gt;
|-&lt;br /&gt;
!9&lt;br /&gt;
|00FF2A&lt;br /&gt;
|55&lt;br /&gt;
|0023&lt;br /&gt;
|30&lt;br /&gt;
|FFFFFFFFFFFF&lt;br /&gt;
|50CF8DD9E2C0&lt;br /&gt;
|'''60'''&lt;br /&gt;
|'''0001EDA6'''&lt;br /&gt;
|A483&lt;br /&gt;
|F0EE36DB&lt;br /&gt;
|0100&lt;br /&gt;
|213204&lt;br /&gt;
|'''0F05'''&lt;br /&gt;
|7E80&lt;br /&gt;
|25C9&lt;br /&gt;
|04&lt;br /&gt;
|-&lt;br /&gt;
!10&lt;br /&gt;
|00FF2A&lt;br /&gt;
|55&lt;br /&gt;
|0023&lt;br /&gt;
|30&lt;br /&gt;
|FFFFFFFFFFFF&lt;br /&gt;
|50CF8DD9E2C0&lt;br /&gt;
|'''6A'''&lt;br /&gt;
|'''0001EDCD'''&lt;br /&gt;
|A483&lt;br /&gt;
|F0EE36DB&lt;br /&gt;
|0100&lt;br /&gt;
|213204&lt;br /&gt;
|'''1E55'''&lt;br /&gt;
|7E80&lt;br /&gt;
|F33F&lt;br /&gt;
|04&lt;br /&gt;
|}&lt;br /&gt;
[[File:55 Packet Timing Analysis.png|thumb|600x600px|Field 15 Timing Analysis  -Anonymous]]&lt;br /&gt;
Commentary on the data fields above, they have been grouped based on sample analysis but this could be wrong. If you see a new pattern not noticed before you may be correct.&lt;br /&gt;
&lt;br /&gt;
*Field 5 - Never observed a packet with this length and subtype that wasn't all FF's&lt;br /&gt;
&lt;br /&gt;
*Field 6 - WAN Address - Oncor uses GPS coordinates, CoServ uses LAN with padding of some kind.  The open source [https://github.com/beroset/gpsdecode gpsdecode] library shows one way to translate between WAN Address and GPS coordinates. &lt;br /&gt;
&lt;br /&gt;
*Field 7 - Increments some amount with each transmission and rolls over at 0xFF, always an even hex value&lt;br /&gt;
&lt;br /&gt;
*Field 8 - Value in seconds since meter powered on, '''easy way to see last time the meter experienced a power outage.'''&lt;br /&gt;
*Field 10 - LAN Address, Meter ID that's listed on the sticker on the front&lt;br /&gt;
&lt;br /&gt;
'''** NEW **'''&lt;br /&gt;
&lt;br /&gt;
'''Field 13''' - Timing in hundredths of a second, counts from 0 to 167.99 (0x419F) seconds then rolls over to 0 again. Credit for this discovery goes to an anonymous reader who examined the dataset at the bottom of the page!!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+0x55 Captured packets from Meter 5021D005 (Coserv)&lt;br /&gt;
! rowspan=&amp;quot;3&amp;quot; |Pkt&lt;br /&gt;
!1&lt;br /&gt;
!2&lt;br /&gt;
!3&lt;br /&gt;
!4&lt;br /&gt;
!5&lt;br /&gt;
!6&lt;br /&gt;
!7&lt;br /&gt;
!8&lt;br /&gt;
!9&lt;br /&gt;
!10&lt;br /&gt;
!11&lt;br /&gt;
!12&lt;br /&gt;
!13&lt;br /&gt;
!14&lt;br /&gt;
!15&lt;br /&gt;
!16&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |Not part of CRC calc&lt;br /&gt;
! colspan=&amp;quot;11&amp;quot; |Data&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
!Header&lt;br /&gt;
!Type&lt;br /&gt;
!Length&lt;br /&gt;
!SubType&lt;br /&gt;
!Unknown&lt;br /&gt;
!WAN Address&lt;br /&gt;
!Counter&lt;br /&gt;
!Uptime&lt;br /&gt;
!Unknown&lt;br /&gt;
!LAN Address&lt;br /&gt;
!Unknown&lt;br /&gt;
!Unknown&lt;br /&gt;
!Timing &lt;br /&gt;
(0.01 increments)&lt;br /&gt;
!Unknown&lt;br /&gt;
!Checksum&lt;br /&gt;
!Trailing&lt;br /&gt;
|-&lt;br /&gt;
!1&lt;br /&gt;
|00FF2A&lt;br /&gt;
|55&lt;br /&gt;
|0023&lt;br /&gt;
|30&lt;br /&gt;
|FFFFFFFFFFFF&lt;br /&gt;
|FE5021D00500&lt;br /&gt;
|7C&lt;br /&gt;
|'''0003FB20'''&lt;br /&gt;
|A403&lt;br /&gt;
|5021D005&lt;br /&gt;
|'''0100'''&lt;br /&gt;
|'''072001'''&lt;br /&gt;
|1E56&lt;br /&gt;
|7E00&lt;br /&gt;
|9032&lt;br /&gt;
|04&lt;br /&gt;
|-&lt;br /&gt;
!2&lt;br /&gt;
|00FF2A&lt;br /&gt;
|55&lt;br /&gt;
|0023&lt;br /&gt;
|30&lt;br /&gt;
|FFFFFFFFFFFF&lt;br /&gt;
|FE5021D00500&lt;br /&gt;
|AE&lt;br /&gt;
|'''0003FB9E'''&lt;br /&gt;
|A403&lt;br /&gt;
|5021D005&lt;br /&gt;
|'''0100'''&lt;br /&gt;
|'''072001'''&lt;br /&gt;
|0DA8&lt;br /&gt;
|7E00&lt;br /&gt;
|83E8&lt;br /&gt;
|04&lt;br /&gt;
|-&lt;br /&gt;
!3&lt;br /&gt;
|00FF2A&lt;br /&gt;
|55&lt;br /&gt;
|0023&lt;br /&gt;
|30&lt;br /&gt;
|FFFFFFFFFFFF&lt;br /&gt;
|FE5021D00500&lt;br /&gt;
|B8&lt;br /&gt;
|'''0003FBC1'''&lt;br /&gt;
|A403&lt;br /&gt;
|5021D005&lt;br /&gt;
|'''0100'''&lt;br /&gt;
|'''072001'''&lt;br /&gt;
|1B54&lt;br /&gt;
|7E00&lt;br /&gt;
|2924&lt;br /&gt;
|04&lt;br /&gt;
|-&lt;br /&gt;
!4&lt;br /&gt;
|00FF2A&lt;br /&gt;
|55&lt;br /&gt;
|0023&lt;br /&gt;
|30&lt;br /&gt;
|FFFFFFFFFFFF&lt;br /&gt;
|FE5021D00500&lt;br /&gt;
|C0&lt;br /&gt;
|'''0003FC30'''&lt;br /&gt;
|A403&lt;br /&gt;
|5021D005&lt;br /&gt;
|'''0100'''&lt;br /&gt;
|'''072001'''&lt;br /&gt;
|052E&lt;br /&gt;
|7E00&lt;br /&gt;
|09FC&lt;br /&gt;
|04&lt;br /&gt;
|-&lt;br /&gt;
!5&lt;br /&gt;
|00FF2A&lt;br /&gt;
|55&lt;br /&gt;
|0023&lt;br /&gt;
|30&lt;br /&gt;
|FFFFFFFFFFFF&lt;br /&gt;
|FE5021D00500&lt;br /&gt;
|EA&lt;br /&gt;
|'''0003FC9F'''&lt;br /&gt;
|A403&lt;br /&gt;
|5021D005&lt;br /&gt;
|'''0100'''&lt;br /&gt;
|'''072001'''&lt;br /&gt;
|3062&lt;br /&gt;
|7E00&lt;br /&gt;
|C69A&lt;br /&gt;
|04&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;17&amp;quot; |Power restored after an outage&lt;br /&gt;
|-&lt;br /&gt;
!6&lt;br /&gt;
|00FF2A&lt;br /&gt;
|55&lt;br /&gt;
|0023&lt;br /&gt;
|30&lt;br /&gt;
|FFFFFFFFFFFF&lt;br /&gt;
|FE5021D00500&lt;br /&gt;
|06&lt;br /&gt;
|'''0000000F'''&lt;br /&gt;
|A403&lt;br /&gt;
|5021D005&lt;br /&gt;
|'''01EA'''&lt;br /&gt;
|'''6000FE'''&lt;br /&gt;
|26DA&lt;br /&gt;
|7E30&lt;br /&gt;
|90CE&lt;br /&gt;
|04&lt;br /&gt;
|-&lt;br /&gt;
!7&lt;br /&gt;
|00FF2A&lt;br /&gt;
|55&lt;br /&gt;
|0023&lt;br /&gt;
|30&lt;br /&gt;
|FFFFFFFFFFFF&lt;br /&gt;
|FE5021D00500&lt;br /&gt;
|0E&lt;br /&gt;
|'''0000000F'''&lt;br /&gt;
|A403&lt;br /&gt;
|5021D005&lt;br /&gt;
|'''01EA'''&lt;br /&gt;
|'''6000FE'''&lt;br /&gt;
|26EF&lt;br /&gt;
|7E10&lt;br /&gt;
|2740&lt;br /&gt;
|04&lt;br /&gt;
|-&lt;br /&gt;
!8&lt;br /&gt;
|00FF2A&lt;br /&gt;
|55&lt;br /&gt;
|0023&lt;br /&gt;
|30&lt;br /&gt;
|FFFFFFFFFFFF&lt;br /&gt;
|FE5021D00500&lt;br /&gt;
|20&lt;br /&gt;
|'''00000011'''&lt;br /&gt;
|A403&lt;br /&gt;
|5021D005&lt;br /&gt;
|'''01EA'''&lt;br /&gt;
|'''6000FE'''&lt;br /&gt;
|2801&lt;br /&gt;
|7E90&lt;br /&gt;
|8B23&lt;br /&gt;
|04&lt;br /&gt;
|-&lt;br /&gt;
!9&lt;br /&gt;
|00FF2A&lt;br /&gt;
|55&lt;br /&gt;
|0023&lt;br /&gt;
|30&lt;br /&gt;
|FFFFFFFFFFFF&lt;br /&gt;
|FE5021D00500&lt;br /&gt;
|2C&lt;br /&gt;
|'''00000013'''&lt;br /&gt;
|A403&lt;br /&gt;
|5021D005&lt;br /&gt;
|'''01EA'''&lt;br /&gt;
|'''6000FE'''&lt;br /&gt;
|2883&lt;br /&gt;
|7E60&lt;br /&gt;
|1A1A&lt;br /&gt;
|04&lt;br /&gt;
|-&lt;br /&gt;
!10&lt;br /&gt;
|00FF2A&lt;br /&gt;
|55&lt;br /&gt;
|0023&lt;br /&gt;
|30&lt;br /&gt;
|FFFFFFFFFFFF&lt;br /&gt;
|FE5021D00500&lt;br /&gt;
|54&lt;br /&gt;
|'''00000017'''&lt;br /&gt;
|A403&lt;br /&gt;
|5021D005&lt;br /&gt;
|'''01EA'''&lt;br /&gt;
|'''6000FE'''&lt;br /&gt;
|2A72&lt;br /&gt;
|7E80&lt;br /&gt;
|E3CD&lt;br /&gt;
|04&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====0xD5 Meter Data====&lt;br /&gt;
There appear to be multiple packet lengths and styles for the 0xD5 packet. Some samples shown below.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+0xD5 Captured packets&lt;br /&gt;
! rowspan=&amp;quot;3&amp;quot; |Pkt&lt;br /&gt;
!1&lt;br /&gt;
!2&lt;br /&gt;
!3&lt;br /&gt;
!4&lt;br /&gt;
!5&lt;br /&gt;
!6&lt;br /&gt;
!7&lt;br /&gt;
!8&lt;br /&gt;
!9&lt;br /&gt;
!10&lt;br /&gt;
!11&lt;br /&gt;
!12&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |Not part of CRC calc&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; |Data&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
!Header&lt;br /&gt;
!Type&lt;br /&gt;
!Length&lt;br /&gt;
!SubType&lt;br /&gt;
!Meter ID #1&lt;br /&gt;
!Meter ID #2&lt;br /&gt;
!Unknown&lt;br /&gt;
!Unknown&lt;br /&gt;
!Unknown&lt;br /&gt;
!Unknown&lt;br /&gt;
!Checksum&lt;br /&gt;
!Trailing&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|00FF2A&lt;br /&gt;
|D5&lt;br /&gt;
|0016&lt;br /&gt;
|21&lt;br /&gt;
|F05FCB84&lt;br /&gt;
|F0FC4DB1&lt;br /&gt;
|E288&lt;br /&gt;
|0100&lt;br /&gt;
|273205&lt;br /&gt;
|00781930&lt;br /&gt;
|CB72&lt;br /&gt;
|00&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|00FF2A&lt;br /&gt;
|D5&lt;br /&gt;
|0016&lt;br /&gt;
|21&lt;br /&gt;
|F0653657&lt;br /&gt;
|F03B9FFB&lt;br /&gt;
|7288&lt;br /&gt;
|0100&lt;br /&gt;
|1F3204&lt;br /&gt;
|2E241140&lt;br /&gt;
|B6B1&lt;br /&gt;
|00&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|00FF2A&lt;br /&gt;
|D5&lt;br /&gt;
|0016&lt;br /&gt;
|21&lt;br /&gt;
|F0EF3BCE&lt;br /&gt;
|F03B9FFB&lt;br /&gt;
|6288&lt;br /&gt;
|0100&lt;br /&gt;
|1E3204&lt;br /&gt;
|23931730&lt;br /&gt;
|6DA6&lt;br /&gt;
|00&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|00FF2A&lt;br /&gt;
|D5&lt;br /&gt;
|0016&lt;br /&gt;
|21&lt;br /&gt;
|F1419ADD&lt;br /&gt;
|F03B9FFB&lt;br /&gt;
|7C98&lt;br /&gt;
|0100&lt;br /&gt;
|1E3204&lt;br /&gt;
|332C1780&lt;br /&gt;
|BB3E&lt;br /&gt;
|00&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|00FF2A&lt;br /&gt;
|D5&lt;br /&gt;
|0016&lt;br /&gt;
|21&lt;br /&gt;
|F07C5F0C&lt;br /&gt;
|F03B9FFB&lt;br /&gt;
|9A88&lt;br /&gt;
|0100&lt;br /&gt;
|1E3204&lt;br /&gt;
|018C1A80&lt;br /&gt;
|4FCF&lt;br /&gt;
|00&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+0xD5 Packets where actual time along with uptime is observed&lt;br /&gt;
! rowspan=&amp;quot;3&amp;quot; |Pkt&lt;br /&gt;
!1&lt;br /&gt;
!2&lt;br /&gt;
!3&lt;br /&gt;
!4&lt;br /&gt;
!5&lt;br /&gt;
!6&lt;br /&gt;
!7&lt;br /&gt;
!8&lt;br /&gt;
!9&lt;br /&gt;
!10&lt;br /&gt;
!11&lt;br /&gt;
!12&lt;br /&gt;
!13&lt;br /&gt;
!14&lt;br /&gt;
!15&lt;br /&gt;
!16&lt;br /&gt;
!17&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |Not part of CRC calc&lt;br /&gt;
! colspan=&amp;quot;12&amp;quot; |Data (Oncor Meter)&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
!Header&lt;br /&gt;
!Type&lt;br /&gt;
!Length&lt;br /&gt;
!SubType&lt;br /&gt;
!Meter ID1&lt;br /&gt;
!Meter ID2&lt;br /&gt;
!Counter&lt;br /&gt;
!Epoch Time&lt;br /&gt;
!Unknown&lt;br /&gt;
Reading?&lt;br /&gt;
!Uptime&lt;br /&gt;
!Unknown&lt;br /&gt;
!Unknown&lt;br /&gt;
!WAN Address&lt;br /&gt;
Meter ID2&lt;br /&gt;
!Meter ID2&lt;br /&gt;
!Unknown Data&lt;br /&gt;
!Checksum&lt;br /&gt;
!Trailing&lt;br /&gt;
|-&lt;br /&gt;
!1&lt;br /&gt;
|00FF2A&lt;br /&gt;
|D5&lt;br /&gt;
|0047&lt;br /&gt;
|51&lt;br /&gt;
|F0C00020&lt;br /&gt;
|F03B9FFB&lt;br /&gt;
|18&lt;br /&gt;
|'''60378AB1'''&lt;br /&gt;
|00033D56&lt;br /&gt;
|0006C31A&lt;br /&gt;
|A483&lt;br /&gt;
|0101&lt;br /&gt;
|50CFB5D9E400&lt;br /&gt;
|F03B9FFB&lt;br /&gt;
|000103240602030705070704000000 04C2 C000 204C 0401 FA 2030208180 2163 1900&lt;br /&gt;
|75F3&lt;br /&gt;
|00&lt;br /&gt;
|-&lt;br /&gt;
!2&lt;br /&gt;
|00FF2A&lt;br /&gt;
|D5&lt;br /&gt;
|0047&lt;br /&gt;
|51&lt;br /&gt;
|F10679DE&lt;br /&gt;
|F03B9FFB&lt;br /&gt;
|1E&lt;br /&gt;
|'''60378C72'''&lt;br /&gt;
|00023F96&lt;br /&gt;
|0006C4DB&lt;br /&gt;
|A483&lt;br /&gt;
|0101&lt;br /&gt;
|50CFB5D9E400&lt;br /&gt;
|F03B9FFB&lt;br /&gt;
|000103240602030705070704000000 0718 6800 204C 0401 FA 2030208180 0BF7 1D30&lt;br /&gt;
|CDB4&lt;br /&gt;
|00&lt;br /&gt;
|-&lt;br /&gt;
!3&lt;br /&gt;
|00FF2A&lt;br /&gt;
|D5&lt;br /&gt;
|0047&lt;br /&gt;
|51&lt;br /&gt;
|F159CD44&lt;br /&gt;
|F03B9FFB&lt;br /&gt;
|B4&lt;br /&gt;
|'''603A627C'''&lt;br /&gt;
|00028F50&lt;br /&gt;
|00099AE5&lt;br /&gt;
|A483&lt;br /&gt;
|0101&lt;br /&gt;
|50CFB5D9E400&lt;br /&gt;
|F03B9FFB&lt;br /&gt;
|000103240602020705070805000000 02A3 C800 1E6C 0401 D9 2030208180 226A 1A10&lt;br /&gt;
|7330&lt;br /&gt;
|00&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
! colspan=&amp;quot;12&amp;quot; |Data (CoServ Meter)&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
!4&lt;br /&gt;
|00FF2A&lt;br /&gt;
|D5&lt;br /&gt;
|0047&lt;br /&gt;
|51&lt;br /&gt;
|F143250D&lt;br /&gt;
|5021D005&lt;br /&gt;
|1A&lt;br /&gt;
|'''603AD051'''&lt;br /&gt;
|000130D8&lt;br /&gt;
|000D10ED&lt;br /&gt;
|A403&lt;br /&gt;
|0101&lt;br /&gt;
|FE5021D00500&lt;br /&gt;
|5021D005&lt;br /&gt;
|000103200000000000000000000000 02C3 0800 0E20 0200 E3 20301F8180 22F0 1C40&lt;br /&gt;
|4FEB&lt;br /&gt;
|00&lt;br /&gt;
|-&lt;br /&gt;
!5&lt;br /&gt;
|00FF2A&lt;br /&gt;
|D5&lt;br /&gt;
|0047&lt;br /&gt;
|51&lt;br /&gt;
|F143248A&lt;br /&gt;
|5021D005&lt;br /&gt;
|64&lt;br /&gt;
|'''603AD09C'''&lt;br /&gt;
|000133C6&lt;br /&gt;
|000D1138&lt;br /&gt;
|A403&lt;br /&gt;
|0101&lt;br /&gt;
|FE5021D00500&lt;br /&gt;
|5021D005&lt;br /&gt;
|000103200000000000000000000000 0BA0 9000 0E20 0200 E3 20301F8180 4076 1150&lt;br /&gt;
|73A7&lt;br /&gt;
|00&lt;br /&gt;
|-&lt;br /&gt;
!6&lt;br /&gt;
|00FF2A&lt;br /&gt;
|D5&lt;br /&gt;
|0047&lt;br /&gt;
|51&lt;br /&gt;
|500F0DD6&lt;br /&gt;
|5021D005&lt;br /&gt;
|80&lt;br /&gt;
|'''603AD0D3'''&lt;br /&gt;
|000135EC&lt;br /&gt;
|000D116F&lt;br /&gt;
|A403&lt;br /&gt;
|0101&lt;br /&gt;
|FE5021D00500&lt;br /&gt;
|5021D005&lt;br /&gt;
|000103200000000000000000000000 01D8 A800 0E20 0200 E3 20301F8180 1412 2E40&lt;br /&gt;
|ADC1&lt;br /&gt;
|00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Epoch time calculator and explanation can be found [https://www.epochconverter.com/ here], first convert time from hex to decimal then input into converter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;00FF2A D5 0016 21 F073B577 F062363D FA88 0100 1F6C04 14E93E70 CF80 04&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;00FF2A D5 0017 29 8073AEAC F0F28D56 1288 0100 1F3204 041CBB1930 2D2A 04&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;00FF2A D5 001B 21 F10679E2 8073CE7D F498 0100 106C02 0A15F9055F06571A80 37C5 00&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;00FF2A D5 001C 29 8073ADB3 8073CE7D 9088 0100 106C02 040A99CF055F3A4B1170 A696 04&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;00FF2A D5 0021 22 F05A1A60 8073CE7D D8010100106C020520301D81800A99CF055F3ADD1410 A560 04&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;00FF2A D5 0047 51 F05A4BCC F03D4CD7 5A 6032F37F 0001DA2E 00022BE9 A483 0101 50D075D9E2E0 F03D4CD7&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;000103240403030806080801000000036EE8001F6C0401E9203020818018C22930 9294 00&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Data captures===&lt;br /&gt;
'''''*Note: This file does not contain the trailing bytes shown in the captures above, it stops at the 16 bit Checksum.''''' &lt;br /&gt;
&lt;br /&gt;
[https://wiki.recessim.com/w/images/d/d3/F03B9FFB.txt Oncor Meter - F03B9FFB - 48 hours capture]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Data Requests from SmartMeterTexas (F03B9FFB)&lt;br /&gt;
!Date&lt;br /&gt;
!Time&lt;br /&gt;
!Meter Read&lt;br /&gt;
!On Demand Energy Usage&lt;br /&gt;
|-&lt;br /&gt;
|03/01/2021&lt;br /&gt;
|14:31:08&lt;br /&gt;
|37641.426&lt;br /&gt;
|79.415&lt;br /&gt;
|-&lt;br /&gt;
|03/01/2021&lt;br /&gt;
|16:44:40&lt;br /&gt;
|37648.598&lt;br /&gt;
|37.441&lt;br /&gt;
|-&lt;br /&gt;
|03/01/2021&lt;br /&gt;
|22:14:01&lt;br /&gt;
|37658.906&lt;br /&gt;
|47.749&lt;br /&gt;
|-&lt;br /&gt;
|03/02/2021&lt;br /&gt;
|21:17:07&lt;br /&gt;
|37705.09&lt;br /&gt;
|44.071&lt;br /&gt;
|-&lt;br /&gt;
|03/02/2021&lt;br /&gt;
|21:22:58&lt;br /&gt;
|37705.234&lt;br /&gt;
|44.215&lt;br /&gt;
|}&lt;br /&gt;
This table lists Real-time data requests from [https://www.smartmetertexas.com/home SmartMeterTexas.com] which allows customers to request current meter readings. You will see 0xD5 packets in the data file closely linked to the times above. When the request is made on the website the meter generally responds within 10-15 seconds meaning the system can send a message to the mesh network, traverse across the meters and return fairly quickly.&lt;br /&gt;
&lt;br /&gt;
===GPS Tagged Wardrive Files===&lt;br /&gt;
Format will likely change for the files as more is learned, currently the format is:&lt;br /&gt;
 Meter_ID, Uptime(seconds), Uptime(days), GPS_Data($GPGGA)&lt;br /&gt;
[https://wiki.recessim.com/w/images/a/a6/Wardrive-NTX_to_Highland-Park-03-09-2021.csv Wardrive-NTX_to_Highland-Park-03-09-2021.csv]&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>L0scher</name></author>
		
	</entry>
</feed>