皮零 W监控泳池温度并控制泵

14

This summer I created a pool 温度 monitoring and pump control system using a 皮零 W. This 文章 gives an overview of the system and how I put it together. It allows the 温度 of the air and water to be 显示ed 上 a web page while 汽车matically turning the pump 上 and off according to a preset schedule.

的Pool

Pi零W池监控系统

我们最初有一个8英尺的Bestway“fast set”游泳池,顶部有充气环。事实证明,这与我们与之共享花园的三只猫有些不兼容。因此,今年我们将其更改为10英尺高的金属框架“Summer Escapes”池。它盛有4100升水,我不知道水会达到什么温度或与气温之间的关系。我也没有办法轻松地控制水泵,而不用担心市电计时器的设置。

的Requirements

我决定我的游泳池温度监控系统应该能够:

  • 测量空气和水的温度
  • 将温度记录到互联网
  • 在可通过手机访问的网页上显示温度
  • Allow the pump to be turned 上 , off or placed in an 汽车matic mode that would follow a schedule

泳池泵的Water 水泵

与以前的游泳池一样,它配备了一个带过滤器的市电泵。在过去的几年中,我使用传统的市电计时器进行控制,但有时我想手动将其打开,以利用太阳能电池板提供的免费电力。如果游泳池是在一天中使用的,我还希望有一种更简单的方法,使它多出几个小时而不会弄乱计时器。

的Weatherproof Box

Pi零W池监控系统为了给泵供电,我买了一个防风雨箱,该箱有一个用于四向扩展块的空间。一条10m的主电缆进入房屋。有足够的空间放置5V电源和Pi Zero。传感器电缆通过橡胶槽插入。

这些盒子看起来很昂贵,但是当涉及到电源时,您真的想要一种旨在防止进水的东西,而不是尝试使用旧的冰淇淋桶。

的Parts

Pi零W池监控系统我完成的系统包括以下内容:

能量插座& Pi-mote

Energenie PiMoteEnergenie生产遥控插座。它们的工作方式与大多数远程控制插座一样,但有一个关键的区别。你可以买一个“Pi-mote”Pi的附加组件,可让您使用Python控制套接字。

It’设置非常简单,并且是硬件的完美组合,可以让我控制泵。 Pi-mote只需插入GPIO接头,并允许使用Python的单行来控制套接字。

温度传感器

DS18B20防水温度传感器我选择了两个DS18B20“1-wire”接口温度传感器,就像我以前使用过的那样。多个传感器可以连接到相同的GPIO引脚。可以购买附带所有电缆的防水版本DS18B20。它们比标准传感器贵一些,但我要做的就是将三根导线焊接到PiMote背面的适当GPIO引脚上,然后就可以开始使用了。

有策略地将其中一个放置在树篱中以测量空气温度,另一个放置在水池中以测量水温。我的传感器有3m的电缆。

的Software

我所有的软件都可用 池监控BitBucket存储库。该系统涉及两个主要脚本,并且都是用Python编写的。它们在启动时使用cron通过launcher.sh脚本启动。

第一个(poolmain.py)连续循环运行并检查模式。如果在“auto”它关注时间并决定何时打开和关闭泵。它还将定期的温度读数发送到“Thingspeak”基于云的物联网平台。您可以在这里查看我的公共频道的最近空气和水温读数: //thingspeak.com/channels/293211

第二个(poolweb.py)使用Flask框架创建一组基本的网页。这包括仪表板,日程表和登录页面。仪表板显示空气和水的温度,还允许更改泵的模式。有三种模式。开,关和自动。自动运行时,泵会根据时间表页面上定义的时间表自动打开和关闭。登录页面确保只有经过授权的人才能弄乱泵!

的Web Interface

系统会通过本地网络或互联网显示一个网页(如果您’正确配置了您的路由器)。看起来像这样:

Pi零W池监控系统

时间表可以在时间表屏幕上修改。滴答声是根据泵在启动时应处于工作状态的小时数来布置的“auto” mode :

Pi零W池监控系统

默认的用户名和密码是“admin” and “splishsplosh”。可以通过192.168.1.42:5000访问页面,其中“192.168.1.42”应该用网络上Pi的IP地址替换。 5000是Flask使用的默认端口。

前推 and 物语

推入通知系统启动时,它将使用Pushover发送通知。然后,可以使用他们的应用在手机上阅读。它’是一项很棒的服务,您可以使用它来管理来自其他系统的通知。

