Begin february 2016 we started developing a weewx driver for the meteostick.
From the meteostick manual, see http://www.smartbedded.com/files/manual-en.pdf
Meteostick operates as a receiver for radio frequency data from your Davis®1 Vantage Pro2TM, Vantage Pro2 PlusTM, Vantage VueTM RF sensors or the Fine Offset HP-100x outdoor sensor array RF sensor WH24. Data is sent out by these devices in license free RF bands (915 MHz in the US/AU, 868 MHz in Europe) where Meteostick listens and makes data available for computation. Meteostick can report data as
• explanatory text or
• ready computed data to feed your programs or
• raw data 1:1 as the sensors send it without any processing
Our team
Frank Bandle who is testing the meteostick driver on several Raspberry PI systems and with both Vantage Vue and Vantage Pro2 stations
Matthew
Wall who wrote the initial driver and maintain the github
repository
https://github.com/matthewwall/weewx-meteostick
Luc
Heijst who co-writes part of the logic (which is usually not very
pythonic!)
Recently Luc also tests the meteostick driver with his
own Vantage Pro2. This configuration has also a solar sensor, an
Anemometer Transport Kit, an Leaf-Soil station with Soil moisture
and Soil temperature sensors and a leaf wetnes sensor.
Via this topic we will inform you about the progress.
We started first our driver with parsing the so called machine readable data ('o1').
An example of this data is:
T 3 20.8 36 -53 L
W 3 0.00 261 -53 L
W 1 0.44 241 -67
R 2 128 -67
R 3 128 -53 L
W 3 0.00 261 -53 L
R 1 44 -66
B 35.2 1023.57
W 1 0.44 233 -68
L 7 2 0 -52
W 2 0.00 83 -72
T 1 19.6 41 -66
W 3 0.00 261 -54 L
M 7 1 49 -51
O 7 1 22.3 -51
W 2 0.00 83 -66
W 1 0.00 234 -66
T 3 20.8 37 -54 L
P 1 21.1 -68
R 3 128 -52 L
W 1 0.00 234 -67
U 3 0.4 -58 L
Where "T" stands for the message with outside temperature and outside humidity
and "W" for a message with wind and gust etc.The "L" at the end of some lines indicates a low battery.
Problems with the machine readable output format
This format had two problems as we know by now:
The throughput of wind samples appear to be 4 times less than it should be. A very poor average of 1 wind sample per 9.4 seconds!
The data of the leaf wetness channels 1 and 2 are reversed.
Firmware
The firmware of the meteostick can be loaded via a module embedded in the meteohub software. No need to buy or activate a licence for this.
The problem with the firmware versions is that we could not find a list with release notes.
The website of the meteostick: http://www.smartbedded.com/wiki/index.php/Meteostick offers a link to the latest firmware file. This file has a general name. No information whatsoever which version this is.
All firmware versions can be downloaded from this site: http://tau.meteobridge.com/files/
User manual
The small user manual is not updated for a while.
Missing are several configuration commands with their meanings.
The wrap around of the rain counter is at 127 and not as 255 as the manual says.
The "B" data for both machine readable output as raw output (more later) describe parameters for number of goof packets and nummer of failed RF packtets which now have another meaning. It's a guess to find out their current meaning.
Parameters not described in the user manual
?
# Show current settings (here: default) settings
# Possible commands are: r, ?, m, t, r, v, d, l, b, x, o, p, c, f
v0 or v1
# Set verbose: 0=off, 1=on; default off
d0 or d1
# Set debug: 0=off, 1=on; default off
l0 or l1
# Set ledmode 0=led active high, 1=led active low; default low
Bug: setting l1 presets in fact the bright mode; the texts are reversed!
b0 or b1
# Set bandwidth 0=narrow, 1=width; default narrow
p0 or p1
# Set probe 0, 0=probe mode off, 1=probe mode on; default off
# mode = on allows moisture sensors without temp probe for Davis Vantage
r0 - r255
# Set repeater 0-255; 8 bits, same concept as with transmitters; default 255
c0 - c255
# Set channel 255; function and use not known yet; default 255
x0 - x250 (or x255?)
# Set rf threshold
RF threshold
The most important command of the 'hidden features' above is the set rf threshold.
The given value is twice the desired rf threshold in [minus] dB.
Example: a threshold of -80 dB is set with command x160.
Each received message from the meteostich contains the current signal strength.
This is very handy with trouble shooting because:
When the rf threshold is is too low (e.g. x100 for - 50 dB) only messages with a stronger signal than -50 db will come through. Worst case: no single message will be received.
When the rf threshold is too high (e.g. x250 for -125 dB) the meteostick receiver will pick up so much noise that (again) no single message will be received.
The advice is to set the rf threshold 10 dB higher than the weakest received signal.
Example: the messages have signal strengths varying from -63 dB to -78 dB.
The rf threshold should then be set to 2 * (78 + 10) = x176 for a threshold of -88 dB.
Raw message format
After the detection of the bad throughput of the "machine readable format" we switched to the "raw format". In fact this format is the same as Davis uses between the stations and the console or envoy.
The raw format has two flavours:
8 bytes data of which 2 bytes contain a CRC check.
10 bytes data. The first 8 bytes of this format are the same as the 8-byte format. It contains two extra bytes which are always zero when no repeaters are used.
We
choosed the 8-bit raw data, selectable with command 'o0'.
Documentation of the raw data messages
Neither Davis nor Smartbedded publish the details of the raw format.
We found several publications on the internet which helped us start.
The document of dekay "Davis RFM69" contain a lot of useful data and also links to other information. See: https://github.com/dekay/DavisRFM69/wiki/Message-Protocol
OK, enough for now as a start of this topic. To be continued.
Luc Heijst
Interesting find. There's some confusion around the leaf/soil calculations as well, IIRC.
However, I cannot find your above changes at https://github.com/matthewwall/weewx-meteostick/ - am I looking at the rigth repo?
elif message_type == 7:
# solar cell output / solar power (Vue only)
# message example:
# I 102 70 1 F5 CE 43 86 58 E2 -77 2562532 173
"""When the raw values are divided by 300 the voltage comes in
the range of 2.8-3.3 V measured by the machine readable format
"""
solar_power_raw = ((pkt[3] << 2) + (pkt[4] >> 6)) & 0x3FF
if solar_power_raw != 0x3FF:
data['solar_power'] = solar_power_raw / 300.0
if message_type == 2:
# supercap voltage (Vue only) max: 0x3FF (1023)
# message example:
# I 103 20 4 C3 D4 C1 81 89 EE -77 2562520 -70
"""When the raw values are divided by 300 the maximum voltage
of the super capacitor will be about 2.8 V. This is close to
its maximum operating voltage of 2.7 V
"""
supercap_volt_raw = ((pkt[3] << 2) + (pkt[4] >> 6)) & 0x3FF
if supercap_volt_raw != 0x3FF:
data['supercap_volt'] = supercap_volt_raw / 300.0
More to come...
With thanks to Kobuki for his assistance!
Luc
-- "... rainRate should not be in the driver at all. the hardware reports a value that is arbitrary, and the rainRate calculation is yet a different arbitrary calculation ..." - well, the rf packets provide a raw value, which we convert to rainfall/time period values. What do you mean by arbitrary here? I agree it should be done in a single unified way, though, to be able to provide comparable results across devices.
-- We only fully process the raw radio packet data. I'm still of the opinion that just because the machine readable values come handy sometimes, we shouldn't keep it. It's sparsely reporting certain values and generally use unknown converison algorithms (even if they are accurate and correct, we have no way to tell). I'd say as part of the simplification, we should drop it entirely from the driver.
Not completely related, but is there an SDR driver with comparable functionality? I think it wouldn't be a bad idea to use one as the radio capture part and adopt the rest of the current MS driver for the decoding.