社区亮点:InfluxDB 如何助力水族箱的物联网传感器监控
作者:Caitlin Croft / 产品, 用例
2020 年 9 月 8 日
导航至
我最近与 Jeremy White 进行了交谈,他正在使用 InfluxDB 来监控他的水族箱。通过收集物联网传感器数据,他能够更好地了解他装满鱼和珊瑚的 200 加仑海水水族箱。整个项目可以在 GitHub 上找到。
Caitlin:请介绍一下您自己和您的职业生涯。
Jeremy: 我是 Network to Code 的高级网络自动化顾问,我的背景是网络工程。Network to Code 是网络自动化领域的领导者。我自学了 Python 和 Ansible,并构建了一个完整的网络自动化框架。除了 Python 和 Ansible,我还熟悉 Django REST 框架、Flask 和 NetBox。我正在开始深入研究遥测和分析。
Caitlin: 您是如何了解 InfluxDB 的?
Jeremy: 我之前在工作中使用过 InfluxDB。一些同事之前使用过 InfluxDB 和 Telegraf 来监控公共 DNS。他们还使用 InfluxDB,这个专为时间序列数据库而构建的产品,来监控他们的家庭网络。Network to Code 已经为各种客户实施了 InfluxDB,以满足他们的需求。我对 InfluxDB 印象深刻,并认为它可能是改进我的海水水族箱监控的好方法。
Caitlin: 请介绍一下您的水族箱。
Jeremy: 我目前有两个海水水族箱。一个是 54 加仑,我的新一个是 200 加仑。我最近决定升级到 200 加仑的水族箱。将我所有的鱼和珊瑚搬到它们的新家肯定会是一个过程。我需要确保一切稳定,并且它以我想要的方式工作。
我正在培育小水螅体石珊瑚 (SPS)。我有鹿角珊瑚、蔷薇珊瑚、肉柱珊瑚、板叶珊瑚、菇珊瑚、纽扣珊瑚和 Briareum 珊瑚。这些珊瑚中的许多都位于珊瑚礁的较浅水域。它们具有钙基骨架和小水螅体。这些珊瑚可能非常鲜艳和美丽。我有一种鹿角珊瑚,颜色是美丽的荧光蓝绿色。
我的大部分珊瑚都是水产养殖或海洋养殖的。水产养殖珊瑚是在带有人工照明的水族箱或水池中生长的珊瑚。海洋养殖珊瑚是在海洋中专门指定的养殖区域养殖的珊瑚。这意味着它们不是从原生珊瑚礁中采集珊瑚。我已尽力确保尽可能地可持续。我的大部分珊瑚都来自印度尼西亚或澳大利亚。我确实有一些珊瑚碎片来自一位在圈养环境中培育它们超过 20 年的人。
目前,我有一条珊瑚美人神仙鱼、一条蓝吊鱼、一条黄吊鱼、一条黄鳍虾虎鱼、三条角小丑鱼、一条眼斑海葵鱼、一条镊口鱼和一条鹰鱼。我还有一群无脊椎动物,包括大约 20 只寄居蟹、大约 20 只蜗牛、一只带状海蛇尾、一只沙海星、一只箭蟹和一只翡翠蟹。
<figcaption> 由 InfluxDB 监控的 200 加仑海水水族箱</figcaption>
Caitlin:您在水族箱方面遇到哪些挑战?
Jeremy: 我知道我有适当的照明和适当的水流。但是,我知道我的珊瑚没有以我认为应该观察到的速度生长。SPS 珊瑚上的钙化作用很小。它们活着并生存着,但它们并没有茁壮成长。除了缺乏生长外,颜色也不对。适当的照明为光合生物(如植物、动物、海葵和珊瑚)的生存提供必要的能量。照明还会影响鱼类的行为和生理机能。
下一个方面是水化学:我实际上知道我可能每周只会检查一次水族箱的状态。要进行大量我必须手动运行的单独测试,我不可能像我希望的那样经常进行。我知道我需要自动化我的监控解决方案,以确保我拥有关于我的水族箱的最新准确数据。
事实证明,我的水族箱环境并不像我想象的那么稳定。珊瑚可以在很宽的水温范围内生存,水的 pH 值也可能变化。更重要的是,这些水平保持一致。珊瑚是非常灵活的生物,因此它们能够适应和生存。环境中的频繁波动(如温度和盐度)对珊瑚来说压力很大,并且不利于它们的生存和生长。
在设置好一切(我的 AquaPy 控制器)后的三天内,我开始看到结果。我意识到昼夜温差为两度。由于我在家工作,我知道这并不是因为我的房子变得太热,因为我家的温度相当恒定。两度的温差很小,但这足以影响珊瑚的生长和颜色。在迭代我的设置 (AquaPy) 后,我将温差降至一度以下。我的水箱温度徘徊在 79-81ºF 左右。我想尽可能地缩小差异。
Caitlin:请介绍一下您使用 InfluxDB 构建的物联网监控解决方案。
Jeremy: 我的整个堆栈都是使用容器构建的。我喜欢容器!无论是工作项目还是个人项目,如果我可以容器化它,我就会这样做。如果没有预构建的容器,我会自己创建一个。我首先从 Atlas Scientific 购买传感器。他们制造物联网传感器和小型印刷电路板 (PCB)。PCB 用于使用 Raspberry Pi 内的 I2C 协议读取传感器的数据。有一家名为 Whitebox 的公司生产一种名为 Tentacle T3 for Raspberry Pi 的产品,这有助于使整个设置更加即插即用。
我使用 Django 来配置传感器。除了 Django 管理门户之外,我还使用 django_rq worker,一个 Redis worker,来监听传入的任务。我正在使用 Django Redis 调度器,它正在以其 cron 间隔运行 crons 和调度已知任务。现在,它被安排为每分钟一次。每 60 秒是您可以使用 RQ 调度器设置的最低间隔。
RQ 调度器正在将任务放入 Redis 中。接下来,RQ worker 正在主动监听 Redis 队列中的任务。RQ worker 正在与 Postgres 数据库通信,以提取关于任务的必要详细信息,以便执行任务并收集传感器数据。
我的传感器正在提取以下数据:水温、水盐度、水位和 pH 值。我的理想 pH 值是 8.3。由于空气中的二氧化碳水平和鱼产生的二氧化碳,存在一定的范围。在任何一天,我的水箱 pH 值都在 7.95-8.19 之间。
<figcaption> 水族箱物联网监控解决方案架构图</figcaption>
收集数据后,数据存储在 InfluxDB 中。在收集和存储遥测数据后,会将一个新的事件任务添加到 Redis 队列中,供 rq worker 评估并根据遥测数据采取行动。
我还购买了 WeMo(Belkin 旗下公司)的家庭自动化工具。它们非常酷,因为可以在您的家庭网络中使用多播进行控制。将 WeMo 开关添加到堆栈中,使我能够根据收集的遥测数据打开和关闭设备。一个例子是当达到高温阈值时。rq_worker 从 Redis 队列中提取事件,并根据事件定义,它确切地知道要根据其 MAC 地址调用哪个 Wemo 设备。然后,rq_worker 向开关发送多播消息以切换电源的开或关,并将结果报告回 Redis 任务状态。
我还有另一组未直接与 AquaPy 集成的自动化,例如,我设置了自动补水装置。它是一种用于检测水位的光学传感器。如果水位降得太低,淡水将自动添加到水箱中。当然,添加过多的淡水会导致盐度下降到不可接受的程度。简单地添加额外一加仑的淡水会给珊瑚带来压力,我可能会失去一个珊瑚群落。另一方面,如果蒸发过多,盐度水平可能会变得过高。如果水的 pH 值飙升,这可能意味着我的计量泵出现故障;计量泵负责调节钙和碱度。如果计量泵开关卡在 ON 位置,它将开始向水箱中倾倒不必要的化学物质。所有这些因素都会抵消水箱的平衡。
Caitlin:在实施 InfluxDB 之后,您对您的水族箱有哪些了解?
Jeremy: 感谢 InfluxDB,我能够为温度和其他关键指标设置阈值。如果水温升到一定水平以上,我会设置一个风扇来自动开启。通过自动触发风扇开启,我减少了蒸发,并且水箱也冷却下来了。一旦温度充分降至恢复阈值以下,风扇就会自动关闭。
通过持续监控我的水箱,我知道什么时候出了问题。一次简单的停电可能会对我的珊瑚和水箱的健康产生滚雪球效应。没有电,灯不工作,这意味着天然藻类无法将二氧化碳转化回氧气。即使停电三个小时,也可能意味着我的一些珊瑚可能会死亡。如果我要将新的珊瑚碎片引入水箱,这一点尤其重要,因为它们尚未适应它们的新家。
我现在有一个 UPS 作为备用电池。作为一名网络工程师确实有帮助!???? 我现在在家中设置了企业级网络设备。在我的海水水族箱上花费了大量时间和金钱后,我想确保我不会失去任何东西。我的互联网连接、PoE 网络交换机、路由器、防火墙等都在单独的 UPS 上。我最近搬家了,虽然我没有经历过很多停电,但仍然偶尔会有电压骤降。
我正在使用 Grafana 来可视化和绘制我所有的数据。最初,我使用 Grafana 的一个插件向我发送 Slack 警报。感谢 Slackbots,如果我在手机上收到通知,我知道要检查它以获取更新。
<figcaption> Grafana 仪表板显示水族箱传感器数据</figcaption>
Caitlin:您对您的水族箱和 InfluxDB 有什么未来的计划?
Jeremy: 随着我以更高的钙和碱度水平运行我的水箱,我想围绕家庭水族箱创建一些形式的对照研究。我想能够证明在特定水平下运行水箱的好处。硬珊瑚的更快钙化尚未通过对照研究得到证实。有一家名为 Bulk Reef Supply 的公司也在进行短期实验。他们正在以不同的水平对不同的系统运行相同的珊瑚几周到几个月,并报告结果。
一旦我将更多数据输入到 InfluxDB 中,我想开始关联我的数据。通过拥有更多时间戳数据,我想设置一个基线并确定与基线的百分比偏差。我想为所有系统创建这些。至于现在,我没有收集关于阈值操作的指标。这些包括风扇何时开启或关闭、计量泵开启的每日时间等。我的新水族箱灯通过蓝牙控制。除了将所有这些数据添加到 InfluxDB 中之外,我还想更好地整合来自印度尼西亚和澳大利亚东北部的季节性日光时间。由于我的更多珊瑚来自那里,我想模仿自然日光周期。
长期目标包括通过帮助改善自然珊瑚礁来帮助科学界。通过改善世界各地圈养珊瑚的生长实践,希望我们可以停止需要回到自然珊瑚礁获取珊瑚。如果我们能够水产养殖足够的珊瑚来回馈我们作为一个社会正在破坏的自然珊瑚礁,那将是惊人的。
以下是我正在使用的所有部件的列表
- Raspberry Pi 4
- 64Gb SanDisk Micro SD 卡
- Atlas Scientific i2c Toggler(需要确保 EZO 电路设置为 i2c)
- Atlas Scientific 温度套件(仅使用传感器和 EZO 电路)
- Atlas Scientific 电导率探头 K 0.1 ? 0.07-50,000 ?S/cm
- Atlas Scientific 实验室级 pH 探头
- Atlas Scientific 氧化还原电位实验室级 ORP 探头 +/- 2000mV
- Atlas Scientific EZO-pH 电路
- Atlas Scientific EZO-EC 嵌入式电导率电路 0.07 ? 500,000+ ?S/cm
- Atlas Scientific EZO-ORP 氧化还原电位嵌入式电路 -1019.9mV-1019.9mV
- Whitebox Labs Tentacle T3 for Raspberry Pi
- Wemo Mini 智能插头,支持 WiFi,可与 Alexa、Google Assistant 和 Apple HomeKit 配合使用
您对 Jeremy 有疑问吗?加入我们 2020 年 9 月 23 日 的虚拟时间序列聚会,他将演示如何使用 InfluxDB 和 Grafana 来监控您的水族箱!立即回复。
如果您有兴趣分享您的 InfluxDB 故事,请点击此处。
有关 Grafana 和 InfluxDB 的另一个有趣用例,请阅读如何将 Grafana 与 Home Assistant 集成。