某现代农业企业在华南地区运营 120 座智能温室大棚,种植高附加值的草莓、番茄、辣椒等经济作物。每座大棚面积约 2000 平方米,部署了温度、湿度、CO₂、光照、土壤水分等传感器,以及自动灌溉、遮阳、通风等执行机构。企业希望通过数据驱动的精准农业,将水肥利用率提升 30%,同时减少人工巡检成本。
数据模型:
CREATE MEASUREMENT greenhouse_env (
greenhouse_id TAG,
zone_id TAG, -- 大棚内分区(A/B/C/D)
crop_type TAG,
growth_stage TAG, -- seedling / flowering / fruiting
temperature FIELD FLOAT,
humidity FIELD FLOAT,
co2_ppm FIELD FLOAT,
light_lux FIELD FLOAT,
soil_moisture FIELD FLOAT, -- 土壤含水率 %
soil_ec FIELD FLOAT, -- 土壤电导率(肥力指标)
leaf_temp FIELD FLOAT -- 叶面温度(红外传感器)
);
实时环境监控:
-- 各大棚当前环境状态概览
SELECT greenhouse_id, zone_id,
last(temperature) AS temp,
last(humidity) AS humidity,
last(co2_ppm) AS co2,
last(soil_moisture) AS soil_moisture,
-- 温湿度综合舒适度指数(草莓最适 18-22°C,60-80% RH)
CASE
WHEN last(temperature) BETWEEN 18 AND 22
AND last(humidity) BETWEEN 60 AND 80 THEN '最适'
WHEN last(temperature) BETWEEN 15 AND 25 THEN '适宜'
ELSE '需调节'
END AS comfort_level
FROM greenhouse_env
WHERE time > NOW() - INTERVAL '5m'
GROUP BY greenhouse_id, zone_id;
PID 温度控制:通过 pid_series() 精确控制通风机和加热器的输出,维持最适温度。
-- 草莓大棚 GH-012 A 区的温度 PID 控制(目标 20°C)
SELECT time, zone_id,
temperature AS actual_temp,
pid_series(20.0, temperature, time, 2.0, 0.3, 0.15) AS ventilation_output
-- 正值:开通风降温;负值:开加热升温
FROM greenhouse_env
WHERE greenhouse_id = 'GH-012'
AND zone_id = 'A'
AND time > NOW() - INTERVAL '1h';
智能灌溉决策:综合土壤水分趋势和蒸腾速率,计算最优灌溉时机。
-- 计算土壤水分下降速率(蒸腾量指标),预测何时需要灌溉
SELECT greenhouse_id, zone_id,
last(soil_moisture) AS current_moisture,
derivative(soil_moisture, 1h) AS moisture_drop_per_hour,
-- 预计多少小时后降到灌溉阈值(35%)
(last(soil_moisture) - 35.0) /
ABS(NULLIF(derivative(soil_moisture, 1h), 0)) AS hours_to_irrigation
FROM greenhouse_env
WHERE crop_type = 'strawberry'
AND growth_stage = 'fruiting'
AND time > NOW() - INTERVAL '3h'
GROUP BY greenhouse_id, zone_id
HAVING hours_to_irrigation < 4 -- 4 小时内需要灌溉
ORDER BY hours_to_irrigation ASC;
病害风险预警:高温高湿持续时间是灰霉病爆发的关键指标。
-- 检测高温高湿持续时长(灰霉病风险:温度 > 20°C 且湿度 > 85% 持续 > 4 小时)
SELECT greenhouse_id, zone_id,
state_duration(
CASE WHEN temperature > 20 AND humidity > 85 THEN 1 ELSE 0 END,
1
) / 3600 AS high_risk_hours
FROM greenhouse_env
WHERE time > NOW() - INTERVAL '24h'
GROUP BY greenhouse_id, zone_id
HAVING state_duration(
CASE WHEN temperature > 20 AND humidity > 85 THEN 1 ELSE 0 END, 1
) / 3600 > 4;
光照积累分析:计算每日有效光照积累量(DLI),指导补光灯开关策略。
-- 计算今日各大棚的日光照积累量(DLI,mol/m²/day)
SELECT greenhouse_id,
-- 光照强度(lux)转换为 PAR(μmol/m²/s),再积分得 DLI
integral(light_lux * 0.0185, 1s) / 1000000 AS dli_mol_per_m2
FROM greenhouse_env
WHERE time >= strftime('%Y-%m-%d 00:00:00', NOW())
AND time <= NOW()
GROUP BY greenhouse_id;
生长阶段对比分析:不同生长阶段的环境参数对产量的影响。
-- 分析各生长阶段的平均环境参数(用于优化种植方案)
SELECT growth_stage,
avg(temperature) AS avg_temp,
avg(humidity) AS avg_humidity,
avg(co2_ppm) AS avg_co2,
avg(soil_moisture) AS avg_soil_moisture,
avg(light_lux) AS avg_light,
count(DISTINCT greenhouse_id) AS greenhouse_count
FROM greenhouse_env
WHERE crop_type = 'strawberry'
AND time > NOW() - INTERVAL '90d'
GROUP BY growth_stage;
Holt-Winters 温度预测:预测未来 24 小时温度趋势,提前调整通风策略。
-- 预测 GH-012 未来 24 小时温度趋势(每小时一个预测点)
SELECT *
FROM forecast(
SELECT avg(temperature) AS hourly_temp
FROM greenhouse_env
WHERE greenhouse_id = 'GH-012'
GROUP BY time(1h),
24,
'holt_winters'
);
每座大棚配备一台树莓派 4B 运行嵌入式 SonnetDB,即使网络中断也能持续本地控制:
// 大棚边缘控制器
using var db = Tsdb.Open("/data/greenhouse");
var executor = db.GetExecutor();
// 每 30 秒采集一次传感器数据
while (true)
{
var sensors = await ReadSensorsAsync();
await executor.ExecuteAsync(
"INSERT INTO greenhouse_env (time, greenhouse_id, zone_id, temperature, humidity, soil_moisture) " +
"VALUES (@t, @gid, @zid, @temp, @hum, @sm)",
new { t = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
gid = "GH-012", zid = "A",
temp = sensors.Temperature, hum = sensors.Humidity, sm = sensors.SoilMoisture }
);
// 本地 PID 计算,直接控制执行机构
var pidResult = await executor.QueryAsync(
"SELECT pid_series(20.0, temperature, time, 2.0, 0.3, 0.15) AS output " +
"FROM greenhouse_env WHERE greenhouse_id = 'GH-012' AND zone_id = 'A' " +
"AND time > NOW() - INTERVAL '5m' ORDER BY time DESC LIMIT 1"
);
await SetVentilationAsync(pidResult.First().output);
await Task.Delay(30_000);
}
| 指标 | 上线前 | 上线后 |
|---|---|---|
| 灌溉用水量/亩/季 | 180 吨 | 126 吨(↓30%) |
| 化肥施用量 | 基准 | ↓22%(精准施肥) |
| 灰霉病发病率 | 8.3% | 2.1% |
| 草莓亩产量 | 2800 kg | 3350 kg(↑20%) |
| 人工巡检频次 | 每天 3 次/棚 | 每天 1 次/棚(异常才派人) |
| 边缘断网可用性 | 断网即停控 | 本地持续运行 |
精准农业的核心是"数据驱动决策"。SonnetDB 将传感器数据、PID 控制、预测分析融为一体,让农业生产从"凭经验"走向"凭数据"。