连接系统,包括 OPC UA IoT Agent、Orion Context Broker。 Cygnus 和 Postgres 的历史数据

Posted

技术标签:

【中文标题】连接系统,包括 OPC UA IoT Agent、Orion Context Broker。 Cygnus 和 Postgres 的历史数据【英文标题】:Connect system which includes OPC UA IoT Agent, Orion Context Broker. Cygnus and Historic data with Postgres 【发布时间】:2021-10-30 07:35:51 【问题描述】:

我正在尝试建立一个系统来保存历史数据,流程如下: Prosys OPC-UA 服务器模拟 -> OPC-UA FIWARE IoT 代理 -> Orion 上下文代理 -> FIWARE Cygnus 连接器 -> PostgreSQL 数据库。

这是我用来编写docker-compose 文件的文档:

Historic-Context-Flume

OPC-UA IoT Agent

这是我使用的docker-compose.env 文件

docker-compose.yml

version: "3"
#secrets:
#   age_idm_auth:
#      file: age_idm_auth.txt

services:
  iotage:
    hostname: iotage
    image: iotagent4fiware/iotagent-opcua:1.3.4
    networks:
      - hostnet
      - iotnet
    ports:
      - "$AGENT_SERVER_PORT:$AGENT_SERVER_PORT"
      - "4081:8080"
    extra_hosts:
      - "iotcarsrv:192.168.50.167"
      - "HP:192.168.50.167"
    depends_on:
      - iotmongo
      - orion
    volumes:
      - ./AGECONF:/opt/iotagent-opcua/conf
      - ./certificates/charm:/opt/iotagent-opcua/certificates
    command: /usr/bin/tail -f /var/log/lastlog

  iotmongo:
    hostname: iotmongo
    image: mongo:3.4
    networks:
      - iotnet
    volumes:
      - iotmongo_data:/data/db
      - iotmongo_conf:/data/configdb

  ################ OCB ################

  orion:
    hostname: orion
    image: fiware/orion:latest
    networks:
      - hostnet
      - ocbnet
    ports:
      - "$ORION_PORT:$ORION_PORT"
    depends_on:
      - orion_mongo
    #command: -dbhost mongo
    entrypoint: /usr/bin/contextBroker -fg -multiservice -ngsiv1Autocast -statCounters -dbhost mongo -logForHumans -logLevel DEBUG -t 255

  orion_mongo:
    hostname: orion_mongo
    image: mongo:3.4
    networks:
      ocbnet:
        aliases:
          - mongo
    volumes:
      - orion_mongo_data:/data/db
      - orion_mongo_conf:/data/configdb
    command: --nojournal

  ############### CYGNUS ###############

  cygnus:
    image: fiware/cygnus-ngsi:$CYGNUS_VERSION
    hostname: cygnus
    container_name: fiware-cygnus
    networks:
      - hostnet
    depends_on:
      - postgres-db
    expose:
      - "$CYGNUS_POSTGRESQL_SERVICE_PORT" # 5055
      - "$CYGNUS_API_PORT" # 5080
    ports:
      - "$CYGNUS_POSTGRESQL_SERVICE_PORT:$CYGNUS_POSTGRESQL_SERVICE_PORT"
      - "$CYGNUS_API_PORT:$CYGNUS_API_PORT"
    environment:
      - "CYGNUS_POSTGRESQL_SERVICE_PORT=$CYGNUS_POSTGRESQL_SERVICE_PORT"      
      - "CYGNUS_POSTGRESQL_HOST=postgres-db" # Hostname of the PostgreSQL server used to persist historical contex
      - "CYGNUS_POSTGRESQL_PORT=$POSTGRES_DB_PORT" # Port that the PostgreSQL server uses to listen to commands
      - "CYGNUS_POSTGRESQL_DATABASE=postgres"
      - "CYGNUS_POSTGRESQL_USER=postgres" # Username for the PostgreSQL database user
      - "CYGNUS_POSTGRESQL_PASS=password" # Password for the PostgreSQL database user
      - "CYGNUS_POSTGRESQL_ENABLE_CACHE=true" # Switch to enable caching within the PostgreSQL configuration
      - "CYGNUS_SERVICE_PORT=$CYGNUS_POSTGRESQL_SERVICE_PORT" # Notification Port that Cygnus listens when subcr
      - "CYGNUS_API_PORT=$CYGNUS_API_PORT" # Port that Cygnus listens on for operational reasons
      - "CYGNUS_LOG_LEVEL=DEBUG" # The logging level for Cygnus


  postgres-db:
    image: postgres
    hostname: postgres-db
    expose:
      - "$POSTGRES_DB_PORT"
    ports:
      - "$POSTGRES_DB_PORT:$POSTGRES_DB_PORT"
    networks:
      - hostnet
    environment:
      - "POSTGRES_PASSWORD=password"
      - "POSTGRES_USER=postgres"
      - "POSTGRES_DB=postgres"
    volumes:
      - postgres-db:/var/lib/postgresql/data

