emqx无法写入到iotdb内置mqtt

配置了规则:
SELECT
now_timestamp(‘millisecond’) as now_ts_ms,
payload.start_signal as start_signal,
payload.small_car_left_east as small_car_left_east
FROM
“qzj/001/telemetry”

动作输出:
{
“device”:“root.device_collector.pat.qzj001”,
“timestamp”:${now_ts_ms},
“measurements”:[
“start_signal”,
“small_car_left_east”
],
“values”:[
${start_signal},
${small_car_left_east}
]
}

单独连接iotdb内置的iotdb是可以测通的;
但是iotdb无法自动创建表,无法收到数据


先看 EMQX 动作指标,不是先看 IoTDB 表。
截图里命中 1363、成功 1363、失败 0、丢弃 0,说明 EMQX 已经把消息发布到你配置的 MQTT 动作了。现在问题更可能在 IoTDB 内置 MQTT 服务解析 payload / 建模这边。
你这个 payload 基本是 IoTDB MQTT json formatter 的树模型格式:

{
  "device": "root.device_collector.pat.qzj001",
  "timestamp": 1710000000000,
  "measurements": ["start_signal", "small_car_left_east"],
  "values": [1, 2]
}
  1. IoTDB 配置确认 enable_mqtt_service=truemqtt_payload_formatter=json。如果你用的是 IoTDB 2.x 表模型,json 不是表模型写法;表模型要用对应 formatter 或自定义 PayloadFormatter,不要期待它按这个 JSON 自动建表。
  2. EMQX 规则里先用“SQL 测试”喂一条真实 payload,看 ${start_signal}${small_car_left_east} 最终是不是数字,不要是 undefined、空值或带引号的字符串。
  3. 用 MQTTX / mosquitto_pub 直接连 IoTDB 内置 MQTT,发一条固定 payload,先确认 IoTDB 里 select * from root.device_collector.pat.qzj001 能查到。
  4. 看 IoTDB server 日志。EMQX 这里的成功只代表 MQTT publish 成功,不代表 IoTDB 已经落库。
    如果直连 IoTDB MQTT 能写入,再回头查 EMQX 动作的 topic、payload 模板和值类型;如果直连也写不进去,就是 IoTDB MQTT 服务配置或 formatter 问题。