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

使用FIWARE IoT Agent-JSON与Mosquitto时Orion显示无关传感器数据问题

问题描述

基于FIWARE IoT Agent-JSON和Mosquitto开发IoT应用,已创建测试设备并分配传感器,通过Mosquitto发布传感器数据。MongoDB中IoT Agent的iotagentul.devices和iotagentul.EysDevices表能正常查看设备关联的传感器属性,但Orion Context Broker的orion-acd表却显示所有通过Mosquitto发布的传感器属性,包括未关联到设备的属性。希望Orion仅显示与设备关联的传感器属性,咨询以下问题:

  1. 如何阻止通过Mosquitto传入的未关联设备的传感器属性出现在Orion的表中?
  2. 需对IoT Agent或Orion做哪些配置修改以解决该问题?

配置详情

Docker-compose.yml文件

version: "3.8"
services:
  # Orion 上下文代理
  orion:
    image: fiware/orion:3.7.0
    hostname: orion
    container_name: fiware-orion-pms
    networks:
      - default
    expose:
      - "${ORION_PORT}"
    ports:
      - "${ORION_PORT}:${ORION_PORT}" # localhost:1026
    command: -dbhost $IP_ADDRESS:27030 -dbuser $DB_USER -dbpwd $DB_PWD -dbAuthDb admin -db orion -logLevel DEBUG
    healthcheck:
      test: curl --fail -s http://orion:${ORION_PORT}/version || exit 1
      interval: 5s
    restart: always
    labels:
      maintainer: ino
      description: fiware-orion
      project: pms
      version: v1.0.0
      type: fiware
    deploy:
      resources:
        limits:
          cpus: '0.5' # 最大0.5 CPU核心
          memory: 512M # 最大512MB内存
    logging:
      driver: "json-file" # 使用json-file日志驱动
      options:
        max-size: "1g" # 单个日志文件最大1GB
        max-file: "5" # 最多保留5个日志文件         
  iot-agent:
    image: fiware/iotagent-json
    hostname: iot-agent
    container_name: fiware-iot-agent-pms
    networks:
      - default
    expose:
      - "${IOTA_NORTH_PORT}"
    ports:
      - "${IOTA_NORTH_PORT}:${IOTA_NORTH_PORT}" # localhost:4041
    environment:
      - IOTA_CB_HOST=${IP_ADDRESS} # 上下文代理地址
      - IOTA_CB_PORT=1026 # 上下文代理端口
      - IOTA_NORTH_PORT=4041
      - IOTA_REGISTRY_TYPE=mongodb # 设备信息存储方式
      - IOTA_LOG_LEVEL=DEBUG # IoT Agent日志级别
      - IOTA_TIMESTAMP=true # 为每条数据添加时间戳
      - IOTA_CB_NGSI_VERSION=v2 # 使用NGSIv2协议更新上下文
      - IOTA_AUTOCAST=true # 将数值型属性自动转换为数字类型
      - IOTA_MONGO_USER=$DB_USER 
      - IOTA_MONGO_PASSWORD=$DB_PWD
      - IOTA_MONGO_AUTH_SOURCE=admin  
      - IOTA_MONGO_HOST=$IP_ADDRESS # MongoDB地址
      - IOTA_MONGO_PORT=27030 # MongoDB端口
      - IOTA_MONGO_DB=iotagentul # IoT Agent使用的数据库名
      - IOTA_MQTT_HOST=$MQTT_HOST # MQTT代理地址
      - IOTA_MQTT_PORT=1883 # MQTT代理端口
      - IOTA_DEFAULT_RESOURCE= # MQTT模式下无需设置资源
      - IOTA_PROVIDER_URL=http://iot-agent:${IOTA_NORTH_PORT}
      - IOTA_DEFAULT_TRANSPORT=MQTT
    healthcheck:
      interval: 5s
    restart: always
    labels:
      maintainer: ino
      description: fiware-orion-agent-json
      project: pms
      version: v1.0.0
      type: fiware
    deploy:
      resources:
        limits:
          cpus: '0.5' # 最大0.5 CPU核心
          memory: 512M # 最大512MB内存
    logging:
      driver: "json-file" # 使用json-file日志驱动
      options:
        max-size: "1g" # 单个日志文件最大1GB
        max-file: "5" # 最多保留5个日志文件        

