×

通过蜂鸣器、短信和电子邮件通知您房间的灯光

消耗积分:0 | 格式:zip | 大小:0.15 MB | 2022-12-15

刘军

分享资料个

描述

一、简介

我也很欣赏自己的隐私和自己的私人物品!

使用 Bolt IoT 套件和 3rd 方服务(mailgun 和 twilio)通过基于光强度值构建智能物联网项目来维护您自己的隐私。当有人打开/关闭您房间的灯时,Bolt 模块通过 LDR 传感器获取光强度值,当检测到异常(光强度突然增加或减少)时,它会立即发送短信、电子邮件并在Z 分数分析。确保您的 Bolt WiFi 模块已连接到 Bolt Cloud,并且 Bolt 模块上的绿色 LED 指示灯亮起。

如果整个房间很暗,它会记录光强度值,当有人打开灯时,我们会通过短信通知,电子邮件提醒“有人打开灯”,同时它还会发出声音蜂鸣器。

 

2. 说明

在本节中,我们将学习如何构建整个项目。

2.1 硬件连接

将 LDR 传感器的一端连接到 3.3v,另一端连接到“A0”。

将蜂鸣器的一端连接到引脚“0”,另一端连接到 GND。

将电阻(10kohm)的一端连接到“A0”,另一端连接到 GND。

pYYBAGOX9CeATr5XAAGehRsLGYI06.jpeg
 

2.2 配置文件

使用命令 sudo nano conf.py 为这个项目创建一个配置文件

在 conf.py 编辑器中写入这些行,并在写入所有值后按 Ctrl+X 保存文件。

poYBAGOX9DmARroLAAA9l-Oaq74440.png
 
  • 要获取您的API 密钥和设备 ID:

将您的 Bolt Cloud 与 Bolt 设备连接,然后将出现以下屏幕:

poYBAGOX9D2AWVtjAABdBaPn2zk117.jpg
 

连接螺栓设备与螺栓云后,显示设备在线。

poYBAGOX9D-ARd0aAABZxkfip1Q289.png
 

您可以在此处获取您的 API KEY。您现在可以将FRAME_SIZE设置为 10,将MUL_FACTOR设置为 3。完成后,您可以按“CTRL+x”保存配置文件

2.3 设置软件

  • 设置 Twilio 帐户

Twilio 是第三方 SMS 功能提供商。它是一家云通信平台即服务 (PaaS) 公司。Twilio 允许软件开发人员以编程方式拨打和接听电话,还可以使用其 Web 服务 API 发送和接收文本消息。

在 Twilio 上创建一个帐户:

第 1 步:在浏览器中打开https://www.twilio.com/ 。

第2步:点击Get a Free API Key按钮进行注册。

pYYBAGOYutmAXogpAAEkcMYYVzk716.png
 

第 3 步:填写所要求的所有必要详细信息。

第 4 步:转到仪表板并获取您的数据。

poYBAGN0NIKAXV3VAADY2g5yfIE847.png
 

 

pYYBAGN0NIWAYM_4AACfO_tkxv8560.png
 

 

poYBAGOYuuOAGk2ZAAFWUd9jrxE856.jpg
 

 

pYYBAGOYuuaAagZmAAGTx8asobE694.jpg
 

而已。我们已成功在 Twilio 上创建了帐户。现在,我们都准备好使用带有 Bolt Python 库的 Twilio 服务来创建我们自己的 SMS 警报系统。

  • 同样,您可以创建您的 mailgun 帐户以获取电子邮件警报。

第 1 步:在浏览器中打开https://www.mailgun.com/ 。

第二步:点击Sign Up按钮。

第 3 步:在注册表格中填写所有必要的详细信息。确保您取消选中付款选项。下面是填写好的注册表单的截图。

poYBAGOYuumAO_cuAADNLFv8lM8760.png
 

第 4 步:您将收到一封包含链接的验证邮件。单击该链接以验证您的邮件。

poYBAGOYuuyAI1BiAACPn1u-lJ4404.png
 

第 5 步:为了验证他们会要求提供电话号码。在下拉列表中选择印度作为选项,然后输入您的电话号码。

pYYBAGOYuu-AEfv7AABodzPPqmM647.png
 

第6步:验证后,向下滚动到Sandbox Domain部分。点击Add Recipient按钮。

poYBAGOYuvGAK6tOAAA72shtBOQ123.png
 

第七步:点击Invite New Recipient按钮。

pYYBAGOYuvaAbsTwAABKf3G9WP0687.png
 

第 8 步:输入收件人电子邮件 ID。在这种情况下,输入您的电子邮件 ID。

第 9 步:添加电子邮件 ID 后,将生成一个新的沙箱。单击新生成的沙箱的 ID。参考下图相同。

第 10 步:新屏幕将包含您发送电子邮件所需的所有必要凭据。复制所有这些凭据并保存在记事本中。

pYYBAGOYuvqACqX4AAEwzex2YIc768.jpg
 

2.4 Z分数分析

为了检测光强度异常的突然变化,我们使用 Z 分数分析。Z-score 分析是一种用于检测异常的机器学习算法。对于少量数据,我们可以简单地使用图形分析来检测异常,但是在大量数据的情况下,很难绘制图形和检测异常,这就是我们需要使用一些机器算法的原因。

poYBAGN6xyiAHzcvAAAiM086aww357.png
 

在上面的公式中,输入表示为“Vi”,“r”表示帧大小,“C”是乘法因子。首先,我们计算输入值的平均值 (Mn)(对于每个新输入,再次计算平均值)。每个输入值的变化(来自平均值)为 (Vi - Mn)^2。现在 Z 分数 (Zn) 由上述公式计算。界限表示为“Tn”,上限计算为 (Vi + Zn),下限计算为 (Vi - Zn)。

帧大小和倍增因子是使用试错法确定的。

编写代码后,使用sudo python3 'filename'.py 运行代码。代码最初将打印以下行。大约 100 秒后(10 秒延迟,帧大小为 10),系统将开始打印如下图所示的光强值。

poYBAGOYuwGANJHdAAGlLagPJ5g55.jpeg
 

正如我们所看到的,在光强度值突然增加后,我们将收到短信和电子邮件警报,蜂鸣器也会因为异常检测而开始发出声音。

您可以去任何地方更新您的房间,但请确保您的 Bolt WiFi 模块已连接到 Bolt Cloud,并且 Bolt 模块上的绿色 LED 指示灯亮起,这样您就会收到短信/电子邮件提醒。

2.5 代码说明

我在下面编写的代码是检测异常的主要代码:

将螺栓设备连接到螺栓云后,当我们运行代码时,它将首先从“A0”引脚获取传感器值。最初它开始打印光强度值并等到 10 个值,因为在获得足够数量的数据之后可以实施 Z 分数分析,之后它将计算 z 分数、正常和异常读数的上限和下限阈值。接下来是检查传感器值是否在正常值范围内,如果不在范围内,则发送短信、电子邮件并发出蜂鸣声作为警报。正如我们提到的 time.sleep(10) 一样,它将等待 10 秒,然后从开始继续。

3. 接收电子邮件和短信提醒

pYYBAGOYuwOAOyp-AABMVlhrypI51.jpeg
 

电子邮件提醒

poYBAGOYuwWANMvdAAA5FsGZJBg60.jpeg
 

短信提醒

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'通过蜂鸣器、短信和电子邮件通知您房间的灯光',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);