4. 云平台设备模型与物模型设计

在农业物联网云平台中,设备接入只是第一步。平台真正要理解的是:这台设备是什么、能上报哪些数据、数据代表什么含义、平台能否向它下发指令。解决这一问题的核心机制就是物模型(Thing Model)。可以把物模型理解为设备在云端的“数字化说明书”:它用统一的结构描述设备的属性、事件和服务,使平台不必为每一款硬件单独写解析逻辑,从而实现设备的标准化接入与统一管理。

物模型的三要素:属性、事件、服务

物模型通常由三类要素构成,它们分别对应设备“有什么状态”“发生了什么”“能做什么”。

  • 属性(Property):描述设备可被读取或设置的状态量,如土壤含水率、空气温度、阀门开关状态。属性一般具有数据类型、取值范围、单位、读写权限和采集频率等元数据。
  • 事件(Event):描述设备主动上报的、具有时间意义的通知,如“低电量告警”“传感器故障”“灌溉完成”。事件通常包含事件标识、级别和输出参数。
  • 服务(Service):描述平台可向设备调用的能力,如“开启灌溉”“校准传感器”“设置上报周期”。服务由输入参数、输出参数和调用方式组成。

三者的区别可以用一句话概括:属性是“状态快照”,事件是“时间点上的通知”,服务是“可被调用的动作”。在建模时若混淆三者,后续的数据解析和指令下发都会出现问题。例如把“灌溉完成”建成属性,平台就只能轮询状态而无法获得带时间戳的完成通知;把“设置上报周期”建成属性,则难以表达参数校验和调用结果。

农业设备物模型建模方法

建模的基本流程是:先梳理设备的物理量与应用需求,再为每个量选择正确的要素类型,最后补齐数据类型、单位、范围与标识符。下面以三类典型设备说明。

土壤墒情传感器通常包含多层土壤含水率、土壤温度、电导率等测量量。这些量适合建为只读属性,例如标识符 soil_moisture_20cm,数据类型为 float,单位 %,范围 0~100,读写权限为只读。设备电量、信号强度也建为属性。若设备支持远程校准,则建一个服务 calibrate,输入为校准点数量与标准值,输出为校准结果码。传感器探头断线属于异常,应建为事件 probe_fault,输出参数为探头编号。

气象站测量量更多,包括空气温度、湿度、风速、风向、降雨量、光照度、大气压等。建模时要注意单位统一,例如风速用 m/s、降雨量用 mm、光照度用 lux。风向是 0~360 度的角度量,需在描述中说明正北为 0 度、顺时针增加。气象站常带加热除霜功能,可建服务 set_heater,输入为开关布尔值。降雨量突增或风速超限可建为事件,便于平台触发告警。

灌溉控制器兼具状态与动作。阀门开关、当前灌溉模式、剩余灌溉时长建为属性,其中阀门开关可设为读写,允许平台远程置位。开启灌溉建为服务 start_irrigation,输入包括阀门编号、时长(分钟)、流量上限;停止灌溉建为服务 stop_irrigation。灌溉完成、管路压力异常建为事件。这里的关键是:动作必须建为服务而非属性,因为服务能携带参数并返回执行结果,而属性写入无法表达“执行了多久、是否成功”。

建模时建议为每个要素写明“标识符、名称、数据类型、单位、取值范围、读写权限、采集/上报周期”七项元数据。标识符使用小写字母加下划线,避免中文和空格,便于后续在解析脚本和 API 中引用。

物模型与数据解析的映射关系

设备真实上报的往往是紧凑的二进制帧或自定义 JSON,物模型的价值在于建立“原始报文—标准属性”的映射。以常见的 Modbus 上报为例,设备上传寄存器值 0x0A8C(十进制 2700),物模型中定义 soil_moisture_20cm 的缩放系数为 0.01、单位 %,则解析结果为 27.00%。这一映射关系包含三层:字段定位(第几个寄存器/哪个 JSON 键)、数值转换(缩放、偏移、字节序)、语义绑定(对应哪个属性标识符及单位)。

事件与服务同样需要映射。事件映射把报文中的告警码转换为事件标识符和级别;服务映射则把平台下发的 JSON 参数转换为设备可识别的指令帧。下图展示了从设备原始数据到物模型要素、再到平台应用的完整映射链路。

物模型与数据解析映射链路 设备原始报文 土壤墒情传感器 寄存器 0x0002 值 0x0A8C 气象站 JSON: t=23.6, rh=61, ws=2.4 灌溉控制器 告警码 0x03 阀门状态 0x01 平台下发指令 start_irrigation 解析 解析映射规则 字段定位:寄存器2 转换:×0.01 绑定:soil_moisture_20cm 键映射:t→air_temp rh→air_humidity ws→wind_speed 告警码 0x03 → pipe_pressure_alarm 级别:严重 JSON→指令帧 参数校验与编码 绑定 物模型要素 属性 Property soil_moisture_20cm = 27.00 % air_temp = 23.6 ℃ 事件 Event pipe_pressure_alarm 级别:严重 · 带时间戳 服务 Service start_irrigation 输入:阀门/时长/流量 平台应用:存储、告警、 可视化、联动控制 映射三要素:字段定位(哪个寄存器/键) → 数值转换(缩放、偏移、字节序) → 语义绑定(属性/事件/服务标识符与单位)

实际配置时,解析规则通常以脚本或映射表形式存在。例如在平台的数据解析节点中填写:源字段 reg[2]、缩放 0.01、目标属性 soil_moisture_20cm。若设备更换型号,只需调整映射表而无需改动上层业务逻辑,这正是物模型解耦硬件与应用的工程价值。

建模中的常见问题与判断依据

第一,单位与量纲不统一。同一平台内温度有的用摄氏度、有的用开尔文,会导致告警阈值失效。应在物模型元数据中强制写明单位,并在解析层完成统一换算。第二,读写权限设置错误。把只读测量量设为可写,可能被误下发覆盖真实值。第三,事件与属性混用。判断依据是:该信息是否需要保留发生时刻并主动通知?是则建事件,否则建属性。第四,服务缺少结果返回。灌溉服务若只下发不返回执行结果,平台无法判断指令是否生效,应定义输出参数如 result_code 与 actual_duration。

验证物模型是否正确,可采用“三查”方法:查属性能否被完整解析且数值落在合理范围(如含水率 27% 而非 2700);查事件能否在触发条件下按时上报并带正确级别;查服务下发后设备是否返回预期结果码。以灌溉为例,平台调用 start_irrigation 输入阀门 1、时长 10 分钟,若返回 result_code=0 且属性 valve_status 在数秒内变为开启,则说明服务映射与状态回传链路均正常。通过这样的闭环验证,物模型才真正成为设备与平台之间可靠的语言。