WeeWX 5.5.2 配置参数详解
逐段详解 WeeWX 5.5.2 主配置文件 weewx.conf:15 个配置段的全部关键参数语义、默认值与 8 组改配置实测闭环(站点信息、debug、归档间隔、标定校正、质量过滤、换库、报告目录权限),附可直接套用的北京站点生产模板。
WeeWX 5.5.2 配置参数详解
目标:逐段讲透 WeeWX 5.5.2 主配置文件
weewx.conf的全部配置段与关键参数——每个参数给出官方语义、默认值与实测验证结论。全文参数改动均在 Ubuntu 22.04 + WeeWX 5.5.2 实机上完成「改配置 → 重启 → 看日志/查数据库」闭环验证,涉及 8 组对照实验(站点信息、debug、归档间隔、标定校正、质量过滤、换库、报告目录权限)。
一、环境信息
- 操作系统:Ubuntu 22.04(x86_64),WeeWX 5.5.2-1(官方 apt 仓库安装,DEB 形态)
- 配置文件:
/etc/weewx/weewx.conf(DEB 形态的 WEEWX_ROOT;pip 形态为<数据区>/weewx.conf,参数语义完全一致,仅路径前缀不同) - 验证手段:
systemctl restart weewx后用journalctl -u weewx核对启动日志、sqlite3 /var/lib/weewx/weewx.sdb核对落库数据、ls /var/www/html/weewx/核对报告产物 - 实测时区:服务器为 UTC 时区,日志与数据库时间戳均为 UTC;换算北京时间加 8 小时
- 参数语义溯源:官方文档 5.5 版 Reference / Application options 各页(https://weewx.com/docs/5.5/reference/),查询日期 2026-10-31
二、前置条件
- 已按官方 apt 方式安装 WeeWX 5.5.2 且服务处于 active(安装步骤见 《Ubuntu 22.04 安装 WeeWX 5.5.2 指南》);
- root 或 sudo 权限(配置文件属主为
weewx:weewx,编辑用 sudo); - 已安装
sqlite3命令行客户端(sudo apt install -y sqlite3),用于核对参数改动后的落库效果; - 理解 WeeWX 的服务链模型:一次数据落库要顺序穿过「预处理 → 单位转换 → 标定校正 → 质量控制 → 派生量计算 → 归档 → 上传 → 报告」八组服务,配置段与服务一一对应(见 5.14 节)。
三、参数查看与修改方式
3.1 配置文件位置与读取
DEB 形态下一切配置集中在一个文件:
ls -l /etc/weewx/weewx.conf
wc -l /etc/weewx/weewx.conf
实测回显:
-rw-r----- 1 root weewx 20000 Oct 30 22:59 /etc/weewx/weewx.conf
516 /etc/weewx/weewx.conf
文件约 516 行、20 KB,分两大块:顶部无段名的「通用参数」(debug、log_success 等)与 [段名] 组织的 15 个配置段。快速浏览段结构:
grep -n '^\[' /etc/weewx/weewx.conf
实测回显:
[26]#[Station]
[58]#[Simulator]
[81]#[StdRESTful]
[162]#[StdReport]
[332]#[StdConvert]
[354]#[StdCalibrate]
[367]#[StdQC]
[383]#[StdWXCalculate]
[412]#[StdTimeSynch]
[424]#[StdArchive]
[450]#[DataBindings]
[468]#[Databases]
[484]#[DatabaseTypes]
[506]#[Engine]
(grep 输出格式为「行号#内容」,实际终端显示 [26]:[Station] 等;另有由 weectl station reconfigure 注入的 [Vantage] 段位于 76 行附近,见 5.15 节。)
3.2 configobj 语法规则
weewx.conf 由 Python 库 configobj 解析,语法规则只有三条,但每条都踩过坑:
- 段名顶格:
[Station]、[[SeasonsReport]](二层子段)、[[[Units]]](三层子段),方括号数量即层级; - 键值对逐级缩进:一层段内键缩进 4 空格,二层子段内缩进 8 空格,以此类推;
- 每行必须是段名或「键 = 值」,注释以
#开头。
实测踩坑记录:在 [Station] 段内插入一行没有等号的文本 broken option without value,重启服务必然失败:
systemctl status weewx
实测回显(节选):
● weewx.service - WeeWX weather system
Loaded: loaded (/lib/systemd/system/weewx.service; enabled; preset: enabled)
Active: failed (Result: exit-code)
journalctl -u weewx --no-pager | tail -5 中的关键报错:
CRITICAL __main__: Caught unrecoverable exception in initializer
CRITICAL __main__: Reason: configobj.ParseError: Invalid line (' broken option without value') (matched as neither section nor keyword) at line 52. File '/etc/weewx/weewx.conf'.
报错把「文件名 + 行号 + 原文」全给了出来,定位很直接。同时 systemd 把该失败标记为 status=3/NOTIMPLEMENTED。修复语法后 systemctl restart weewx 即恢复 active。
💡 技术拓展:configobj 是 Python 生态里带「段层级」的 INI 解析库(相比 configparser 的平面 section,configobj 用双重/三重方括号表达嵌套,且保留注释与顺序)。WeeWX 4.x 用的是自家 config 模块,5.x 起切换到 configobj——所以从 4.x 升级后手工合并旧配置时,缩进错误会在 5.x 首次启动就暴露,而不是静默忽略。
3.3 修改方式一:手工编辑 + 重启生效
WeeWX 启动时读取一次配置文件,运行中不监听文件变化。标准生效流程是「编辑 → 重启 → 看日志确认」:
sudo systemctl restart weewx
journalctl -u weewx --no-pager | tail -20
服务重启后日志会重新打印完整启动序列(Using archive interval of ...、Using binding 'wx_binding' to database ... 等行都是配置自述),逐行核对即可确认新参数已被接受。
3.4 修改方式二:weectl station reconfigure(推荐用于站点级改动)
站点元数据(位置/经纬度/海拔/驱动)建议用 weectl station reconfigure 改而不是手编:该命令会先把旧配置备份为带时间戳的副本,再修改指定参数;切换驱动时若配置中缺少对应驱动段,还会自动注入完整段定义。实测切换驱动到 Davis Vantage:
sudo systemctl stop weewx
sudo weectl station reconfigure --driver=weewx.drivers.vantage --no-prompt
实测回显:
Saved old configuration file as /etc/weewx/weewx.conf.20261030151326
随后配置文件中出现了约 60 行的 [Vantage] 段(含 type = serial、port = /dev/ttyUSB0、baudrate = 19200 等十几个参数),手工很难写全。weectl 全部子命令详见 《WeeWX 常用 CLI 命令与排障详解》。
3.5 用 debug 开关核验配置
顶层 debug = 1 是排查配置问题的第一开关。实测把第 11 行 debug = 0 改为 debug = 1 并重启后,journalctl 中多出大量 DEBUG 行:
DEBUG weewx.engine: Finished loading service weewx.restx.StdStationRegistry
DEBUG weewx.engine: Finished loading service weewx.restx.StdWunderground
同时报告服务的跳过动作也变得可见:
DEBUG weewx.reportengine: Report 'SmartphoneReport' not enabled. Skipping.
DEBUG weewx.reportengine: Report 'MobileReport' not enabled. Skipping.
DEBUG weewx.reportengine: Report 'StandardReport' not enabled. Skipping.
DEBUG weewx.reportengine: Report 'FTP' not enabled. Skipping.
DEBUG weewx.reportengine: Report 'RSYNC' not enabled. Skipping.
官方文档说明 debug 支持三档:0(关闭,默认)、1(额外检查与日志)、2(更详细)。排障时打开,结束后关回 0,避免日志膨胀。
四、参数总览
weewx.conf 各配置段与服务的对应关系(顺序即数据流顺序):
| 配置段 | 对应服务 | 职责 | 日常改动频率 |
|---|---|---|---|
| 顶层(无段名) | 引擎全局 | debug、日志开关、版本号 | 低 |
| [Station] | 站点抽象 | 位置/经纬度/海拔/驱动类型 | 装完必改一次 |
| [Simulator] 等驱动段 | 硬件驱动 | 驱动自身参数 | 随驱动 |
| [StdRESTful] | restful 服务组 | 上传公共气象网络 | 用到才改 |
| [StdReport] | 报告服务 | 皮肤、输出目录、单位、语言 | 中 |
| [StdConvert] | StdConvert | 入库单位制 | 只能定一次 |
| [StdCalibrate] | StdCalibrate | 传感器标定校正表达式 | 按需 |
| [StdQC] | StdQC | 观测值合理区间过滤 | 按需 |
| [StdWXCalculate] | StdWXCalculate | 派生量来源选择 | 低 |
| [StdTimeSynch] | StdTimeSynch | 站钟校时 | 低 |
| [StdArchive] | StdArchive | 归档间隔、记录生成方式 | 中 |
| [DataBindings] | — | 数据源与库/表/管理器绑定 | 低 |
| [Databases] | — | 具体数据库实例定义 | 换库时改 |
| [DatabaseTypes] | — | 数据库类型默认参数 | 换 MySQL 时改 |
| [Engine] | 引擎本体 | 七组服务链的组成与顺序 | 高级定制 |
前四组服务(prep/data/process)在数据进入数据库之前工作,后四组(archive/restful/report)在数据落库之后工作。每个 [StdXxx] 段就是同名服务的行为开关。
五、核心参数分类详解
5.1 顶层通用参数
文件开头不属于任何段落的参数,作用于整个引擎:
debug = 0
log_success = True
log_failure = True
version = 5.5.2
| 参数 | 默认 | 语义(官方 Reference / General options) |
|---|---|---|
| debug | 0 | 1 输出额外调试信息(强烈建议排障时开),2 更详细 |
| log_success | True | 成功操作(报告生成完成、上传成功等)写 syslog |
| log_failure | True | 失败操作写 syslog |
| version | — | 创建该配置文件的 WeeWX 版本号,标识用 |
| WEEWX_ROOT | 配置文件所在目录 | 站点数据区根路径,相对路径都基于它解析;DEB 形态为 /etc/weewx,通常无需显式写 |
| USER_ROOT | bin/user | 用户扩展目录,扩展安装到这下面 |
| socket_timeout | 20 | FTP/上传等服务 socket 超时秒数 |
| gc_interval | 10800 | Python 垃圾回收间隔秒数(3 小时) |
| loop_on_init | false | 驱动加载失败时是否无限重试;false = 直接退出(默认,配置错误时重试无意义),网络型驱动间歇失败场景可开 true |
| retry_wait | 60 | 配合 loop_on_init 的重试等待秒数 |
注意 log_success/log_failure 是「可被覆盖」的分层设计:顶层设全局默认,[StdRESTful]、[StdReport]、[StdArchive] 段内可各自覆盖,只影响本组操作。
5.2 [Station]:站点元数据
[Station]
location = "Santa's Workshop, North Pole"
latitude = 90.0
longitude = 0.0
altitude = 0, meter
station_type = Simulator
rain_year_start = 1
week_start = 6
| 参数 | 默认 | 语义 |
|---|---|---|
| location | 无(安装向导填) | 站点描述文本,UTF-8,显示在报告页标题 |
| latitude / longitude | 无 | 十进制度;南半球纬度取负、西半球经度取负 |
| altitude | 无 | 「数值, 单位」二元组,单位 foot 或 meter;硬件不报海拔时使用 |
| station_type | Simulator | 驱动类型名,必须存在同名配置段;官方内置 13 种(Simulator/AcuRite/CC3000/FineOffsetUSB/TE923/Ultimeter/Vantage/WMR100/WMR300/WMR9x8/WS1/WS23xx/WS28xx) |
| station_url | 注释态 | 站点主页 URL,注册站 Registry 与 RSS 输出会用到 |
| rain_year_start | 1 | 雨季年起始月(1-12),硬件支持时从站上下载 |
| week_start | 6 | 周起始日,0=周一 … 6=周日,影响周报表统计口径 |
实测(E2,站点信息改动):把默认「北极圣诞老人工坊」改成北京海淀:
location = Beijing Haidian
latitude = 39.9042
longitude = 116.4074
altitude = 44, meter
sudo systemctl restart weewx 后等下一个归档边界,检查报告页:
grep -c 'Beijing Haidian' /var/www/html/weewx/index.html
实测回显:
2
主页标题与页脚两处同步更新为新站名,无需手工清理旧 HTML(Seasons 皮肤每次归档全量重生成)。
⚠️ 高层建筑注意(官方原文提醒):
altitude应填气象主机(压力传感器所在处)的海拔,不是地面海拔——高层楼房两者差异会直接影响气压换算。
5.3 [Simulator]:模拟器驱动段(驱动段的样板)
station_type 指向哪个驱动,就需要哪个同名段。默认安装自带 [Simulator]:
[Simulator]
loop_interval = 2.5
mode = simulator
#start = 2011-01-01T00:00
driver = weewx.drivers.simulator
| 参数 | 默认 | 语义 |
|---|---|---|
| loop_interval | 2.5 | LOOP 包间隔秒数(驱动向引擎推送实时数据的节奏) |
| mode | simulator | simulator=实时模拟(包间休眠);generator=全速生成(压测用) |
| start | 注释态 | generator 模式的起始时间,格式 YYYY-mm-ddTHH:MM,不填用当前时间 |
| driver | weewx.drivers.simulator | Python 驱动模块路径 |
mode = generator 配合 start 可回放历史时段数据,是验证归档与报告链路最省时的组合。
5.4 [StdRESTful]:上传公共气象网络
该段下每个二层子段对应一个上传目标,默认全部关闭(enable = false 或 register_this_station = False),服务启动日志会逐个报 Posting not enabled.:
INFO weewx.restx: StationRegistry: Posting not enabled.
INFO weewx.restx: Wunderground: Posting not enabled.
INFO weewx.restx: PWSweather: Posting not enabled.
INFO weewx.restx: CWOP: Posting not enabled.
INFO weewx.restx: WOW: Posting not enabled.
INFO weewx.restx: WOW-BE: Posting not enabled.
INFO weewx.restx: AWEKAS: Posting not enabled.
七个子段的关键参数:
| 子段 | 启用开关 | 凭据参数 | 特色参数 |
|---|---|---|---|
| [[StationRegistry]] | register_this_station = True | 无(匿名注册) | station_url(必填,须 http/https 开头)、description;每天上报一次心跳,一个月不上报自动除名 |
| [[Wunderground]] | enable = true | station(如 KORHOODR3)+ password(设备 Key) | rapidfire = False(Rapidfire 协议,部分硬件不支持) |
| [[PWSweather]] | enable = true | station + password | — |
| [[CWOP]] | enable = true | station(如 CW1234) | passcode(仅业余无线电 APRS 站需要)、post_interval |
| [[WOW]] | enable = true | station + password | 英国气象局观测网 |
| [[WOW-BE]] | enable = true | station + password | 比利时 WOW |
| [[AWEKAS]] | enable = true | username + password | language = en、retry_login = 3600、post_interval = 0 |
通用规律:所有子段都支持 log_success/log_failure 覆盖;post_interval = 0 表示每条归档记录都上报(AWEKAS 默认),设成非零则按秒数节流。凭据口令建议加引号(官方注释反复强调「Use quotes around the password to guard against parsing errors」——密码含 # 或特殊字符时 configobj 会把后半截当注释)。
5.5 [StdReport]:报告生成
[StdReport]
SKIN_ROOT = skins
HTML_ROOT = /var/www/html/weewx
data_binding = wx_binding
[[SeasonsReport]]
skin = Seasons
enable = true
[[SmartphoneReport]]
skin = Smartphone
enable = false
HTML_ROOT = /var/www/html/weewx/smartphone
...
[[Defaults]]
lang = en
unit_system = us
段级参数:
| 参数 | 默认 | 语义 |
|---|---|---|
| SKIN_ROOT | skins | 皮肤目录,相对路径基于 WEEWX_ROOT |
| HTML_ROOT | /var/www/html/weewx(DEB) | 报告输出目录 |
| data_binding | wx_binding | 报告取数的数据绑定 |
| report_timing | 未设置 | 类 cron 语法的报告调度;未设置 = 每个归档间隔都跑 |
官方内置六种「报告」:四个出 HTML/图片的皮肤(SeasonsReport/SmartphoneReport/MobileReport/StandardReport)加两个纯传输报告(FTP/RSYNC)。执行顺序固定「先生成后传输」。每个报告子段可用 enable 开关、可用 lang(en / en_GB / en_GB.utf8 三段式)、unit_system(US/METRIC/METRICWX)覆盖全局。[[Defaults]] 子段的设置作用于所有报告,其下 [[[Units]]][[[[Groups]]]] 可逐单位组细调(如 group_temperature = degree_C),[[[Labels]]][[[[Generic]]]] 改观测项显示名。
实测(E8,HTML_ROOT 换目录 + 权限排障):把 HTML_ROOT 从 /var/www/html/weewx 改为 /var/www/html/weewx-test,重启后报告全部生成失败,journalctl 刷出两类错误:
ERROR weewx.reportengine: **** Generator terminated
追根有两处:cheetahgenerator 报 FileNotFoundError: [Errno 2] No such file or directory: '/var/www/html/weewx-test/NOAA/NOAA-2026-10.txt.tmp',reportengine 报 PermissionError: [Errno 13] Permission denied: '/var/www/html/weewx-test'——根因是 weewxd 以 weewx 低权用户运行,而 /var/www/html 根目录归 root 所有,新目录既不存在也无写权限。修复:
sudo mkdir -p /var/www/html/weewx-test
sudo chown weewx:weewx /var/www/html/weewx-test
sudo systemctl restart weewx
重启后 journalctl 出现正常生成序列:
Generated 8 files for report SeasonsReport in 0.21 seconds
Generated 60 images for report SeasonsReport in 0.28 seconds
Copied 5 files to /var/www/html/weewx-test
ls /var/www/html/weewx-test | wc -l 实测 71 个文件。结论:换 HTML_ROOT 必须同步 chown weewx:weewx,否则权限错误会淹没在每 5 分钟一次的归档触发里。
5.6 [StdConvert]:入库单位制(一次性决定)
[StdConvert]
target_unit = US
三选一:US(华氏度/英寸汞柱/英里每小时)、METRICWX(摄氏度/毫米等,降水按气象惯例)、METRIC(公制)。
官方在注释里用全大写反复警告:DO NOT MODIFY THIS VALUE UNLESS YOU KNOW WHAT YOU ARE DOING。原因有两层:
target_unit只决定数据库里的单位,报告端可用unit_system任意切换显示单位——所以「想看公制」不需要动它;- 中途修改会让库里出现 US 与 METRIC 混存的烂数据,官方原话「will result in corrupt data」,唯一解法是导出重建库。
从 wview 迁移的用户必须保持 US(wview 库就是 US 单位)。
5.7 [StdCalibrate]:传感器标定校正
[StdCalibrate]
[[Corrections]]
foo = foo + 0.2
[[Corrections]] 下每个键是一个观测类型,值是一个 Python 表达式(可用该记录的其他字段参与运算),结果直接覆盖原值入库。这是修正传感器系统偏差(如温度计偏高 2 度)的正确入口。
实测(E5,校正表达式 + 服务顺序证明):模拟器输出约 32.7°F。先加一个夸张的偏移:
[[Corrections]]
outTemp = outTemp + 100
重启后下一条归档记录的 outTemp 竟然是 NULL 而不是 132.6:
sqlite3 /var/lib/weewx/weewx.sdb "SELECT datetime(dateTime,'unixepoch'), outTemp FROM archive ORDER BY dateTime DESC LIMIT 2;"
实测回显:
2026-10-30 15:06:00|
2026-10-30 15:05:00|32.7
132.6 超出了 [StdQC] 默认 outTemp = -40, 120, degree_F 的上限,被质量过滤拦下置 NULL。这个「副作用」反向证明了服务链中 StdCalibrate 先于 StdQC 执行(见 5.14 节 process_services 顺序)。把偏移改成合理的 outTemp = outTemp + 20 后,15:07 记录落库 52.7(= 32.7 + 20),校正生效。
5.8 [StdQC]:质量过滤
[StdQC]
[[MinMax]]
barometer = 26, 32.5, inHg
pressure = 24, 34.5, inHg
outTemp = -40, 120, degree_F
inTemp = 10, 120, degree_F
outHumidity = 0, 100
inHumidity = 0, 100
windSpeed = 0, 120, mile_per_hour
rain = 0, 10, inch
每行是「最小值, 最大值[, 单位]」三元组,缺单位时用 StdConvert 的库单位。超出区间的观测值被置 NULL 入库。默认区间覆盖八大常用观测项。
实测(E6,收紧上限):把 outTemp = -40, 120, degree_F 改为 outTemp = -40, 30, degree_F,重启后模拟器 32.7°F 附近的数据有部分被拦:
sqlite3 /var/lib/weewx/weewx.sdb "SELECT COUNT(*) FROM archive WHERE outTemp IS NULL;"
实测回显:
1
新落库记录中 outTemp 为 NULL 的条数随超限次数增长,而其余字段(barometer、windSpeed)不受影响——QC 是逐字段拦截,不是整条丢弃。写好 [[Corrections]] 后务必核对 QC 区间是否会把校正值误杀(E5 的教训)。
5.9 [StdWXCalculate]:派生量来源
[StdWXCalculate]
[[Calculations]]
pressure = prefer_hardware
dewpoint = prefer_hardware
...
体感温度、露点、风寒、蒸散量等 14 个派生量,每个可独立选值:
| 取值 | 语义 |
|---|---|
| hardware | 只信硬件给的值 |
| software | 只用 WeeWX 软件计算 |
| prefer_hardware | 硬件有就用硬件,缺了用软件补(默认) |
全部 14 项默认 prefer_hardware。廉价站硬件算力弱、公式粗糙,追求一致性可整体改成 software(用 WeeWX 内置气象公式统一计算)。
5.10 [StdTimeSynch]:站钟校时
[StdTimeSynch]
clock_check = 14400
max_drift = 5
每 14400 秒(4 小时)检查一次气象主机的硬件时钟,漂移超过 5 秒就校正。只对支持远程校时的硬件(如 Davis Vantage)生效;启动日志中 Clock error is -0.02 seconds (positive is fast) 就是它的工作痕迹。
5.11 [StdArchive]:归档节奏(核心段)
[StdArchive]
archive_interval = 300
record_generation = hardware
loop_hilo = True
data_binding = wx_binding
| 参数 | 默认 | 语义 |
|---|---|---|
| archive_interval | 300 | 归档间隔秒数,必须能被 60 整除;硬件支持记录器时以硬件为准 |
| archive_delay | 15 | 归档边界后延迟多少秒取数(给硬件留内部写盘时间) |
| record_generation | hardware | hardware=优先从硬件记录器下载归档记录;software=软件按 LOOP 统计生成为(Simulator 这类无记录器驱动自动走软件生成) |
| record_augmentation | true | 硬件记录生成时尝试用 LOOP 包补充额外观测字段 |
| no_catchup | false | true = 启动时不回补硬件记录器里积压的历史数据 |
| loop_hilo | True | LOOP 数据是否参与高低值统计;传感器毛刺多可设 False 只用归档数据 |
| data_binding | wx_binding | 归档目标数据绑定 |
实测(E4,300 秒改 60 秒):archive_interval = 300 改为 60,重启后启动日志立即变化:
INFO weewx.archive: Using archive interval of 60 seconds (specified in weewx configuration)
随后连续四条记录的时间戳严格每 60 秒一条:
sqlite3 /var/lib/weewx/weewx.sdb "SELECT datetime(dateTime,'unixepoch') FROM archive ORDER BY dateTime DESC LIMIT 4;"
实测回显:
2026-10-30 15:04:00
2026-10-30 15:03:00
2026-10-30 15:02:00
2026-10-30 15:01:00
日志里 (specified in weewx configuration) 括号说明该值来自配置文件而非硬件——有硬件记录器时这里会变成 (specified by hardware),此时改配置无效,需改硬件或改用 record_generation = software。
5.12 [DataBindings]:数据绑定
[DataBindings]
[[wx_binding]]
database = archive_sqlite
table_name = archive
manager = weewx.manager.DaySummaryManager
schema = weewx.schemas.wview_extended.schema
绑定 = 「哪张库 + 哪张表 + 哪个管理器 + 哪套表结构」四元组:
| 参数 | 默认 | 语义 |
|---|---|---|
| database | archive_sqlite | 指向 [Databases] 段的实例名,换 MySQL 就改这里 |
| table_name | archive | 归档大平表的表名,一般不改 |
| manager | weewx.manager.DaySummaryManager | 表管理器类,负责维护日汇总表,一般不改 |
| schema | weewx.schemas.wview_extended.schema | 建库时用的表结构定义(wview 兼容超集),仅建库时生效,之后改它不影响已存在的库 |
5.13 [Databases] 与 [DatabaseTypes]:数据库定义
[Databases]
[[archive_sqlite]]
database_name = weewx.sdb
database_type = SQLite
[[archive_mysql]]
database_name = weewx
database_type = MySQL
[DatabaseTypes]
[[SQLite]]
driver = weedb.sqlite
SQLITE_ROOT = /var/lib/weewx
[[MySQL]]
driver = weedb.mysql
host = localhost
user = weewx
password = weewx
[Databases] 列实例(SQLite 是单文件库,database_name 是文件名,相对路径基于 SQLITE_ROOT;MySQL 是库名),[DatabaseTypes] 列类型默认参数(SQLite 的 timeout=5 秒锁等待、MySQL 的 port=3306/engine=INNODB)。
💡 技术拓展:WeeWX 的存储后端选型——SQLite(单文件、零运维、默认)适合单机个人站,实测库文件初始 512000 字节、常驻内存 15.5 MB 的进程开销下完全够用;MySQL/MariaDB 适合数据量大(多年历史 + 高频归档)、需要远程库或与其他系统共享数据的场景(官方文档单独有 MySQL/MariaDB 章节讲解建库授权)。PostgreSQL 无官方支持但社区有扩展。切换姿势:
[DataBindings]的database = archive_mysql一行即可,两套实例定义并存互不干扰。
实测(E7,换库名):把 [[archive_sqlite]] 的 database_name = weewx.sdb 改为 weewx_exp.sdb,重启:
INFO weewx.engine: Using binding 'wx_binding' to database 'weewx_exp.sdb'
INFO weewx.manager: Empty database
ls -l /var/lib/weewx/
实测回显:
-rw-r--r-- 1 weewx weewx 512000 Oct 30 15:03 weewx_exp.sdb
新库从零建表(Empty database + 日志 Created and initialized table 'archive'),旧 weewx.sdb 原样保留——用「换库名」可以低成本做配置/驱动实验,验证完删掉实验库回滚即可。
5.14 [Engine]:服务链(理解的钥匙)
[Engine]
[[Services]]
prep_services = weewx.engine.StdTimeSynch
data_services = ,
process_services = weewx.engine.StdConvert, weewx.engine.StdCalibrate, weewx.engine.StdQC, weewx.wxservices.StdWXCalculate
xtype_services = weewx.wxxtypes.StdWXXTypes, weewx.wxxtypes.StdPressureCooker, weewx.wxxtypes.StdRainRater, weewx.wxxtypes.StdDelta
archive_services = weewx.engine.StdArchive
restful_services = weewx.restx.StdStationRegistry, weewx.restx.StdWunderground, weewx.restx.StdPWSweather, weewx.restx.StdCWOP, weewx.restx.StdWOW, weewx.restx.StdWOWBE, weewx.restx.StdAWEKAS
report_services = weewx.engine.StdPrint, weewx.engine.StdReport
七组服务按固定顺序执行:
| 服务组 | 时机 | 默认成员 |
|---|---|---|
| prep_services | 主循环启动前 | StdTimeSynch(站钟校时) |
| data_services | 数据处理前增补 | (默认空) |
| process_services | 逐条处理数据 | StdConvert → StdCalibrate → StdQC → StdWXCalculate |
| xtype_services | 派生类型注册 | StdWXXTypes/StdPressureCooker/StdRainRater/StdDelta |
| archive_services | 落库 | StdArchive |
| restful_services | 落库后上传 | 七个公共气象网上传服务 |
| report_services | 最后 | StdPrint(控制台)+ StdReport(报告) |
process_services 的排列顺序解释了 E5 的实验现象:StdConvert 先统一单位,StdCalibrate 再做表达式校正,StdQC 最后把关——校正表达式产出的值必须落在 QC 区间内才能入库。写扩展(如自定义过滤服务)时,插进哪一组、组内排第几,直接决定它「看得到什么数据」。
5.15 硬件驱动段:以 [Vantage] 为例
weectl station reconfigure --driver=... 注入的 Davis Vantage 段(节选):
[Vantage]
type = serial
port = /dev/ttyUSB0
host = 1.2.3.4
baudrate = 19200
tcp_port = 22222
tcp_send_delay = 0.5
loop_request = 1
iss_id = 1
timeout = 4
wait_before_retry = 1.2
max_tries = 4
model_type = 2
driver = weewx.drivers.vantage
type = serial 时用 port(串口路径),type = ethernet 时用 host + tcp_port(WeatherLinkIP 网桥)。其余是串口重试策略与 ISS 传感器站 ID,官方注释明说「rarely needs any attention」。没有真实硬件时切到该驱动,服务会因打不开 /dev/ttyUSB0 反复崩溃(CRITICAL ... SerialException: could not open port /dev/ttyUSB0),评估期保留 Simulator 驱动最稳。
六、生产配置模板
一套可直接套用的北京站点公制模板(场景:单机 Ubuntu 22.04、模拟器先行验证后接真实硬件、公制显示、不上传公网、SQLite 存储;资源占用实测常驻内存 15.5 MB,1 核 512 MB / 2 GB 磁盘余量即可承载多年数据——SQLite 库每年增量在百 MB 量级):
debug = 0
log_success = True
log_failure = True
[Station]
location = "Beijing Haidian"
latitude = 39.9042
longitude = 116.4074
altitude = 44, meter
station_type = Simulator # 接真硬件时用 weectl station reconfigure --driver=... 切换
rain_year_start = 1
week_start = 6
[StdReport]
SKIN_ROOT = skins
HTML_ROOT = /var/www/html/weewx # 确认属主 weewx:weewx
data_binding = wx_binding
[[SeasonsReport]]
skin = Seasons
enable = true
[[Defaults]]
lang = en
unit_system = METRICWX # 公制显示;只影响报告,不影响库
[StdConvert]
target_unit = US # 装机时定死,永不再改;显示公制靠上一行
[StdCalibrate]
[[Corrections]]
# outTemp = outTemp - 0.5 # 传感器偏差校正示例,值须落在 StdQC 区间内
[StdQC]
[[MinMax]]
barometer = 26, 32.5, inHg
pressure = 24, 34.5, inHg
outTemp = -40, 120, degree_F
inTemp = 10, 120, degree_F
outHumidity = 0, 100
inHumidity = 0, 100
windSpeed = 0, 120, mile_per_hour
rain = 0, 10, inch
[StdWXCalculate]
[[Calculations]]
pressure = prefer_hardware
# ... 其余 13 项保持 prefer_hardware
[StdArchive]
archive_interval = 300 # 5 分钟一条,须被 60 整除
record_generation = hardware
loop_hilo = True
data_binding = wx_binding
[DataBindings]
[[wx_binding]]
database = archive_sqlite
table_name = archive
manager = weewx.manager.DaySummaryManager
schema = weewx.schemas.wview_extended.schema
[Databases]
[[archive_sqlite]]
database_name = weewx.sdb
database_type = SQLite
[DatabaseTypes]
[[SQLite]]
driver = weedb.sqlite
SQLITE_ROOT = /var/lib/weewx
[Engine]
[[Services]]
prep_services = weewx.engine.StdTimeSynch
data_services = ,
process_services = weewx.engine.StdConvert, weewx.engine.StdCalibrate, weewx.engine.StdQC, weewx.wxservices.StdWXCalculate
xtype_services = weewx.wxxtypes.StdWXXTypes, weewx.wxxtypes.StdPressureCooker, weewx.wxxtypes.StdRainRater, weewx.wxxtypes.StdDelta
archive_services = weewx.engine.StdArchive
restful_services = weewx.restx.StdStationRegistry, weewx.restx.StdWunderground, weewx.restx.StdPWSweather, weewx.restx.StdCWOP, weewx.restx.StdWOW, weewx.restx.StdWOWBE, weewx.restx.StdAWEKAS
report_services = weewx.engine.StdPrint, weewx.engine.StdReport
模板要点:target_unit 与 unit_system 解耦(库存 US、显示公制);公网上传段整体省略即等于全部关闭;改动任一参数后 systemctl restart weewx 并核对启动日志自述行。
七、常见问题
Q1:改了配置为什么没生效?
WeeWX 只在启动时读一次配置。手工改完必须 sudo systemctl restart weewx,并在 journalctl -u weewx --no-pager | head -30 里核对自述行(如 Using archive interval of 60 seconds)。有硬件记录器时 archive_interval 以硬件为准,改配置无效。
Q2:重启失败,报 configobj.ParseError? 配置缩进或语法错误。报错自带文件名、行号、原文(见 3.2 节实录),按行号修复:段名顶格、子段方括号翻倍、键值对必须有等号和值。修复前服务无法启动。
Q3:报告目录空或 Generator terminated?
九成是 HTML_ROOT 指向的目录不存在或属主不是 weewx。sudo mkdir -p <目录> && sudo chown weewx:weewx <目录> 后重启,见 5.5 节 E8 实录。
Q4:加了大偏移校正后温度变成 NULL? 校正值被 [StdQC] 区间拦截置 NULL(服务顺序 StdCalibrate 先于 StdQC)。把校正量改小或同步放宽 QC 区间,见 5.7/5.8 节 E5/E6 实录。
Q5:想改库里的温度单位为摄氏度?
不要改 target_unit(会混存损坏数据)。库单位在首次建库时定死;改显示单位用 [StdReport]/[[Defaults]] 的 unit_system。已建成 US 库确需换成公制存储,只能用 weectl database transfer 迁移到新库(命令见 《WeeWX 常用 CLI 命令与排障详解》)。
Q6:换了 station_type 启动就崩溃?
新驱动段不存在或硬件不可达。驱动段缺失用 weectl station reconfigure --driver=... 自动注入;无硬件时崩溃是预期行为(串口不存在),切回 --driver=weewx.drivers.simulator 恢复。
Q7:上传服务的密码写法有什么讲究?
加双引号:password = "my#pass"。裸写含 # 或空格的密码会被 configobj 截断,导致认证失败且不易察觉。
八、参考链接
- 官方 Reference / General options:https://weewx.com/docs/5.5/reference/weewx-options/general/(查询日期 2026-10-31)
- 官方 Reference / [Station]:https://weewx.com/docs/5.5/reference/weewx-options/stations/
- 官方 Reference / [StdArchive]:https://weewx.com/docs/5.5/reference/weewx-options/stdarchive/
- 官方 Reference / [StdReport]:https://weewx.com/docs/5.5/reference/weewx-options/stdreport/
- 官方 Reference / [Engine]:https://weewx.com/docs/5.5/reference/weewx-options/engine/
- 官方 Reference / [Databases]:https://weewx.com/docs/5.5/reference/weewx-options/databases/
- 站内相关:《WeeWX 介绍与选型指南》 | 《Ubuntu 22.04 安装 WeeWX 5.5.2 指南》 | 《WeeWX 常用 CLI 命令与排障详解》