第三部分:如何在 Google Cloud Platform 上使用 TICK 堆栈创建 IoT 项目
作者 Todd Persen / 产品,用例
2016年2月25日
导航至
第三部分:使用 InfluxDB 客户端库
InfluxDB 支持多种编程语言的客户端库。客户端库通过将核心 HTTP API 封装在一个高级包装器中来发挥作用,这样您就可以直接使用语言,而不必担心 API 的底层机制。
访问 HTTP API 客户端库文档 并查看 InfluxDB 支持的编程语言列表。
在第三部分中,我们将查看 Python 客户端库,以执行到目前为止所执行的相同操作,即查询记录并插入一些记录。
Python 客户端库的第一步是在您的本地设置中安装 InfluxDB Python 库,文档中提供了相关信息。您可以通过 pip 安装机制完成此操作。
$ pip install influxdb
使用 Python 客户端库的步骤在概念上思考我们所需要做的方面没有不同
- 导入 python 库
- 建立客户端连接到 InfluxDB 主机。在我们的案例中,这是在 Google Compute Engine 上运行的主机。
- 使用客户端对象查询记录。您可以使用与之前部分中看到类似的查询。
- 使用客户端对象将一条或两条记录写入 InfluxDB 数据库。
以下是一个 Python 程序示例 inluxdbclient.py
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`方法,该方法接收一个要写入数据库的测量点列表。每个测量点,你应该已经很熟悉了,指定了测量值、一个或多个标签(站点)和一个值(温度)。注意,这次我们传递了时间戳,以便记录在站点记录的时间戳。我们使用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网络管理应用程序来查询结果。
在本篇博文中,我们探讨了如何使用InfluxDB Python客户端库将记录插入到之前博文中设置的InfluxDB主机。本部分代码使用温度读数的模拟值,但这没关系,因为我们首先需要设置它并确保代码可以工作。