我们使用cumulocity REST API。定期实时通知工作,例如我们订阅/ alarms / *,启动我们的连接/轮询循环,当我们创建一个警报时,我们收到预期的JSON。我们没有安装任何特定的模块或语句,它只是工作。 但是当我们尝试使用SmartREST时,我们会在创建警报后立即收到此错误:
40,,/alarms/177649296,Could not find any templates subscribed for the channel
按照参考指南(http://cumulocity.com/guides/reference/smartrest/),我们尝试了这样的方法,其中所有请求都具有相同的X-Id标头,并且所有请求都会产生预期的http状态200并且没有错误消息,除了最后一个之一:
11,102,,,$.channel
80
响应是我们的clientId(例如191het1z38bp7iq1m96jqqt8jnef)81,191het1z38bp7iq1m96jqqt8jnef,/alarms/*
83,191het1z38bp7iq1m96jqqt8jnef
在正常的REST情况下,通知包含一个带有2个元素的JSON数组,这两个元素都具有属性" channel"。这就是我们对响应模板的期望。相反,我们得到上述错误40。
我们的回复模板错了吗?是否与X-Id没有正确匹配?这意味着什么,没有"模板订阅了频道"?订阅是针对clientId完成的,而不是针对特定的响应模板,并且模板应该自动匹配。可能"模板"意味着" X-Id"这里?关于该词的含义,文件似乎含糊不清。但无论如何,我们确实在所有请求中都使用了相同的X-Id标头。
任何关于我们做错的指针都会受到赞赏,因为我们现在已经尝试了很多东西。
答案 0 :(得分:1)
为物联网设备开发SmartREST协议< - >。平台沟通。因此,从来没有任何设计使用它来订阅实时数据(当然除了设备需要的操作),因为通常设备不需要订阅他们自己创建的数据。
那说可以使用它但有一些限制。您的方法基本上是正确的,但订阅存在一个问题。通配符订阅将无法与SmartREST一起使用,因为在订阅时它会将您的X-Id与您订阅的频道相关联,但通道上没有发布消息/ alarms / *。因此,这种奇怪的错误消息表示没有模板订阅警报出现的频道。在CometD内部,由于通配符订阅,您仍然会收到警报,但SmartREST部分不起作用。
使用deviceId在频道上发布消息(例如/ alarms / 12345)。 如果您订阅/ alarms / 12345,它将起作用。您当然可以订阅任意数量的频道,但不能使用通配符订阅。
关于模板,您需要了解以下内容。 SmartREST解析不是在CometD的原始JSON上进行的,而是在其内部的有效负载上进行的(例如警报)。因此,警报的模板可能如下所示:
11,500,,$.severity,$.id,$.type,$.severity
仅当对象具有严重性且返回id,类型和严重性时才会触发。