FIWARE OPC UA IoT Agent对接Cygnus写入PostgreSQL无数据排查求助
解决方案
先明确你关心的两个基础问题
- Cygnus 不需要你手动预先创建数据库和表,只要配置正确、能正常接收Orion的通知,收到第一条数据时会自动创建对应的库表结构。
- OPC UA IoT Agent 不需要直接和Cygnus对接,数据流转逻辑是:IoT Agent上报数据到Orion → Orion通过配置的订阅规则,把上下文更新推送给Cygnus → Cygnus写入PostgreSQL,所以你缺失的核心配置是Orion的订阅规则。
具体排查与配置步骤
步骤1:给Orion配置向Cygnus推送数据的订阅
向Orion的1026端口发送如下订阅请求,监听所有实体的更新并推送给Cygnus:
curl -X POST 'http://localhost:1026/v2/subscriptions' \ -H 'Content-Type: application/json' \ -d '{ "description": "推送所有实体更新到Cygnus", "subject": { "entities": [{"idPattern": ".*"}] }, "notification": { "http": { "url": "http://cygnus:5055/notify" }, "attrsFormat": "legacy" } }'
注意:如果你在对接时使用了Fiware多租户配置,需要在请求头中加上对应的
Fiware-Service和Fiware-ServicePath参数,否则订阅只会在默认租户下生效。attrsFormat必须设置为legacy才能适配当前版本Cygnus的解析要求。
步骤2:补充Cygnus缺失的必要配置
你当前的docker-compose.yml中Cygnus的环境变量缺少几个必填参数,在cygnus服务的environment块补充如下配置:
# 新增配置项 - CYGNUS_POSTGRESQL_DEFAULT_TTL=0 - CYGNUS_POSTGRESQL_DEFAULT_DATA_MODEL=db-by-service-path - CYGNUS_HTTP_MAX_CONNECTIONS=100 - CYGNUS_HTTP_MAX_CONNECTIONS_PER_ROUTE=100
参数说明:
CYGNUS_POSTGRESQL_DEFAULT_DATA_MODEL指定数据存储模型,db-by-service-path表示按租户服务路径拆分数据库,是最常用的配置CYGNUS_POSTGRESQL_DEFAULT_TTL=0表示数据永久存储,不会自动过期
修改配置后重启Cygnus服务生效:docker-compose restart cygnus
步骤3:验证全链路数据流转
等待OPC UA模拟服务器生成新的数值更新后,按以下顺序验证:
- 查看Orion日志,确认有发送通知到
cygnus:5055的请求记录,没有报错 - 查看Cygnus日志,确认有收到Orion的通知请求,且没有PostgreSQL写入的报错信息
- 进入PostgreSQL容器执行以下命令查看数据:
# 进入postgres命令行 psql -U postgres # 查看所有数据库,默认会生成名为default_/的数据库(未配置多租户的情况) \l # 进入对应数据库 \c "default_/" # 查看生成的表,表名和你OPC UA设备的实体ID对应 \dt
配置完成后就能看到自动生成的表和对应的历史数据。
内容的提问来源于stack exchange,提问作者Navurt
相关产品推荐
相关产品推荐

