本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于 Alexa 的智能家居监控

发布时间:2021-12-20
分享到:

基于 Alexa 的智能家居监控

发布时间:2021-12-20
分享到:

有了这个设备,无论您身在何处,都可以控制您的家用设备并获得有关家的警报!

介绍:
在当今世界,人们花更多的时间在工作场所而不是家中。因此,需要家庭监控系统,人们可以在工作时了解房屋的状况。如果能在工作时间就问“某人”关于他们家的事,那就更好了。这可以通过使用亚马逊 Alexa 作为助手来实现,它可以为用户提供有关他们家的需求信息。

不仅是工作场所,用户只要有互联网连接和亚马逊 Alexa 设备,就可以了解世界任何地方的房屋状况。

本项目实现了以下功能:

1)控制风扇和灯等家用设备

2) 告诉设备的状态

3)告诉房子的天气状况(温度和湿度)

4) 需要时通过 Gmail 将房屋内部的快照发送给用户。

5) 在以下情况下发送通知 -

入侵者(发送照片)

客人(发送照片)

项目涉及的步骤:

第 1 步:对 Arduino 和 ESP8266 进行编程

打开 Arduino IDE 并转到文件-> 首选项-> 附加板管理器 URL 类型 - http://arduino.esp8266.com/stable/package_esp8266com_index.json

进入工具 -> 板 -> 板管理器 -> 并安装最后找到的 esp8266 包。

要对 arduino 进行编程,只需将 USB 电缆从arduino插入计算机,然后在工具-> 板中选择 Arduino/Genuino UNO。还要确保您在工具中选择了正确的 COM 端口(可以在设备管理器中找到 COM 端口号)。编写所需的程序,编译它,如果没有错误点击上传。

对 ESP8266进行编程,如图所示进行连接

将 USB 从 arduino 连接到计算机。在工具-> 开发板-> 选择 Generic ESP8266 并选择正确的 COM 端口。编写所需的程序,编译它,如果没有错误点击上传。确保将 Arduino RST 连接到 GND(arduino 就像一个程序员到 ESP8266)。

在这个项目中,首先对 ESP8266 进行编程,然后移除电路连接。然后重新连接电路,如名为“电路连接”的图所示。然后对arduino进行编程

第 2 步:配置 thingspeak.com
在thingspeak.com 中创建一个帐户。

我们利用thingspeak中的通道来存储设备控制信息并将其路由到arduino/alexa。我们还将温度和湿度值存储在通道中。它就像信息的存储位置。

转到频道--> 我的频道并创建新频道。为您的频道提供名称和说明。

在我们的项目中,我们需要 8 个通道(您可以使用更少的通道来完成这项工作,但在编程时会有点复杂)。此外,thingpeak 在更新频道时有时间限制。特定频道的连续更新之间必须有 10-15 秒的间隔。

下面给出了八个通道及其值和含义

通道名称(value1-meaning、value2-meaning 等):

1) 设备控制 (0 -lightON, 1- lightOff, 2- fan ON, 3- Fan Off)

2)灯状态(0-灯灭,1-灯亮)

3)风扇状态(0-风扇关闭,1-风扇开启)

4)湿度(湿度值)

5)温度(温度值)

6)入侵者通知(1-入侵者警报)

7)火灾通知(1-火灾警报)

8)客人通知(1-客人提醒)

当您单击任何频道时,您可以看到其频道 ID 并在 API 密钥选项卡中写入 API 密钥。需要频道 ID 才能获取频道中的信息/值。并且需要写入密钥才能在通道中存储值。

更新频道 http 请求:

https://api.thingspeak.com/update?api_key=<写入密钥>&field1=<值>

<write key> 替换为通道对应的write key,值可以是(设备控制或温湿度值时为0/1)

从通道读取值 http 请求:

https://api.thingspeak.com/channels/<channel id>/field/field1/last.html

<channel id> 被我们想要读取的通道的特定通道 id 替换。

第 3 步:程序
该计划分为3部分:

A) Arduino程序:arduino 程序非常简单。它串行接收来自 ESP8266 的数据,并根据接收到的数据控制设备。在程序本身的注释中可以找到有关该程序的更多信息。

B) ESP8266的程序:ESP8266的程序包括 3 件事

1)使用http请求更新温度和湿度

<write key> 被分别在thingspeak 通道中找到的湿度和温度对应的写入键替换。和主机是api.thingspeak.com 。

从以下位置下载 dht 库:https : //github.com/adafruit/DHT-sensor-library

2)根据得到的值从thingpeak和控制设备的相应通道中读取:

其中 <channel id> 替换为在 thingspeak 中找到的相应频道 id。

3) 高温情况下通过推箱发送警报

其中 <your dev id> 被 pushbox 中的设备 id 替换。

