基于产品的家庭安全系统,来自Nootekhnika

美好的一天,亲爱的社区。 我想与您分享一个基于Nootehnika的智能家居设备为家庭实施安全系统的实验。 我想马上保留一下这是第一个实验之一,我的目标不是“建立坚不可摧的堡垒”,而是证明使用我选择的设备,进行实验和学习课程以及从您那里获得反馈的可能性。

简而言之,我正在设计的系统应该为每个在布防模式下走近前门的人拍照,然后将照片发送到电子邮件地址,并在走廊进行移动登记时发送电子邮件消息(即公寓内部有移动) 。 因此,对问题的陈述。

1.问题陈述


我设计的系统应:

  • 在布防模式下,为每个接近前门的人拍照,然后将照片发送到电子邮件地址;
  • 在布防模式下,如果在走廊中有移动记录,请发送电子邮件(没有照片,因为我那里没有IP摄像机);
  • 提供用于布防和撤防的各种接口。

通过各种布防界面,我的意思是:

  • 在无线电开关Nootehnika的帮助下进行撤防;
  • 通过Web界面进行布防和撤防,以管理智能家居。

2.解决方案说明


为了解决此问题,我使用了以下硬件:

  • 两个运动传感器112;
  • 接收来自传感器和开关RX2164的信号;
  • PU311-2开关;
  • 3VI nettop(基于Atom D525处理器);
  • 中文无名IP摄像机。

在本文的“简介” 部分中,我已经简要介绍了Nootehnika公司构建智能家居的设备,因此,我将不再关注此问题。 此外,有关设备的所有详细信息都可以在公司的异地找到。

因此,对系统进行描述。 在3VI网上平台上,安装了Debian Linux 7,简单事件关联(SEC)软件和一组用于管理Oleg Artamonov的 Nootechnics设备的linux实用程序。

运动传感器(PM112)安装在前门前的前厅和走廊(公寓内部)中。 RX2164 USB接收器已连接到上网本。 接收器从传感器和开关接收信号,并且安装在网上的Nootehnics设备管理实用程序(以下称为Noolite实用程序)将接收到的信号发送到syslog。 SEC读取写入系统日志数据的文件,并根据配置的规则对其进行处理。 作为处理的结果,执行诸如从IP摄像机接收照片和发送电子邮件消息之类的动作。

有两种方法可以启用(和禁用)安全模式:

  1. 按下PU311-2开关上的按钮;
  2. 通过按下智能家居控制系统的Web界面中的按钮。

图1显示了说明系统操作的框图。



图1-说明系统操作的框图

3.安装系统硬件


对于该系统,我使用相同的2个运动传感器,其安装方法已在本文的第4节中进行了介绍

简而言之,其中一个传感器安装在前厅(公寓外部)的前门附近。 该传感器的灵敏度被设置为检测门附近的移动的水平。 第二个传感器安装在前门附近,但已经在公寓内部。 灵敏度的调整方式是将移动固定在门的附近。

网络摄像机安装在天花板下方前庭的公寓外部。 前门和她前方约1.5米的空间落入了视野。

PU311-2开关安装在机柜内部,以免引起眼睛的注意和意外按下。

带有RX2164信号接收器的3VI上网本位于夹层附近,以稳定地接收来自传感器和开关的信号。

设备安装图如图2所示。



图2-设备安装图

4.软件设置


软件设置包括:

  • 设置Noolite实用程序以接收来自传感器和开关的信号;
  • 设置SEC规则以响应来自传感器和开关的信号;
  • 创建一个脚本,该脚本将从相机接收照片并发送电子邮件;
  • 在Web界面中创建一个按钮以打开和关闭系统。

配置Noolite实用程序以接收来自传感器和开关的信号


为了使RX2164接收器开始从传感器或开关接收信号,有必要对其进行“绑定”。 为此,我们按下传感器本身(在背面)上的“绑定”按钮,然后在连接接收器的计算机上执行以下命令:nooliterxcfg –bind <通道号,从1到64>。 同样,开关绑定到接收器。

