使用MotionEyeOS监控Raspberry Pi 通用输入输出

8

motionEyeOS 是一个很棒的系统,可以用单板计算机创建安全摄像机。这可以包括监视宠物或小偷的系统。它具有许多出色的功能,其中一项功能是能够监视GPIO引脚并在motionEyeOS Web界面内显示信息。

的“monitoring”该功能使您可以定期运行bash脚本并覆盖Web界面上的文本输出。这可用于显示GPIO引脚的状态或其他数据,例如CPU温度,传感器读数等。

我想使用此功能来显示两个车库门的状态。它们具有磁性开关,因此鉴于已经在同一位置设置了Raspberry Pi,因此我决定配置motionEyeOS以显示其状态。门开关将GPIO引脚连接到3.3V。当门打开时,连接断开并且GPIO引脚被Pi拉低’的内部下拉电阻。

车库门电磁开关

的monitoring command feature is described in 的motionEye Wiki。通常,它与motionEyeOS相同,只是您需要使用文件路径。

首先,我们可以创建一个脚本来监视单个GPIO引脚。确保您有一个正常工作的系统,并且可以查看相机’通过motionEyeOS Web界面输出。

第1步– Create Script

使用SSH连接到Pi。 SSH默认是启用的,您应该使用“admin”用户帐户以及您在设置中设置的密码。如果你没有’t更改了默认密码,它将为空白,但我建议您设置一个体面的密码,不要’不要保留默认值!

导航 to 的etc directory :

cd /data/etc/

并创建一个名为“monitor_1” :

nano monitor_1

的“1”指代ID为1的摄像机。如果您有多个摄像机,则可以添加一个单独的摄像机。“monitor_#”每个文件。第二台相机可以使用“monitor_2” etc.

Type or paste 的following :

#!/bin/bash

GPIO=17

test -e /sys/class/gpio/gpio$GPIO || 
  (echo $GPIO > /sys/class/gpio/export \
  && echo in > /sys/class/gpio/gpio$GPIO/direction)

val=$(cat /sys/class/gpio/gpio$GPIO/value)

if [ "$val" == "1" ]; then
 通用输入输出_text="HIGH"
else
 通用输入输出_text="LOW"
fi
echo "$GPIO:$GPIO_text"
echo 1 1>&2

使用CTRL-X,Y和[Enter]退出nano编辑器。

我的BitBucket存储库中也提供了此文件。最好从 的monitor_1 file 在BitBucket上,并避免在此网页上出现潜在的格式问题。

的“test”该命令检查GPIO引脚是否已经配置。如果没有,则运行两个echo命令将引脚设置为输入。通常,这些默认值将与内部下拉电阻绑定为低电平。没有连接时,该值为0 /低。将引脚连接到3.3V会将状态更改为1 /高。

第2步– Make Executable

现在使此脚本可执行:

chmod +x monitor_1

第三步– Test Script

To 测试 that your script runs without error you can type :

sh ./monitor_1

的output should reflect 的text defined in 的echo statements 和 there should be no errors.

步骤4–重新加载Web界面

添加,删除或编辑监视脚本后,需要在浏览器中重新加载Web界面,以使更改生效。单击摄像机图像将在右上方显示图标,在左下方显示GPIO的状态:

motionEyeOS监视器GPIO

Now change 的state of 的switch attached to 通用输入输出 17. You should see 的text change 上 的screen. 的“17:HIGH”文本可以更改为您希望在bash脚本中定义的任何内容。

第5步–添加其他GPIO读数

的bash script can now be modified to read more than 上e 通用输入输出 pin 和 的result can be combined into a single output to be 显示ed 上 的screen. In 的example below 的script checks 通用输入输出 17 和 27. Their states are combined into a single output.

#!/bin/bash

GPIOA=17
GPIOB=27

test -e /sys/class/gpio/gpio$GPIOA || 
  (echo $GPIOA > /sys/class/gpio/export \
   && echo in > /sys/class/gpio/gpio$GPIOA/direction)
test -e /sys/class/gpio/gpio$GPIOB ||
  (echo $GPIOB > /sys/class/gpio/export \
   && echo in > /sys/class/gpio/gpio$GPIOB/direction)

