Skip to main content

LoRaWAN 农业环境监测方案:选型、部署与接口

使用须知

这是运维看板,不是计量认证系统:显示的数值就是节点上报的原值,只加了单位。

这套方案是干什么的​

大棚里,土壤水分和电导率决定什么时候灌溉、什么时候追肥;大田里,雨量和土壤温度对另一种作物起同样的作用。SenseCAP LoRaWAN 节点测出这些量并无线上报,上行进入 Home Assistant 后成为带单位、device class 和 state class 的实体:显示在看板上、积累历史,数值越界时发通知。

适用于大棚、大田地块、没有可用外网的场地,以及想要一份本地看板又不愿搬动现有链路的存量 SenseCAP 部署。

  • SenseCAP 节点开箱即用

    S210x 节点按自身配置的周期上报,不需要下发任何配置;实体由 MQTT 自动发现建好,带单位和类型,不用手写 YAML。

  • 第三方探头按同一套接入

    已有的 RS485 或模拟量探头经 S2100 数据采集器接入,走同一张测量映射表。映射表、compose 文件、看板与自动化都在公开的方案包里,新增一个量在配置文件里加一行。

  • 可以完全不联外网

    ChirpStack 跑在 M2 网关上,桥和 Home Assistant 跑在本地主机上,不用云账号,不需要出站连接。

  • 换网络服务器,看板不用改

    SenseCAP 云、自建 The Things Stack、本地 ChirpStack 三条路径的实体命名相同,换路径时看板、自动化和导出都不用改。

Home Assistant 看板上土壤水分、环境温湿度与电导率监测视图

需要哪些硬件​

现场四样东西:LoRaWAN 节点、能收到它们的网关、网络服务器,以及一台装了 Docker 的 Linux 主机。

① 节点——SenseCAP S210x 传感器直接测量;S2100 数据采集器把已有的第三方 RS485 或模拟量探头接进同一张 LoRaWAN 网。两者都不需要下发任何东西,按节点上自己配置的周期定时测量并上报。

② 网关与网络服务器——三条路径只在这里不同,选哪条决定现场要不要外网。

设备承担什么时候选它
SenseCAP S2101SenseCAP S210x
土壤与空气传感节点
测量并上报必配。按需要的量选型号,按所在地区选频段
SenseCAP S2100SenseCAP S2100
LoRaWAN 数据采集器
第三方探头转 LoRaWAN已经有 RS485 或模拟量探头
S-Soil MTEC-02BS-Soil MTEC-02B
RS485 土壤水分温度电导率探头
经 RS485(Modbus-RTU)接到 S2100,由 S2100 发 LoRaWAN 上行要测土壤水分、温度、电导率,且走 S2100 这条链路
SenseCAP M2 网关SenseCAP M2
LoRaWAN 室内网关
转发到 SenseCAP 云,或自己跑 ChirpStack要完全本地部署:在 M2 的 Web 界面里切到内置网络服务器即可
reComputer R1225reComputer R12 系列
LoRaWAN 网关与工业控制器
自建网关,同一台机器跑 The Things Stack自建 The Things Stack 且手上没有网关
reRouter CM4reRouter CM4
reRouter CM4 主机
跑网络服务器,或跑看板需要一台主机,且手上没有现成的 Docker 机器

③ 看板主机——任意装了 Docker 的 Linux 机器,跑 Home Assistant、MQTT broker 和 agri-env-bridge,不需要外网入站访问。

节点、网关、集中器按同一频段选购(EU868 / US915 / AS923 等),频段出厂固定,软件里改不了。两条自建路径还需要每个节点的 DevEUI、JoinEUI、AppKey,用来在网络服务器上注册设备。

选型排他边界​

  • 高频高带宽业务:LoRaWAN 节点上报默认推荐 5–60 分钟,适用于温湿度、光照、土壤传感器;若有连续视频监控或秒级高频采样需求,请勿使用 LoRaWAN,应选配 4G/有线工业相机。
  • 金属密闭与深地障碍:厚金属筒仓、金属大棚骨架密集区域或地下深井会导致 LoRaWAN 信号严重衰减,需增设吸顶天线或采用 RS-485 有线传感器中继。

现场怎么部署​

一、装节点​

探头深度按作物根区定,装好后不要挪

土壤探头读的是它所在的那一层。10 cm 与 40 cm 的读数是两个实体(soil_moisture_10cm … soil_moisture_40cm)。挖第一个坑前按作物根区定好深度;装好后挪动探头,该实体已有的历史会失去可比性。

射频覆盖按现场实测,这里不给距离数字。定传感点位置前,先在现场确认节点上行能被网关收到。

二、装软件:按路径 3 到 6 步​

逐设备步骤和应用包在可部署方案页,按现场条件选好配置后下载。


步骤轮廓:

  1. 在 Linux 主机上部署 Home Assistant 与 broker(三条路径都有,一次 Docker compose 部署)。
  2. 把网络服务器跑起来——云路径无事可做;ChirpStack 路径在 M2 的 Web 界面里切到内置本地网络服务器,或者在一台 Linux 主机上拉起 ChirpStack compose stack;The Things Stack 路径在 reComputer R12 系列网关上把带 Postgres 与 Redis 的 stack 拉起来。
  3. 装 decoder(仅自建路径)——The Things Stack 上装 payload formatter,ChirpStack 上装 device-profile codec。不装则不会出现任何实体。
  4. 入网节点(仅自建路径)——在网络服务器上逐个注册 DevEUI、JoinEUI、AppKey。
  5. 部署桥,source 按路径配置,填入 broker 凭据。
  6. 导入看板与自动化,确认实体带着数值出现。

