第三部分:如何在 Google Cloud Platform 上使用 TICK Stack 创建 IoT 项目

导航至

第 3 部分:使用 InfluxDB 客户端库

InfluxDB 为多种编程语言的客户端库提供支持。客户端库在用高级封装器包装核心 HTTP API 方面大有帮助,因此您可以直接使用该语言,而无需担心 API 的底层机制。

跳转到 HTTP API 客户端库文档 并查看 InfluxDB 支持的编程语言列表。

在第 3 部分中,我们将研究 Python 客户端库,以执行到目前为止我们一直在执行的相同操作,即查询记录和插入一些记录。

Python 客户端库的第一步应该是本地安装 InfluxDB Python 库,文档提供了相关信息。您可以通过 pip 安装机制来完成。

$ pip install influxdb

使用 Python 客户端库的步骤在概念上思考我们需要做什么时没有不同

  • 导入 python 库
  • 建立与 InfluxDB 主机的客户端连接。在我们的例子中,这是在 Google Compute Engine 上运行的主机。
  • 使用客户端对象查询记录。您可以使用与我们在上一部分中看到的类似的查询。
  • 使用客户端对象向 InfluxDB 数据库写入一两条记录。

下面显示了 inluxdbclient.py Python 程序

import datetime

from influxdb import InfluxDBClient

#Setup some constants with InfluxDB Host and Database name
INFLUXDB_HOST = '<PublicIPInfluxDBHost>'
INFLUXDB_NAME = 'temperature_db'

#Sample values -- these will be read from sensor
temperature_c = 27.8

#Timestamp
timestamp = datetime.datetime.utcnow().isoformat()

#Station Name that is recording the temperature
station_name = "S2"

#Initialize the InfluxDB Client
client = InfluxDBClient(INFLUXDB_HOST,'8086','','',INFLUXDB_NAME)

#Query Existing Values
result = client.query('SELECT * FROM temperature')
points = list(result.get_points(measurement='temperature'))
for point in points:
   print('Station = ',point['Station'],'Value = ',point['value'])

#Write a record
json_data = [
   {
       "measurement":"temperature",
"time":timestamp,
"tags": {
   "Station":station_name
},
"fields": {
   "value":temperature_c
}
   }
]
bResult = client.write_points(json_data)
print("Result of Write Data : ",bResult)

让我们了解上面代码列表的关键点

  • 我们在程序代码的开头导入了 InfluxDBClient 类。
  • 我们定义了两个常量,一个用于 InfluxDB 主机,它是您的 Compute Engine 实例的公共 IP。请记住在代码中替换它。另一个用于数据库名称,即 `temperature_db`。
  • 下一条语句很重要。我们使用主机名、端口(API 的端口为 8086)初始化 InfluxDBClient,并为其提供数据库名称。
  • 现在我们有了客户端对象,我们就可以查询或插入记录了。
  • `query` 方法接受您要对数据库执行的 InfluxQL 查询。这会返回一个 `ResultSet` 对象。 `ResultSet` 对象上的方法之一是 `get_points`,我们使用它来获取 `temperature` 指标的测量点。我们将其转换为列表。然后我们迭代并打印出这些值。
  • 要将数据写入 InfluxDB,我们使用 `write_points` 方法,该方法接受我们要写入数据库的测量点列表。每个测量点,您现在应该很熟悉了,指定了指标、一个或多个标签(Station)和一个值(temperature)。另请注意,这次我们传入了时间戳,以便我们记录从记录数据的站点记录的时间戳。我们使用 python 中的 `datetime` 包来帮助我们获取需要发送到 InfluxDB 的 Unix 时间戳。
  • `write_points` 方法的结果是布尔类型。如果操作成功,则返回 `true`。

我们可以通过以下命令运行此程序,它会显示如下所示的输出

$ python influxdbclient.py
Station =  S2 Value =  27.8
Station =  S1 Value =  29.8
Station =  S1 Value =  29.9
Station =  S1 Value =  29.8
Station =  S2 Value =  29.9
Station =  S1 Value =  29.8
Station =  S1 Value =  29.85
Station =  S1 Value =  29.9
Station =  S2 Value =  27.8
Station =  S2 Value =  27.8
Station =  S2 Value =  27.8
Result of Write Data :  True

我已经多次运行此应用程序,因此您在查询结果中看到更多记录。或者,您也可以使用 InfluxDB Web 管理应用程序 来查询结果。

在这篇文章中,我们 了解了如何使用 InfluxDB Python 客户端库将记录插入到我们在之前的文章中设置的 InfluxDB 主机中。这部分中的代码使用了温度读数的虚拟值,但这没关系,因为我们想先设置它并确保此代码有效。

下一步是什么?

  • 本教程的第三部分到此结束。在第四部分中,我们将把此客户端代码集成到实际的 IoT 传感器应用程序中,该应用程序使用 Arduino 和 LM35 温度传感器以规则的时间间隔读取温度值。然后,实时温度数据将被馈送到 InfluxDB 数据库。在 Twitter 上关注我们 @influxdb 以关注本系列的下一篇博客。
  • 想要提升您的 InfluxDB 知识?查看我们价格合理的虚拟 和 公开培训