This commit is contained in:
Matthew Wall
2016-02-06 13:04:16 -05:00
5 changed files with 266 additions and 80 deletions

View File

@@ -55,6 +55,10 @@ a value of 0.02589 in (0.6578 mm) per bucket tip.
The station has altitude, latitude, longitude, and time.
Setting the time does not persist. If you set the station time using weewx,
the station initially indicates that it is set to the new time, but then it
reverts.
Notes From/About Other Implementations
Apparently te923tool came first, then wview copied a bit from it. te923tool
@@ -422,11 +426,12 @@ schema, these are the additional fields that must be added to the schema:
('storm', 'REAL'),
"""
# FIXME: flush the usb buffer at startup so we do not fail
# TODO: figure out how to read station pressure from station
# TODO: figure out how to clear station memory
# TODO: clear rain total
# FIXME: set-date and sync-date do not work - something reverts the clock
# FIXME: is there any way to get rid of the bad header byte on first read?
from __future__ import with_statement
import syslog
@@ -437,7 +442,7 @@ import weewx.drivers
import weewx.wxformulas
DRIVER_NAME = 'TE923'
DRIVER_VERSION = '0.16'
DRIVER_VERSION = '0.17'
def loader(config_dict, engine):
return TE923Driver(**config_dict[DRIVER_NAME])
@@ -722,6 +727,8 @@ class TE923Configurator(weewx.drivers.AbstractConfigurator):
parser.add_option("--set-date", dest="setdate",
type=str, metavar="YEAR,MONTH,DAY",
help="set station date")
parser.add_option("--sync-date", dest="syncdate", action="store_true",
help="set station date using system clock")
parser.add_option("--get-location-local", dest="loc_local",
action="store_true",
help="display local location and timezone")
@@ -737,7 +744,7 @@ class TE923Configurator(weewx.drivers.AbstractConfigurator):
parser.add_option("--get-altitude", dest="getalt", action="store_true",
help="display altitude")
parser.add_option("--set-altitude", dest="setalt", type=int,
metavar="ALT", help="set altitude")
metavar="ALT", help="set altitude (meters)")
parser.add_option("--get-alarms", dest="getalarms",
action="store_true", help="display alarms")
parser.add_option("--set-alarms", dest="setalarms", type=str,
@@ -746,7 +753,7 @@ class TE923Configurator(weewx.drivers.AbstractConfigurator):
action="store_true", help="display archive interval")
parser.add_option("--set-interval", dest="setinterval",
type=str, metavar="INTERVAL",
help="set archive interval")
help="set archive interval (seconds)")
parser.add_option("--format", dest="format",
type=str, metavar="FORMAT", default='table',
help="formats include: table, dict")
@@ -773,6 +780,8 @@ class TE923Configurator(weewx.drivers.AbstractConfigurator):
self.show_date(station)
elif options.setdate is not None:
self.set_date(station, options.setdate)
elif options.syncdate:
self.set_date(station, None)
elif options.loc_local is not None:
self.show_location(station, 0)
elif options.setloc_local is not None:
@@ -830,7 +839,6 @@ class TE923Configurator(weewx.drivers.AbstractConfigurator):
print "Rain yesterday : %s" % data['rain_yesterday']
print "Rain this week : %s" % data['rain_week']
print "Rain this month : %s" % data['rain_month']
# FIXME: verify date format and local/gm time here
print "Last Barometer reading : %s" % time.strftime(
"%Y %b %d %H:%M", time.localtime(data['barometer_ts']))
for i in range(25):
@@ -845,22 +853,25 @@ class TE923Configurator(weewx.drivers.AbstractConfigurator):
@staticmethod
def set_date(station, datestr):
date_list = datestr.split(',')
if len(date_list) != 3:
print "Bad date '%s', format is YEAR,MONTH,DAY" % datestr
return
if int(date_list[0]) < 2000 or int(date_list[0]) > 2099:
print "Year must be between 2000 and 2099 inclusive"
return
if int(date_list[1]) < 1 or int(date_list[1]) > 12:
print "Month must be between 1 and 12 inclusive"
return
if int(date_list[2]) < 1 or int(date_list[2]) > 31:
print "Day must be between 1 and 31 inclusive"
return
tt = time.localtime()
offset = 1 if tt[3] < 12 else 0
ts = time.mktime((int(date_list[0]), int(date_list[1]), int(date_list[2]) - offset, 0, 0, 0, 0, 0, 0))
if datestr is not None:
date_list = datestr.split(',')
if len(date_list) != 3:
print "Bad date '%s', format is YEAR,MONTH,DAY" % datestr
return
if int(date_list[0]) < 2000 or int(date_list[0]) > 2099:
print "Year must be between 2000 and 2099 inclusive"
return
if int(date_list[1]) < 1 or int(date_list[1]) > 12:
print "Month must be between 1 and 12 inclusive"
return
if int(date_list[2]) < 1 or int(date_list[2]) > 31:
print "Day must be between 1 and 31 inclusive"
return
tt = time.localtime()
offset = 1 if tt[3] < 12 else 0
ts = time.mktime((int(date_list[0]), int(date_list[1]), int(date_list[2]) - offset, 0, 0, 0, 0, 0, 0))
else:
ts = time.time()
station.set_date(ts)
TE923Configurator.print_alignment()
@@ -1088,8 +1099,8 @@ class TE923Configurator(weewx.drivers.AbstractConfigurator):
@staticmethod
def print_alignment():
print "NB: If computer time is not aligned to station time then"
print " date may be incorrect by 1 day"
print " If computer time is not aligned to station time then date"
print " may be incorrect by 1 day"
class TE923Driver(weewx.drivers.AbstractDevice):
@@ -1128,6 +1139,7 @@ class TE923Driver(weewx.drivers.AbstractDevice):
self.station = TE923Station(max_tries=self.max_tries,
retry_wait=self.retry_wait)
self.station.open()
loginf('logger capacity %s records' % self.station.get_memory_size())
def closePort(self):
if self.station is not None:
@@ -1261,6 +1273,11 @@ STATE_OK = 'ok'
STATE_INVALID = 'invalid'
STATE_NO_LINK = 'no_link'
def _fmt(buf):
if buf:
return ' '.join(["%02x" % x for x in buf])
return ''
def bcd2int(bcd):
return int(((bcd & 0xf0) >> 4) * 10) + int(bcd & 0x0f)
@@ -1472,6 +1489,9 @@ class BadRead(weewx.WeeWxIOError):
class BadWrite(weewx.WeeWxIOError):
"""Bogus data length, header block, or other write failure"""
class BadHeader(weewx.WeeWxIOError):
"""Bad header byte"""
class TE923Station(object):
ENDPOINT_IN = 0x81
READ_LENGTH = 0x8
@@ -1564,10 +1584,10 @@ class TE923Station(object):
time.sleep(0.1) # te923tool is 0.3
start_ts = time.time()
rbuf = []
while time.time() - start_ts < 5:
while time.time() - start_ts < 1:
try:
buf = self.devh.interruptRead(self.ENDPOINT_IN,
self.READ_LENGTH, self.TIMEOUT)
buf = self.devh.interruptRead(
self.ENDPOINT_IN, self.READ_LENGTH, self.TIMEOUT)
if buf:
nbytes = buf[0]
if nbytes > 7 or nbytes > len(buf) - 1:
@@ -1581,6 +1601,7 @@ class TE923Station(object):
raise weewx.WeeWxIOError(e)
time.sleep(0.009) # te923tool is 0.15
else:
logdbg("timeout while reading: ignoring bytes: %s" % _fmt(rbuf))
raise BadRead("Timeout after %d bytes" % len(rbuf))
if len(rbuf) < 34:
@@ -1588,7 +1609,7 @@ class TE923Station(object):
elif len(rbuf) != 34:
loginf("read: wrong number of bytes: %d != 34" % len(rbuf))
if rbuf[0] != 0x5a:
raise BadRead("Bad header byte: %02x != %02x" % (rbuf[0], 0x5a))
raise BadHeader("Bad header byte: %02x != %02x" % (rbuf[0], 0x5a))
crc = 0x00
for x in rbuf[:33]:
@@ -1632,7 +1653,7 @@ class TE923Station(object):
wbuf[3 + i * 7], wbuf[4 + i * 7], wbuf[5 + i * 7],
wbuf[6 + i * 7]]
if DEBUG_WRITE:
logdbg("write: %s" % ' '.join(["%02x" % x for x in reqbuf]))
logdbg("write: %s" % _fmt(reqbuf))
ret = self.devh.controlMsg(requestType=0x21,
request=usb.REQ_SET_CONFIGURATION,
value=0x0200,
@@ -1648,9 +1669,8 @@ class TE923Station(object):
rbuf = []
while time.time() - start_ts < 5:
try:
tmpbuf = self.devh.interruptRead(self.ENDPOINT_IN,
self.READ_LENGTH,
self.TIMEOUT)
tmpbuf = self.devh.interruptRead(
self.ENDPOINT_IN, self.READ_LENGTH, self.TIMEOUT)
if tmpbuf:
nbytes = tmpbuf[0]
if nbytes > 7 or nbytes > len(tmpbuf) - 1:
@@ -1671,7 +1691,7 @@ class TE923Station(object):
if len(rbuf) == 0:
raise BadWrite("Bad ack: zero length response")
elif rbuf[0] != 0x5a:
raise BadWrite("Bad header byte: %02x != %02x" % (rbuf[0], 0x5a))
raise BadHeader("Bad header byte: %02x != %02x" % (rbuf[0], 0x5a))
def _read(self, addr):
if DEBUG_READ:
@@ -1680,9 +1700,9 @@ class TE923Station(object):
try:
buf = self._raw_read(addr)
if DEBUG_READ:
logdbg("read: %s" % ' '.join(["%02x" % x for x in buf]))
logdbg("read: %s" % _fmt(buf))
return buf
except (BadRead, usb.USBError), e:
except (BadRead, BadHeader, usb.USBError), e:
logerr("Failed attempt %d of %d to read data: %s" %
(cnt + 1, self.max_tries, e))
logdbg("Waiting %d seconds before retry" % self.retry_wait)
@@ -1693,13 +1713,12 @@ class TE923Station(object):
def _write(self, addr, buf):
if DEBUG_WRITE:
logdbg("write: address 0x%06x: %s" %
(addr, ' '.join(["%02x" % x for x in buf])))
logdbg("write: address 0x%06x: %s" % (addr, _fmt(buf)))
for cnt in range(self.max_tries):
try:
self._raw_write(addr, buf)
return
except (BadWrite, usb.USBError), e:
except (BadWrite, BadHeader, usb.USBError), e:
logerr("Failed attempt %d of %d to write data: %s" %
(cnt + 1, self.max_tries, e))
logdbg("Waiting %d seconds before retry" % self.retry_wait)
@@ -1713,16 +1732,19 @@ class TE923Station(object):
if buf[1] == 0:
self._num_rec = 208
self._num_blk = 256
loginf("detected small memory size")
logdbg("detected small memory size")
elif buf[1] == 2:
self._num_rec = 3442
self._num_blk = 4096
loginf("detected large memory size")
logdbg("detected large memory size")
else:
msg = "Unrecognised memory size '%s'" % buf[1]
logerr(msg)
raise weewx.WeeWxIOError(msg)
def get_memory_size(self):
return self._num_rec
def gen_blocks(self, count=None):
"""generator that returns consecutive blocks of station memory"""
if not count:
@@ -1911,7 +1933,6 @@ class TE923Station(object):
data['rain_yesterday'] = (buf[42] * 0x100 + buf[41]) * 0.6578
data['rain_week'] = (buf[44] * 0x100 + buf[43]) * 0.6578
data['rain_month'] = (buf[46] * 0x100 + buf[45]) * 0.6578
# FIXME: verify the date calculation
tt = time.localtime()
offset = 1 if tt[3] < 12 else 0
month = bcd2int(buf[47] & 0xf)
@@ -2261,7 +2282,7 @@ if __name__ == '__main__':
print data
def print_hex(ptr, data):
print "0x%06x %s" % (ptr, ' '.join(["%02x" % x for x in data]))
print "0x%06x %s" % (ptr, _fmt(data))
def print_table(data):
"""output entire dictionary contents in two columns"""

View File

@@ -9,6 +9,8 @@ Fixed bug in wmr300 driver when receiving empty buffers from the station.
The type of MySQL database engine can now be specified. Default is 'INNODB'.
Updated userguide with capabilities of the TE923 driver added in 3.4.0.
3.4.0 01/16/2016

View File

@@ -6190,127 +6190,127 @@ xstats/bin/user/xstats.py</pre>
<tr>
<td class='first_col'>barometer</td>
<td>H</td>
<td></td>
<td>H</td>
</tr>
<tr>
<td class='first_col'>pressure</td>
<td>S</td>
<td></td>
<td>S</td>
</tr>
<tr>
<td class='first_col'>altimeter</td>
<td>S</td>
<td></td>
<td>S</td>
</tr>
<tr>
<td class='first_col'>inTemp</td>
<td>H</td>
<td></td>
<td>H</td>
</tr>
<tr>
<td class='first_col'>outTemp</td>
<td>H</td>
<td></td>
<td>H</td>
</tr>
<tr>
<td class='first_col'>inHumidity</td>
<td>H</td>
<td></td>
<td>H</td>
</tr>
<tr>
<td class='first_col'>outHumidity</td>
<td>H</td>
<td></td>
<td>H</td>
</tr>
<tr>
<td class='first_col'>windSpeed</td>
<td>H</td>
<td></td>
<td>H</td>
</tr>
<tr>
<td class='first_col'>windDir</td>
<td>H</td>
<td></td>
<td>H</td>
</tr>
<tr>
<td class='first_col'>windGust</td>
<td>H</td>
<td></td>
<td>H</td>
</tr>
<tr>
<td class='first_col'>windGustDir</td>
<td>D</td>
<td></td>
<td>D</td>
</tr>
<tr>
<td class='first_col'>rain</td>
<td>H</td>
<td></td>
<td>H</td>
</tr>
<tr>
<td class='first_col'>rainRate</td>
<td>S</td>
<td></td>
<td>S</td>
</tr>
<tr>
<td class='first_col'>dewpoint</td>
<td>S</td>
<td></td>
<td>S</td>
</tr>
<tr>
<td class='first_col'>windchill</td>
<td>H/S</td>
<td></td>
<td>H/S</td>
</tr>
<tr>
<td class='first_col'>heatindex</td>
<td>S</td>
<td></td>
<td>S</td>
</tr>
<tr>
<td class='first_col'>UV<sup>1</sup></td>
<td>H</td>
<td></td>
<td>H</td>
</tr>
<tr>
<td class='first_col'>extraTemp1</td>
<td>H</td>
<td></td>
<td>H</td>
</tr>
<tr>
<td class='first_col'>extraTemp2</td>
<td>H</td>
<td></td>
<td>H</td>
</tr>
<tr>
<td class='first_col'>extraTemp3</td>
<td>H</td>
<td></td>
<td>H</td>
</tr>
<tr>
<td class='first_col'>extraTemp4</td>
<td>H</td>
<td></td>
<td>H</td>
</tr>
<tr>
<td class='first_col'>extraHumid1</td>
<td>H</td>
<td></td>
<td>H</td>
</tr>
<tr>
<td class='first_col'>extraHumid2</td>
<td>H</td>
<td></td>
<td>H</td>
</tr>
<tr>
<td class='first_col'>extraHumid3</td>
<td>H</td>
<td></td>
<td>H</td>
</tr>
<tr>
<td class='first_col'>extraHumid4</td>
<td>H</td>
<td></td>
<td>H</td>
</tr>
<tr>
<td class='first_col'>txBatteryStatus</td>

View File

@@ -1269,7 +1269,7 @@ Options:
<pre class="tty cmd">wee_config --list-drivers</pre>
<p>This will result in something like this:</p>
<p>This will result in something like:</p>
<pre class="tty">
Module name Driver name Version Status
@@ -1635,6 +1635,18 @@ longitude = -77.0366</pre>
<p>This section is for options relating to the Fine Offset series of
weather stations with USB connectors.</p>
<p class="warning">The following settings are <strong>highly</strong>
recommended for Fine Offset stations. Using hardware record generation
or adaptive polling is more likely to cause USB communication failure.
Using hardware record generation will cause delays in report
generation.</p>
<pre class='tty'>
[FineOffsetUSB]
polling_mode = PERIODIC
polling_interval = 60
[StdArchive]
record_generation = software</pre>
<p class="config_important">model</p>
<p>Set to the station model. For example, WH1080, WS2080, WH3081, etc. </p>
@@ -2481,6 +2493,11 @@ longitude = -77.0366</pre>
<span class="code">StdArchive</span>, so that it is the corrected data that
are stored. </p>
<p>In a default configuration, calibrations are applied to
observations from the hardware. They are not applied to derived
calculations since the <span class="code">StdWXCalculate</span>
service runs after <span class="code">StdCalibrate</span>.</p>
<h3 class="config_section">[[Corrections]]</h3>
<p>In this section you list all <em>correction expressions</em>. For example,
@@ -2520,6 +2537,11 @@ longitude = -77.0366</pre>
</span>and before the archiving service <span class="code">StdArchive</span>,
so that it is the calibrated and corrected data that are stored. </p>
<p>In a default configuration, quality control checks are applied to
observations from the hardware. They are not applied to derived
calculations since the <span class="code">StdWXCalculate</span>
service runs after the quality control.</p>
<h3 class="config_section">[[MinMax]]</h3>
<p>In this section you list the observation types you wish to have checked,
@@ -2584,6 +2606,12 @@ longitude = -77.0366</pre>
<li>dewpoint</li>
<li>inDewpoint</li>
<li>rainRate</li>
<li>maxSolarRad</li>
<li>cloudbase</li>
<li>humidex</li>
<li>appTemp</li>
<li>ET</li>
<li>windrun</li>
</ul>
<p>In its default configuration, the service calculates values only if
they have not already been provided by the hardware or driver. This is
@@ -3013,7 +3041,9 @@ report_services = weewx.engine.StdPrint, weewx.engine.StdReport
<p>The CC3000 driver supports catchup on startup, but it does not
support hardware record generation.</p>
<p>When the <span class='code'>station_type</span> is
<p>The <span class='code'>wee_device</span> utility can be used to
configure the station hardware. When the
<span class='code'>station_type</span> is
<span class='code'>CC3000</span>,
the <span class='code'>--help</span> option will produce output
something like this:</p>
@@ -3043,7 +3073,7 @@ Mutating actions will request confirmation before proceeding.</pre>
<p>Display the station settings with the <span class='code'>--info</span>
option.</p>
<pre class="tty cmd">wee_device --info</pre>
<p>This will result in something like this:</p>
<p>This will result in something like:</p>
<pre class='tty'>firmware: Rainwise CC-3000 Version: 1.3 Build 006 Sep 04 2013
time: 2014/06/02 08:22:17
units: ENGLISH
@@ -3078,7 +3108,9 @@ interval: 1</pre>
to download all records from the console since the last record in
the archive database.</p>
<p>When the <span class='code'>station_type</span> is
<p>The <span class='code'>wee_device</span> utility can be used to
configure the station hardware. When the
<span class='code'>station_type</span> is
<span class='code'>FineOffsetUSB</span>,
the <span class='code'>--help</span> option will produce output
something like this:</p>
@@ -3112,7 +3144,7 @@ Mutating actions will request confirmation before proceeding.</pre>
<p>Display the station settings with the <span class='code'>--info</span>
option.</p>
<pre class="tty cmd">wee_device --info</pre>
<p>This will result in something like this:</p>
<p>This will result in something like:</p>
<pre class='tty'>Fine Offset station settings:
local time: 2013.02.11 18:34:28 CET
polling_mode: ADAPTIVE
@@ -3229,13 +3261,146 @@ Mutating actions will request confirmation before proceeding.</pre>
database field.
</p>
<p>The station has either 200 or 3300 history records, depending on
the model. That is just over a day (200 records) or about 23 days
(3300 records) with an archive interval of 5 minutes.</p>
<p>The station has either 208 or 3442 history records, depending on
the model. That is just over a day (208 records) or about 23 days
(3442 records) with an archive interval of 5 minutes.</p>
<p>The TE923 driver will read history records from the station when weewx
starts up, but it does not support hardware record generation.</p>
<p>The <span class='code'>wee_device</span> utility can be used to
configure the station hardware. When the
<span class='code'>station_type</span> is
<span class='code'>TE932</span>,
the <span class='code'>--help</span> option will produce output
something like this:</p>
<pre class='tty'>Using configuration file /home/weewx/weewx.conf
Using TE923 driver version 0.16 (weewx.drivers.te923)
Usage: wee_device [config_file] [options] [--debug] [--help]
Configuration utility for weewx devices.
Options:
-h, --help show this help message and exit
--debug display diagnostic information while running
-y answer yes to every prompt
--info display weather station configuration
--current get the current weather conditions
--history=N display N history records
--history-since=N display history records since N minutes ago
--minmax display historical min/max data
--get-date display station date
--set-date=YEAR,MONTH,DAY
set station date
--get-location-local display local location and timezone
--set-location-local=CITY|USR,LONG_DEG,LONG_MIN,E|W,LAT_DEG,LAT_MIN,N|S,TZ,DST
set local location and timezone
--get-location-alt display alternate location and timezone
--set-location-alt=CITY|USR,LONG_DEG,LONG_MIN,E|W,LAT_DEG,LAT_MIN,N|S,TZ,DST
set alternate location and timezone
--get-altitude display altitude
--set-altitude=ALT set altitude
--get-alarms display alarms
--set-alarms=WEEKDAY,SINGLE,PRE_ALARM,SNOOZE,MAXTEMP,MINTEMP,RAIN,WIND,GUST
set alarm state
--get-interval display archive interval
--set-interval=INTERVAL
set archive interval
--format=FORMAT formats include: table, dict
Be sure to stop weewx first before using. Mutating actions will request
confirmation before proceeding.</pre>
<h3>Station information</h3>
<p>Use the <span class="code">--info</span> option to display the
station configuration:</p>
<pre class="tty cmd">wee_device --info</pre>
<p>This will result in something like:</p>
<pre class="tty">Querying the station for the configuration...
altitude: 16
bat_1: True
bat_2: True
bat_3: True
bat_4: True
bat_5: True
bat_rain: True
bat_uv: False
bat_wind: True
latitude: 43.35
longitude: -72.0
version_bar: 23
version_rcc: 16
version_sys: 41
version_uv: 20
version_wind: 38</pre>
<h3>Display sensor status</h3>
<p>Use the <span class="code">--current</span> option to display the
current status of each sensor:</p>
<pre class="tty cmd">wee_device --current</pre>
<p>This will result in something like:</p>
<pre class="tty">Querying the station for current weather data...
dateTime: 1454615168
forecast: 5
h_1: 41
h_1_state: ok
h_2: 48
h_2_state: ok
h_3: None
h_3_state: no_link
h_4: None
h_4_state: no_link
h_5: None
h_5_state: no_link
h_in: 44
h_in_state: ok
rain: 2723
rain_state: ok
slp: 1012.4375
slp_state: ok
storm: 0
t_1: 13.9
t_1_state: ok
t_2: 21.5
t_2_state: ok
t_3: None
t_3_state: no_link
t_4: None
t_4_state: no_link
t_5: None
t_5_state: no_link
t_in: 22.85
t_in_state: ok
uv: None
uv_state: no_link
windchill: None
windchill_state: invalid
winddir: 12
winddir_state: invalid
windgust: None
windgust_state: invalid
windspeed: None
windspeed_state: invalid</pre>
<h3 id="te923_changing_the_archive_interval">Changing the archive interval</h3>
<p>TE923 stations ship from the factory with an archive interval of 1
hour (3600 seconds). To change the station's
interval to 5 minutes (300 seconds), do the following:</p>
<p class="tty cmd">wee_device --set-interval=300</p>
<h3 id="te923_dumping_the_logger_memory">Dumping the logger memory</h3>
<p><span class='code'>wee_device</span> can display the records from the
logger in tabular or dictionary format.</p>
<p>For example, to display the most recent 30 records:</p>
<pre class="tty cmd">wee_device --history=30 --format dict</pre>
<h2 id="wee_device_ultimeter">Ultimeter</h2>
@@ -3325,7 +3490,7 @@ confirmation before proceeding.</pre>
<p>Use the <span class="code">--info</span> option to display the
current EEPROM settings: </p>
<pre class="tty cmd">wee_device --info</pre>
<p>This will print out something like: </p>
<p>This will result in something like:</p>
<pre class="tty">Davis Vantage EEPROM settings:
CONSOLE TYPE: VantagePro2
@@ -3591,7 +3756,7 @@ Mutating actions will request confirmation before proceeding.</pre>
<p>Display the station settings with the <span class='code'>--info</span>
option.</p>
<pre class="tty cmd">wee_device --info </pre>
<p>This will result in something like this:</p>
<p>This will result in something like:</p>
<pre class='tty'>buzzer: 0
connection time till connect: 1.5
connection type: 15
@@ -3761,7 +3926,7 @@ Transceiver is paired to console</pre>
<p class="tty cmd">wee_device --info</p>
<p>This will result in something like this:</p>
<p>This will result in something like:</p>
<pre class='tty'>alarm_flags_other: 0
alarm_flags_wind_dir: 0

View File

@@ -223,9 +223,7 @@ version = 3.4.0
##############################################################################
# This section is for quality control checks. If units are not specified,
# values must be in the units defined in the StdConvert section. Quality
# control checks are applied to observations from the hardware. They are
# not applied to derived calculations.
# values must be in the units defined in the StdConvert section.
[StdQC]