第 4 步:配置 linkit smart 7688 duo 和网络摄像头
在这个项目中,网络摄像头和 linkit smart 7688 duo 用于捕获所需的照片并将其发送给用户。您还可以使用 arduino 摄像头模块并将其与 arduino 连接或使用可以使用任何 IP 摄像头。

按住 linkit smart 7688 上的 wifi 按钮 20 秒以重置电路板。然后在重置 wifi 设置后,您将能够在无线网络连接中看到其接入点名称。现在将计算机连接到该网络。

连接后打开浏览器并在地址栏中输入192.168.100.1 。您将能够看到它的门户。

设置密码以登录其门户。

登录后,转到网络选项卡并选择站模式(我们需要它(linkit smart 7688 duo)来访问互联网)并将其连接到您的 Wifi 网络,然后按配置并重新启动。

板子重新启动后,它会被分配一个本地 IP 地址。使用任何 IP 工具或路由器门户找出地址。就我而言,它是 192.168.1.4。

现在在浏览器的地址栏中输入本地 IP 地址。确保计算机与 linkit smart 连接到同一网络。您将被要求再次登录。

要启用来自网络摄像头的流媒体,您应该启用 MJPG 流媒体(mjpg-streamer 是一种命令行应用程序,可将 JPEG 帧从一个或多个输入插件复制到多个输出插件)。要在门户中执行此操作,请转到右上角的 OpenWrt 位置。您需要重新登录。

登录后,转到服务选项卡并选中启用 MJPG 流媒体并为此服务分配端口号。我已经分配了 4440。单击保存并应用。

设置完成后,您可以通过 OTG 电缆将网络摄像头连接到 linkit smart 7688 duo usb 主机。

现在要查看流,请打开浏览器并在地址栏中键入 <本地 IP 地址>:<端口>。就我而言,它是192.168.1.4:4400

要拍摄快照,请键入命令 <local IP>:<port>?action=snapshot

现在这个图像在本地可用,但我们需要使其可用于推送框服务。为此,我们需要进行端口转发。端口转发可以在路由器门户中完成。不同路由器的进程id不同。只是谷歌知道如何为特定路由器端口转发。它通常在 NAT 服务下可用。

端口转发后,使用可以从您的外部 IP 访问此端口(即 .. 4440)。可以通过在 google 中绑定“whats my ip”来找到外部 IP。

你需要把这个地址 ie.. http://<external IP>:<port>?action=snapshot 放在 pushbox 中(这在下一步中解释),以便pushbox 可以访问这个图像并将它附加到邮件和需要时发送给您。

您还可以将图像存储在 sd 卡中,因为 Linkit smart 7688 duo 还带有一个用于存储信息的 sd 卡插槽。

第 5 步:配置 PushingBox
pushbox 用于将有关项目中不同警报的通知发送到 gmail。

使用谷歌账户登录pushbox:https ://www.pushingbox.com/

转到我的服务--> 添加服务。有许多服务可供选择,例如 Gmail、推特、Android 推送通知等......

选择 Gmail(因为我们需要将照片作为附件发送)并填写相应的 Gmail 名称配置和必须向其发送警报的用户的 Gmail id。

转到我的场景并创建一个新场景。为场景命名(例如:ALERT)添加先前创建的服务。

写下合适的邮件主题和正文并输入网址以获取网络摄像头的屏幕截图以附加照片。为不同的警报创建不同的场景。

用于执行推箱子场景的 api 是:http://api.pushingbox.com/pushingbox?devid=<device id>

第 6 步:使用 Backendless 创建 Alexa Skill
backendless 用于创建 alexa 技能。它是一个简单的拖放编程,用于创建可通过后端 API 访问的 alexa 技能(或任何程序)。

在 backendless 中创建一个帐户:https ://backendless.com/

在后端帐户中登录您的帐户。单击创建应用程序并为您的应用程序命名/
单击位于左侧图标栏中的业务逻辑图标。您将看到 API 服务屏幕。
单击“+”图标以创建新服务。确保在“新服务”弹出窗口中选择 CODELESS。输入“AlexaService”作为服务名称。单击“保存”按钮:
Backendless 创建 API 服务,并会提示您为该服务创建一个方法。这将是处理来自 Alexa 请求的方法。为方法名称输入“handleRequest”。确保为 REST 操作选择 POST,并声明名称为“req”的参数并键入“Any Object”,如下所示:

 

单击位于“功能”一词旁边紫色块中的齿轮图标。通过拖动输入块来添加两个参数,如下图所示。将参数的名称指定为“whatToSay”和“waitForResponse”。请注意,当您添加参数时,上下文块区域会自动填充代表参数值的块:

修改函数的逻辑,使其如下图所示。对于“创建对象”块,使用齿轮图标更改对象属性的名称。不要忘记通过单击“保存”按钮来保存您的工作。

既然已经构建了自定义函数,请切换回 AlexaService 服务的 handleRequest 方法。单击左侧工具栏中的 Custom Functions 类别并拖动 sendAlexaResponse 块以连接您的服务方法的返回连接器:

