如何可视化水表读数并在用水量过高时获得警报
我居住的村庄每五年更换一次水表,今年正好是第五年。我借此机会询问了市政办公室,是否可以换装一个带脉冲模块、能接入我家庭网络的水表。他们同意了——再次感谢!
上周他们来安装了新水表,当时我不在家。回家后我发现了以下物品:
他们还留下了包装,让我得以猜测模块型号。在我看来,这像是 Wehrle 公司的“Ringkolben-Patronenzähler MODULARISRTK-OPX”,如这份数据手册所示。我不完全确定是 S0 版本还是 M-Bus 版本,但一位朋友告诉我,这肯定是 S0 版本,因为 M-Bus 版本要贵得多。于是,我就按此进行。
连接 S0 模块
基本上,水表内部有一个光耦(光电耦合器),在我的案例中由内部电池供电。每流过水表一升水,上面所示的两根电线就会短接一小段时间(例如 100 毫秒)。最简单的情况下,可以只使用一个上拉电阻到 5V,但这可能会带来问题。最好使用 2 个电阻和 2 个电容来稳定脉冲并防止电磁干扰等不良影响。由于我学习这些知识的年代太过久远,我请了一位经常设计电路的朋友帮忙,他画出了这个图:
他告诉我使用以下电阻和电容:
- R1 – 4.7 kOhm
- R2 – 470 Ohm
- C1 – 100 nF
- C2 – 10 nF
在家里,我搭建了这个电路(下图未完全完成):
如图所示,我使用了旧的 PC 电源连接器来连接水表,以便轻松断开连接。到目前为止硬件成本不到 1 欧元——当然,家里需要已经有了一些工具(例如电烙铁)。
那么,现在回到我更熟悉的领域……
将信号接入我的网络
家里有几个 Raspberry Pi,起初我考虑使用一个,但这对我的需求来说有点大材小用,因为我本来就打算在家庭服务器的容器中进行可视化和警报。我选择了类似 Arduino 但更便宜的东西。
我选择了一个 NodeMCU,它拥有这个项目所需的一切:
- 支持中断触发的数字输入 -> 无需轮询,也不会错过脉冲
- 支持 WiFi,可连接到我的物联网网络
- 可与 Arduino IDE 集成
- 价格低于 5 欧元
来看看我的代码——你可以从这里下载。在代码的第一部分,我们导入所需的库并定义一些变量:
- WiFi SSID 和密码
- 我们将为每一升水通知的主机和端口——我们将使用 InfluxDB,你会看到这有多么简单。
- 连接水表的引脚——确保它支持中断。
然后是启动时执行一次的代码,我们在这里连接到 WiFi 并附加中断。
最后,我们需要中断调用的代码——它只是为每一升水发送一条 InfluxDB 格式的 UDP 消息,剩下的就交给 InfluxDB 时序数据库处理。
如你所见,代码非常简单——复杂的部分由 InfluxDB 完成。
可视化与警报
当然,我可以自己编写可视化和警报程序,过去也这样做过,但那已经是过去式了。InfluxDB 及其团队的其他项目为这类家庭项目提供了一切,并且做得比我更好。你会看到这究竟有多简单。我从家庭 Linux 服务器上一个空的 LXC 容器开始。容器里使用 Debian 9,但 InfluxDB 为所有主要发行版都提供了软件包。
首先,我们需要安装 curl 和 apt 的 https 支持——我的容器尽可能精简。
|
|
下载 InfluxDB 仓库的签名密钥。
|
|
然后将仓库添加到源列表。
|
|
并安装软件。
|
|
默认情况下,InfluxDB 的 UDP 接口是禁用的。你需要修改配置文件 /etc/influxdb/influxdb.conf,使其看起来类似这样:
|
|
现在我们只需要启用各项服务。
|
|
如果一切正常,你应该看到类似这样的信息:
|
|
现在我们只需要创建我们为 UDP 配置的数据库:
|
|
完成这些后,只需打开浏览器并连接到 http://<服务器IP地址>:8888,然后用以下详细信息填写表单:
- 连接字符串:输入运行 InfluxDB 的机器的主机名或 IP,并确保包含 InfluxDB 的默认端口 8086。在我的/我们的例子中是 localhost / 127.0.0.1
- 连接名称:为你的连接字符串输入一个名称。
- 用户名和密码:除非你在 InfluxDB 中启用了授权,否则这些字段可以留空。
- Telegraf 数据库名称:可选,为你的 Telegraf 数据库输入一个名称。默认名称是 Telegraf。
其他所有操作都可以通过浏览器完成——只需看看我其中一个仪表板元素的配置——SQL 代码是通过点击来编写的。
我当前的水表仪表板看起来是这样的:
你也可以定义警报。在这个案例中,我想设置一个警报,如果一小时内用水量超过 100 升就发送消息——如果发生这种情况,我应该知道并且判断是否正常。
希望你能看到可视化水表和设置警报是多么容易。这也非常便宜——如果你已经有服务器,一切大约只需 5 欧元,否则可以在 Raspberry PI(约 30 欧元)上运行,每月花 1-2 欧元租用虚拟服务器,或者使用你 NAS 的容器功能。