EMQX桥接TDEngine失败

EMQX桥接TDEngine时,配置TDEngine数据桥接时,请求体如果配置如下规则,桥接失败,如果配置成固定的Insert SQL桥接正常,请问是不是版本解析Topic有问题?

INSERT INTO test.sensor_data VALUES(
now,
${payload.temperature},
${payload.humidity},
${payload.volume},
${payload.pm10},
${payload.pm25},
${payload.so2},
${payload.no2},
${payload.co},
‘${payload.sensor_id}’,
${payload.area},
${payload.coll_time}
)

环境

测试过程中,看EMQX与TDEngine链路都是通的,没问题。

固定写死的SQL:
INSERT INTO test.sensor_data VALUES(
now,
30,
44.5,
23,
61,
14,
23,
4,
5,
“10-c6-1f-1a-1f-47”,
1,
1596157444170
);

测试topic内容:
{
“temperature”: 30,
“humidity”: 44.5,
“volume”: 23,
“pm10”: 61,
“pm25”: 14,
“so2”: 23,
“no2”: 4,
“co”: 5,
“sensor_id”: “10-c6-1f-1a-1f-49”,
“area”: 1,
“coll_time”: 1596157444170
}

请求体应该是json格式的,你们用webhook来对接tdengine,不支持sql插入的哦

请求体用规则insert不行,把SQL写死可以

你说的桥接失败,具体是指什么?是请求正常发出但是没有写入数据到 TDEngine,还是 EMQX 这边报错?

EMQX->TDEngine,请求正常发出,数据没有写入到TDEngine。数据桥接请求体把SQL写死可以,使用下面的配置不行,你们可以试试,看行不行,我这个已经描述很清楚了。
INSERT INTO test.sensor_data VALUES(
now,
${payload.temperature},
${payload.humidity},
${payload.volume},
${payload.PM10},
${payload.pm25},
${payload.SO2},
${payload.NO2},
${payload.CO},
‘${payload.id}’,
${payload.area},
${payload.ts}
)

建议抓个包看一下两次请求之间有什么不同,比如失败时 TDEngine 返回的是 Status Code 是什么。

@chenyanpan33 在 Webhook 的 body 模板中,是不支持对嵌套数据寻址的,也就是不支持 ${payload.volume} 这种写法,你需要在规则引擎中就提取出这些数据。
下面是基于你的数据做的一个测试配置:
规则引擎:

SELECT
  payload.temperature as temperature,
  payload.humidity as humidity,
  payload.volume as volume,
  payload.pm10 as pm10,
  payload.pm25 as pm25,
  payload.so2 as so2,
  payload.no2 as no2,
  payload.co as co,
  payload.sensor_id as sensor_id,
  payload.area as area,
  payload.ts as ts
    FROM
      "t/#"

Webhook:

INSERT INTO mqtt.sensor_data VALUES(
  ${ts},
  ${temperature},
  ${humidity},
  ${volume},
  ${pm10},
  ${pm25},
  ${so2},
  ${no2},
  ${co},
  '${sensor_id}',
  ${area},
  ${ts}
)

注意配置上 webhook 的 header 这些必要数据
数据源:

{
"temperature": 30,
"humidity": 44.5,
"volume": 23,
"pm10": 61,
"pm25": 14,
"so2": 23,
"no2": 4,
"co": 5,
"sensor_id": "10-c6-1f-1a-1f-49",
"area": 1,
"ts": 1596157444170
}

结果:

感谢,感谢,我验证一下 :+1: :handshake:

@chenyanpan33 抱歉,上次我应该是验证时弄错了,Webhook 里面的模板是支持嵌套访问的,特此纠正下。

但还是不行,你给的这种方式也不行

你旧的模板里面有 now 这个不存在的变量,然后变量大小写也有对不上的地方,你再检查下,接入是没有问题的。
如果还是找不到原因,你把日志等级设置为 debug,然后操作下,把 log 文件贴这里,里面会记录 data bridges 的相关行为的。

请问您这边解决了吗,我也遇到了这个问题,sql测试可以看到数据是拿到的,但是insert语句使用${}取不到

以上的问题最后解决了吗?我现在也遇到了同样的现象,插入数据到TDengine时,用写死的数据可以入库入表,用通配符${.…}的办法,如果键值对的键名中获取values中的键值对中如果键名是包括汉字时,获取不到数据。也就是用${payload.UPS}能正常获取键值存盘,而${payload.UPS电池剩余电量}则没有获取到相应的键值,键名加了括号 ${payload.“UPS电池剩余时间”},也一样获取不到数值。汉字就写不进表中,纯字母可以写入!