就我而言,前庭中的传感器连接到通道3,公寓中的传感器连接到通道2,两个开关按钮分别连接到通道1和4。

要实时接收来自传感器的信号,您需要在守护程序模式下运行nooliterx实用程序。 开发人员自己(实用程序文档中的Oleg Artamonov)描述了实用程序及其设置的安装过程,而我在文章(LINK)的第4节中也对此进行了描述。 结果,我们在syslog中获得了来自传感器和开关的信号记录。 仅需配置这些消息在syslog本身的文件中的记录,并在输出中获得以下内容(来自传感器的示例消息):

Jan 7 15:47:39 vmon nooliterx[23022]: Received: status 133, channel 3, command 25, format 1, data 2 0 0 0 Jan 7 18:43:58 vmon nooliterx[23022]: Received: status 135, channel 2, command 25, format 1, data 1 0 0 0 

来自开关的消息示例(当按下按钮时)看起来有些不同:

 Jan 5 22:29:43 vmon nooliterx[23022]: Received: status 26, channel 1, command 4, format 0, data 1 0 0 0 Jan 5 22:27:55 vmon nooliterx[23022]: Received: status 145, channel 4, command 4, format 0, data 1 0 0 0 

配置SEC规则以触发来自传感器和开关的信号。


SEC是用于处理事件日志的实用程序。 简而言之,它在输入处接收事件流,每个事件流都检查是否符合配置的规则的模式。 在找到匹配项的情况下,它将启动相应规则中规定的操作。 这东西使用起来非常灵活。 网上有详细的手册页。

在我的系统中,使用SEC来搜索事件流中传感器和开关的实时消息,并运行一个用于拍照和发送电子邮件的脚本,或者简单地打开和关闭整个系统。

在SEC中,我配置了4条规则。 2-处理来自运动传感器的事件,2-处理来自开关的两个按钮的信号。 规则在/etc/sec.conf中

规则1:处理来自前庭中的运动传感器的信号(传感器连接到通道3)

 type=SingleWithSuppress ptype=RegExp pattern=\w+\s+\d+\s+\d+\:\d+\:\d+\s+\w+\s+nooliterx\S+\s+Received\:\s+status\s+\d+,\s+channel\s+(3),\s+command\s+25.* desc=Motion sensor frontdoor $1 triggered action=shellcmd (/usr/local/smarthome/security/send_photo_alert.sh $1); event %s window=60 

