使用Blues無線記事卡發出(無聲)警報:防盜警報和資產恢復。
項目背景
當人們想到資產跟蹤器時,通常他們會考慮跟蹤應該移動的東西:飛機、火車和汽車。我們不經常考慮的是跟蹤固定不易移動的東西:雕像、環境監測設備、淡季存放的房車或船只,以及其他不幸丟失或被盜的貴重物品。
最近在工作中,有人分享了一個關于養蜂人使用跟蹤設備來保護他們的蜂巢的故事(蜂蜜實際上是液體黃金!)并建議Blues的設備將是一個很好的低成本工具蜂巢跟蹤解決方案,這讓我腦子里轉了轉。
Blues的使命是讓物聯網連接變得簡單。您的物聯網設備是否具有穩定的Wi-Fi連接-或者它位于草地某處的蜂箱中。Blues提供低功耗記事卡,通過預付費蜂窩數據連接到安全云(Notehub),并將設備的數據(JSON格式)泵送到云中以便于訪問。
最好的部分是,一旦數據在Notehub云中,它可以再次路由到第三方云平臺、Web應用程序、低代碼儀表板,甚至是像Twilio這樣的消息傳遞平臺。
使用Twilio,我們可以在應該靜止的設備開始移動時發送SMS警報,包括最近已知位置坐標等詳細信息。聽起來對我來說是一個非常完美的解決方案。
今天,我將向您展示如何以低于100美元的價格構建一款防盜設備,該設備將使用蜂窩模塊將其位置數據發送到云端,并在檢測到運動時觸發SMS警報,從而更快地恢復資產。
硬件部件
Blues無線記事卡(蜂窩)×1
Blues無線記事本-A×1
Adafruit鋰離子聚合物電池-3.7v2500mAh×1
USB-A轉Micro-USB數據線×1
軟件應用程序和在線服務
BluesWirelessNotehub.io
SMSMessagingAPI
TwilioSMSMessagingAPI
JSONataExerciser
Webhook.site
組裝防盜裝置
由于我的項目是跟蹤不應該移動但仍在移動的對象(如果您愿意,可以進行反向資產跟蹤),因此在對象移動時可靠的互聯網連接和不移動時的持久電池壽命之類的東西都是重要的考慮因素。
幸運的是,BluesWireless擁有解決這兩個問題的硬件。BluesWirelessNotecard提供預付費全球蜂窩接入,包括500MB數據和10年服務。我選擇的模型適用于LTE-M和NB-IoT協議,并且在空閑時它的功耗極低,僅為約8uA。
除了我的Notecard之外,我還使用了BluesWirelessNotecarrierAL,它是Notecard的配套原型板,帶有板載蜂窩和GPS天線。
我特別選擇了NotecarrierAL版本,因為它具有用于LiPo電池的JST連接器,但也有使用AA電池的版本,并且所有Notecarrier板還具有可為設備供電并提供USB的微型USB連接器記事卡的接口。
這個難題的最后一塊是電源。正如我所提到的,我選擇了NotecarrierAL,它具有用于鋰聚合物電池的JST連接器,所以我買了一個Adafruit鋰離子聚合物電池-3.7v2500mAh來為整個shebang供電。
現在把它們放在一起:將Notecard擰入Notecarrier,將板上的蜂窩和GPS天線和連接器連接到Notecard,然后將LiPo電池插入標有“LiPo”的JST連接器端口。
隨著防盜設備硬件組裝完成,是時候設置我們的云和Twilio配置了。
注意:如果您想了解有關組裝跟蹤器的更詳細說明,請查看我們的開發者體驗網站的入門部分。
為跟蹤器設置一個Notehub項目以向其報告
在使用行軍命令設置Notecard本身之前,我們需要在Notehub.io中創建一個新的云項目來將Notecard的數據定向到。
由于Notecard是一個設備到云的數據泵,它并不存在于公共互聯網上(使其成為一個非常安全的設備),因此需要一個用于同步數據的代理:Notehub。
Notehub是一種瘦云服務,它安全地接受來自蜂窩Notecard的數據(通過公共Internet,使用私有VPN隧道),然后立即將數據路由到您選擇的云提供商(無論是AWS、Azure、GoogleCloud或任何物聯網優化服務,如Ubidots、Datacake、Losant等)。
1.如果您還沒有,請立即使用Notehub創建一個帳戶。每月前5,000個路由事件是免費的(路由事件=從Notehub到您選擇的云端點的數據傳輸)。這應該遠遠超過此防盜設備所需的(希望如此)。
2.注冊完成后,點擊Notehub界面右上方的“創建項目”按鈕,填寫項目詳情。
創建新項目后復制項目UID-我們在配置Notecarrier本身時需要它。
創建一個免費的TwilioStarter帳戶
您需要設置的另一件事是使用Twilio的免費入門帳戶,因為它是Twilio的API,我們將利用它來發送SMS警報。
當我設置我的測試帳戶時,我遵循了BluesTwilio文檔,我建議從那里開始。
注意:如果您單擊文檔“先決條件”部分中的Twilio鏈接,您將通過BluesWireless推薦鏈接獲得一些額外的Twilio入門積分。
設置您的帳戶后,請確保驗證來電顯示(可能是您自己的手機號碼用于測試目的)并為您的帳戶分配一個Twilio電話號碼(這是稍后將發送SMS通知的號碼)。
以下是我如何從儀表板中得知我的帳戶有一個與之關聯的Twilio電話號碼。
現在讓我們設置我們的記事卡。在Notecard記錄運動數據后,我們將重新連接Notehub和Twilio。
對資產跟蹤記事卡進行編程
如果您之前沒有配置過記事卡,不用擔心,Blues旨在通過簡單的JSON命令使這種體驗變得簡單。
雖然您可以將完整的NotecardCLI下載到本地計算機以與Notecard交互,但我傾向于使用我們的開發人員體驗站點中內置的基于Web的NotecardCLI。在我看來這更容易。
您只需要一根微型USB到USB-A轉換器電纜,即可將其插入筆記本電腦并開始與您的記事卡進行交互。
連接到記事卡后,向其發出以下命令集。
1. 恢復出廠設置您的記事卡。
從頭開始一個新項目總是好的。
{"req":"card.restore","delete":true} |
2. 將tracker附加到Notehub項目,設置其模式和同步時間
{ "req":"hub.set", "product":"com.blues.paige:anti_theft_tracker", "mode":"periodic", "outbound":1440, "inbound":1440 } |
該設置只會每?? 1440 分鐘(每天一次)periodic將任何未同步的信息發送到 Notehub,并且它也將始終每隔 1440 分鐘同步一次,以便處理來自 Notehub 的任何新筆記和環境變量。outboundinbound
由于我們對更改環境變量或常規記事卡活動的方式沒有太多期望,因此同步之間的長間隔是可以的。這也將有助于保持電池壽命,因為該跟蹤器將經歷的最耗電的活動是獲取 GPS 位置并將該數據傳輸到 Notehub。
3.設置Notecard的位置檢測模式和頻率
{"req":"card.location.mode","mode":"periodic","seconds":60} |
在periodic模式下,只有 Notecard 通過其板載加速度計檢測到運動時,Notecard 的 GPS 模塊才會激活以獲取讀數。告訴記事卡每 60 秒獲取一次新的 GPS 讀數比超過 5 分鐘的時間間隔更消耗電池電量,但如果有東西被盜,我更愿意更頻繁地提醒它當前的下落。
4.開始追蹤,每天設置一次簽到心跳,新筆記第一時間同步到Notehub
{ "req":"card.location.track", "start":true, "heartbeat":true, "hours":24, "sync": true } |
card.location.track將在創建后立即發送到 Notehub 的 Notefile 中存儲位置標記的跟蹤數據,例如速度、方位和距離 - 這就是"sync" true該行末尾的命令所做的。一旦在記事卡上創建了新事件,它就會直接將其發送到 Notehub,無需等到下一個定期安排的outbound時間間隔。
同樣,這更耗電,但對于這種類型的跟蹤器,我們希望事件盡可能接近實時,以增加資產恢復的機會。
默認文件是_track.qo,但您可以使用該file字段指定您自己的文件名。
heartbeat和告訴記事本hours以定義的時間間隔創建一個條目,而不管運動如何。這只是對 Notecard 仍在工作的直覺檢查。
注意:如果您想了解有關配置資產跟蹤器的更多信息,請在Blues 開發者體驗網站上查看有關它們的所有信息。
在 Notehub 中生成一些測試跟蹤事件
現在帶著 Notecard 在散步或開車時查看它生成并發送到 Notehub 的數據類型。
在 Notehub 項目中,單擊“事件”選項卡,然后在輸入的過濾器中_track.qo查看您的 Notecard 應該生成的跟蹤事件列表。
如您仔細查看圖像所見,我的記事本報告了心跳(無運動)數據和運動檢測數據的混合。
但是,在其中放置一個圖釘,我們將找到一種方法來對這些數據進行分類并防止向Twilio發送誤報。
通過Twilio發送帶有位置數據的運動警報
行!現在是開始將其中一些_track.qo事件發送到Twilio的時候了。
這可能是項目中花費我時間最長的部分,主要是因為我熟悉了JSONata語法——但我已經超越了自己。
讓我們逐步完成這一部分。
注意:如果您想跳過JSONata解釋,直接進入步驟2B-這是這個JSONata函數的最終版本。
1.在Notehub中新建一條Twilio路由尋找_track.qo文件
BluesWireless開發者體驗網站上的Twilio入門指南做得非常棒,準確地展示了如何設置從Notehub到Twilio的新路線,請按照它直到第八步,其中選定的筆記文件被定義為被標記twilio.qo-我們不會,相反,我們的項目將尋找_track.qo像我的屏幕截圖中的文件。
2. 將此 JSONata 代碼粘貼到Twilio 路由的轉換數據部分中
如果您閱讀了 Twilio 入門指南的大部分說明,您可能已經了解了通過 JSONata 轉換原始 Notecard 有效負載的部分,然后再將其發送到 Twilio。
JSONata ,如果你不熟悉它(我以前不熟悉),它是一種用于 JSON 數據的輕量級查詢和轉換語言。語法需要一些時間來適應,但一旦它起作用,它就非常酷了。
我學到的關于 Notehub 的另一件事是,任何 notefile 有效負載都可以通過 JSONata 轉換函數運行,以刪除我們不關心的大部分 JSON,只將重要的位路由到下一個綁定信息的地方( Twilio,在我們的例子中)。
所以這里是 JSONata 的第 1 版,要粘貼到 Notehub 中的轉換數據部分:
( $from := "+190354XXXX"; $to := "+1404641XXXX"; $body := function(){ ( $join([ "Alert! ", sn ? sn : device, " is on the move!", " Last spotted at: ", $string($round(where_lat, 6)), ",", $string($round(where_lon, 6)), " around ", $fromMillis(when * 1000, "[M01]/[D01]/[Y0001] [h#1]:[m01][P]", "-0500"), " EST." ]) ) }; "&Body=" & $body() & "&From=" & $from & "&To=" & $to & "&"; ) |
在這個表達式中,我們定義了三個變量:
$from - Twilio 電話號碼,
$to- 測試電話號碼(可能是您的電話號碼),
和- 一個 JSONata 函數,用于將字符串連接在一起,讓我們知道哪個 Notecard 正在移動(由 Notecard 的值定義 - 它的序列號,如果該值不存在則回退到它的ID)、它最后已知的緯度 ( ) 和經度( ) 和上次報告的時間 ( )。$bodysndevicewhere_latwhere_lonwhen
每個變量或函數用分號與下一個變量或函數分隔,并且要像本例那樣將多個變量和函數串在一起,請將它們全部包裹在括號內。
除了從原始_track.qoNotefile 中提取的基本信息外,我們還使用內置函數(例如$string、$round$fromMillis
最后,在 where"&Body="定義的最后一行,我們調用新創建的$body()函數來獲取我們需要發送給 Twilio 以獲取其消息的字符串,并添加我們也定義的$from和$to變量,以便 Twilio 知道文本應該來自誰以及應該來自誰收到它。
2A。過濾掉心跳事件_track.qo$doNotRoute()
這是一個好的開始,但是那些也作為事件進入 Notehub 的心跳_track.qo 事件呢?使用上面的 JSONata,這些將每天發送一次到 Twilio,并發送一個誤報 SMS 警報,表明 Notecard 正在移動,而實際上它不是。
Enter :一個自定義的 Blues JSONata 命令,它將有條件地將事件路由到 Notehub 之外,這正是我們所需要的。$doNotRoute()
如果您檢查發生運動的事件的純 JSON_track.qo與僅檢測心跳的事件的 JSON,您會注意到具有運動的事件具有兩個心跳不具有的屬性:motion和seconds.
帶有運動數據的記事卡事件_track.qo
{ // some event specific data up here "device": "dev:86447XXXXXXXX", "sn": "Notey McNotecard", "product": "product:com.blues.paige:anti_theft_tracker", "routed": 1646683287, "req": "note.add", "when": 1646683261, "file": "_track.qo", "body": { "hdop": 1, "motion": 4, "seconds": 74, "temperature": 29.125, "time": 1646683260, "voltage": 4.21875 }, "best_location_type": "gps", // a bunch of extra location JSON data here } |
里面body有motion和seconds- 這意味著記事本正在運行。
沒有運動數據的記事卡事件_track.qo
{ // some event specific data up here "device": "dev:86447XXXXXXXX", "sn": "Notey McNotecard", "product": "product:com.blues.paige:anti_theft_tracker", "routed": 1646600372, "req": "note.add", "when": 1646600347, "file": "_track.qo", "updates": 1, "body": { "hdop": 1, "status": "heartbeat", "temperature": 25.5, "time": 1646341009, "voltage": 4.2734375 }, "best_location_type": "gps", // a bunch of extra location JSON data here } |
沒有motion和seconds在這個記事卡中body,加上它status是"heartbeat":沒有動作。
我們可以使用一個(或兩個屬性)有條件地將值路由到 Twilio。游戲規則改變者。
用這個新更新的版本 2代碼替換原來的 JSONata :
( $from := "+190354XXXX"; $to := "+1404641XXXX"; $body := function(){ ( $join([ "Alert! ", sn ? sn : device, " is on the move!", " Last spotted at: ", $string($round(where_lat, 6)), ",", $string($round(where_lon, 6)), " around ", $fromMillis(when * 1000, "[M01]/[D01]/[Y0001] [h#1]:[m01][P]", "-0500"), " EST." ]) ) }; $result := ($exists(body.motion)) ? "&Body=" & $body() & "&From=" & $from & "&To=" & $to & "&" : $doNotRoute(); ) |
更改在"&Body=...構造的最后幾行中。
無論如何都不會發送轉換后的 Notefile,現在聲明了一個名為的新變量并使用 JSONata方法,我們檢查原始有效負載是否具有值如果它有,則函數運行并將數據發送到 Twilio,如果它沒有't被調用,并且 Note 不被發送。$result$existsbody.motion.$body()$doNotRoute()
方便起見,添加 Google 地圖鏈接
好的,這應該可以防止誤報通過,但是我還想對這條消息進行進一步的改進。我不了解你,但如果我有什么東西被偷了,看到打印出來的 GPS 坐標在當下并不是特別有用。
我希望能夠單擊 SMS 中的鏈接并查看地圖上顯示的那些坐標。
與您的想法相反,目前還沒有普遍認可的方式在短信中構建 GPS 坐標,以便 iPhone 或 Android 消息服務能夠識別它們是坐標(就像它們對電話號碼和地址所做的那樣)并自動將它們超鏈接到在手機上打開地圖應用程序。
相反,我們必須自己做。所以我的解決方法是在消息的末尾提供一個谷歌地圖超鏈接,用戶可以選擇點擊或不點擊(我認為谷歌地圖是一個幾乎普遍使用的應用程序,無論手機操作系統如何,如果用戶不想使用它,他們可以從主消息正文中復制 GPS 字符串并將其粘貼到他們選擇的地圖應用程序中)。
所以最后一次,用這個版本 3代碼替換你的 JSONata 文本:
( $from := "+190354XXXX"; $to := "+1404641XXXX"; $body := function(){ ( $join([ "Alert! ", sn ? sn : device, " is on the move!", " Last spotted at: ", $string($round(where_lat, 6)), ",", $string($round(where_lon, 6)), " around ", $fromMillis(when * 1000, "[M01]/[D01]/[Y0001] [h#1]:[m01][P]", "-0500"), " EST.", " Google maps link: http://maps.google.com/?q=", $string(where_lat), ",", $string(where_lon) ]) ) }; $result := ($exists(body.motion)) ? "&Body=" & $body() & "&From=" & $from & "&To=" & $to & "&" : $doNotRoute(); ) |
這個版本修改了$body函數的結尾,添加了一個額外的行,將緯度和經度坐標輸入到谷歌地圖 URL 中,以便可以從 SMS 中點擊它。
下面是最終 JSONata 表達式在 Twilio Notehub 路由中的樣子。
現在點擊“應用更改”按鈕保存路線詳細信息。
是時候測試這個追蹤器了!
警報!
-
防盜系統
+關注
關注
0文章
74瀏覽量
20240 -
SMS
+關注
關注
0文章
78瀏覽量
28570
發布評論請先 登錄
相關推薦
評論