mirror of
https://github.com/weewx/weewx.git
synced 2026-04-19 17:16:56 -04:00
148 lines
5.0 KiB
Python
Executable File
148 lines
5.0 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# $Id$
|
|
#
|
|
# Copyright 2013 Matthew Wall
|
|
#
|
|
# 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 3 of the License, or any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
# FOR A PARTICULAR PURPOSE.
|
|
#
|
|
# See http://www.gnu.org/licenses/
|
|
|
|
"""Command line utility for configuring Hideki TE923 weather stations"""
|
|
|
|
import optparse
|
|
import syslog
|
|
import time
|
|
|
|
import weewx.drivers.te923
|
|
import weewx.units
|
|
import weeutil.weeutil
|
|
|
|
description = """Configuration utility for TE923 weather stations."""
|
|
|
|
usage = """%prog [config_file] [options] [--debug]"""
|
|
|
|
epilog = """Mutating actions will request confirmation before proceeding."""
|
|
|
|
def main():
|
|
syslog.openlog('wee_config_te923', syslog.LOG_PID|syslog.LOG_CONS)
|
|
|
|
# Create a command line parser:
|
|
parser = optparse.OptionParser(description=description, usage=usage, epilog=epilog)
|
|
|
|
# Add the various options:
|
|
parser.add_option("--config", dest="cfgfn", type=str, metavar="FILE",
|
|
help="configuration file")
|
|
parser.add_option("--info", dest="info", action="store_true",
|
|
help="display weather station configuration")
|
|
parser.add_option("--current", dest="current", action="store_true",
|
|
help="get the current weather conditions")
|
|
parser.add_option("--history-since", dest="recmin", type=int, metavar="N",
|
|
help="display history records since N minutes ago")
|
|
parser.add_option("--history", dest="nrecords", type=int, metavar="N",
|
|
help="display N history records")
|
|
parser.add_option("--format", dest="format", type=str, metavar="FORMAT",
|
|
help="format for history, one of raw, table, or dict")
|
|
parser.add_option("--debug", dest="debug", action="store_true",
|
|
help="display diagnostic information while running")
|
|
|
|
# Now we are ready to parse the command line and check the options
|
|
(options, args) = parser.parse_args()
|
|
if options.debug is not None:
|
|
weewx.debug = options.debug
|
|
|
|
if options.debug is not None:
|
|
syslog.setlogmask(syslog.LOG_UPTO(syslog.LOG_DEBUG))
|
|
else:
|
|
syslog.setlogmask(syslog.LOG_UPTO(syslog.LOG_INFO))
|
|
|
|
if options.format is None:
|
|
fmt = 'table'
|
|
elif (options.format.lower() != 'raw' and
|
|
options.format.lower() != 'table' and
|
|
options.format.lower() != 'dict'):
|
|
print "Unknown format '%s'. Known formats include 'raw', 'table', and 'dict'." % options.format
|
|
exit(1)
|
|
else:
|
|
fmt = options.format.lower()
|
|
|
|
# Load the configuration file
|
|
config_fn, config_dict = weeutil.weeutil.read_config(options.cfgfn, args)
|
|
print 'Using configuration file %s' % config_fn
|
|
|
|
# Create a station instance
|
|
print 'Driver version %s' % weewx.drivers.te923.DRIVER_VERSION
|
|
altitude_m = weewx.drivers.te923.getaltitudeM(config_dict)
|
|
station = weewx.drivers.te923.TE923(altitude=altitude_m,
|
|
**config_dict['TE923'])
|
|
|
|
# Do what we need to do...
|
|
if options.current:
|
|
current(station)
|
|
elif options.nrecords is not None:
|
|
history(station, count=options.nrecords, fmt=fmt)
|
|
elif options.recmin is not None:
|
|
ts = int(time.time()) - options.recmin * 60
|
|
history(station, ts=ts, fmt=fmt)
|
|
else:
|
|
info(station)
|
|
|
|
|
|
def info(station):
|
|
"""Query the station then display the settings."""
|
|
print 'Querying the station for the configuration...'
|
|
config = station.getConfig()
|
|
for key in sorted(config):
|
|
print '%s: %s' % (key, config[key])
|
|
|
|
def current(station):
|
|
"""Get current weather observation."""
|
|
print 'Querying the station for current weather data...'
|
|
for packet in station.genLoopPackets():
|
|
print packet
|
|
break
|
|
|
|
def history(station, ts=0, count=0, fmt='raw'):
|
|
"""Display the indicated number of records or records since timestamp"""
|
|
print "Querying the station for historical records..."
|
|
for i,r in enumerate(station.genArchiveRecords(ts)):
|
|
if fmt.lower() == 'raw':
|
|
print_raw(r['datetime'], r['ptr'], r['raw_data'])
|
|
elif fmt.lower() == 'table':
|
|
print_table(r['datetime'], r['data'], i==0)
|
|
else:
|
|
print r['datetime'], r['data']
|
|
if count and i > count:
|
|
break
|
|
|
|
def print_raw(date, pos, data):
|
|
print date,
|
|
print "%04x" % pos,
|
|
for item in data:
|
|
print "%02x" % item,
|
|
print
|
|
|
|
def print_table(date, data, showlabels=False):
|
|
if showlabels:
|
|
print '# date time',
|
|
for key in data:
|
|
print key,
|
|
print
|
|
print date,
|
|
for key in data:
|
|
print data[key],
|
|
print
|
|
|
|
def print_dict(data):
|
|
for key in sorted(data, key=data.get):
|
|
print '%s: %s' % (key, data[key])
|
|
|
|
|
|
if __name__=="__main__" :
|
|
main()
|