valA=$(cat /sys/class/gpio/gpio$GPIOA/value)
valB=$(cat /sys/class/gpio/gpio$GPIOB/value)

if [ "$valA" == "1" ]; then
    通用输入输出A_text="HIGH"
else
    通用输入输出A_text="LOW"
fi

if [ "$valB" == "1" ]; then
    通用输入输出B_text="HIGH"
else
    通用输入输出B_text="LOW"
fi
echo "$GPIOA:$GPIOA_text  $GPIOB:$GPIOB_text"
echo 1 1>&2

我的BitBucket存储库中也提供了此文件。最好从 的monitor_1_twin file  在BitBucket上,避免在此网页上出现格式问题。

唐’别忘了使其可执行:

chmod +x monitor_1

第6步– Tweak Text

For my final script I adjusted 的text 显示 to be more relevant to my garage door situation. 的script can be seen by following 的BitBucket link to motion_1_doors.

It outputs a line of text showing 的status of each door. D1 is 上 的left 和 D2 上 的right. 的following 屏幕shot was taken from my smartphone 和 now shows 的status of 的two garage doors :

motionEyeOS 监控 上 a Smartphone

我注意到的一件事是,更新文本在我的智能手机上被截断了。我调整了文本元素,避免了这种情况。这就是我用的原因“SHUT” rather than “CLOSED”。在我的手机上,该限制似乎为17个字符,但我怀疑这在其他设备上会有所不同。在台式机浏览器上,我没有’文本被截断没有任何问题。

脚本频率

默认情况下,脚本每秒运行一次。您可以通过调整脚本末尾最后一行中的数字来更改此设置:

echo 5 1>&2

这将通知motionEyeOS在另外5秒钟内不运行脚本。

的only disadvantage I could find with increasing 的delay is that it also increases 的time it takes to 显示 的first reading when you initially click 的camera image.

故障排除

如果没有’工作时请考虑以下几点:

  • Make sure 的file is executable
  • Make sure 的file has no extension
  • 确保它使用了正确的摄像机ID(即Monitor_1用于摄像机#1等)
  • 仔细检查脚本中的语法
  • 如步骤3所示,自行测试脚本
  • 的script should return immediately 和 should not block

注意 : 我用过“\”上面显示的Bash脚本中的字符分隔长行。这纯粹是出于显示目的。如果您看看BitBucket版本的 monitor_1monitor_1_twin 的“test”命令全都在一行上。

最后的想法

您将必须确定此技术是否适合您的目的。它没有做什么’不能提供任何通知或警报。在我的示例中,它显示了门的当前状态,但仅此而已。这有多有用取决于您的期望。但是它’当然是一个有用的功能。

分享。

8条留言

  1. 优秀文章–可能与GPIO事件有关。

    修改起来是否容易,以便在警报中发送电子邮件?正在考虑设置门铃事件监视器。

    • MotionEyeOS内置设置,用于发送有关运动事件的电子邮件。我的相机看到很多正常的运动,所以我没有’不要使用此功能。您还可以获取它以运行自定义脚本,以便触发其他通知(SMS,Pushover等)。

  2. 这对于屏幕上的叠加效果很好,但是可以对图像文本本身执行此操作吗?在完整安装上运行Motion时,您可以使用网络命令(实际上是PUT)更新text_left内容,但是’似乎在motioneyeos中起作用。

  3. I’m不显示任何覆盖文字,即d1高或低
    除了必须使用sudo来运行许多命令外,我将所有内容都跟随在了T之后
    我遵循了您的问题排查指南,并且代码与所发布的内容完全相同
    我确实收到一个错误,说这
    “./monitor_1:6:[:0:意外的运算符”
    但它仍然可以正确输出信息,并且可以高低

    对我可能做错的任何想法?
    谢谢
    任何帮助深表感谢

    • I’我只是在等待新的SD卡到来,但是我要用新的MotionEyeOS映像重建我的车库摄像机。一世’如果发现任何不再有效的内容,请按照本指南进行更新。

发表评论

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