如何可视化水表使用并在用水过量时获得警报
在我居住的村庄,水表每五年更换一次,今年正好是第五年。我借此机会与市政办公室沟通,询问是否可以获得带脉冲模块的水表,以便集成到我的网络中。他们同意了!——再次感谢!
上周他们来安装了新水表,我不在家,回家后发现了以下情况:
![水表安装图]
他们还留下了包装,因此我可以猜测模块类型。看起来像是Wehrle的“Ringkolben-Patronenzähler MODULARISRTK-OPX”,如数据手册所示。我不完全确定是S0还是M-Bus版本,但朋友告诉我应该是S0版本,因为M-Bus贵得多,所以我选择了它。
连接S0模块
水表有一个光耦合器(光电耦合器),在我的情况下由内部电池供电。每流过一升水,上述两根电缆会短暂连接(例如100毫秒)。最简单的情况下,可以使用上拉电阻到5V,但这可能会带来问题。最好使用2个电阻和2个电容来稳定脉冲并防止电磁干扰等不良影响。由于我学校学这个的时间太久了,我请了一位经常做电路的朋友帮忙,得到了这个图纸:
![电路图]
他建议使用以下电阻和电容:
- R1 – 4.7kOhm
- R2 – 470Ohm
- C1 – 100nF
- C2 – 10nF
在家,我搭建了这个电路(图片上未完全完成):
![电路搭建图]
可以看到,我使用了旧的PC电源连接器来连接水表,这样可以轻松断开连接。硬件成本至今不到1欧元——当然家里需要一些工具(如焊铁)。
现在回到我更熟悉的领域……
将信号接入网络
我家有几个树莓派,最初考虑使用一个,但这对我的需求来说太过了,因为我打算在家庭服务器的容器中进行可视化和警报。我选择了类似Arduino但更便宜的东西:NodeMCU,它具备这个项目所需的一切:
- 带中断触发的数字输入——无需轮询,不会错过脉冲
- WiFi支持,可连接到我的物联网网络
- 与Arduino IDE集成
- 成本低于5欧元
让我们看看我的代码——你可以从这里下载。代码的第一部分导入所需的库并定义一些变量:
- WiFi SSID和密码
- 每升水通知的主机和端口——我们将使用InfluxDB,你会看到它有多简单
- 连接水表的PIN——确保支持中断
然后是启动时执行一次的代码,连接WiFi并附加中断:
|
|
最后是由中断调用的代码——它只是为每升水发送一个UDP消息,格式为InfluxDB,其余由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欧元,否则让它在树莓派上运行(约30欧元),租用虚拟服务器1-2欧元/月,或使用NAS的容器功能。
评论:
- David Simmons:这太酷了!如果你迁移到InfluxDB 2.0 Alpha,可以使用我的Arduino InfluxDB库:https://github.com/davidgs/ESP8266_Influx_DB,直接写入数据库。同时关注我的新2.0 MQTT输出!