volumes:
  iotmongo_data:
  iotmongo_conf:
  orion_mongo_data:
  orion_mongo_conf:
  postgres-db:

networks:
  hostnet:
  iotnet:
  ocbnet:

.env

# Orion
ORION_PORT=1026

# PostgreSQL
POSTGRES_DB_PORT=5432

# OPCUA IoT Agent
AGENT_SERVER_PORT=4001

# Cygnus
CYGNUS_VERSION=2.10.0
CYGNUS_API_PORT=5080
CYGNUS_mysql_SERVICE_PORT=5050
CYGNUS_MONGO_SERVICE_PORT=5051
CYGNUS_CKAN_SERVICE_PORT=5052
CYGNUS_HDFS_SERVICE_PORT=5053
CYGNUS_CARTO_SERVICE_PORT=5054
CYGNUS_POSTGRESQL_SERVICE_PORT=5055
CYGNUS_ORION_SERVICE_PORT=5056
CYGNUS_POSTGIS_SERVICE_PORT=5057
CYGNUS_ELASTICSEARCH_SERVICE_PORT=5058
CYGNUS_ARCGIS_SERVICE_PORT=5059

我可以看到系统已经启动并且 docker 没有通知错误 docker ps -a result

但是,当我使用 pgAdmin 或 docker exec 检查 postgres 数据库时,里面什么都没有。 psql 的\dt 命令给了我Did not find any relation,这意味着没有任何内容登录到数据库中。

请提供帮助以结合 FIWARE 的这两个组件(IoT OPCUA 代理和 Cygnus)。我也不清楚 Cygnus 连接器是否会为我们创建数据库。

[编辑] 该组件似乎正在工作: 模拟服务器

所有服务

Cynus 只通知我“配置没有变化”,当我使用 docker exec 进入容器时,我能够从 Cygnus ping 两个 orion、postgresql 数据库容器

在 postgresql 中:我没有看到所需的数据库或表

我的系统来自 Simulation Server -> OPCUA IoT Agent -> Orion 运行良好,因为从 docker logs 我仍然能够获得 Simulation Server 的更新值:

【问题讨论】:

【参考方案1】:

这里有一个复杂的场景,由 5 个组件组成的端到端链:

Prosys OPC-UA 服务器模拟 OPC-UA FIWARE 物联网代理 Orion 上下文代理 FIWARE Cygnus 连接器 PostgreSQL 数据库

我的建议是检查链中的每个步骤(查看日志等),以确保在检查下一步之前一切都正确。

【讨论】:

Cygnus 会为我的数据创建表吗?或者我必须使用我在docker-compose- "CYGNUS_POSTGRESQL_DATABASE=postgres"的环境参数中设置的相同名称手动创建一个数据库和表? 我建议将该问题作为独立问题发布在 *** 中 问题解决了。服务路径不正确,组件IP地址错误,我订阅的curl命令不正确。 @Navurt 我在做同样的项目,但我怀疑你是如何解决 IP 问题的://p:5001/UA/CarServer 我在nodejs中创建了一个客户端来查询我检索数据,我必须用localhost替换p。我的问题是在填写 docker-compose 时,我不明白这两行 extra_hosts 行:-“iotcarsrv:192.168.50.167”-“HP:192.168.50.167”你能解释一下如何正确配置它们吗?因为我在本地有我的 opc,所以容器无法访问。 @Manolait 这两行额外用于解析主机名。基本上,这意味着如果我将192.168.50.167 替换为iotcarsrvHP,docker-compose 仍然知道我指的是哪个IP。

以上是关于连接系统,包括 OPC UA IoT Agent、Orion Context Broker。 Cygnus 和 Postgres 的历史数据的主要内容,如果未能解决你的问题,请参考以下文章

从 OPC 到 OPC UA

如何将 OPC-UA 数据与 Kafka 连接?

如何使用 opc ua 从 PLC 读取信号?

如何检查 OPC Publisher 和 IoT Hub 之间的日志以确认数据传输

OPC-UA 服务器可以覆盖连接客户端的超时和其他参数吗?

ThingsBoard IOT Gateway