networks:
  default:
    labels:
      org.fiware: 'fiware-networks-pms'
    ipam:
      config:
        - subnet: 172.50.1.0/24

iotagentul.devices表示例记录

{
  "_id": {
    "$oid": "665ee84cfc6591f112df952a"
  },
  "lazy": [],
  "active": [
    {
      "name": "Current_L1",
      "type": "Double",
      "object_id": "Current_L1"
    }
  ],
  "commands": [],
  "staticAttributes": [
    {
      "name": "refStore",
      "type": "Relationship",
      "value": "urn:ngsi-ld:pa_DEVICE1:001"
    }
  ],
  "creationDate": {
    "$date": "2024-06-04T10:11:24.071Z"
  },
  "id": "PA_DEVICE1",
  "type": "pa",
  "name": "PA_DEVICE1",
  "service": "acd",
  "subservice": "/pa/DEVICE1",
  "internalId": null,
  "transport": "HTTP",
  "polling": true,
  "__v": 1,
  "apikey": "acd_PA_DEVICE1",
  "subscriptions": []
}

orion-acd表示例记录

{
  "_id": {
    "id": "PA_DEVICE1",
    "type": "pa",
    "servicePath": "/pa/DEVICE1"
  },
  "attrNames": [
    "refStore",
    "Current_L1",
    "Voltage_UL1_N",
    "Voltage_UL2_N",
    "Voltage_UL3_N",
    "Current_L2",
    "Current_L3",
    "Total_Consumed_Energy",
    "Total_Power_Factor",
    "Total_Reactive_Power",
    "Total_Apparent_Power",
    "Total_Active_Power",
    "TimeInstant"
  ],
  "attrs": {
    ...
  },
  "creDate": 1717495904.300415,
  "modDate": 1717583504.3732698,
  "lastCorrelator": "ce017f3a-2326-11ef-b4d0-0242ac320102"
}
原因分析

当前IoT Agent-JSON默认未启用属性过滤,会接收MQTT主题中的所有属性并转发给Orion,不管这些属性是否在设备的active属性列表中定义,导致未关联的属性也被同步到Orion的表中。

解决方案

问题1解决方法

启用IoT Agent的属性过滤功能,让它仅转发设备active列表中预定义的属性到Orion,未关联的属性会被直接丢弃,不会进入Orion的表中。

问题2配置修改

1. 修改IoT Agent环境变量

在Docker-compose.yml的iot-agent服务环境变量中添加IOTA_FILTER_ATTRS=true,启用属性过滤:

environment:
  - IOTA_CB_HOST=${IP_ADDRESS}
  - IOTA_CB_PORT=1026
  - IOTA_NORTH_PORT=4041
  - IOTA_REGISTRY_TYPE=mongodb
  - IOTA_LOG_LEVEL=DEBUG
  - IOTA_TIMESTAMP=true
  - IOTA_CB_NGSI_VERSION=v2
  - IOTA_AUTOCAST=true
  - IOTA_MONGO_USER=$DB_USER 
  - IOTA_MONGO_PASSWORD=$DB_PWD
  - IOTA_MONGO_AUTH_SOURCE=admin  
  - IOTA_MONGO_HOST=$IP_ADDRESS
  - IOTA_MONGO_PORT=27030
  - IOTA_MONGO_DB=iotagentul
  - IOTA_MQTT_HOST=$MQTT_HOST
  - IOTA_MQTT_PORT=1883
  - IOTA_DEFAULT_RESOURCE=
  - IOTA_PROVIDER_URL=http://iot-agent:${IOTA_NORTH_PORT}
  - IOTA_DEFAULT_TRANSPORT=MQTT
  - IOTA_FILTER_ATTRS=true  # 新增:启用属性过滤

2. 重启IoT Agent容器

修改配置后执行以下命令重启容器,使配置生效:

docker-compose restart iot-agent

3. 清理Orion中已存在的多余属性

若之前已有未关联属性同步到Orion,可通过API删除:

curl -X DELETE http://<ORION_IP>:1026/v2/entities/PA_DEVICE1/attrs/Voltage_UL1_N -H "Fiware-Service: acd" -H "Fiware-ServicePath: /pa/DEVICE1"

替换<ORION_IP>为Orion实际地址,重复此命令删除其他多余属性。


内容的提问来源于stack exchange,提问作者rumeysa yuk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 22:37:02