通知消息包含您网络的互联网IP地址,如果您设置了到Pi的端口转发,则出门在外时可以访问仪表板。假设您正在将端口50000转发到Pi上的端口5000。

Temperatures are sent to 物语 which allows you to see your data plotted as a graph.

这两项服务都要求您创建一个帐户并获取一些API密钥。可以将它们添加到config.py文件中。

硬件设定

Energenie PiMote和传感器的hardware setup is fairly straightforward.

  • 的pump is connected to the 功率 strip using an Energenie remote socket.
  • 的Pi Zero is 功率 ed with a 5v phone charger.
  • 的PiMote is attached to the Pi’s 通用输入输出 header.
  • 温度传感器导线被焊接到PiMote的背面。“Red” to Pin 1 (3.3V), Black to Pin 9 (Gnd) and Yellow to Pin 7 (GPIO4). A 4.7Kohm resistor is put between Pin 1 and Pin 7 as per the 1线 接口 requirements.
  • Pi中的SD卡’s的SD卡插槽(显然!)

SD卡设置

要使软件正常工作,您可以按照以下过程进行操作。首先使用最新版本的Raspbian创建新的SD卡。我用了“Lite” version as I didn’不需要桌面环境。

使用首选方法启用SSH。我使用Windows PC并简单地创建了一个名为“ssh”将其插入Pi之前,请先在卡的引导分区上单击。

然后我 使用wpa_supplicant.conf文件手动设置WiFi。 这应该在您第一次引导新映像之前完成。

请更改默认的Pi密码为明智的密码 使用本指南。如果您允许通过Internet访问Pi,这尤其重要。

更新和软件包安装

运行以下命令以更新映像:

须藤 apt-get update
sudo apt-get -y upgrade

然后安装以下软件包:

须藤 apt-get -y install git
sudo apt-get install  蟒蛇 3-gpiozero
须藤 apt-get -y install  蟒蛇 3-pip
sudo pip3 install flask
sudo pip3 install 要求

这些软件包支持“池监视” 蟒蛇 脚本中使用的功能。

泳池 Monitoring 文件Downloads

的next step is to clone the software from my BitBucket repository :

git clone //[email protected]/MattHawkinsUK/rpispy-pool-monitor.git

现在将目录重命名为更容易键入的名称:

mv rpispy-pool-monitor pool

并导航到它:

cd pool

使用以下命令使launcher.sh文件可执行:

chmod +x launcher.sh

Energenie套接字和Pi-Mote配对

的first time the Pi-Mote is used it must be paired with the socket.The process is described in the 官方用户手册. 的socket must be put into “learning mode”这可以通过以下方式完成:

  • 如果插座已打开,请按绿色按钮将其关闭
  • 按住绿色按钮5秒钟或更长时间,然后在灯泡开始以1秒的间隔闪烁时释放它。

然后在utils目录中运行配对脚本:

cd /home/pi/pool/utils
python3 energenie_pair.py

在出现提示时按Enter键,将Pi-mote与该插座配对,并且该插座的ID为1。此ID在Python脚本中用于打开和关闭此特定插座。

DS18B20传感器设置

为了配置DS18B20传感器,您需要使用以下命令对config.txt文件进行一些更改:

须藤 nano /boot/config.txt

在底部添加以下行:

dtoverlay=w1-gpio,gpiopin=4

有关DS18B20的更多信息,请参见 DS18B20 1线数字温度计传感器 page.

Web界面密码

默认的用户名和密码是“admin” and “splishsplosh”。密码存储为哈希,因此要更改密码,必须使用hashgenerator.py脚本将新密码转换为新的哈希值。

cd /home/pi/pool/utils
nano hashgenerator.py

然后更改默认密码“splishsplosh”您的密码。使用CTRL-X,Y和Enter保存。运行脚本以创建哈希值:

 蟒蛇 3 hashgenerator.py

的new hash can be inserted into the config.py file.

配置文件

使用以下命令编辑config.py:

cd /home/pi/pool
nano config.py

粘贴到新的哈希中。

的“FLASHSECRET”可以更改为您喜欢的任何内容。粘贴一些随机字符以个性化您的字符。

发送启动通知到 前推和temp data to 物语 您将需要在这些服务中注册并获取API密钥。这些对您来说是个人的,应小心插入config.py文件中。