预计 45 分钟,难度 intermediate。The Things Stack 路径最久:集中器要物理安装,stack 还要拉起自己的数据库和缓存。

三条路径的验收相同:最后一步导入的 Lovelace 看板上,实体带着数值显示出来。

有哪些接口​

所有数据从看板主机上的一个 MQTT broker 出来,端口 1883,三个 retained 主题就是全部接口。

  • Home Assistant——零配置。桥发布自动发现配置,实体自动出现并带上正确的单位、device class 和 state class,不用手写 YAML。
  • 灌溉或农业管理系统——订阅 agri_env/sensecap_<deveui>/<entity_key>/state 取值,订阅 agri_env/sensecap_<deveui>/availability 判断节点是否还活着。两者都是 retained,后连上来的订阅方也能立刻拿到当前全貌。
  • 自建服务——homeassistant/… 上的自动发现配置带着完整的实体元数据(单位、device class、state class、设备标识),据此即可建表。

完整的主题与 payload​

主题 / 端口内容retained
homeassistant/sensor/sensecap_<deveui>/<entity_key>/config(1883)自动发现配置,每个实体一条:name、unique_id、object_id、state_topic、availability_topic、unit_of_measurement、state_class、device.identifiers是
agri_env/sensecap_<deveui>/<entity_key>/state(1883)单个测量项的值,例如 33.8是
agri_env/sensecap_<deveui>/availability(1883)online 或 offline是

实体命名:实体 ID 是 sensor.sensecap_<deveui>_<entity_key>,DevEUI 小写且用完整 DevEUI;用缩短形式时,地址后缀相同的两个节点会冲突。改命名规则时要同时清掉 broker 的 retained 消息和 Home Assistant 的实体注册表,否则重启后旧主题会回来。

broker 只放在可信局域网内,不要暴露到公网。 凭据在主机的 .env 里;ChirpStack 路径下 LNS 侧的 broker 在 compose 网络内不带认证运行。

性能与实测数据​

运行时与关键参数​

三条路径背后是同一个服务 agri-env-bridge,与 Home Assistant、MQTT broker 一起跑在看板主机上。

路径桥读什么
SenseCAP 云SenseCAP OpenAPI 加云端 MQTT 流;首次启动按月回填历史
The Things Stackstack 的 MQTT 集成,上行已由 payload formatter 解码
ChirpStackChirpStack 的 MQTT 集成,上行已由 device-profile codec 解码
  • 测量映射表:assets/config/measurements.yaml。覆盖四个深度的土壤温度与水分、土壤张力、热通量与体积含水率;空气温湿度、CO2、气压、PM2.5 与 PM10、噪声;pH、溶解氧、浊度、TDS、盐度与水温;风速风向、总辐射、日照时长、PAR 与光量子;瞬时流量、累计流量、液位与漏水。新增一个量在文件里加一行,不用改代码;数值本身不缩放,只贴单位。
  • 离线判定阈值:默认 S210x 两个上报周期加余量。超时后该节点的实体在 Home Assistant 里变成不可用,保留最后一个值。
  • 去重:读数按 (DevEUI, measurementId, 时间戳) 去重,云端回填与实时流不会把同一条读数记两遍;同一实体出现两个值时,较晚的那条胜出。
  • 功能检查:录制的上行按三种来源格式回放进 broker,共建出 15 个实体。
  • 复现:回放测试位于方案仓库 tests/replay_bench.py,执行 python3 tests/replay_bench.py --fixtures tests/data/ 验证三类上行与 15 个实体自动注册。

已知退化​

  • broker 是单点:broker 停了,三条路径都不再更新。状态主题是 retained 的,Home Assistant 重启后能恢复最后的值。

数据与素材出处​

  • measurementId 到物理量的对照表(assets/config/measurements.yaml)读自 Seeed-Solution/SenseCAP-Decoder 仓库 commit d0a2342 的 decoder 源码——S210X 系列取自 third_party/SenseCAP-Decoder/S210X/Helium/SenseCAP_S210X_Helium_Decoder.js,T1000 取自 third_party/SenseCAP-Decoder/T1000/TTN/SenseCAP_T1000_TTN_Decoder.js。YAML 里每条记录都标注了它的源文件与行号。
  • 该仓库的许可状态未确认:没有 LICENSE 文件,README 里也没有许可段落;唯一的许可声明在一个第三方贡献的文件头里,写的是 Unlicensed for internal use。方案包不分发 decoder,只用了 id → 物理量 的对应关系;两条自建路径的部署指南链接上游仓库。要随部署分发 decoder 本身,先与 Seeed 确认许可。
  • device_class、unit_of_measurement、state_class 三列不来自 decoder——那里没有这些信息,它们取自 Home Assistant sensor 文档。
  • 架构图由 Architecture IR 生成,产品贴图取自已审核的 Seeed 产品素材库。
Loading Comments...