rtl433  UNKNOWN
RTL-433 utility
lacrosse_ws7000.c File Reference

LaCrosse WS7000/WS2500 weather sensors. More...

Functions

static int lacrosse_ws7000_decode (r_device *decoder, bitbuffer_t *bitbuffer)
 LaCrosse WS7000/WS2500 weather sensors. More...
 

Variables

static char * output_fields []
 
r_device lacrosse_ws7000
 

Detailed Description

LaCrosse WS7000/WS2500 weather sensors.

Copyright (C) 2019 ReMiOS and Christian W. Zuckschwerdt zany@.nosp@m.triq.nosp@m..net

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

Function Documentation

◆ lacrosse_ws7000_decode()

static int lacrosse_ws7000_decode ( r_device decoder,
bitbuffer_t bitbuffer 
)
static

LaCrosse WS7000/WS2500 weather sensors.

Also sold by ELV and Conrad. Related to ELV WS 2000.

  • WS2500-19 brightness sensor
  • WS7000-20 meteo sensor (temperature/humidity/pressure)
  • WS7000-16 Rain Sensor
  • WS7000-15 wind sensor

PWM 400 us / 800 us with fixed bit width of 1200 us. Messages are sent as nibbles (4 bits) with LSB sent first. A frame is composed of a preamble followed by nibbles (4 bits) separated by a 1-bit.

Message Layout:

P P S A D..D X C
  • Preamble: 10x bit "0", bit "1"
  • Sensor Type: Value 0..9 determing the sensor type
    • 0 = WS7000-27/28 Thermo sensor (interval 177s - Addr * 0.5s)
    • 1 = WS7000-22/25 Thermo/Humidity sensor (interval 177s - Addr * 0.5s)
    • 2 = WS7000-16 Rain sensor (interval 173s - Addr * 0.5s)
    • 3 = WS7000-15 Wind sensor (interval 169s - Addr * 0.5s)
    • 4 = WS7000-20 Thermo/Humidity/Barometer sensor (interval 165s - Addr * 0.5s)
    • 5 = WS2500-19 Brightness sensor (interval 161s - Addr * 0.5s)
  • Address: Value 0..7 for the sensor address
    • In case of a negative temperature the MSB of the Address becomes "1"
  • Data: 3-10 nibbles with BCD encoded sensor data values.
  • XOR: Nibble holding XOR of the S ^ A ^ Data nibbles
  • Checksum: Sum of all nibbles + 5 (i.e. S + A + nibble(0) + .. + nibble(n) + XOR + 5) & 0xF

References add_bytes(), bitbuffer::bb, bitbuffer_search(), bitbuffer::bits_per_row, DATA_DOUBLE, DATA_INT, data_make(), DATA_STRING, decoder_output_data(), extract_nibbles_4b1s(), preamble_pattern, reflect_nibbles(), r_device::verbose, and xor_bytes().

Variable Documentation

◆ lacrosse_ws7000

r_device lacrosse_ws7000
Initial value:
= {
.name = "LaCrosse/ELV/Conrad WS7000/WS2500 weather sensors",
.modulation = OOK_PULSE_PWM,
.short_width = 400,
.long_width = 800,
.reset_limit = 1100,
.decode_fn = &lacrosse_ws7000_decode,
.disabled = 0,
.fields = output_fields,
}
Pulse Width Modulation with precise timing parameters.
Definition: r_device.h:13
static char * output_fields[]
Definition: lacrosse_ws7000.c:220
static int lacrosse_ws7000_decode(r_device *decoder, bitbuffer_t *bitbuffer)
LaCrosse WS7000/WS2500 weather sensors.
Definition: lacrosse_ws7000.c:46

◆ output_fields

char* output_fields[]
static
Initial value:
= {
"model",
"id",
"channel",
"rain_mm",
"wind_avg_km_h",
"wind_dir_deg",
"wind_dev_deg",
"temperature_C",
"humidity",
"pressure_hPa",
"light_lux",
"exposure_mins",
"mic",
NULL,
}