rtl433  UNKNOWN
RTL-433 utility
fineoffset_wh1080.c File Reference

Fine Offset WH1080/WH3080 Weather Station. More...

Functions

static int fineoffset_wh1080_callback (r_device *decoder, bitbuffer_t *bitbuffer)
 This module is based on Stanisław Pitucha ('viraptor' https://github.com/viraptor) code stub for the Digitech XC0348 Weather Station, which seems to be a rebranded Fine Offset WH1080 Weather Station. More...
 

Variables

static int wind_dir_degr [] = {0, 23, 45, 68, 90, 113, 135, 158, 180, 203, 225, 248, 270, 293, 315, 338}
 
static char * output_fields []
 
r_device fineoffset_wh1080
 

Detailed Description

Fine Offset WH1080/WH3080 Weather Station.

Function Documentation

◆ fineoffset_wh1080_callback()

int fineoffset_wh1080_callback ( r_device decoder,
bitbuffer_t bitbuffer 
)
static

This module is based on Stanisław Pitucha ('viraptor' https://github.com/viraptor) code stub for the Digitech XC0348 Weather Station, which seems to be a rebranded Fine Offset WH1080 Weather Station.

Some info and code derived from Kevin Sangelee's page: http://www.susa.net/wordpress/2012/08/raspberry-pi-reading-wh1081-weather-sensors-using-an-rfm01-and-rfm12b/ .

See also Frank 'SevenW' page ( https://www.sevenwatt.com/main/wh1080-protocol-v2-fsk/ ) for some other useful info.

For the WH1080 part I mostly have re-elaborated and merged their works. Credits (and kudos) should go to them all (and to many others too).

Reports 1 row, 88 pulses.

Data layout:

ff FI IT TT HH SS GG ?R RR BD CC
  • F: 4 bit fixed message format
  • I: 8 bit device id
  • T: 12 bit temperature, offset 40 scale 10, i.e. 0.1C steps -40C
  • H: 8 bit humidity percent
  • S: 8 bit wind speed, 0.34m/s steps
  • G: 8 bit gust speed, 0.34m/s steps
  • R: 12 bit? rain, 0.3mm steps
  • B: 4 bit flags, 0x1 is battery_low
  • D: 8 bit wind direction: 00 is N, 02 is NE, 04 is E, etc. up to 0F is seems
  • C: 8 bit checksum

WH1080

(aka Watson W-8681) (aka Digitech XC0348 Weather Station) (aka PCE-FWS 20) (aka Elecsa AstroTouch 6975) (aka Froggit WH1080) (aka .....)

This weather station is based on an indoor touchscreen receiver, and on a 5+1 outdoor wireless sensors group (rain, wind speed, wind direction, temperature, humidity, plus a DCF77 time signal decoder, maybe capable to decode some other time signal standard). See the product page here: http://www.foshk.com/weather_professional/wh1080.htm . It's a very popular weather station, you can easily find it on eBay or Amazon (just do a search for 'WH1080').

The module works fine, decoding all of the data as read into the original console (there is some minimal difference sometime on the decimals due to the different architecture of the console processor, which is a little less precise).

Please note that the pressure sensor (barometer) is enclosed in the indoor console unit, NOT in the outdoor wireless sensors group. That's why it's NOT possible to get pressure data by wireless communication. If you need pressure data you should try an Arduino/Raspberry solution wired with a BMP180/280 or BMP085 sensor.

Data are transmitted in a 48 seconds cycle (data packet, then wait 48 seconds, then data packet...).

This module is also capable to decode the DCF77/WWVB time signal sent by the time signal decoder (which is enclosed on the sensor tx): around the minute 59 of the even hours the sensor's TX stops sending weather data, probably to receive (and sync with) DCF77/WWVB signals. After around 3-4 minutes of silence it starts to send just time data for some minute, then it starts again with weather data as usual.

By living in Europe I can only test DCF77 time decoding, so if you live outside Europe and you find garbage instead of correct time, you should disable/ignore time decoding (or, better, try to implement a more complete time decoding system :) ).

To recognize message type (weather or time) you can use the 'msg_type' field on json output:

  • msg_type 0 = weather data
  • msg_type 1 = time data

The 'Total rainfall' field is a cumulative counter, increased by 0.3 millimeters of rain at once.

The station comes in three TX operating frequency versions: 433, 868.3 and 915 Mhz. The module is tested with a 'Froggit WH1080' on 868.3 Mhz, using '-f 868140000' as frequency parameter and it works fine (compiled in x86, RaspberryPi 1 (v2), Raspberry Pi2 and Pi3, and also on a BananaPi platform. Everything is OK). I don't know if it works also with ALL of the rebranded versions/models of this weather station. I guess it should do... Just give it a try! :)

WH3080

The WH3080 Weather Station seems to be basically a WH1080 with the addition of UV/Light sensors onboard. The weather/datetime radio protocol used for both is identical, the only difference is for the addition in the WH3080 of the UV/Light part. UV/Light radio messages are disjointed from (and shorter than) weather/datetime radio messages and are transmitted in a 'once-every-60-seconds' cycle.

The module is able to decode all kind of data coming from the WH3080: weather, datetime, UV and light plus some error/status code.

To recognize message type (weather, datetime or UV/light) you can refer to the 'msg_type' field on json output:

  • msg_type 0 = weather data
  • msg_type 1 = datetime data
  • msg_type 2 = UV/light data

While the LCD console seems to truncate/round values in order to best fit to its display, this module keeps entire values as received from externals sensors (exception made for some rounding while converting values from lux to watts/m and fc), so you can see -sometimes- some little difference between module's output and LCD console's values.

2016-2017 Nicola Quiriti ('ovrheat' - 'seven')

References bitbuffer::bb, bitbuffer_extract_bytes(), bitrow_printf(), bitbuffer::bits_per_row, crc8(), DATA_DOUBLE, DATA_FORMAT, DATA_INT, data_make(), DATA_STRING, decoder_output_data(), bitbuffer::num_rows, preamble, r_device::verbose, and wind_dir_degr.

Variable Documentation

◆ fineoffset_wh1080

r_device fineoffset_wh1080
Initial value:
= {
.name = "Fine Offset Electronics WH1080/WH3080 Weather Station",
.modulation = OOK_PULSE_PWM,
.short_width = 544,
.long_width = 1524,
.reset_limit = 2800,
.disabled = 0,
.fields = output_fields,
}
static char * output_fields[]
Definition: fineoffset_wh1080.c:273
Pulse Width Modulation with precise timing parameters.
Definition: r_device.h:13
static int fineoffset_wh1080_callback(r_device *decoder, bitbuffer_t *bitbuffer)
This module is based on Stanisław Pitucha ('viraptor' https://github.com/viraptor) code stub for the ...
Definition: fineoffset_wh1080.c:112

◆ output_fields

char* output_fields[]
static
Initial value:
= {
"model",
"id",
"temperature_C",
"humidity",
"direction_deg",
"speed",
"gust",
"wind_avg_km_h",
"wind_max_km_h",
"rain",
"rain_mm",
"msg_type",
"signal",
"radio_clock",
"battery",
"sensor_code",
"uv_status",
"uv_index",
"lux",
"wm",
NULL
}

◆ wind_dir_degr

int wind_dir_degr[] = {0, 23, 45, 68, 90, 113, 135, 158, 180, 203, 225, 248, 270, 293, 315, 338}
static