QuestDB上的物联网

2020-06-06 14:32:35

正如您可以想象的那样,我在QuestDB的新工作非常忙碌,所以花费的时间比我希望的要长,但我们到了这里。如果你了解我,你就会知道,我对待新事物的第一件事就是,嗯,把事物与它们联系起来!因此,我立即将一台物联网设备连接到QuestDB,看看进展如何。不出所料,它进行得相当顺利。所以事情是这样进行的,从头到尾。

我必须做的第一件事是启动并运行QuestDB。幸运的是,这非常简单。我想我可以走Docker路线,但正如你可能知道的那样,我并不是Docker的超级粉丝(这在很大程度上是因为它会从字面上吸走MacOS笔记本电脑的生命)。还有(针对MacOS用户的)`BREW install questdb`,但是由于我在这里工作,并且我想测试最新最棒的Web控制台,我决定从源代码开始构建:

由于缺少外部依赖,它构建得非常快,所以这很棒!那我要做的就是启动它:

这就是构建和运行QuestDB所要做的全部工作。但这只是第一部分。现在是时候用它做些稍微有用的事情了。首先,我需要在QuestDB中创建一个表来存储我的物联网数据(稍后将对此稍作介绍,因此存储一个指向此的指针)。

记住,我们在这里做SQL,所以没有新的语言或语法需要学习。这是我正在建造的一张非常简单的桌子,因为我将使用一台ESP8266,上面有一个(非常糟糕的)DHT11温度和湿度传感器。

为此,我将使用基于ESP8266的WEMOS D1 Mini,因为我周围恰好有一大堆。我批量购买它们,因为它们每件1美元或2美元,使用方便,如果我炸毁一个,大部分都是一次性的(我经常这样做)。该电路非常简单:

我使用的是带有DHT11的真实Wemos盾,所以我不需要给它加面包板,但是这个示意图让你了解布线有多简单。它的字面意思是3根电线。

这里就是魔术发生的地方。我实际上是如何将传感器数据发送到数据库的。Adafruit DHT统一传感器库中包含一个简单的示例程序,我建议您从该程序开始,这样做会更容易一些。它已经有了可以从传感器读取的所有部件,所以您不必从头开始写入这些部件。记住:好的开发人员会复制,但优秀的开发人员会粘贴!

由于我使用的是8266,而且我需要互联网连接,所以我需要所有的WiFi位:

实际上,您所要做的就是进入“草图”菜单,选择“包含库”,然后选择“ESP8266WiFi”库,您就可以为您导入所有这些内容。

以下是一些样板代码,您可以随时使用它们将ESP8266安装到您的WiFi上:

这就完成了基本的设置。运行该命令应该会获得WiFi连接和完全配置的DHT11传感器。我们几乎准备好开始向数据库发送数据了。

如果您注意了,并阅读了代码,您就会注意到我偷偷溜进去的UDP内容。这是因为我们将使这件事变得超级简单,并使用UDP来发送我们的数据。这其中有一个非常好的原因:InfluxDB线路协议。您可以看到,QuestDB有一个内置的InfluxDB Line Protocol侦听器,但是(目前)它只侦听UDP端口。所以我们要利用这一点。

是啊,那里发生了很多事。所以让我们把它分解一下。首先,我创建一个缓冲区来保存我要发送的数据,然后我将读取传感器。我将`temp`和`hum`变量设置为我知道传感器永远不会返回的值,以便稍后可以检查我是否获得了有效的读数,以避免向数据库发送胡言乱语。

我不得不对里面的温度和湿度值做一些恶作剧,因为Arduinos的一个缺点是他们没有对双打的“冲刺”支持。我知道呀。所以我只是把它们变成弦,然后继续前进。一旦他们到达数据库,他们就被解释为替身,生活就很好了。不值得为之争吵。然后,我可以使用直线协议构建一个缓冲区,并通过UDP将其发送到QuestDB。

还记得我之前告诉过您要设置创建数据库的指针吗?好了,这就是我要回到这一点的地方。实际上,您不必提前创建数据库,除非您想做一些事情,如设置索引等。如果您想做的只是在其中有直接的值,那么猜猜会怎样呢?在这里,写入时模式是一件事。您只需开始将数据写入数据库,它就会很高兴地为您存储这些数据。很酷的东西。

然后,您可以使用QuestDB控制台查询数据,以确保获得预期的结果:

现在是开始在此基础上构建一些仪表板等的时候了。我目前正在努力将这一切与Node Red联系起来,所以这可能是我的下一篇帖子。我们也在致力于对Grafana的支持,这将是巨大的,所以请继续关注。如果您喜欢这里看到的内容,请在GitHub上给我们打一颗星,如果您想获得最新消息,请关注该项目!