这个项目是一个DIY触摸屏面板,用于布防/解除HomeAssistant的报警系统。它由RaspberryPi、3.5英寸触摸屏显示器、基于Python的自定义应用程序和MQTT提供支持。
本文将引导您完成项目的创建,并提供创建您自己的项目所需的一切!
家庭助理
HomeAssistant是一个了不起的开源家庭自动化平台。它的众多功能之一是能够实现您自己的家庭安全警报系统。然后,您可以使用各种传感器来确定是否/何时触发警报。
就我而言,我的所有外门上都有几个Z-Wave门传感器。如果在警报激活时任何门打开,我会在手机和电脑上收到即时推送通知。最终,我将把它扩展到包括运动传感器和警报器。
虽然这工作正常,但布防/撤防设备的唯一方法是通过Web界面。不幸的是,手动警报没有一个API接口,我们可以使用它来发送布防/撤防命令,同时还可以从HA接收即时状态更改。
因此,我创建了新的手动MQTT警报组件,其功能与手动警报相同,但也允许通过MQTT进行双向通信!有了这个组件,我们可以使用我们可以想象的任何网络连接平台轻松构建自己的远程键盘。就我而言,我选择使用带有触摸屏的RaspberryPi构建解决方案。
硬件
至少,您需要以下组件:
树莓派
Adafruit的PiTFTPlus480x3203.5“TFT+触摸屏显示器
微型SD卡
用于供电的MicroUSB电缆
*我在这个项目中使用了PiZeroW,但是任何带有wifi的Pi都应该可以工作(即使是使用USBwifi适配器的)。
可选:该软件还支持可选的屏幕保护模式,在这种模式下,屏幕会在很长一段时间后黑屏。通过添加PIR运动传感器,我们可以让屏幕保持关闭,直到有人接近键盘,从而延长显示器的使用寿命。只需将PIR传感器连接到显示器底部的额外引脚-请参阅本页下方的运动传感器部分。
准备HomeAssistant和MQTT
HomeAssistantv0.50添加了我们需要使用的新alarm.manual_mqtt组件。这依赖于MQTT平台的启动和运行,因此请确保首先执行此操作。
要将警报添加到HomeAssistant,只需将其放入您的文件中:configuration.yml
可以在文档页面上找到完整的配置选项列表。alarm.manual_mqtt
准备树莓派
PiTFT显示器需要特殊的内核驱动程序、配置和校准。Adafruit确实提供了一个很好的指南和预烘焙的操作系统映像,其中包括这些;但是,这个旧图像无法在PiZeroW上正常工作(wifi完全坏了)。
就我而言,我最终安装了最新版本的RaspbianJessieLite并按照这些说明使显示器正常工作。
注意:此项目不需要X桌面环境,因为软件直接绘制到屏幕的帧缓冲区。如果您按照上一个链接中的说明进行操作,只需跳过任何引用X11的部分。
此时,您的TFT上应该会出现一个功能齐全的LinuxCLI!
要让触摸屏与pygame一起使用,请确保您使用的是SDL1.2。
现在我们可以在Pi上安装报警面板软件了!
软件
要安装它,请使用Git将存储库克隆到某个位置-我选择了/srv:
您还需要通过将.env.dist示例文件复制到.env并编辑以下设置来配置面板:
PINS-您想使用的4位密码的逗号分隔列表。
MQTT_HOST-MQTT服务器的IP或主机名
MQTT_USER-MQTT的用户名
MQTT_PASS-MQTT对应的密码
您现在可以运行该程序:
最后,如果您希望警报面板在启动时启动,请将以下内容添加到您的rc.local文件(exit0行上方):
可选运动传感器/屏幕保护程序
为了最大限度地延长显示器的使用寿命,可以使用PIR运动传感器在无人时自动关闭显示器。PiTFT显示器在其底部方便地暴露了GPIO引脚,因此只需进行以下连接:
直流至5v
GND到地
输出到任何未使用的GPIO(例如引脚23)
确保将以下行添加到您的.env文件中,以便控制面板了解您的传感器-将23替换为您选择使用的任何GPIO引脚:
PIR_GPIO_PIN=23
(如果您的控制面板已经在运行,那么您需要在进行此更改后重新启动它。)
用法
应用程序启动后,显示器应自动连接到MQTT。
每当HomeAssistant中的闹钟状态发生变化时,它都会通过MQTT自动将新状态实时推送到显示屏上。
要通过报警面板更改报警状态,您必须先按相应的数字键输入有效的PIN码。如果您不小心按错了按钮,只需点击被屏蔽的输入、#键或*键即可清除您的输入。
输入有效的PIN将解锁按钮以更改状态:
解除“武装”
离开
按下其中任何一个都会通过MQTT向HomeAssistant发送命令以进行相应的更改。
底层-创建UI和应用程序
设计UI相当简单。使用Photoshop,我创建了一个新的480x320工作区,并将其划分为相等单位的网格,以确保按钮的大小和对齐方式正确:
然后将每个按钮及其不同状态提取到PNG。
Python应用程序使用我在PyGame之上创建的自定义UI库。一切(除了状态文本)都呈现为具有多种状态的“按钮”:
PIN输入(1-9、*、0和#):
默认
按下
操作按钮(撤防、布防回家、布防离开):
默认(禁用)
激活(警报系统的当前状态)
可用(启用-输入正确的PIN后即可选择)
甚至显示当前屏蔽PIN的框也被绘制为带有状态的“按钮”:
默认(没有输入)
输入了1个号码
输入2个数字
输入3个数字
输入4个数字,PIN有效
输入4个数字,PIN不正确
每个按钮状态都有自己的图像-我们只需跟踪当前状态并根据需要在图像之间切换。
应用程序本身运行一个简单的事件循环——在每次迭代中,我们通过MQTT检查屏幕触摸或传入状态更改。UI状态也会根据需要重新绘制。为了防止CPU以100%的速度运行并产生过多的热量,我们还睡眠了很短的一段时间。
一旦输入正确的PIN,操作按钮就会解锁。当按下未锁定的操作按钮时,我们会立即通过MQTT向HomeAssistant发出命令,以相应地更改警报状态。
外壳
每个DIY项目都需要一个外壳,因此我尝试设计一个定制的3D打印外壳来容纳我的控制面板和PIR传感器:
这不是最漂亮的情况,一些内部测量不是100%完美的,还有一些小问题:
Pi的背面和外壳的背面之间有一个微小的间隙-理想情况下,我希望它们齐平。这是用热胶固定的。
支柱可能更坚固。
前面板的厚度略短于TFT显示器,使其突出约1毫米。
没有额外的通风孔(虽然热量还不是问题)。
设计非常基础(我不是设计师)。
由于这些原因,我将来可能会重新设计这个案例,但现在它已经足够满足我的需要了:)
显示器和PIR传感器的测量结果非常完美,因此它们非常适合并紧贴在外壳的前部。安装后,我使用了大量的热胶将PCB固定在正面内侧。
对于后部,我只需将微型USB电缆穿过孔,将其插入Pi,然后将前后部件卡扣在一起。我之前添加的热胶仍然是温暖的,所以它有助于将前后部件粘合在一起。
然后我使用CommandLargePictureHangingStrips(带有类似尼龙搭扣的材料)将它安装在墙上。我本可以在外壳上打孔并使用螺丝,但我想要一些不那么永久的东西,以防我以后决定进行改进。
全部0条评论
快来发表一下你的评论吧 !