【问题标题】:Bacnet4j COV subscriptionBacnet4j COV 订阅
【发布时间】:2020-11-09 09:48:15
【问题描述】:

我正在通过 java 使用 bacnet,bacnet4j 项目。我有一个带有 bacnet 对象的设备,我想通过第二个设备 (COV) 监视这个对象。如何运行下标?

我应该利用 localDevice.getEventHandler().addListener(new DeviceEventListener() { 并使用那里的功能?

也许有人让我走上了正轨。或者有什么我可以分析的例子吗?

【问题讨论】:

  • 您能否澄清一下您是哪一方的通信 - 想要获得通知的订阅客户端或应该发送通知的订阅主机?
  • 我想接收通知并处理它,但我不知道该通知来自其他设备的哪里

标签: java bacnet bacnet4j


【解决方案1】:

我没有在真实设备上对此进行过测试(我为 BACnet 对象的子集编写了 bacnet4j-wrapper)。

值的变化是两步过程。首先你需要添加DeviceEventListener,就像你做的那样。一种更方便的方法是DeviceEventAdapter,它提供了所有方法——您需要实现的方法是covNotificationReceived。 一旦你的监听器就位,你需要为你想要观看的特定对象触发SubscribeCOVRequest

查看来源ChangeOfValueTest.java

【讨论】:

  • 我在尝试从另一个设备重新订阅后收到此消息 [设备 98 的 BACnet4J 传输] 警告 com.serotonin.bacnet4j.service.unconfirmed.UnconfirmedPrivateTransferRequest - 未找到 vendorId 8、serviceNumber 1 的处理程序,忽略未经确认的私人转账
  • 您拥有的日志条目是一个远程请求。我不确定这些是否相关,您确定您的订阅请求会离开您的节点并继续进行吗?请与wireshark检查以确认行为。您还可以尝试阅读远程设备订阅,看看是否被目的地接受。试试PropertyIdentifier.activeCovSubscriptions。某些设备有活跃订阅者限制。
  • 我有时间看看它。我使用 VTS 程序发送 SubscribeCOVPropertyRequest。在 BACnet4J 中,我在 requestReceived 中看到了这个请求(而不是在 covNotificationReceived 中)。 VTS 程序返回有关错误的信息,就好像 BACnet4J 无法处理此查询一样。我不知道如何激活向请求它的设备发送值的选项。
  • 日志:E / BACnet:requestReceived 地址:Address [networkNumber = 0, macAddress = [a, 1, a, f, ba, c0]] | 10.1.10.15:47808 服务:可编码 (com.serotonin.bacnet4j.service.confirmed.SubscribeCOVPropertyRequest) ChoiceId (): 28 getNetworkPriority (): null。
猜你喜欢
  • 2020-10-17
  • 1970-01-01
  • 2019-12-29
  • 2019-01-03
  • 2020-03-29
  • 2020-10-11
  • 1970-01-01
  • 1970-01-01
  • 2015-08-24
相关资源
最近更新 更多