Kobuki, I didn't know about the Envoy8X until fairly recently. If I had, I would have used one and tried to discover the serial protocol it uses. That said, my goal with the weather system I'm setting up is as much to learn and have fun as it is to monitor weather.
Here's a text figure that demonstrates how message 9 works. Each vertical bar represents a message 9 packet. The number between the vertical bars is the maximum wind speed that occurred between the two packets represented by the two adjacent vertical bars (this is not real data).
packet 0 1 2 3 4 5 6 7 8 9 ...
max wind |1|1|2|3|2|3|1|2|1|1|1|1|1|1|1|1|1|1|1|1|1|1|
byte3 1 1 2 3 3 3 3 3 3 3 3 3 3 3 3 2 2 1 1 1 1 1
byte5[7:4] 0 0 0 0 1 0 1 2 3 4 5 6 7 8 9 8 9 0 0 0 0 0
X X X X M M X X X X X X
That should help explain how it works, but the question remains whether byte5[7:4] is actually useful for anything. I think it could be used to only record gust readings that are new. Gust readings would be recorded if byte5[7:4] is 0, or if packets were missed, if it was 0 for one of the missed packets. We would record the gust readings for all the packets marked with X in the above figure (where M represents a missed packet). There are two advantages to doing this:
1. It increases the likelihood that the gust reading in an archive record actually represents a max wind from that archive interval, rather than from the previous one.
2. The wind direction for the gust needs to come from byte 2 of some packet, and by using byte5[7:4] we can get a wind direction from within 30 seconds of the gust, whereas ignoring byte5[7:4], the gust direction could be as much as 10 minutes out of date.
Dekay, we were indeed missing something. I found this note on page 72 of the CC1021 datasheet:
"Note: The RX frequency deviation should be close to half the TX frequency deviation for GFSK at 100 kBaud data rate and below. The RX frequency deviation should be close to the TX frequency deviation for FSK and for GFSK at 100 kBaud data rate and above."
OTOH, the CC1101 datasheet specifies:
"the DEVIATN register specifies the expected frequency deviation of incoming signals in RX and should be the same as the TX deviation for demodulation to be performed reliably and robustly."
I believe you miscalculated the TX deviation for the CC1021. The formula for the 915 MHz band is fdev = FREF * TXDEV_M * 2^(TXDEV_X - 15). Plugging in FREF = 7.3728 MHz, TXDEV_M = 11 and TXDEV_X = 2 from your table we get
deviation = 7.3728 MHz * 11 * 2^(2 - 15) = 9.9 kHz. You must have used the formula for the 402 - 470 MHz band. Your calculation for the RX deviation looks right.
Thus for the CC1101 I believe 9.5 kHz is the correct deviation.
As for the channel filter bandwidth, DEC_DIV[2:0] is set to 5, so ChBW = 307.2 / (5 + 1) kHz = 51.2 kHz. That would require a roughly 4 ppm or lower crystal, which is possible.
I can't find the tolerance of the crystal used on the RFM69W, but given the possibility that its tolerance is higher than 4 ppm, you may want to increase the channel bandwidth in the DavisRFM69 code.