第三部分:如何在 Google Cloud Platform 上使用 TICK Stack 创建 IoT 项目
作者:Todd Persen / 产品, 用例
2016 年 2 月 25 日
导航至
第 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 主机中。这部分中的代码使用了温度读数的虚拟值,但这没关系,因为我们想先设置它并确保此代码有效。