使用CTRL-X,Y,ENTER保存并退出Nano编辑器。

Cron设定

为了在Pi启动时运行脚本,我们需要创建一个cron条目。使用:

须藤 crontab -e

如果出现提示,请选择默认的文本编辑器。我通常会选择纳米“2”.

然后在底部添加此行:

@reboot sh /home/pi/pool/launcher.sh > /home/pi/pool/logs/cronlog 2>&1

确保此行之后有一个空白行。

这将在引导时运行启动程序脚本,然后依次运行两个主要的Python脚本。

时区设定

最后一步是为您的位置设置正确的时区。我必须这样做以确保我的系统知道正确的时间并且没有’一个小时出来。您可以通过以下方式实现:

  • 跑步“sudo raspi-config”
  • 选择中“Localisation Options”
  • 选择中“Change Timezone”
  • 选择您的地区
  • 选择最近的城市/地区
  • 选择保存并退出“Finish”

键入命令:

timedatectl

应该报告正确的“Local time”.

准备好出发!

假设传感器已连接并且您’正确配置所有内容,重新启动Pi后,它们应该可以正常工作。

故障排除

与大多数涉及硬件和软件混合的项目一样,某些事情可能无法立即进行。这里有一些提示:

  • 检查/ home / pi / pool / logs中日志的内容
  • 确保温度传感器正确连接到3.3V,GPIO4和地
  • 确保温度传感器接线正确,并且有两个“28-00”/ sys / bus / w1 / devices中的目录
  • 检查所有文件是否位于/ home / pi / pool /
  • 检查一下“crontab -e”包含@reboot行
  • 检查launcher.sh脚本是否可执行。使用“ls”命令,它应该显示为绿色。

参考文献

以下链接提供了有关此池监控和泵控制项目中使用的技术的其他技术信息:

Energenie Pi-Mote手册
//energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf

gpiozero库中的Energenie支持
http://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html#energenie

烧瓶文档
http://flask.pocoo.org/docs/

 

分享。

