首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >订阅通道/实时通知

订阅通道/实时通知
EN

Stack Overflow用户
提问于 2016-02-02 16:09:01
回答 2查看 682关注 0票数 2

关于实时通知的问题。

代码语言:javascript
复制
Post: https://xxxiot.cumulocity.com/cep/realtime
Body: 
[
 { 
  "channel": "/meta/handshake",
  "version": "1.0",
  "mininumVersion": "1.0beta",
  "supportedConnectionTypes": ["long-polling","callback-polling"],
  "advice":{"timeout":120000,"interval":30000}
 }
]

我的回答是:

代码语言:javascript
复制
[
 {
  "minimumVersion": "1.0",
  "supportedConnectionTypes": [
  "smartrest-long-polling",
  "long-polling"
],
  "successful": true,
  "channel": "/meta/handshake",
  "ext": {
  "ack": true
},
 "clientId": "5o0ghvle7yy4ix41on423v6k3j87",
 "version": "1.0"
}

]

收到clientId后..我已经运行了以下命令:

代码语言:javascript
复制
Post: https://xxxiot.cumulocity.com/cep/realtime
Body:
[
 {
  "channel": "/meta/subscribe",
  "clientId": "5o0ghvle7yy4ix41on423v6k3j87",
  "subscription": "/alarms/overHeatAlarms"
 }
]

响应:

代码语言:javascript
复制
[
 {
 "error": "403:denied_by_security_policy:create_denied",
 "subscription": "/alarms/overHeatAlarms",
 "successful": false,
 "channel": "/meta/subscribe"
 }
]

问题出在哪里?我在试着归结为"overheatAlarms"!可能它并不存在?我可以阅读现有的信息吗?谢谢,Alim

EN

回答 2

Stack Overflow用户

发布于 2016-02-02 17:12:28

  • 订阅所有警报或来自特定设备的警报:使用“/cep/
  • ”和频道“/alarm/*res. channel”/alarm/device ID“。
  • 创建过滤过热警报的处理规则并订阅该规则:使用”/cep//module“和频道"/module name/statement name”。

模块名称是您在单击“新建模块”时输入的名称。语句名称是您添加到语句中的内容,例如

代码语言:javascript
复制
@Name('overHeatAlarms')
select * from AlarmsCreated where [your condition for overheat alarms]

(如果您不在其中输入名称,它们将是名称statement_1,statement_2,...)

要获取来自Java的通知,请看一下获取设备更改通知的example。在subscribe()方法中,传递"*“或设备ID。要获得通知,需要传递SubscriptionListener的实现,特别是onNotification方法。您可以将"channelPrefix“修改为"/alarms/”或"/measurements/“以获取其他通知。

票数 2
EN

Stack Overflow用户

发布于 2016-02-03 04:46:34

谢谢,安德烈。我已经测试了以下代码片段..它可以工作,但不是最好的解决方案:-)

代码语言:javascript
复制
    MeasurementApi measurementApi = getMeasurementApi();
    MeasurementFilter measurementFilter = new MeasurementFilter();
    while (true) {
        Calendar cal = Calendar.getInstance();

        Date toDate = cal.getTime();
        cal.add(Calendar.SECOND, -25);
        Date fromDate = cal.getTime();
        measurementFilter.byDate(fromDate, toDate);
        measurementFilter.byFragmentType(TemperatureMeasurement.class);
        measurementFilter.bySource(new GId(DEVICE_SIMULATOR));
        MeasurementCollection mc = measurementApi
                .getMeasurementsByFilter(measurementFilter);

        MeasurementCollectionRepresentation measurements = mc.get();
        for (; measurements != null; measurements = mc
                .getNextPage(measurements)) {
            for (MeasurementRepresentation measurement : measurements
                    .getMeasurements()) {
                TemperatureMeasurement temperatureSensor = measurement
                        .get(TemperatureMeasurement.class);

                System.out.println(measurement.getSource().getId() + " "
                        + measurement.getTime()+ " " + temperatureSensor.getTemperature() );

            }
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35148052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档