You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Docker部署的Orion Context Broker接收Mosquitto MQTT数据

问题根因

你的部署架构缺失了核心的协议转换组件。原生Eclipse Mosquitto仅作为MQTT消息broker实现消息的路由、投递,没有内置对接Orion Context Broker NGSI接口的能力,不会自动将收到的MQTT消息转换为NGSI请求更新Orion实体,这是数据无法同步的根本原因。你手动curl更新实体正常,已经说明Orion本身运行、实体创建都没有问题。

修复配置步骤
    1. 补充部署FIWARE IoT Agent for JSON(MQTT协议适配组件)
      这个组件是FIWARE官方提供的MQTT设备接入代理,负责订阅Mosquitto上的设备消息主题,将设备上报的JSON格式数据转换为标准NGSI v2请求,自动更新Orion中的对应实体。
      在原有docker-compose.yml中新增如下服务配置:
iot-agent:
    image: fiware/iotagent-json:latest
    container_name: fiware-iot-agent
    depends_on:
      - mongo-db
      - mqtt
      - orion
    expose:
      - "4041"
    ports:
      - "4041:4041"
    environment:
      - IOTA_CB_HOST=orion
      - IOTA_CB_PORT=1026
      - IOTA_MQTT_HOST=mqtt
      - IOTA_MQTT_PORT=1883
      - IOTA_NORTH_PORT=4041
      - IOTA_REGISTRY_TYPE=mongodb
      - IOTA_MONGO_HOST=mongo-db
      - IOTA_MONGO_PORT=27017
      - IOTA_MONGO_DB=iotagentjson
      - IOTA_PROVIDER_URL=http://iot-agent:4041
      - IOTA_DEFAULT_RESOURCE=/iot/json
    networks:
      - default
    1. 修复Mosquitto默认配置问题
      新版Eclipse Mosquitto镜像默认禁止匿名连接,且没有加载默认配置,会导致IoT Agent无法连接MQTT broker。你需要先在宿主机创建Mosquitto配置文件,比如在/opt/mosquitto/config/mosquitto.conf写入如下内容:
listener 1883
allow_anonymous true
persistence true
persistence_location /mosquitto/data/

然后修改原有mqtt服务的volumes配置,把配置文件和数据目录挂载进去,删掉原来无效的/opt/mosquitto/var/run:/var/run挂载:

volumes:
      - /opt/mosquitto/config/mosquitto.conf:/mosquitto/config/mosquitto.conf
      - /opt/mosquitto/data:/mosquitto/data
      - /opt/mosquitto/log:/mosquitto/log
    1. 重启所有服务
      执行docker compose down && docker compose up -d,等所有服务启动完成后验证服务状态:
    • 访问http://localhost:1026/version能正常返回Orion版本信息
    • 访问http://localhost:4041/iot/about能正常返回IoT Agent版本信息
    1. 注册设备映射关系
      调用IoT Agent的北向接口,把树莓派的上报主题和你已经创建的SensTemp实体做绑定,注意把MQTT主题替换成你树莓派实际上报用的主题:
curl -X POST http://localhost:4041/iot/devices \
-H 'Content-Type: application/json' \
-H 'fiware-service: openiot' \
-H 'fiware-servicepath: /' \
-d '{
  "devices": [
    {
      "device_id": "raspi-sensor-001",
      "entity_name": "SensTemp",
      "entity_type": "Sensor",
      "attributes": [
        { "name": "temperature", "type": "Float", "object_id": "temperature" }
      ],
      "transport": "MQTT"
    }
  ]
}'

注册完成后,IoT Agent会自动订阅对应MQTT主题,树莓派上报的JSON数据只要包含temperature字段,就会自动同步到Orion的实体属性中。

    1. 链路验证
      树莓派上报一条测试数据后,执行如下命令查询实体值:
curl localhost:1026/v2/entities/SensTemp?options=keyValues

如果返回的temperature值和上报值一致,说明链路配置完成。

注意事项
  • 不要用localhost作为容器内部的服务访问地址,Docker Compose同网络内的服务直接用服务名(orion、mqtt、iot-agent、mongo-db)做内部域名解析即可,否则会出现容器内服务访问不通的问题。
  • 如果上报的数据格式是UltraLight而非纯JSON,可以替换IoT Agent镜像为fiware/iotagent-ul,配置逻辑基本一致。
  • 你提供的Mosquitto消息接收证明截图如下,确认消息正常到达broker后,只要上述配置正确就可以自动同步:
    wiresharkproofmqttarriving

内容的提问来源于stack exchange,提问作者Srdjan Zec

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 15:45:34