谷歌发布适用于 Android Things 的 Cloud IoT Core 客户端库

阅读数:366 2018 年 7 月 2 日

话题:移动Android语言 & 开发架构

谷歌发布了一个客户端库,让开发人员更容易在 Android Things 设备上使用Google Cloud IoT Core。开发人员可以连接到 IoT Core MQTT 桥,认证设备,发布设备遥测数据,订阅配置变更,处理错误及网络中断。

Cloud IoT Core是完全托管于谷歌云平台的服务,让开发人员可以安全地连接、管理分散在全球的设备,并从中提取数据。搭配谷歌云平台提供的其他服务,Cloud IoT Core 提供了一种实时收集、处理、分析及可视化 IoT 数据的解决方案。此外,Android Things从设计上就支持用于遥测、强大的计算机可视化、音频处理和机器学习应用程序的数据收集。

Cloud IoT Core 客户端库提供了每个 Cloud IoT Core 函数的抽象,如发布遥测事件、设备状态,从 Cloud IoT Core 接收设备配置。

Cloud IoT Core 会通过设备注册信息跟踪已核准的设备,每个设备使用一个公共密钥在服务器上进行身份验证。对于 Cloud IoT Core 身份验证,客户端库支持 RSA 和 ECC 密钥,并且实现了 JSON Web Tokens(JWTs)。

设备可以通过MQTT连接发送一条 PUBLISH 消息把他们的遥测数据发布到一个或多个存储桶。消息必须以下面的格式发送到 MQTT 主题:

复制代码
/devices/{device-id}/events

使用 Cloud IoT Core,开发人员可以监控每个连接设备的状态。设备状态更新通常是由设备变化触发的,例如来自 Cloud IoT Core 的配置更新,或者来自外部源的变化,如固件升级。设备状态使用以下格式发送到 MQTT 主题:

复制代码
/devices/<device_id>/state

开发人员可以从 Cloud IoT Core 向设备发送设备配置来控制它。数据可以是任意格式的,如二进制数据、文本、JSON 或序列化协议缓冲区。值得一提的是,设备并不一定会接收到每一项配置更新;如果短时间内发布了许多更新,那么设备可能会收不到中间版本。

要开始使用 Cloud IoT Core 客户端库,需要在 Android Things 项目的 build.gradle 文件中增加下面一行:

复制代码
implementation 'com.google.android.things:cloud-iot-core:1.0.0'

下面的 Kotlin 示例说明了如何基于已有的项目创建一个新的配置和客户端:

复制代码
var configuration = IotCoreConfiguration.Builder().
.setProjectId("my-gcp-project")
.setRegistry("my-device-registry", "us-central1")
.setDeviceId("my-device-id")
.setKeyPair(keyPairObject)
.build()
var iotCoreClient = IotCoreClient.Builder()
.setIotCoreConfiguration(configuration)
.setOnConfigurationListener(onConfigurationListener)
.setConnectionCallback(connectionCallback)
.build()
iotCoreClient.connect()

下面的 Kotlin 示例展示了如何发布遥感信息或设备状态:

复制代码
private fun publishTelemetry(temperature: Float, humidity: Float) {
// 负载是应用程序相关的任意字节数组
val examplePayload = """{
|"temperature" : $temperature,
|"humidity": $humidity
|}""".trimMargin().toByteArray()
val event = TelemetryEvent(examplePayload, topicSubpath, TelemetryEvent.QOS_AT_LEAST_ONCE)
iotCoreClient.publishTelemetry(event)
}
private fun publishDeviceState(telemetryFrequency: Int, enabledSensors: Array<string>) {
// 负载是应用程序相关的任意字节数组
val examplePayload = """{
|"telemetryFrequency": $telemetryFrequency,
|"enabledSensors": ${enabledSensors.contentToString()}
|}""".trimMargin().toByteArray()
iotCoreClient.publishDeviceState(examplePayload)
}

谷歌还提供了一个样例,说明如何在 Android Things 上实现一个传感器中枢,从连接的传感器收集数据,并发布到 Google Cloud IoT 主题。

Cloud IoT Core 页面官方文档谷歌 IoT 开发者社区中有更多关于 Cloud IoT Core 的信息。

查看英文原文:Google Released Cloud IoT Core Client Library for Android Things