{"id":11,"date":"2013-03-02T18:52:16","date_gmt":"2013-03-02T18:52:16","guid":{"rendered":"http:\/\/www.sevenwatt.com\/main\/?p=11"},"modified":"2013-03-03T10:25:35","modified_gmt":"2013-03-03T10:25:35","slug":"wh1080-protocol-v2-fsk","status":"publish","type":"post","link":"https:\/\/www.sevenwatt.com\/main\/wh1080-protocol-v2-fsk\/","title":{"rendered":"WH1080 protocol V2 &#8211; FSK"},"content":{"rendered":"<p>The Fine Offset weather station switched over to a new RF transmission protocol somewhere in 2012. While the old protocol was a On-Off-Keying (OOK) protocol, the V2 protocol used Frequency-Shift-Keying (FSK). This is natural transmision mode of the RFM02 transmitters and their RFM01 receivers. The RFM12B modules can also receive the same FSK signals. Most of the reverse engineering happened on the Raspberry Pi forum: <a title=\"WH1080 V2 decoded\" href=\"http:\/\/www.raspberrypi.org\/phpBB3\/viewtopic.php?f=37&amp;t=14777\" target=\"_blank\">WH1080 V2 protocol decoded<\/a><\/p>\n<p>This post details on the exact transmission protocol.<\/p>\n<p><code><br \/>\nPackage definition:<br \/>\n[<br \/>\npreample 3 bytes 0xAA \u00a0 \u00a0synchron word \u00a0 \u00a0payload 10 bytes \u00a0postample 11bits zero<br \/>\n0xAA \u00a0 \u00a00xAA \u00a0 \u00a00xAA \u00a0 \u00a0 0x2D \u00a0 \u00a00xD4 \u00a0 \u00a0 nnnnn---nnnnnnnnn 0x00 \u00a0 \u00a0 0x0<br \/>\n101010101010101010101010 0010110111010100 101.............. 00000000 000<br \/>\n]<br \/>\nrepeated six times (identical packages) per transmission every 48 seconds<br \/>\nThere is no or hardly any spacing between the packages.<br \/>\nSpacing: to be confirmed.<\/code><br \/>\nWhen using the RFM01 or RFM12B, the preample and synchron word will not be in the received data. The preamble is intended to have the frequency synthesiser locked, while the synchron word serves as detection of the proper message.<br \/>\nOpen issue: How can an end-of-transmission be detected? Would VDI turn into zero?<br \/>\nThe payload contains to types of messages for FO WH1080, and relatives:<br \/>\n<code><br \/>\nPayload definition:<br \/>\nWeather sensor reading Message Format:<br \/>\nAAAABBBBBBBBCCCCCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGHHHHHHHHHHHHIIIIJJJJKKKKKKKK<br \/>\n0xA4 \u00a0 \u00a00xF0 \u00a0 \u00a00x27 \u00a0 \u00a00x47 \u00a0 \u00a00x00 \u00a0 \u00a00x00 \u00a0 \u00a00x03 \u00a0 \u00a00xC6 \u00a0 \u00a00x0C \u00a0 \u00a00xFE<br \/>\n10100100111100000010011101000111000000000000000000000011110001100000110011111110<\/code><br \/>\n<code><br \/>\nwith:<br \/>\nAAAA = 1010 \u00a0 \u00a0Message type: 0xA: sensor readings<br \/>\nBBBBBBBB \u00a0 \u00a0 \u00a0 Station ID \/ rolling code: Changes with battery insertion.<br \/>\nCCCCCCCCCCCC \u00a0 Temperature*10 in celsius. Binary format MSB is sign<br \/>\nDDDDDDDD \u00a0 \u00a0 \u00a0 Humidity in %. Binary format 0-100. MSB (bit 7) unused.<br \/>\nEEEEEEEE \u00a0 \u00a0 \u00a0 Windspeed<br \/>\nFFFFFFFF \u00a0 \u00a0 \u00a0 Wind gust<br \/>\nGGGG \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Unknown<br \/>\nHHHHHHHHHHHH \u00a0 Rainfall cumulative. Binary format, max = 0x3FF,<br \/>\nIIII \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Status bits: MSB b3=low batt indicator.<br \/>\nJJJJ \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Wind direction<br \/>\nKKKKKKKK \u00a0 \u00a0 \u00a0 CRC8 - reverse Dallas One-wire CRC<br \/>\n<\/code><code><br \/>\nDCF Time Message Format:<br \/>\nAAAABBBBBBBBCCCCDDEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHIIIJJJJJKKKKKKKKLMMMMMMMNNNNNNNN<br \/>\nHours Minutes Seconds Year \u00a0 \u00a0 \u00a0 MonthDay \u00a0 \u00a0 \u00a0? \u00a0 \u00a0 \u00a0Checksum<br \/>\n0xB4 \u00a0 \u00a00xFA \u00a0 \u00a00x59 \u00a0 \u00a00x06 \u00a0 \u00a00x42 \u00a0 \u00a00x13 \u00a0 \u00a00x43 \u00a0 \u00a00x02 \u00a0 \u00a00x45 \u00a0 \u00a00x74<br \/>\n<\/code><code><br \/>\nwith:<br \/>\nAAAA = 1011 \u00a0 \u00a0Message type: 0xB: DCF77 time stamp<br \/>\nBBBBBBBB \u00a0 \u00a0 \u00a0 Station ID \/ rolling code: Changes with battery insertion.<br \/>\nCCCC \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Unknown<br \/>\nDD \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Unknown<br \/>\nEEEEEE \u00a0 \u00a0 \u00a0 \u00a0 Hours, BCD<br \/>\nFFFFFFFF \u00a0 \u00a0 \u00a0 Minutes, BCD<br \/>\nGGGGGGGG \u00a0 \u00a0 \u00a0 Seconds, BCD<br \/>\nHHHHHHHH \u00a0 \u00a0 \u00a0 Year, last two digits, BCD<br \/>\nIII \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Unknown<br \/>\nJJJJJ \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Month number, BCD<br \/>\nKKKKKKKK \u00a0 \u00a0 \u00a0 Day in month, BCD<br \/>\nL \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Unknown status bit<br \/>\nMMMMMMM \u00a0 \u00a0 \u00a0 \u00a0Unknown<br \/>\nNNNNNNNN \u00a0 \u00a0 \u00a0 CRC8 - reverse Dallas One-wire CRC<\/code><br \/>\nThe DCF code is transmitted five times with 48 second intervals between 3-6 minutes past a new hour. The sensor data transmission stops in the 59th minute. Then there are no transmissions for three minutes, apparently to be noise free to acquire the DCF77 signal. On similar OOK weather stations the DCF77 signal is only transmitted every two hours.<\/p>\n<p>The package format was deduced using a long transmision buffer on a JeeNode with some modificaitons in the RF12 driver.<br \/>\nThe payload definitions have been described at those pages:<br \/>\n<a title=\"Kevin S: reading-wh1081-weather-sensors-using-an-rfm01-and-rfm12b\" href=\"http:\/\/www.susa.net\/wordpress\/2012\/08\/raspberry-pi-reading-wh1081-weather-sensors-using-an-rfm01-and-rfm12b\/\" target=\"_blank\">WH1080 V1 OOK protocol<\/a><br \/>\n<a title=\"Raspberry PI forum on WH1080 V2 protocol\" href=\"http:\/\/www.raspberrypi.org\/phpBB3\/viewtopic.php?f=37&amp;t=14777\" target=\"_blank\">WH1080 V2 FSK protocol<\/a><br \/>\n<a title=\"Userplugin _latest version _ .zip from memeber of nodo-domotica.nl\" href=\"https:\/\/code.google.com\/p\/atmel\/downloads\/list\" target=\"_blank\">WH1080 V1 OOK and DCF77 message format<\/a><\/p>\n<p>This applies at least to the following (later) models:<br \/>\nFine Offset WH1080<br \/>\nAlecto WS4000<br \/>\nNational Geographic 265, at 916MHz<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The Fine Offset weather station switched over to a new RF transmission protocol somewhere in 2012. While the old protocol was a On-Off-Keying (OOK) protocol, the V2 protocol used Frequency-Shift-Keying (FSK). This is natural transmision mode of the RFM02 transmitters and their RFM01 receivers. The RFM12B modules can also receive the same FSK signals. Most [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[1],"tags":[6,8,58,5,4],"class_list":["post-11","post","type-post","status-publish","format-standard","hentry","category-weatherstations","tag-868mhz","tag-fsk","tag-ook","tag-rf-protocol","tag-wh1080"],"_links":{"self":[{"href":"https:\/\/www.sevenwatt.com\/main\/wp-json\/wp\/v2\/posts\/11","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sevenwatt.com\/main\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sevenwatt.com\/main\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sevenwatt.com\/main\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sevenwatt.com\/main\/wp-json\/wp\/v2\/comments?post=11"}],"version-history":[{"count":23,"href":"https:\/\/www.sevenwatt.com\/main\/wp-json\/wp\/v2\/posts\/11\/revisions"}],"predecessor-version":[{"id":35,"href":"https:\/\/www.sevenwatt.com\/main\/wp-json\/wp\/v2\/posts\/11\/revisions\/35"}],"wp:attachment":[{"href":"https:\/\/www.sevenwatt.com\/main\/wp-json\/wp\/v2\/media?parent=11"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sevenwatt.com\/main\/wp-json\/wp\/v2\/categories?post=11"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sevenwatt.com\/main\/wp-json\/wp\/v2\/tags?post=11"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}