单击浏览器部分中函数下的“添加新”节点。在创建的函数占位符块中,单击显示“doSomething”的区域并将其更改为“getIntentName”

修改块,使函数看起来像这样:

这将根据示例话语获得意图名称。回到浏览器部分的api services-><app name>-->handle request。变量和逻辑是从系统部分创建的。创建以下变量:

接下来我们将意图名称存储到请求变量中。然后与意图进行比较。例如,如果请求是“介绍”,则响应变量设置为“嗨!我可以控制.......”并且这个响应最终被 alexa 大声朗读。

修改块如下图:

如果请求是 LightsOn 意图,那么我们使用 http get 请求将 thingspeak 通道更新为“0”,同时我们更新设备状态(1/0 取决于开/关)。LightsOff、FanOn 和 FanOff 重复同样的事情。

对于天气,我们从温度和湿度通道读取并将结果存储在响应变量中。由于通道只提供值,我们附加文本以使响应有意义:

对于客厅的快照,我们运行 pushbox 场景:

对于设备状态,我们从 thingspeak 的状态通道中读取信息:

对于我们从警报通道(火、入侵者和访客)中读取的通知和警报:

根据我们从通知字段获得的值,相应的警报消息存储在 respond0 变量中。如果没有通知,则不会存储通知消息。

一旦通知被读出,通知通道中的“0”就会更新,这样 alexa 就不会再次读取相同的通知。然后最后根据请求,将 response0/respond 变量读出。

PS:在backendless中创建好需要的模型后,点击codeless界面右上角的deploy model进行模型部署。

第 7 步:在 Amazon Developer Console 中配置 Alexa 技能:
转到亚马逊开发者控制台并使用亚马逊帐户登录。

转到开发人员控制台并单击 ALEXA 选项卡。点击alexa技能包上手。

创建自定义技能类型,为技能指定名称和调用名称。

下面的代码给出了各自的意图和示例话语。

{
 "languageModel": {
   "intents": [
     {
       "name": "AMAZON.CancelIntent",
       "samples": []
     },
     {
       "name": "AMAZON.HelpIntent",
       "samples": []
     },
     {
       "name": "AMAZON.StopIntent",
       "samples": []
     },
     {
       "name": "Camera",
       "samples": [
         "please send a snapshot of my living room",
         "please send a snapshot of my home",
         "please send a photo of my living room",
         "please send a photo of my home"
       ],
       "slots": []
     },
     {
       "name": "FanOff",
       "samples": [
         "turn off Fan",
         "switch off Fan",
         "turn off the Fan",
         "switch off the Fan"
       ],
       "slots": []
     },
     {
       "name": "FanOn",
       "samples": [
         "turn on Fan",
         "switch on Fan",
         "turn on the Fan",
         "switch on the Fan"
       ],
       "slots": []
     },
     {
       "name": "Introduction",
       "samples": [
         "what you can do",
         "what can you do",
         "what can you do for me"
       ],
       "slots": []
     },
     {
       "name": "LightsOff",
       "samples": [
         "turn off lights",
         "switch off lights",
         "turn off the lights",
         "switch off the lights"
       ],
       "slots": []
     },
     {
       "name": "LightsOn",
       "samples": [
         "turn on lights",
         "switch on lights",
         "turn on the lights",
         "switch on the lights"
       ],
       "slots": []
     },
     {
       "name": "Notification",
       "samples": [
         "what are my notifications",
         "is there any notifications",
         "is there any updates",
         "read out my notifications"
       ],
       "slots": []
     },
     {
       "name": "Status",
       "samples": [
         "what is my device status",
         "what is the status of my devices"
       ],
       "slots": []
     },
     {
       "name": "Weather",
       "samples": [
         "what is the weather condition of my home",
         "what is the weather of my home",
         "what is the weather",
         "what is the temperature of my home",
         "what is the temperature"
       ],
       "slots": []
     }
   ],
   "invocationName": "my home"
 }

}

在配置选项卡中,选择 HTTPS 作为服务端点类型,使用来自 backendless 的 API URL 填充默认 URL。

为 SSL 证书中的默认端点选择证书中的第二个选项。您还可以使用测试模拟器测试技能。

测试完成后,您可以使用所需的发布信息发布技能。

第 8 步:最终设​​置和完成!
进行电路连接,如下图所示

有时ESP8266会因为电流不足而出现故障。所以,虽然不提到在该电路中,它是推荐的功率从ESP8266分开3.3V源。如果您正在使用一个功率银行务必从5V使用一个3.3V稳压器降低电压为3.3V。

将程序上传到 ESP8266 和 arduino。

如果您对此项目有任何想法、意见或问题,请在下方留言。

原文链接丨以上内容来源网络,如涉及侵权可联系删除。

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论