Landis+Gyr GridStream Protocol: Difference between revisions

Add data capture for Austin Energy
00FF 2A 55 Meter Data: Changed data tags based on discovery using IWR
 
(5 intermediate revisions by the same user not shown)
Line 28: Line 28:
|1010
|1010
|}
|}
----Of particular note is the difference between versions 1-4 and version 5. In version 5 there are two bits [11] that do not respect the start/stop bit checks of the prior versions. The older protocol expects a 0 start bit, bit data bits and a 1 stop bit. By violating two consecutive start bits the older versions of Gridstream ignore version 5 even if they have the same CRC Adder! This appears to be a way to add backwards compatibility to newer versions of Gridstream.  
----Of particular note is the difference between versions 1-4 and version 5. In version 5 there are two bits [11] that do not respect the start/stop bit checks of the prior versions. The older protocol expects a 0 start bit, 8 data bits and a 1 stop bit. By violating two consecutive start bits the older versions of GridStream ignore version 5 even if they have the same CRC Adder! This appears to be a way to add backwards compatibility to newer versions of GridStream.  
{| class="wikitable"
{| class="wikitable"
|+Header for Gridstream
|+Header for Gridstream
! colspan="3" |Header v1 - v4
! colspan="2" |Header v1 - v4
! rowspan="3" |
! rowspan="3" |
! colspan="3" |Header v5
! colspan="2" |Header v5
|-
|-
!0x00
!0x00
!0xFF (10 bit)
!0xFF (10 bit)
!0x2A
!0x00
!0x00
!0xFF (11 bit)
!0xFF (11 bit)
!0x2A
|-
|-
|0 '''00000000''' 1
|0 '''00000000''' 1
|0 '''11111111''' 1
|0 '''11111111''' 1
|0 '''00101010''' 1
|0 '''00000000''' 1
|0 '''00000000''' 1
|[11] '''11111111''' 1
|[11] '''11111111''' 1
|0 '''00101010''' 1
|}
|}
----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.
----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 in 8 bit chunks is shown below. These two sync's are both loaded into the '''PDU Align''' block and if either one is matched the full packet is passed downstream.
{| class="wikitable"
{| class="wikitable"
|+Sync Word used with GNURadio
|+Sync Word used with GNURadio for v4
!0xAA
!0xAA
!0xAA
!0xAA
!0x00
!0x5F
!0xF
|-
|10101010
|10101010
|00000000
|01011111
|1111
|}
{| class="wikitable"
|+Sync Word used with GNURadio for v5
!0xAA
!0xAA
!0xAA
!0xAA
!0xA0
!0x00
!0x05
!0x7F
!0xFF
!0x1F
|-
|-
|10101010
|10101010
|10101010
|10101010
|10101010
|00000000
|10101010
|01111111
|10100000
|11111
|00000101
|11111111
|}
|}
The final byte of the sync (0x2A) along with it's start and stop bits are discarded as part of the processing.
----<br />
----<br />
====Type, Length and Sub Type====
====Packet Types and Structures====
----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.
----Data is shown in Hexadecimal unless stated otherwise
 
So far only two types of packets have been observed, a 0x55 and a 0xD5 packet. Multiple lengths and SubTypes of these exist, a few are listed below.
{| class="wikitable"
{| class="wikitable"
|+
|+
!
!
!Start of
Frame
!Type
!Sub Type
!Sequence
! colspan="2" |Packets Purpose
|-
!
|00FF
|00
|81 or 85
|1 Byte
| colspan="2" |Report Power Usage (Device Control Word DCW)
|-
!
|00FF
|01
|81 or 85
|1 Byte
| colspan="2" |Report Power Usage (Device Control Word DCW)
|-
!
|00FF
|02
|81 or 85
|1 Byte
| colspan="2" |Report Power Usage (Device Control Word DCW)
|-
!
|00FF
|03
|81 or 85
|1 Byte
| colspan="2" |Report Power Usage (Device Control Word DCW)
|-
!
!Start of
Frame
!Type
!Type
!Sub Type
!Length
!Length
!SubType
!Unknown
!Packets Purpose
!Packets Purpose
|-
|-
!1
!1
|0x55
|00FF
|0x0023
|2A
|0x30
|55
|0023
|30
|Report up-time and other unknown data
|Report up-time and other unknown data
|-
|-
!2
!2
|0x55
|00FF
|0x0028
|2A
|0x30
|D5
|
|0047
|51
|Includes Epoch and Uptime
|-
|-
!3
!3
|0xD5
|00FF
|0x0011
|2A
|0x21
|D5
|
|00FD
|-
|C0
!4
|0xD5
|0x0011
|0x22
|
|-
!5
|0xD5
|0x0011
|0x29
|
|-
!6
|0xD5
|0x0016
|0x21
|
|-
!8
|0xD5
|0x0016
|0x29
|
|-
!7
|0xD5
|0x0017
|0x21
|
|-
!9
|0xD5
|0x0017
|0x29
|
|-
!10
|0xD5
|0x001C
|0x21
|
|-
!11
|0xD5
|0x001C
|0x29
|
|-
!12
|0xD5
|0x001D
|0x29
|
|-
!13
|0xD5
|0x0047
|0x51
|
|-
!14
|0xD5
|0x00FD
|0xC0
|
|
|}
|}
Line 199: Line 185:
----
----


====0x55 Meter Data====
====00FF 2A 55 Meter Data====
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.
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.
{| class="wikitable"
{| class="wikitable"
Line 205: Line 191:
0x55 Captured packets from Meter F0EE36DB (Oncor)
0x55 Captured packets from Meter F0EE36DB (Oncor)
! rowspan="3" |Pkt
! rowspan="3" |Pkt
!0
!1
!1
!2
!2
Line 222: Line 209:
!16
!16
|-
|-
! colspan="3" |Not part of CRC calc
! colspan="4" |Not part of CRC calc
! colspan="11" |Data
! colspan="9" |Data Packet
! colspan="2" |
! colspan="3" |Trailing 6 Bytes
!
|-
|-
!Header
!Start of
Frame
!Type
!Type
!SubType
!Length
!Length
!SubType
!Unknown
!Unknown
!Unknown
!WAN Address
!WAN Address
Line 245: Line 235:
|-
|-
!1
!1
|00FF2A
|00FF
|2A
|55
|55
|0023
|0023
Line 263: Line 254:
|-
|-
!2
!2
|00FF2A
|00FF
|2A
|55
|55
|0023
|0023
Line 281: Line 273:
|-
|-
!3
!3
|00FF2A
|00FF
|2A
|55
|55
|0023
|0023
Line 299: Line 292:
|-
|-
!4
!4
|00FF2A
|00FF
|2A
|55
|55
|0023
|0023
Line 317: Line 311:
|-
|-
!5
!5
|00FF2A
|00FF
|2A
|55
|55
|0023
|0023
Line 335: Line 330:
|-
|-
!6
!6
|00FF2A
|00FF
|2A
|55
|55
|0023
|0023
Line 353: Line 349:
|-
|-
!7
!7
|00FF2A
|00FF
|2A
|55
|55
|0023
|0023
Line 371: Line 368:
|-
|-
!8
!8
|00FF2A
|00FF
|2A
|55
|55
|0023
|0023
Line 389: Line 387:
|-
|-
!9
!9
|00FF2A
|00FF
|2A
|55
|55
|0023
|0023
Line 407: Line 406:
|-
|-
!10
!10
|00FF2A
|00FF
|2A
|55
|55
|0023
|0023
Line 442: Line 442:
|+0x55 Captured packets from Meter 5021D005 (Coserv)
|+0x55 Captured packets from Meter 5021D005 (Coserv)
! rowspan="3" |Pkt
! rowspan="3" |Pkt
!0
!1
!1
!2
!2
Line 459: Line 460:
!16
!16
|-
|-
! colspan="3" |Not part of CRC calc
! colspan="4" |Not part of CRC calc
! colspan="11" |Data
! colspan="9" |Data Packet
! colspan="2" |
! colspan="3" |Trailing 6 Bytes
!
|-
|-
!Header
!Start of
Frame
!Type
!Type
!SubType
!Length
!Length
!SubType
!Unknown
!Unknown
!Unknown
!WAN Address
!WAN Address
Line 482: Line 486:
|-
|-
!1
!1
|00FF2A
|00FF
|2A
|55
|55
|0023
|0023
Line 500: Line 505:
|-
|-
!2
!2
|00FF2A
|00FF
|2A
|55
|55
|0023
|0023
Line 518: Line 524:
|-
|-
!3
!3
|00FF2A
|00FF
|2A
|55
|55
|0023
|0023
Line 536: Line 543:
|-
|-
!4
!4
|00FF2A
|00FF
|2A
|55
|55
|0023
|0023
Line 554: Line 562:
|-
|-
!5
!5
|00FF2A
|00FF
|2A
|55
|55
|0023
|0023
Line 571: Line 580:
|04
|04
|-
|-
! colspan="17" |Power restored after an outage
! colspan="18" |Power restored after an outage
|-
|-
!6
!6
|00FF2A
|00FF
|2A
|55
|55
|0023
|0023
Line 592: Line 602:
|-
|-
!7
!7
|00FF2A
|00FF
|2A
|55
|55
|0023
|0023
Line 610: Line 621:
|-
|-
!8
!8
|00FF2A
|00FF
|2A
|55
|55
|0023
|0023
Line 628: Line 640:
|-
|-
!9
!9
|00FF2A
|00FF
|2A
|55
|55
|0023
|0023
Line 646: Line 659:
|-
|-
!10
!10
|00FF2A
|00FF
|2A
|55
|55
|0023
|0023
Line 665: Line 679:
----
----


====0xD5 Meter Data====
====00FF 2A D5 Meter Data====
There appear to be multiple packet lengths and styles for the 0xD5 packet. Some samples shown below, [https://wiki.recessim.com/w/images/9/9e/D5-Packets-Table-F03B9FFB.txt download as a txt file].
There appear to be multiple packet lengths and styles for the 0xD5 packet. Some samples shown below, [https://wiki.recessim.com/w/images/9/9e/D5-Packets-Table-F03B9FFB.txt download as a txt file].
{| class="wikitable"
{| class="wikitable"
Line 671: Line 685:
! rowspan="3" |Pkt
! rowspan="3" |Pkt
!1
!1
!
!2
!2
!3
!3
Line 683: Line 698:
! colspan="2" |
! colspan="2" |
|-
|-
! colspan="3" |Not part of CRC calc
! colspan="4" |Not part of CRC calc
! colspan="9" |CRC'd Data
! colspan="9" |CRC'd Data
!CRC
!CRC
! colspan="2" |
! colspan="2" |
|-
|-
!Header
!Start of
Frame
!Type
!Type
!SubType
!Length
!Length
!SubType
!Unknown
!DST Meter
!DST Meter
!SRC Meter
!SRC Meter
Line 704: Line 721:
|-
|-
|1
|1
|<code>00FF2A</code>
|<code>00FF</code>
|<code>2A</code>
|<code>D5</code>
|<code>D5</code>
|<code>0011</code>
|<code>0011</code>
Line 721: Line 739:
|-
|-
|2
|2
|<code>00FF2A</code>
|<code>00FF</code>
|<code>2A</code>
|<code>D5</code>
|<code>D5</code>
|<code>0011</code>
|<code>0011</code>
Line 738: Line 757:
|-
|-
|3
|3
|<code>00FF2A</code>
|<code>00FF</code>
|<code>2A</code>
|<code>D5</code>
|<code>D5</code>
|<code>0011</code>
|<code>0011</code>
Line 755: Line 775:
|-
|-
|4
|4
|<code>00FF2A</code>
|<code>00FF</code>
|<code>2A</code>
|<code>D5</code>
|<code>D5</code>
|<code>0016</code>
|<code>0016</code>
Line 772: Line 793:
|-
|-
|5
|5
|<code>00FF2A</code>
|<code>00FF</code>
|<code>2A</code>
|<code>D5</code>
|<code>D5</code>
|<code>0016</code>
|<code>0016</code>
Line 789: Line 811:
|-
|-
|6
|6
|<code>00FF2A</code>
|<code>00FF</code>
|<code>2A</code>
|<code>D5</code>
|<code>D5</code>
|<code>0016</code>
|<code>0016</code>
Line 806: Line 829:
|-
|-
|7
|7
|<code>00FF2A</code>
|<code>00FF</code>
|<code>2A</code>
|<code>D5</code>
|<code>D5</code>
|<code>0016</code>
|<code>0016</code>
Line 823: Line 847:
|-
|-
|8
|8
|<code>00FF2A</code>
|<code>00FF</code>
|<code>2A</code>
|<code>D5</code>
|<code>D5</code>
|<code>0017</code>
|<code>0017</code>
Line 840: Line 865:
|-
|-
|9
|9
|<code>00FF2A</code>
|<code>00FF</code>
|<code>2A</code>
|<code>D5</code>
|<code>D5</code>
|<code>0017</code>
|<code>0017</code>
Line 857: Line 883:
|-
|-
|10
|10
|<code>00FF2A</code>
|<code>00FF</code>
|<code>2A</code>
|<code>D5</code>
|<code>D5</code>
|<code>0017</code>
|<code>0017</code>
Line 874: Line 901:
|-
|-
|11
|11
|<code>00FF2A</code>
|<code>00FF</code>
|<code>2A</code>
|<code>D5</code>
|<code>D5</code>
|<code>0017</code>
|<code>0017</code>
Line 891: Line 919:
|-
|-
|12
|12
|<code>00FF2A</code>
|<code>00FF</code>
|<code>2A</code>
|<code>D5</code>
|<code>D5</code>
|<code>001C</code>
|<code>001C</code>
Line 908: Line 937:
|-
|-
|13
|13
|<code>00FF2A</code>
|<code>00FF</code>
|<code>2A</code>
|<code>D5</code>
|<code>D5</code>
|<code>001C</code>
|<code>001C</code>
Line 925: Line 955:
|-
|-
|14
|14
|<code>00FF2A</code>
|<code>00FF</code>
|<code>2A</code>
|<code>D5</code>
|<code>D5</code>
|<code>001C</code>
|<code>001C</code>
Line 942: Line 973:
|-
|-
|15
|15
|<code>00FF2A</code>
|<code>00FF</code>
|<code>2A</code>
|<code>D5</code>
|<code>D5</code>
|<code>001C</code>
|<code>001C</code>
Line 959: Line 991:
|-
|-
|16
|16
|<code>00FF2A</code>
|<code>00FF</code>
|<code>2A</code>
|<code>D5</code>
|<code>D5</code>
|<code>001C</code>
|<code>001C</code>
Line 976: Line 1,009:
|-
|-
|17
|17
|<code>00FF2A</code>
|<code>00FF</code>
|<code>2A</code>
|<code>D5</code>
|<code>D5</code>
|<code>001C</code>
|<code>001C</code>
Line 993: Line 1,027:
|-
|-
|18
|18
|<code>00FF2A</code>
|<code>00FF</code>
|<code>2A</code>
|<code>D5</code>
|<code>D5</code>
|<code>001C</code>
|<code>001C</code>
Line 1,010: Line 1,045:
|-
|-
|19
|19
|<code>00FF2A</code>
|<code>00FF</code>
|<code>2A</code>
|<code>D5</code>
|<code>D5</code>
|<code>001C</code>
|<code>001C</code>
Line 1,027: Line 1,063:
|-
|-
|20
|20
|<code>00FF2A</code>
|<code>00FF</code>
|<code>2A</code>
|<code>D5</code>
|<code>D5</code>
|<code>001C</code>
|<code>001C</code>
Line 1,044: Line 1,081:
|-
|-
|21
|21
|<code>00FF2A</code>
|<code>00FF</code>
|<code>2A</code>
|<code>D5</code>
|<code>D5</code>
|<code>001C</code>
|<code>001C</code>
Line 1,061: Line 1,099:
|-
|-
|22
|22
|<code>00FF2A</code>
|<code>00FF</code>
|<code>2A</code>
|<code>D5</code>
|<code>D5</code>
|<code>001D</code>
|<code>001D</code>
Line 1,078: Line 1,117:
|-
|-
|23
|23
|<code>00FF2A</code>
|<code>00FF</code>
|<code>2A</code>
|<code>D5</code>
|<code>D5</code>
|<code>001D</code>
|<code>001D</code>
Line 1,095: Line 1,135:
|-
|-
|24
|24
|<code>00FF2A</code>
|<code>00FF</code>
|<code>2A</code>
|<code>D5</code>
|<code>D5</code>
|<code>001D</code>
|<code>001D</code>
Line 1,112: Line 1,153:
|-
|-
|25
|25
|<code>00FF2A</code>
|<code>00FF</code>
|<code>2A</code>
|<code>D5</code>
|<code>D5</code>
|<code>001D</code>
|<code>001D</code>
Line 1,133: Line 1,175:
! rowspan="3" |Pkt
! rowspan="3" |Pkt
!1
!1
!
!2
!2
!3
!3
Line 1,152: Line 1,195:
!17
!17
|-
|-
! colspan="3" |Not part of CRC calc
! colspan="4" |Not part of CRC calc
! colspan="14" |Payload (Oncor Meter)
! colspan="12" |Data Packet (Oncor Meter)
! colspan="2" |
! colspan="3" |Trailing 6 Bytes
!
|-
|-
!Header
!Start of
Frame
!Type
!Type
!SubType
!Length
!Length
!SubType
!Unknown
!Meter ID1
!Meter ID1
!Meter ID2
!Meter ID2
Line 1,180: Line 1,226:
|-
|-
!1
!1
|00FF2A
|00FF
|2A
|D5
|D5
|0047
|0047
Line 1,201: Line 1,248:
|-
|-
!2
!2
|00FF2A
|00FF
|2A
|D5
|D5
|0047
|0047
Line 1,222: Line 1,270:
|-
|-
!3
!3
|00FF2A
|00FF
|2A
|D5
|D5
|0047
|0047
Line 1,242: Line 1,291:
|00
|00
|-
|-
! colspan="4" |
! colspan="5" |
! colspan="14" |Payload (CoServ Meter)
! colspan="14" |Payload (CoServ Meter)
! colspan="2" |
! colspan="2" |
|-
|-
!4
!4
|00FF2A
|00FF
|2A
|D5
|D5
|0047
|0047
Line 1,268: Line 1,318:
|-
|-
!5
!5
|00FF2A
|00FF
|2A
|D5
|D5
|0047
|0047
Line 1,289: Line 1,340:
|-
|-
!6
!6
|00FF2A
|00FF
|2A
|D5
|D5
|0047
|0047
Line 1,327: Line 1,379:


===Data captures===
===Data captures===
'''''*Note: This file does not contain the trailing bytes shown in the captures above, it stops at the 16 bit Checksum.'''''  
'''''*Note: This file does not contain the trailing bytes shown in the captures above, it stops at the 16 bit Checksum.'''''


[https://wiki.recessim.com/w/images/d/d3/F03B9FFB.txt Oncor Meter - F03B9FFB - 48 hours capture]
====Dallas====
{| class="wikitable"
[https://wiki.recessim.com/w/images/9/9b/Oncor_Capture_01-07-2023_30hrs.zip Oncor Capture 01-07-2023 30hrs (CONTAINS NEW PACKETS)]
|+Data Requests from SmartMeterTexas (F03B9FFB)
!Date
!Time
!Meter Read
!On Demand Energy Usage
|-
|03/01/2021
|14:31:08
|37641.426
|79.415
|-
|03/01/2021
|16:44:40
|37648.598
|37.441
|-
|03/01/2021
|22:14:01
|37658.906
|47.749
|-
|03/02/2021
|21:17:07
|37705.09
|44.071
|-
|03/02/2021
|21:22:58
|37705.234
|44.215
|}
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.


==== Austin ====
====Austin====
[[:File:Austin energy.txt|Austin energy (Two Meters)]]
[[:File:Austin energy.txt|Austin energy (Two Meters)]]