带有Raspberry Pi和Bluemix的IoT Python应用程序:按下按钮

2024-06-16 09:32:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用IoT基金会将我的Raspberry Pi与Bluemix上的应用程序连接起来:

https://developer.ibm.com/bluemix/2015/04/02/tutorial-using-a-raspberry-pi-python-iot-twilio-bluemix/

我有以下问题:

如果我按下Pi上的按钮,它只会在Pi终端打印出“按钮按下”。在

我没有收到任何短信发送我的手机,现在有一个条目从Twilio。在


Tags: httpscom应用程序developerpiiot按钮ibm
2条回答

结果发现IBM IoT Foundation库在解析JSON时发生了改变。。。另外,我把代码硬编码为美国电话号码。我还加了一张美国电话号码的支票。在

更改line 25

buttonPushed = cmd.payload["d"]["buttonPushed"]

^{pr2}$

不要使用命令有效载荷... 使用命令数据在

这个示例是旧的,是使用旧版本的库构建的,不幸的是它没有引用它使用的python库的哪个版本,因为最简单的“修复”是安装开发应用程序的库的版本。在

python库仍处于预发布状态,我建议在构建应用程序时将需求设置为库的特定版本,因为在这个阶段不能保证向后兼容性,并且任何新版本都可能由于行为的改变而破坏应用程序,尽管我尽量避免这些更改。在

库传递给回调的命令和事件对象具有以下属性:

  • 命令/设备类型
    • 设备的typeId
  • 命令/设备ID
    • 设备的设备ID
  • 命令/电动装置
    • 在typeId:设备ID唯一组织内设备的标识符
  • 命令/evt.事件
    • 命令/事件的ID/名称
  • 命令/evt.格式
    • 命令/事件消息的格式
  • 命令/电动有效载荷
    • 命令的原始有效负载(这似乎只适用于当前事件。。哦,将在0.1.8中更正)
  • 命令/执行数据
    • 从命令有效负载(作为python字典)库解析的数据支持解析任何消息格式,只要为格式注册了适当的编解码器

如果您发送的命令格式为“json”,其中包含以下内容:{“d”:{“buttonPushed”:true}},那么命令数据看起来像这样:

在命令数据== { “d”:{ “纽扣式”:正确 } }在

普通的json parser对json的形状没有任何假设,只要有效负载是有效的json就可以工作。在

如果以“json iotf”格式发送相同的内容,则json-iotf解析器将启动,这仅在使用内置historian服务所需的json形状时有效。在本例中,它将直接从d元素获取数据,并从ts元素获取时间戳,因此您将拥有:

在命令数据== { “纽扣式”:正确 }在

在最新版本的库中命令有效载荷将是来自底层MQTT消息的原始字节数组

如果您需要您的应用程序/设备来理解不是json的有效负载,writing a custom codec and registering it with the clients就是一个简单的例子。在

关于如何同时使用数据和有效载荷的一个很好的例子可以在connector-cloudant application中找到:

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)

对于当前版本(0.1.7)

编辑:0.1.8发布,修复了此处提到的影响应用程序命令支持的几个错误。在

相关问题 更多 >