基于物聯(lián)網(wǎng)的多重警報(bào)!智能門(mén)鎖安全系統(tǒng)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
通過(guò)指示谷歌助理,我們控制我們的門(mén)鎖安全系統(tǒng)。如果門(mén)鎖是活躍的,它將發(fā)送警報(bào),如果違反檢測(cè)。
房子里的安全很重要。本課題提出了一種智能門(mén)鎖安全系統(tǒng)的原型,可用于提高門(mén)的安全性。此外,使用鑰匙的傳統(tǒng)方法門(mén)可以很容易地被未經(jīng)授權(quán)的人或竊賊打開(kāi),如果他們有正確的鑰匙。這樣他們就能偷走房子里所有值錢(qián)的東西。
該項(xiàng)目的核心思想是實(shí)現(xiàn)一個(gè)基于智能多報(bào)警的智能物聯(lián)網(wǎng)門(mén)鎖安全系統(tǒng),盡可能減少用戶交互。因此,在這個(gè)項(xiàng)目中,我們將建立我們自己的安全系統(tǒng),可以檢測(cè)門(mén)/窗是否被打開(kāi)。警報(bào)可以通過(guò)谷歌助手的語(yǔ)音命令激活或關(guān)閉,當(dāng)檢測(cè)到入侵時(shí),它還會(huì)發(fā)送一封郵件以及電報(bào)頻道的消息給你和你的親戚警告他們。很酷的是,整個(gè)系統(tǒng)都在云端運(yùn)行,所以可以在世界任何地方進(jìn)行控制。
基于物聯(lián)網(wǎng)的項(xiàng)目可以引導(dǎo)我們進(jìn)行另一場(chǎng)關(guān)于自動(dòng)化鎖定安全系統(tǒng)的革命。安全可以通過(guò)普通的保安來(lái)實(shí)現(xiàn),但數(shù)字化比其他任何保安都更有效。它的非凡之處是,通過(guò)一點(diǎn)點(diǎn)利用物聯(lián)網(wǎng)和云計(jì)算,讓你的家、工業(yè)、學(xué)校、學(xué)院、服務(wù)器機(jī)房等變得智能化、智能化,從而節(jié)省時(shí)間、節(jié)省人力,達(dá)到事倍功倍的效果。這一安全系統(tǒng)將為所有主要關(guān)注安全問(wèn)題的地方提供幫助。
工作原理
基于物聯(lián)網(wǎng)門(mén)鎖的系統(tǒng)采用了Bolt開(kāi)發(fā)板,該開(kāi)發(fā)板基于樂(lè)鑫半導(dǎo)體著名的ESP8266 Wi-Fi模塊。但是這里它有自己的Bolt固件在里面運(yùn)行,這有助于我們通過(guò)螺栓提供的API訪問(wèn)GPIO引腳(數(shù)字讀/寫(xiě),模擬讀,PWM寫(xiě))等。
在我們的硬件,我們將有一個(gè)霍爾效應(yīng)傳感器和磁鐵安裝到門(mén)。當(dāng)門(mén)打開(kāi)時(shí),磁鐵遠(yuǎn)離大廳傳感器,傳感器將檢測(cè)到它,這可以通過(guò)API調(diào)用讀取,我們可以觸發(fā)蜂鳴器,并通過(guò)男性和電報(bào)向用戶發(fā)出警報(bào)。要激活警報(bào),只需對(duì)IFTTT中設(shè)置的谷歌助手說(shuō)命令(激活安全警報(bào))。一旦激活,橙色燈將開(kāi)始發(fā)光,指示狀態(tài)?,F(xiàn)在,每當(dāng)門(mén)被打開(kāi)時(shí),警報(bào)就會(huì)響起蜂鳴器的聲音,也會(huì)有一封郵件發(fā)送到你的Gmail收件箱,以及電報(bào)頻道上的消息,以及違規(guī)的日期和時(shí)間。
創(chuàng)建項(xiàng)目的步驟:-
設(shè)置Bolt IoT模塊
在我們開(kāi)始之前我們得先安裝好波特的硬件。這很容易做到,只要在你的手機(jī)上安裝螺栓應(yīng)用程序并輸入你的Wi-Fi憑據(jù),這樣你的螺栓就可以連接到你的Wi-Fi,從而連接到互聯(lián)網(wǎng)。然后你可以訪問(wèn)云頁(yè)面,從那里獲得你的設(shè)備ID和API密鑰,一切都好了。您可以訪問(wèn)BoltIOT文檔以了解更多有關(guān)它的信息。
使用Bolt IoT硬件的GPIO引腳
正如我之前所說(shuō),Bolt硬件的所有GPIO引腳都連接到云,并且只能通過(guò)API來(lái)控制(讀/寫(xiě))。API的詳細(xì)信息可以在我之前分享的文檔中找到。我們來(lái)舉個(gè)例子。讀取引腳狀態(tài)的API在文檔中解釋如下
這里,我們感興趣的是API URL
這里的API密鑰是44b2de6b-7e68-40e7-a27f-814b58afe008,設(shè)備ID是BOLT13819450。但這是一個(gè)示例鍵和ID,在你的設(shè)備上是不一樣的。你必須訪問(wèn)cloud.boltiot.com來(lái)獲取你的設(shè)備的設(shè)備ID和API密鑰。下面的快照可以幫助你做到這一點(diǎn)。
一旦獲得API密鑰和設(shè)備ID,您只需將默認(rèn)值替換為您的值并在瀏覽器中加載URL。您的瀏覽器將返回pin的狀態(tài)
如果值是1,那么它是高的,如果是0,那么它是低的。同樣,您可以嘗試所有命令的API鏈接,如數(shù)字讀取,寫(xiě)入,模擬寫(xiě)入,PWM甚至串行通信。一旦你完成了它,讓我們繼續(xù)這個(gè)項(xiàng)目的實(shí)際程序。
準(zhǔn)備Python環(huán)境
正如我之前所說(shuō),bolt可以用JavaScript、HTML或Python編程。在這里,我們將只關(guān)注如何用python實(shí)現(xiàn)它。我們必須在應(yīng)該已經(jīng)安裝了python的計(jì)算機(jī)上編寫(xiě)python腳本。如果您是新手,我建議您閱讀這篇文章,了解如何安裝python并開(kāi)始使用它。除此之外,我們還需要安裝兩個(gè)庫(kù)包,以便我們的程序工作。您可以使用pip install選項(xiàng)將包添加到python中,在python目錄下的終端上運(yùn)行以下命令來(lái)安裝包。打開(kāi)windows終端并導(dǎo)航到python目錄(主要在C:// python 3中)
步驟1:-安裝pip如果你沒(méi)有安裝之前。用下面的命令安裝它
步驟2:-在C://Python/Scripts目錄下安裝請(qǐng)求包
步驟3:—使用以下命令安裝boltiot包
一旦安裝成功完成,你的界面應(yīng)該如下所示
現(xiàn)在我們已經(jīng)打開(kāi)了Python IDLE,并開(kāi)始為我們的安全系統(tǒng)編寫(xiě)實(shí)際的程序。但在此之前,通過(guò)谷歌助手激活或取消激活警報(bào),并向我們的電報(bào)頻道發(fā)送電子郵件和發(fā)送消息,我們使用IFTTT提供的谷歌助手服務(wù)和Web hooks服務(wù)。現(xiàn)在我們來(lái)設(shè)置它們。如果您是使用IFTTT小程序的新手,那么建議您在繼續(xù)之前閱讀本文。
通過(guò)谷歌助手激活和取消激活告警
我們必須為此創(chuàng)建兩個(gè)小程序(食譜),一個(gè)是激活警報(bào),另一個(gè)是取消激活警報(bào)。當(dāng)報(bào)警激活時(shí),接在引腳3上的電容應(yīng)充電,當(dāng)報(bào)警解除時(shí),接在引腳4上的電容應(yīng)充電。
applet為該服務(wù)使用谷歌助手,web鉤子獲取該服務(wù)的請(qǐng)求。下面的屏幕截圖顯示了如何通過(guò)谷歌助手將小程序設(shè)置為激活警報(bào)時(shí)使3腳高,取消警報(bào)時(shí)使4腳高。
電容器的用途是什么?
電容器1和2用作存儲(chǔ)元件。當(dāng)板從IFTTT接收命令時(shí),引腳3和4將作為輸出引腳。根據(jù)該命令,電路板將對(duì)電容器1或電容器2充電。
現(xiàn)在,當(dāng)IFTTT操作完成時(shí),Python代碼使引腳3和4作為輸入引腳,通過(guò)讀取這些引腳的狀態(tài),Python代碼將了解它是否應(yīng)該根據(jù)哪個(gè)電容有電荷激活或停用警報(bào)。簡(jiǎn)單地說(shuō),這是一個(gè)將IFTTT與Python連接起來(lái)的小技巧。如果博爾特平臺(tái)提供了一個(gè)虛擬鉆頭,那就容易多了,但他說(shuō),這不是一個(gè)選擇。
當(dāng)檢測(cè)到入侵者時(shí)發(fā)送電子郵件
第三個(gè)applet將在檢測(cè)到入侵者時(shí)發(fā)送電子郵件。這可以通過(guò)在IFTTT上使用web hook和Gmail服務(wù)來(lái)實(shí)現(xiàn)。Webhooks服務(wù)會(huì)給我們一個(gè)URL,這個(gè)URL在加載時(shí)將觸發(fā)預(yù)定義的Email。applet的快照如下所示。您可以自定義接收方ID和文本。如果檢測(cè)到入侵者,該URL將在python腳本中使用請(qǐng)求庫(kù)觸發(fā)。
當(dāng)檢測(cè)到入侵者時(shí),向電報(bào)頻道發(fā)送警報(bào)。
1. 我們將利用電報(bào)頻道在發(fā)現(xiàn)入侵者時(shí)廣播警報(bào)。
2. 首先,在telegram中創(chuàng)建一個(gè)新通道,并提供合適的名稱和描述,如下所示。
3. 在下一個(gè)屏幕中,將頻道設(shè)置為Public,并根據(jù)您的意愿輸入頻道永久鏈接。保存此通道鏈接為“telegram_chat_id”,其中下圖為“smart_door_lock_alarm”。
4. 現(xiàn)在讓我們?yōu)槲覀兊念l道創(chuàng)建一個(gè)機(jī)器人。聊天機(jī)器人是運(yùn)行在電報(bào)內(nèi)部的第三方應(yīng)用程序,我們將使用這個(gè)聊天機(jī)器人向我們的頻道發(fā)送警報(bào)。
5. 在telegram的主界面,點(diǎn)擊右上角的搜索圖標(biāo),搜索botfather。
6. 在搜索結(jié)果中,選擇旁邊有藍(lán)色勾號(hào)的botfather。
7. 聊天顯示了幾個(gè)可能的命令,輸入“/newbot”創(chuàng)建一個(gè)新的機(jī)器人。
8. 給你的機(jī)器人正確的名字和用戶名。
9. 成功創(chuàng)建bot后,它會(huì)生成一個(gè)令牌。此令牌用于通過(guò)python發(fā)送和接收消息。
10. 請(qǐng)將此筆記保存為“telegram_bot_id”,其中保存為“bot”,后面跟著bot令牌。
11. 現(xiàn)在讓我們將機(jī)器人添加到我們的頻道,轉(zhuǎn)到頻道描述并從3點(diǎn)菜單中選擇添加管理員。從搜索字段中選擇機(jī)器人,并賦予機(jī)器人適當(dāng)?shù)臋?quán)限。
選擇“添加管理員”
12.恭喜你!您已經(jīng)成功創(chuàng)建了一個(gè)通道和一個(gè)聊天機(jī)器人。
Python程序說(shuō)明
這個(gè)物聯(lián)網(wǎng)安全警報(bào)的完整python代碼可以在這個(gè)項(xiàng)目的末尾找到。在本節(jié)中,讓我們將代碼分解成小片段并嘗試?yán)斫馑鼈?。python腳本的總體目標(biāo)是檢查警報(bào)是否激活或取消激活,如果激活,我們必須檢查門(mén)是否打開(kāi),如果打開(kāi),我們必須觸發(fā)電子郵件并打開(kāi)蜂鳴器。
我們已經(jīng)知道,如果我們必須激活安全系統(tǒng),引腳3上的電容將是高的,如果我們必須取消激活安全系統(tǒng),引腳4上的電容將是高的。所以我們只需要在python腳本中讀取它們來(lái)激活或取消激活警報(bào)。
我們通過(guò)導(dǎo)入time、json、requests和boliot庫(kù)來(lái)開(kāi)始程序。其中time庫(kù)默認(rèn)情況下在python中添加,但是您必須像前面討論的那樣手動(dòng)安裝請(qǐng)求和boltiot包,否則您將在這些行上得到錯(cuò)誤。
import time #導(dǎo)入執(zhí)行延遲操作的時(shí)間
#使用請(qǐng)求通過(guò)webhooks IFTTT發(fā)送郵件
通過(guò)API導(dǎo)入boliot來(lái)控制GPIO引腳
導(dǎo)入json #庫(kù)來(lái)處理json數(shù)據(jù)
接下來(lái),我們輸入設(shè)備的憑據(jù),如API密鑰和設(shè)備ID。只有使用這兩個(gè)值,您才能訪問(wèn)設(shè)備上的任何GPIO引腳。不要與公眾分享這些,因?yàn)樗鼈兛梢员蝗魏稳擞脕?lái)控制你的GPIO引腳。
正如在API部分所討論的,當(dāng)我們以字符串的形式執(zhí)行數(shù)字Read時(shí),我們將獲得響應(yīng),因此我將這些字符串值賦給兩個(gè)變量,以便我們可以在程序中輕松地使用它們。
現(xiàn)在我們創(chuàng)建一個(gè)名為send_telegram_message()的函數(shù),它將message作為參數(shù)。
在第一行中,我們正在構(gòu)建URL,以便Telegram知道它必須將消息發(fā)送到哪個(gè)bot。為此需要telegram_bot_id。data變量是一個(gè)字典,它保存聊天ID(通道ID),以便Bot知道它必須將消息發(fā)布到哪個(gè)通道。它還包含要作為消息發(fā)送的文本消息。
在下一步中,我們需要使用前面構(gòu)建的URL向Telegram服務(wù)器發(fā)出HTTP請(qǐng)求。該請(qǐng)求是一個(gè)“POST”請(qǐng)求,其中包含所有相關(guān)數(shù)據(jù),如URL和要包含在請(qǐng)求中的數(shù)據(jù)。
‘ telegram_data = JSON .loads(response.text) ’行將文本響應(yīng)轉(zhuǎn)換為JSON對(duì)象并將其存儲(chǔ)在telegram_data中。請(qǐng)求的狀態(tài)存儲(chǔ)在telegram_data變量的“ok”字段中,我們將返回它?!皁k”字段將始終包含一個(gè)布爾值,即True/False,如果消息已發(fā)送,則為T(mén)rue。
該函數(shù)被封裝在try-except塊中,以便捕獲任何錯(cuò)誤,如果在try塊中存在任何錯(cuò)誤,則返回False。
在無(wú)限while循環(huán)中,我們有另外兩個(gè)循環(huán)。如果從谷歌助手激活告警,將執(zhí)行一個(gè),如果告警被取消激活,將執(zhí)行另一個(gè)。缺省情況下,如果未收到命令,則執(zhí)行去激活循環(huán)。
在這里,必須通過(guò)讀取引腳3來(lái)檢查警報(bào)是否被激活,這只是電容器。如果引腳高,我們使橙色LED發(fā)光,然后退出這個(gè)循環(huán),進(jìn)入激活while循環(huán)。我們每5秒檢查一次,以確保我們沒(méi)有超過(guò)bolt提供的API速率限制,即每分鐘30次調(diào)用。
類(lèi)似地,在激活的while循環(huán)中,我們必須檢查引腳4以知道警報(bào)是否被取消激活。如果停用,我們關(guān)閉橙色循環(huán),回到停用的while循環(huán)。否則我們必須通過(guò)讀取引腳0來(lái)檢查磁鐵是否存在于霍爾傳感器附近。如果引腳高,則意味著磁鐵遠(yuǎn)離傳感器,表明門(mén)已打開(kāi)。所以我們觸發(fā)蜂鳴器,也觸發(fā)郵件和消息到電報(bào)頻道使用請(qǐng)求包。否則我們每五秒監(jiān)測(cè)一次傳感器。執(zhí)行相同操作的代碼如下所示
是時(shí)候測(cè)試設(shè)備了
一旦你準(zhǔn)備好了代碼,我們可以開(kāi)始測(cè)試我們的項(xiàng)目。將板子安裝在門(mén)框上,將磁鐵安裝在門(mén)上。確保磁鐵離霍爾傳感器很近。這個(gè)想法是,當(dāng)門(mén)關(guān)閉時(shí),傳感器應(yīng)該檢測(cè)到磁鐵,當(dāng)門(mén)打開(kāi)時(shí),不應(yīng)該能夠檢測(cè)到磁鐵。
本文編譯自hackster.io