2. 基于 REST 的 ThingWorx 数据接入服务
REST 接入链路与对象映射
本例在例1已建好的 VirtualTempSensor Thing 基础上,新增一个自定义 REST 服务,让外部模拟设备通过 HTTP POST 把温度值写入 Thing 属性。核心链路是:外部设备 → ThingWorx REST API → 服务脚本 → Thing 属性 → 属性值变化可观察。
创建 REST 服务并写入属性
在 Composer 中打开 VirtualTempSensor,进入 Services 标签页,新建一个服务,命名为 WriteTemperature。输入参数定义为 tempValue,类型选 NUMBER。服务脚本如下:
// WriteTemperature 服务脚本
// 输入: tempValue (NUMBER)
// 输出: result (STRING)
if (tempValue === undefined || tempValue === null) {
result = "ERROR: tempValue is required";
} else if (tempValue < -50 || tempValue > 150) {
result = "ERROR: tempValue out of range [-50, 150]";
} else {
me.Temperature = tempValue;
result = "OK: Temperature set to " + tempValue;
}
脚本中 me 代表当前 Thing 实例,me.Temperature 直接写入属性。保存后,ThingWorx 会自动为该服务生成 REST 端点。
调用 REST API 写入数据
ThingWorx 的 REST 服务调用格式为:
POST https://{host}/Thingworx/Things/{thingName}/Services/{serviceName}
Headers:
Content-Type: application/json
appKey: {your-app-key}
Body:
{ "tempValue": 26.5 }
使用 curl 模拟外部设备发送数据:
curl -X POST \
"https://iot.example.com/Thingworx/Things/VirtualTempSensor/Services/WriteTemperature" \
-H "Content-Type: application/json" \
-H "appKey: 8a3f2c1e-xxxx-xxxx-xxxx-xxxxxxxxxxxx" \
-d '{"tempValue": 26.5}'
预期返回:
{"result":"OK: Temperature set to 26.5"}
appKey 在 Composer 的 Security → Application Keys 中创建,需勾选对应 Thing 的 Service 调用权限。测试环境也可用管理员账号的 Basic Auth 替代。
验证属性值变化
写入后有两种方式确认属性已更新:
- Composer 属性面板:打开 Thing → Properties → 查看
Temperature的当前值是否变为 26.5。 - REST GET 查询:
GET /Thingworx/Things/VirtualTempSensor/Properties/Temperature,返回 JSON 中的value字段即为最新值。
连续发送多个不同值(如 24.0、27.3、25.8),每次查询都应返回最近一次写入的值,说明 REST 数据接入链路已打通。
若返回 401,检查 appKey 是否有效及权限是否覆盖该 Thing 的 Service;若返回 400,检查 JSON body 中参数名是否与
tempValue 完全一致(区分大小写)。