14条留言

  1. 这是一个很棒的设置。我刚开始做几乎相同的事情,除了我的暖通空调。 (虽然有2个临时工,但有供求关系)我在这方面是一个完全的菜鸟。我为Pi设置了与您相同的传感器。现在仅连接了1个。我能够运行代码并使它显示我的温度,但无法弄清楚如何使它达到Thingspeak。我有一个帐户,频道设置,API密钥等等。我当前的代码是…

    导入操作系统
    导入球
    导入时间

    os.system(‘modprobe w1-gpio’)
    os.system(‘modprobe w1-therm’)

    base_dir =‘/sys/bus/w1/devices/’
    device_folder = glob.glob(base_dir +’28*’)[0]
    device_file = device_folder +‘/w1_slave’

    def read_temp_raw():
    f =打开(device_file,‘r’)
    行= f.readlines()
    f.close()
    回线

    def read_temp():
    行数= read_temp_raw()
    而lines [0] .strip()[-3:]!=‘YES’:
    time.sleep(0.2)
    行数= read_temp_raw()
    equals_pos = lines [1] .find(‘t=’)
    如果equals_pos!= -1:
    temp_string =行[1] [equals_pos + 2:]
    temp_c =浮点数(temp_string)/ 1000.0
    temp_f = temp_c * 9.0 / 5.0 + 32.0
    返回temp_f,temp_c

    而True:
    打印(read_temp())
    time.sleep(1)

    Tried reading your code to get just the part to send to 物语 but as I said, Im a noob and not 100% sure which part I need. I think its this 上 e…

    # Read 温度s and send to 物语
    #每5个循环
    loopCounter + = 1
    如果loopCounter == loopSendData:
    temp1,temp2 = p.readTemps(mySensorIDs)
    p.sendThingspeak(c.THINGSPEAKURL,c.THINGSPEAKKEY,’field1′,’field2′,temp1,temp2)
    loopCounter = 0

    你在哪里“mySensorIDs”将是我的28-XXXXXXXXX ID’s for my 传感器 s?
    thinkspeakURL和KEY是我的url和密钥,字段标识符和我的名字…

    是否需要将sensorIDS之前的temp1,temp2更改为任何值?您使用的循环计数器是否对我有所帮助?
    谢谢你提供的所有帮助。

    • 嗨,丹,

      “p.sendThingspeak”被称为“sendThingspeak”从进口“poollib.py”。因此,您可以将函数定义复制到代码中,并引用为“sendThingspeak” rather than “p.sendThingspeak”.

      c.THINGSPEAKURL,c.THINGSPEAKKEY是从“config.py”文件。您可以导入自己的config.py文件,也可以将它们替换为THINGSPEAKURL和THINGSPEAKKEY。

      即将这些粘贴在脚本开头附近:

      THINGSPEAKKEY='yourkeygoeshere'
      THINGSPEAKURL='//api.thingspeak.com/update'

      这一点:

      而True:
      打印(read_temp())
      time.sleep(1)

      可能成为:

      而True:
      tempc,tempf=readTemp()
      sendThingspeak(THINGSPEAKURL,THINGSPEAKKEY,'field1','field2',tempf,tempc)
      print(tempf)
      print(tempc)
      time.sleep(1)

      If you are still struggling create a new script. Set tempf and tempc to dummy values and get the 物语 bit to work without worrying about the 传感器 stuff. Get the 传感器 stuff working in a separate script.

      两种机制都起作用’s then to combine and use the 传感器 s to feed the values into the 物语 section.

      问候,
      马特

  2. 克里斯·琼斯

    谢谢马特。我设法使一切正常–但我有一个问题。

    传感器有时会不再出现在/ sys / bus / w1 / devices /目录中。就像,在那里一分钟,然后目录不在那里。

    您有什么建议吗?

    谢谢

    克里斯

    • 这可能是由于传感器和Pi 通用输入输出 之间存在接线问题。仔细检查连接是否良好。也可能是由于电缆的长度。我的是3m,看来还可以。

  3. Cron日志报告以下内容:

    追溯(最近一次呼叫过去):
    文件“/home/pi/pool/poolmain.py”, line 27, in
    将poollib导入为p
    文件“/home/pi/pool/poollib.py”, line 29, in
    import 要求
    ImportError:未命名模块‘requests’
    追溯(最近一次通话):
    文件“/home/pi/pool/poolweb.py”, line 29, in
    将poollib导入为p
    文件“/home/pi/pool/poollib.py”, line 29, in
    import 要求
    ImportError:未命名模块‘requests’

  4. 嗨,马特,

    这是一个很棒的文章。我已经能够使整个系统正常运行,但是我的问题是,如何转换温度以在Flask运行的网站上显示华氏温度而不是摄氏温度?
    谢谢

    • I’刚刚更新了poollib,poolmain,poolweb文件,索引和调试模板以及config.py文件。如果您查看config,py文件,则有新变量TEMPUNIT。将此添加到当前文件并设置为‘F’。然后覆盖其他5个文件。这会将值转换为华氏度,并在Web界面中支付F而不是C。

  5. 博·赫尔曼森

    你好

    如果我应该提出建议,那将是增加对太阳能加热的支持,需要增加一个泵和另外一个温度传感器,这些传感器可以说太阳能加热回路内的水随着太阳加热而开始变暖,这将触发第二个泵,当太阳能加热回路中的水与游泳池中的水相同时,可以关闭泵

  6. 嗨,马特,非常感谢您创建了这个– it’s really good.

    I’在整个夏天,我的花园里都成功运行了’s允许我检查游泳池的状态并远程打开/关闭并安排加热时间’电价便宜了。

    It’是我的第一个Raspberry Pi项目,我’我真的很喜欢– next summer I’m希望修改您的代码以使其具有恒温器的性能并保持目标池温度(我们’我们发现31度非常好!!),然后每当我的太阳能电池板发电时,将泵/加热器运行更长的时间,以超过此温度。

    我确实有一个问题。我注意到你用过“sudo”设置Crontab以在启动特权时加载脚本。 Isn’还有一个额外的“cyber 安全”这样做的风险?即如果有人找到了一种远程修改您的代码的方法,他们会带来更大的危害吗?一世’ve changed my Pi’的用户名/密码,但我’我还不够熟练,无法理解允许WWW访问我的网络上的此类计算机的风险。

  7. 迈克尔·C·菲尔波特

    嗨,马特,这是一个了不起的项目。试图弄清楚如何自己调整它。我的pi驻留在游泳池旁的棚屋中,我想监视pi的内部CPU温度。关于如何将其添加到代码中以及第3个DS18B20中的任何想法?

    I’我试图学习,并希望您能给我任何指导。

    谢谢

发表评论

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.