此规则的类型“ SingleWithSurpress”旨在仅在“ window”参数指定的时间间隔内以秒为单位响应第一个记录的事件。 即 此设置意味着该规则每分钟最多运行一次,并且在“操作”参数中指定的操作每分钟启动最多不超过1次。 这样做是为了防止有人在门口脚几分钟,而不用大量信件来发送垃圾邮件。 在“ pattern”参数中,写入一个正则表达式,根据该正则表达式搜索与通道3关联的传感器的事件。“ action”参数中指定了两个动作-shellcmd,该脚本运行脚本并向其传递从正则表达式中提取的参数(在本例中在表示数字“ 3”的情况下,第二动作“事件%s”用于将记录在参数“ desc”中的表达式转换为其他规则,这对于该系统的操作不是必需的,并且可以省略。 “ desc”参数指示其他规则使用的其他服务信息。 对于该系统,没有必要,可以在此输入任意数据。

规则2:来自走廊中的运动传感器(连接到通道2的传感器)的信号处理

 type=SingleWithSuppress ptype=RegExp pattern=\w+\s+\d+\s+\d+\:\d+\:\d+\s+\w+\s+nooliterx\S+\s+Received\:\s+status\s+\d+,\s+channel\s+(2),\s+command\s+25.* desc=Motion sensor lobby $1 triggered action=shellcmd (/usr/local/smarthome/security/send_photo_alert.sh $1); event %s window=60 

此处,所有内容均与规则1相似。仅应注意,将从正则表达式获得的数字“ 2”传递给脚本。

规则3:来自与通道1相关的开关按钮的信号处理

 type=single ptype=regexp pattern=\w+\s+\d+\s+\d+\:\d+\:\d+\s+\w+\s+nooliterx\S+\s+Received\:\s+status\s+\d+,\s+channel\s+(1),\s+command\s+4.* desc=switch guard mode online action=shellcmd (/bin/echo "online" > /usr/local/smarthome/security/status) 

该规则甚至更简单-它针对与“ pattern”参数中指定的正则表达式匹配的每个事件触发。 作为操作,它将写入系统状态文件。 该文件由规则1和2启动的脚本分析,如果状态为“在线”,则触发脚本;如果值为“离线”,则脚本不起作用。 关于此的更多内容。

规则4:来自与通道4相关的开关按钮的信号处理

 type=single ptype=regexp pattern=\w+\s+\d+\s+\d+\:\d+\:\d+\s+\w+\s+nooliterx\S+\s+Received\:\s+status\s+\d+,\s+channel\s+(4),\s+command\s+4.* desc=switch guard mode offline action=shellcmd (/bin/echo "offline" > /usr/local/smarthome/security/status) 

一切都类似于规则3,只是状态设置为“离线”。

一个脚本,可以从相机拍摄照片并发送电子邮件


由规则1和2启动的脚本在状态文件中检查系统的状态,并根据其值(“联机”或“脱机”)执行或不执行以下操作:

  • 从前庭的IP摄像机接收照片,如果前庭有传感器,则发送电子邮件;
  • 在走廊中有传感器的情况下发送警报消息。

以下是脚本的主体。 它在其输入端(从SEC)接收传感器所连接的通道号,并根据该编号和系统状态执行某些操作。

 #!/bin/sh dir="/usr/local/smarthome/security" MAIL=$dir/mail.letter stat_file="$dir/status" dt=`date` if [ "$1" -eq 2 ] then if grep "online" $stat_file then cd $dir rm -f $dir/snapshot.cgi wget http://<IP  >/snapshot.cgi --user=<username> --password=<password> mpack -s "Someone at the door at $dt" $dir/snapshot.cgi d.shulinin@gmail.com fi elif [ "$1" -eq 3 ] then if grep "online" $stat_file then printf "Subject: Motion in the lobby spotted at $dt\n" > $MAIL /usr/sbin/ssmtp email@gmail.com < $MAIL fi else echo "no legitimate input detected" fi 

要从我的IP摄像机获取照片,我使用wget和这样的一行:

 wget http://<IP  >/snapshot.cgi --user=<username> --password=<password> 

对于其他IP摄像机,您可能需要寻找其他选项,没有单一的解决方案。 正如他们所说,将RTFM传输到相机。

Web界面中打开和关闭系统的按钮。 为了启用和禁用安全模式,我还向自己的Web界面添加了两个按钮,用于控制智能家居的光源。

它们看起来如下:

 <?php if (isset($_POST['button9_on'])) { exec('/bin/echo "online" > /usr/local/smarthome/security/status'); } ?> <?php if (isset($_POST['button9_off'])) { exec('/bin/echo "offline" > /usr/local/smarthome/security/status'); } ?> <p><h2>Guard mode</h2></p> <form method="post"> <p> <button name="button9_on">ON</button> <button name="button9_off">OFF</button> </p> 

一切都很简单-单击“ ON”按钮时,将“ online”写入状态文件,单击“ OFF”-“ offline”。

5.结论


结果,我得到了一个系统,该系统在启动时会为走近门的人拍照并通过电子邮件发送照片。 如果公寓内部有动静,它只是通过电子邮件发送警报。

样本电子邮件看起来像这样(见图3)。 当然,当您用鼠标单击图像时,图像本身会更大并会扩大。


图3-带有照片的电子邮件示例

可以通过按下开关上的按钮以及通过智能家居控制系统的Web界面中的按钮来激活和停用该系统。

在短期内,我还想在Web界面中显示系统的当前状态(活动/不活动)。

Source: https://habr.com/ru/post/zh-CN401909/


All Articles