Summary
Serial communication protocol between Davis Instruments Vantage Pro, Vantage Pro2, and Vantage Vue consoles (or Envoys) and a PC via a WeatherLink Standard Data Logger. Primarily ASCII command strings over RS-232; archive records also retrievable via HTTP GET from weatherlink.com. Covers current data polling (LOOP/LOOP2), high/low retrieval (HILOWS), archive download (DMP/DMPAFT), EEPROM read/write, calibration, clearing, and configuration commands.
Transport
protocols:
- serial
- http
serial:
baud_rate: 19200 # default; user-selectable: 1200, 2400, 4800, 9600, 14400, 19200
data_bits: 8
parity: none
stop_bits: 1
flow_control: null # UNRESOLVED: flow control not stated in source
# Note: source also specifies "1 start bit" (standard for async serial)
addressing:
base_url: "http://weatherlink.com/webdl.php" # web download endpoint; no "www." subdomain
# UNRESOLVED: HTTP auth via user/pass query params (credentials not stated - operator-supplied account)
auth:
type: none # inferred: no serial login procedure in source; HTTP uses account credentials in URL query string
Traits
# - queryable # LOOP/LPS/HILOWS/GETTIME/VER/NVER/RXCHECK/RECEIVERS/BARDATA/GETEE/EERD/EEBRD/CALED all return data
# - levelable # BAUD, SETPER, BAR=, SETTIME, calibration offsets set scalar parameters
# - powerable # inferred: no power command present - LAMPS is closest (console lamp on/off)
traits:
- queryable
- levelable
Actions
# All commands terminated by single LF (0x0A) OR single CR (0x0D) - NOT both. VP2 requires this strictly.
# Console must be woken (send LF, await \n\r) before sending any command. See Notes.
# ---- 1. Testing commands ----
- id: test
label: Test
kind: action
command: "TEST"
params: []
- id: wrd_station_type
label: Read Station Type (WRD)
kind: query
command: "WRD\x12\x4D" # WRD followed by bytes 0x12 0x4D
params: []
- id: rxcheck
label: Console Diagnostics Report
kind: query
command: "RXCHECK"
params: []
- id: rxtest
label: Exit Receiving-From Screen
kind: action
command: "RXTEST"
params: []
- id: ver
label: Firmware Date Code
kind: query
command: "VER"
params: []
- id: receivers
label: Received Station ID Bitmap
kind: query
command: "RECEIVERS"
params: []
- id: nver
label: Firmware Version Number
kind: query
command: "NVER"
params: [] # VP2 fw 1.90+ and Vue only
# ---- 2. Current Data commands ----
- id: loop
label: Request LOOP Packets
kind: query
command: "LOOP {count}"
params:
- name: count
type: integer
description: Number of LOOP packets to send (decimal); one packet every 2 seconds
- id: lps
label: Request Typed LOOP Packets
kind: query
command: "LPS {mask} {count}"
params:
- name: mask
type: integer
description: Loop packet type bitmask (hex per source); bit0=LOOP, bit1=LOOP2
- name: count
type: integer
description: Total number of packets to send (decimal)
- id: hilows
label: High/Low Data Block
kind: query
command: "HILOWS"
params: [] # returns 436-byte block + 2-byte CRC
- id: putrain
label: Set Yearly Rainfall
kind: action
command: "PUTRAIN {yearly_rain_clicks}"
params:
- name: yearly_rain_clicks
type: integer
description: Yearly rain in rain clicks (decimal)
- id: putet
label: Set Yearly ET
kind: action
command: "PUTET {yearly_et}"
params:
- name: yearly_et
type: integer
description: Yearly ET in 100th inch (decimal)
# ---- 3. Download commands ----
- id: dmp
label: Download Entire Archive
kind: query
command: "DMP"
params: []
- id: dmpaft
label: Download Archive After Timestamp
kind: query
command: "DMPAFT"
params: [] # after ACK, send 2-byte vantageDateStamp + 2-byte vantageTimeStamp + 2-byte CRC
# ---- 4. EEPROM commands ----
- id: getee
label: Read Full EEPROM
kind: query
command: "GETEE"
params: [] # 4096-byte block + 2-byte CRC
- id: eerd
label: EEPROM Read (text)
kind: query
command: "EERD {address} {bytes}"
params:
- name: address
type: integer
description: EE address (hex)
- name: bytes
type: integer
description: Number of bytes to read (hex)
- id: eewr
label: EEPROM Write One Byte (text)
kind: action
command: "EEWR {address} {data}"
params:
- name: address
type: integer
description: EE address (hex)
- name: data
type: integer
description: One byte of EE data (hex)
- id: eebrd
label: EEPROM Binary Read
kind: query
command: "EEBRD {address} {bytes}"
params:
- name: address
type: integer
description: EE address (hex)
- name: bytes
type: integer
description: Number of bytes to read (hex)
- id: eebwr
label: EEPROM Binary Write
kind: action
command: "EEBWR {address} {bytes}"
params:
- name: address
type: integer
description: EE address (hex)
- name: bytes
type: integer
description: Number of bytes to write (hex); binary data + CRC follow ACK
# ---- 5. Calibration commands ----
- id: caled
label: Read Calibrated Sensor Values
kind: query
command: "CALED"
params: [] # 43-byte data block + 2-byte CRC
- id: calfix
label: Apply Calibration Update
kind: action
command: "CALFIX"
params: [] # send 43 bytes of raw sensor values + 2-byte CRC after ACK
- id: bar_set
label: Set Barometer/Elevation
kind: action
command: "BAR={bar_value} {elevation}"
params:
- name: bar_value
type: integer
description: Bar value to display (in Hg * 1000), decimal; 0 to clear offset; 20000..32500 if non-zero
- name: elevation
type: integer
description: Elevation in feet (decimal); range -2000..15000
- id: bardata
label: Read Barometer Calibration
kind: query
command: "BARDATA"
params: []
# ---- 6. Clearing commands ----
- id: clrlog
label: Clear Archive Data
kind: action
command: "CLRLOG"
params: []
- id: clralm
label: Clear Alarm Thresholds
kind: action
command: "CLRALM"
params: [] # wait for DONE before next command
- id: clrcal
label: Clear Temp/Hum Calibration
kind: action
command: "CLRCAL"
params: [] # wait for DONE
- id: clrgra
label: Clear Graph Points
kind: action
command: "CLRGRA"
params: [] # wait for DONE
- id: clrvar
label: Clear Rain/ET Variable
kind: action
command: "CLRVAR {variable}"
params:
- name: variable
type: integer
description: Data variable number (decimal); 13=DailyRain,14=StormRain,16=MonthRain,17=YearRain,25=MonthET,26=DayET,27=YearET
- id: clrhights
label: Clear High Values
kind: action
command: "CLRHIGHS {period}"
params:
- name: period
type: integer
description: "0=daily, 1=monthly, 2=yearly"
- id: clrlows
label: Clear Low Values
kind: action
command: "CLRLOWS {period}"
params:
- name: period
type: integer
description: "0=daily, 1=monthly, 2=yearly"
- id: clrbits
label: Clear Active Alarm Bits
kind: action
command: "CLRBITS"
params: []
- id: clrdata
label: Clear Current Data to Dashes
kind: action
command: "CLRDATA"
params: []
# ---- 7. Configuration commands ----
- id: baud
label: Set Baud Rate
kind: action
command: "BAUD {rate}"
params:
- name: rate
type: integer
description: "New baud rate (decimal); valid: 1200, 2400, 4800, 9600, 14400, 19200"
- id: settime
label: Set Console Time
kind: action
command: "SETTIME"
params: [] # send 6 bytes (sec,min,hour24,day,month,year-1900) + 2-byte CRC after ACK
- id: gettime
label: Get Console Time
kind: query
command: "GETTIME"
params: []
- id: gain
label: Set Radio Receiver Gain
kind: action
command: "GAIN {state}"
params:
- name: state
type: integer
description: "'0' off, '1' on (VP only - NOT VP2/Vue)"
- id: setper
label: Set Archive Interval
kind: action
command: "SETPER {minutes}"
params:
- name: minutes
type: integer
description: "Archive interval in minutes (decimal); valid: 1, 5, 10, 15, 30, 60, 120"
- id: stop
label: Halt Archive Recording
kind: action
command: "STOP"
params: []
- id: start
label: Resume Archive Recording
kind: action
command: "START"
params: []
- id: newsetup
label: Re-initialize Console
kind: action
command: "NEWSETUP"
params: [] # MUST issue after changing lat/long, setup bits, rain collector, or transmitter config
- id: lamps
label: Set Console Lamps
kind: action
command: "LAMPS {state}"
params:
- name: state
type: integer
description: "'0' off, '1' on"
Feedbacks
# Response characters from the console (per Section VII/IX):
- id: ack
type: enum
values: ["0x06"] # ACK - command recognized
- id: nak
type: enum
values: ["0x21"] # NAK - invalid command parameters
- id: cancel
type: enum
values: ["0x18"] # CANCEL - bad CRC on received block
- id: ok_response
type: literal
values: ["\\n\\rOK\\n\\r"]
- id: done_response
type: literal
values: ["DONE\\n\\r"] # long-running command completion
- id: wakeup_ack
type: literal
values: ["\\n\\r"] # console awake response to LF wakeup
# UNRESOLVED: structured per-variable feedback shape (LOOP/HILOWS/EEPROM block field layout) documented in source Sections X-XIII but too large to inline; reference source for byte maps
Variables
# Settable parameters exposed via dedicated commands. EEPROM-mapped settings
# (calibration offsets, alarm thresholds, unit bits, station list, graph pointers)
# are read/written through EERD/EEWR/EEBRD/EEBWR - see source Sections XIII-XV
# for the full EEPROM address table.
- id: baud_rate
type: integer
unit: bps
range: [1200, 2400, 4800, 9600, 14400, 19200]
- id: archive_interval
type: integer
unit: minutes
range: [1, 5, 10, 15, 30, 60, 120]
- id: yearly_rain
type: integer
unit: rain_clicks
- id: yearly_et
type: integer
unit: "0.01 inch"
- id: bar_offset
type: integer
unit: "in Hg * 1000"
- id: elevation
type: integer
unit: feet
range: [-2000, 15000]
- id: console_time
type: struct
description: "6 bytes: sec, min, hour(24), day, month, year-1900"
- id: lamps_state
type: enum
values: [off, on]
- id: gain_state
type: enum
values: [off, on] # VP only
# UNRESOLVED: full EEPROM variable map (calibration, alarms, units, station list) - see source Sections XIII-XV
Events
# Console emits no unsolicited notifications. All data is solicited via LOOP/LPS
# (one packet every 2.0/2.5 s after request) or via query commands. LOOP packet
# streams are halted by sending a lone <CR>. Console sleeps between LOOP packets.
# UNRESOLVED: none - no async push events documented
Macros
# Multi-step procedures explicitly documented in source (Section XIV):
- id: wakeup_console
description: |
MUST run before any command. Send LF (0x0A), wait ≤1.2 s for \n\r.
Retry up to 3 attempts; on failure signal connection error.
Console stays awake 2 min after each received character (resets on each).
Exception: LOOP mode - console sleeps between packets.
steps:
- send: "\n"
- wait_for: "\n\r"
- on_timeout_retry: 3
- id: set_calibration_values
description: Per source Section XIV.1
steps:
- command: "EEBRD 32 2B" # read current offsets
- command: "CALED" # read current calibrated values
- compute: "uncalibrated = calibrated - offset"
- command: "EEBWR 32 2B" # write new offsets
- command: "CALFIX" # push uncalibrated values to refresh display
- id: set_rain_collector_type
description: Per source Section XIV.3
steps:
- command: "EEBRD 2B 01"
- compute: "rain_type = setup_bits & 0x30"
- compute: "setup_bits = (setup_bits & 0xCF) | new_rain_type"
- command: "EEBWR 2B 01"
- command: "NEWSETUP"
- id: set_transmitter_config
description: Per source Section XIV.4 - MUST end with NEWSETUP
steps:
- command: "EEBRD 19 10"
- write_station_list_via: "EEBWR 19 10"
- write_via: "EEWR 17 <USETX byte>"
- command: "NEWSETUP"
Safety
confirmation_required_for:
- clrlog # destroys entire archive memory
- clrgra # destroys all graph history
- clralm # clears all alarm thresholds
- clrcal # clears all calibration offsets
- clrdata # clears all current data
- clrhights # clears daily/monthly/yearly highs
- clrlows # clears daily/monthly/yearly lows
- eewr # raw EEPROM write - can corrupt calibration/station config
- eebwr # raw EEPROM binary write
- setper # auto-clears archive memory
interlocks:
- "Console must be woken before sending any command (see wakeup_console macro)."
- "Console ignores commands while in Setup screens (except 'Receiving From…') or number-entry mode."
- "Console ignores commands and key presses while a Download is in progress."
- "Do NOT send commands between an 'OK' and the following 'DONE' for CLRALM/CLRCAL/CLRGRA."
- "NEWSETUP must be issued after changing latitude/longitude, SETUP_BITS (EEPROM 0x2B), rain collector type, or transmitter ID/retransmit settings."
- "VP2 commands must be terminated by LF OR CR - not both. Mixed LF+CR causes intermittent failures."
- "GAIN command is VP-only; issuing on VP2/Vue is unsupported."
- "EEPROM factory calibration fields (BAR_GAIN, BAR_OFFSET, HUM33, HUM80) MUST NOT be modified."
- "Use SETPER for ARCHIVE_PERIOD and BAR= for BAR_CAL/ELEVATION rather than direct EEPROM writes."
# UNRESOLVED: no hardware interlock or power-sequencing safety warnings in source beyond above
Notes
- Multi-byte binary values are little-endian (LSB first). Negative numbers use 2's complement. CRC values are sent MSB first — opposite of data values.
- CRC algorithm is CRC-CCITT using a 256-entry lookup table (full table in source Section XII). Formula per byte:
crc = crc_table[(crc >> 8) ^ data] ^ (crc << 8). - LOOP packet is 99 bytes (fields in source Section X.1). LOOP2 packet also 99 bytes (Section X.2, VP2 fw 1.90+/Vue only). HILOWS packet is 436 bytes + 2-byte CRC.
- Archive records are 52 bytes; sent in 267-byte pages (5 records + 4 unused bytes + 2-byte CRC). 512 pages = 2560 records total.
- Two archive record formats: Rev "A" (firmware before Apr 24, 2002) and Rev "B" (on/after Apr 24, 2002). Distinguish via byte 42 of record: 0xFF = Rev A, 0x00 = Rev B. Also detectable via VER date.
- LOOP/LPS packet interval: LOOP every 2.0 s, LPS every 2.5 s. Console sleeps between packets; halt early by sending lone
<CR>(same as wakeup char). - Web download (HTTP GET to
http://weatherlink.com/webdl.php): two-step —action=headersreturns metadata, thenaction=datareturns raw 52-byte archive record stream.timestamp,user,passare query params. Do NOT prefix URL withwww.. - Console type byte from WRD: 16 = Vantage Pro/Pro2, 17 = Vantage Vue.
- WRD example payload: literal bytes
0x12 0x4Dafter the ASCIIWRD. CLRVARvalid variable numbers: 13=DailyRain, 14=StormRain, 16=MonthRain, 17=YearRain, 25=MonthET, 26=DayET, 27=YearET. Others undefined.- Battery-constrained: console maximizes sleep. Every received character resets the 2-minute wake timer (except in LOOP mode).
## Provenance
```yaml
source_domains:
- davis.cz
source_urls:
- http://www.davis.cz/download/VantageSerialProtocolDocs_v261.pdf
retrieved_at: 2026-08-02T22:04:05.538Z
last_checked_at: 2026-08-05T08:16:19.281Z
```
## Verification Summary
```yaml
verdict: verified
checked_at: 2026-08-05T08:16:19.281Z
matched_actions: 41
action_count: 41
confidence: medium
summary: "All 41 spec action wire literals found verbatim in source command catalogue; transport parameters (19200 baud, 8N1, weatherlink.com/webdl.php) confirmed; 1.0 coverage ratio. (15 unresolved item(s) noted in Known Gaps.)"
```
## Known Gaps
```yaml
- "console hardware voltage/current/power specs not in this document"
- "WeatherLink data logger USB/serial adapter details not in this document"
- "exact ASCII termination handling per-console variant (LF vs CR) — source says VP2 needs ONE of LF or CR but NOT both; older VP code mixing both fails intermittently"
- "flow control not stated in source"
- "HTTP auth via user/pass query params (credentials not stated - operator-supplied account)"
- "structured per-variable feedback shape (LOOP/HILOWS/EEPROM block field layout) documented in source Sections X-XIII but too large to inline; reference source for byte maps"
- "full EEPROM variable map (calibration, alarms, units, station list) - see source Sections XIII-XV"
- "none - no async push events documented"
- "no hardware interlock or power-sequencing safety warnings in source beyond above"
- "hardware electrical specs (voltage, current, power) not in this document"
- "WeatherLink data logger USB/serial adapter pinout not in this document"
- "serial flow control not stated in source"
- "weatherlink.com account credentials / token format operator-supplied, not in source"
- "Vantage Pro2 vs Vue ISS transmit interval formula referenced as image [412x114] omitted from source text"
- "full EEPROM graph-data layout for VP (Section XV part 2) and VP2/Vue — extensive, not inlined"
```
---
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0