<p>不要使用命令有效载荷... 使用命令数据在</p>
<p>这个示例是旧的,是使用旧版本的库构建的,不幸的是它没有引用它使用的python库的哪个版本,因为最简单的“修复”是安装开发应用程序的库的版本。在</p>
<p>python库仍处于预发布状态,我建议在构建应用程序时将需求设置为库的特定版本,因为在这个阶段不能保证向后兼容性,并且任何新版本都可能由于行为的改变而破坏应用程序,尽管我尽量避免这些更改。在</p>
<p>库传递给回调的命令和事件对象具有以下属性:</p>
<ul>
<li><strong>命令/设备类型</strong>
<ul>
<li>设备的typeId</li>
</ul></li>
<li><strong>命令/设备ID</strong>
<ul>
<li>设备的设备ID</li>
</ul></li>
<li><strong>命令/电动装置</strong>
<ul>
<li>在typeId:设备ID唯一组织内设备的标识符</li>
</ul></li>
<li><strong>命令/evt.事件</strong>
<ul>
<li>命令/事件的ID/名称</li>
</ul></li>
<li><strong>命令/evt.格式</strong>
<ul>
<li>命令/事件消息的格式</li>
</ul></li>
<li><strong>命令/电动有效载荷</strong>
<ul>
<li>命令的原始有效负载(这似乎只适用于当前事件。。哦,将在0.1.8中更正)</li>
</ul></li>
<li><strong>命令/执行数据</strong>
<ul>
<li>从命令有效负载(作为python字典)库解析的数据支持解析任何消息格式,只要为格式注册了适当的编解码器</li>
</ul></li>
</ul>
<p>如果您发送的命令格式为“json”,其中包含以下内容:{“d”:{“buttonPushed”:true}},那么命令数据看起来像这样:</p>
<p>在命令数据== {
“d”:{
“纽扣式”:正确
}
}在</p>
<p>普通的<a href="https://github.com/ibm-messaging/iot-python/blob/master/src/ibmiotf/codecs/jsonCodec.py" rel="nofollow">json parser</a>对json的形状没有任何假设,只要有效负载是有效的json就可以工作。在</p>
<p>如果以“json iotf”格式发送相同的内容,则<a href="https://github.com/ibm-messaging/iot-python/blob/master/src/ibmiotf/codecs/jsonIotfCodec.py" rel="nofollow">json-iotf</a>解析器将启动,这仅在使用内置historian服务所需的json形状时有效。在本例中,它将直接从d元素获取数据,并从ts元素获取时间戳,因此您将拥有:</p>
<p>在命令数据== {
“纽扣式”:正确
}在</p>
<p>在最新版本的库中命令有效载荷将是来自底层MQTT消息的原始字节数组</p>
<p>如果您需要您的应用程序/设备来理解不是json的有效负载,<a href="https://github.com/ibm-messaging/iot-python/tree/master/samples/customMessageFormat" rel="nofollow">writing a custom codec and registering it with the clients</a>就是一个简单的例子。在</p>
<p>关于如何同时使用数据和有效载荷的一个很好的例子可以在<a href="https://github.com/ibm-watson-iot/connector-cloudant/blob/master/connector-cloudant.py#L66" rel="nofollow">connector-cloudant application</a>中找到:</p>
<pre><code>def myEventCallback(self, evt):
#self.logger.info("%-33s%-30s%s" % (evt.timestamp.isoformat(), evt.device, evt.event + ": " + json.dumps(evt.data)))
#self.logger.info(evt.data)
# Create with a generated ID
future = self._cloudantDb.post(params={
'typeId': evt.deviceType,
'deviceId': evt.deviceId,
'eventId': evt.event,
'timestamp': evt.timestamp.isoformat(),
'data': evt.data,
'format': evt.format,
'payload': base64.encodestring(evt.payload).decode('ascii')
})
future.add_done_callback(self._eventRecordedCallback)
</code></pre>
<p><em>对于当前版本(0.1.7)</em></p>
<p>编辑:<a href="https://github.com/ibm-messaging/iot-python/releases/tag/0.1.8" rel="nofollow">0.1.8</a>发布,修复了此处提到的影响应用程序命令支持的几个错误。在</p>