DIY智慧型家居安全掛鐘(2/3)

        我們繼續上一篇居家安全掛鐘的製作,在瞭解了MCP3008 ADC的使用方法之後,要實際開始來DIY了。

A)配線安裝

        先在兩顆眼睛上鑽洞,插入三色LED,TEMT6000置於燈光照得到的位置,Raspberry相機與PIR模組則拉到尾巴位置,用熱熔膠固定。

 

模組與腳位:

  1. 兩顆LED並聯  RPI board 35pin
  2. DHT22 data腳位  RPI board 13pin
  3. PIR模組data腳位  PI board 35pin
  4. 三色LED  RPI board 36, 38, 40 pins
  5. 按鈕  RPI board 32 ipn
  6. Audio輸出至LM386,再接到喇叭
  7. Light sensor及MQ4分別接至MCP3008的CH1與CH2
  8. MCP3008使用SPI介面與RPI連接
  9. 音源從樹莓派3.5″插孔接至LM386,再轉接至喇叭。
  10. Raspberry相機與PIR模組拉到尾巴位置.

接下來依照上述各腳位接好各個Sensor及模組,如果您買的掛鐘內部空間不夠大,那麼裝配起來是件很辛苦的事。在樹莓派右側插上了根3.5”audio頭以及Micro USB接頭,再加上大量直插的杜邦線頭之後,會發現實際上所佔用的空間比起當初想像的要大上許多。

最後樹莓派、喇叭、LM386、MCP3008等零件在掛鐘內部的擺置如下,實際上請自行視情況來調整。

最終擺放位置:客廰門口上方

B)後台服務

對於一個Maker來說,除非設計的產品有量產或販賣的打算,否則並不需要大費周章的去租用虛擬主機或昂貴的IAAS環境來架設後端服務,我們可以使用一些在一定額度使用量內,免費又好用的雲端服務,可省下很多不必要的費用。

線上圖片服務 cloudinary

網址:http://cloudinary.com,提供圖片上傳、儲存、瀏覽、編輯、修改等服務,其API支援各式語言,透過這個服務,我們可以很容易的就能將相機拍到的相片,直接上傳其雲端,並取得該圖片的URL供後續使用。

C:\Users\CHE7C6~1.TSE\AppData\Local\Temp\x10sctmp.png

        透過API所上傳的相片,可在Console統一檢視管理。

C:\Users\CHE7C6~1.TSE\AppData\Local\Temp\x10sctmp3.png

幾乎所有的語言皆有支援,也提供詳細的API使用說明。

C:\Users\CHE7C6~1.TSE\AppData\Local\Temp\x10sctmp1.png

以Python來說,一行程式碼便解決圖片上傳雲端問題了:

        cloudinary.uploader.upload(/home/sample.jpg)

其至能將其它網址的圖片抓下來:        cloudinary.uploader.upload(http://www.example.com/sample.jpg)

從AWS的S3也可以:

        cloudinary.uploader.upload(s3://my-bucket/my-path/sample.jpg)

直接從FTP server也可以:        cloudinary.uploader.upload(ftp://user1:mypass@ftp.example.com/sample.jpg)

要使用前,先安裝Cloudinary提供的Python module:sudo pip install cloudinary,比較特殊的,是它的API KEY要設在環境變數CLOUDINARY_URL當中,而不是在程式中引用,所以我們在執行程式前先在Bash設好CLOUDINARY_URL再執行。

#!/bin/bash

export CLOUDINARY_URL=cloudinary://{API Key}:{API Secret}@{YOUR CLOUD NAME}

cd /home/pi/monitor

python start.py

Cloudinary提供的Free Plan限制是2 GB Storage, 7,500 Transformations/month, 5 GB  Bandwidth,這對正常的個人使用來說應該是足夠的。

除了雲端影像儲存,Cloudinary的Add on還提供了其它很多有用的功能,例如Face attributes detection、Auto tagging、Image enhancement、Background remove…等等,我們很方便的就能應用在程式中。(當然,這些都要額外的附加費用)

C:\Users\CHE7C6~1.TSE\AppData\Local\Temp\x10sctmp2.png

郵件服務 mailgun.com

想要從程式中自動發送email大概是開發者最感到麻煩的事了,使用免費信箱來寄送,容易被歸類到垃圾信件,寄送量太多容易被停權,若租用便宜的虛擬主機,業者們也不歡迎大量寄信的網站或服務駐紮在他們主機,影響其它網站的運作。此外,想要寄出一封正常完美的信件,一個獨立的網域名稱、email address的DNS及MX設定、正確的email address反解譯、還有可替你送出email的SMTP service,這些都讓email功能成了大部份個人開發者覺得最困擾的事。

C:\Users\CHE7C6~1.TSE\AppData\Local\Temp\x10sctmp5.png

        不過,這些困擾mailgun都替你解決了,正如它在首頁上宣稱的:The Email Service For Developers,它主要提共下列的郵件服務:

  • Sending:最基本的寄信服務,不過mailgun提供自訂網域(最多100組),讓開發者能夠發送自己專屬網域的email address。
  • Inbound Routing:不止寄信,mailgun還提供了收信功能,除了能自行定義符合那些特徵的email轉寄到那個emai l address外,它的parsing engine還能替你將內容parsing成結構化方便分析的json格式,就像這樣:

MIME to JSON

  • Analytics:郵件的log及統計,並且能追蹤使用者的行為(Delivered, Opened, Clicked)、收件者的地理位置…等等。

不過,這次我們的居家安全掛鐘只用到Sending的功能。

請先註冊一個mailgun帳號,然後在Domains功能中加入你自己的網域帳號(如果有的話,不然就要使用預設的Sandbox名稱,寄件者的email address會有很長的一個字串),加入了自己的網域帳號後,記得還需要去更新網域DNS設定。

C:\Users\CHE7C6~1.TSE\AppData\Local\Temp\x10sctmp6.png

每月寄出的郵件數在10,000封以下是免費的,超過則以如下的方式計費。如果不考慮PIR偵測到小偷時連續寄送email的情況下,假設我們的居家安全掛鐘每小時定時寄出一封,那麼一個月頂多會寄出720封,這10,000封的限制對我們來說已經是很夠用了。

C:\Users\CHE7C6~1.TSE\AppData\Local\Temp\x10sctmp7.png

Mailgun的API提供了curl、Ruby、Python、PHP、Java、C#、Go…等語言支援,以Pytho為例,只要使用一行程式便能寄出一封使用自己網域名稱的email,下方是基本的send email方法。


def send_simple_message():

return requests.post(

"https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/messages",

auth=("api", "YOUR_API_KEY"),

data={"from": "Excited User <mailgun@YOUR_DOMAIN_NAME>",

"to": ["bar@example.com", "YOU@YOUR_DOMAIN_NAME"],

"subject": "Hello",

"text": "Testing some Mailgun awesomness!"})

Mailgun回傳的訊息:

{

  “message": “Queued. Thank you.",

  “id": “<20111114174239.25659.5817@samples.mailgun.org>"

}

若需要夾帶附檔,只要在data內容中加上files參數:

files=[(“attachment", open(“files/test.jpg")),

               (“attachment", open(“files/test.txt"))]

若要使用HTML顯示email,data內容中可加上html參數:

“html": “HTML version of the body"}

簡訊服務

一般提供簡訊服務的公司都會提供API讓您在程式中存取,不過由於簡訊最是以發送則數計費,很少有免費方案可提供,因此在這裏我們暫不使用第三方的簡訊服務,直接透過創新內部一台簡訊主機來寄送,這部份由MIS設置一個Gateway後,可讓我們能夠在驗證後從外部internet來使用該主機來發送簡訊。

本文介紹居家安全掛鐘所會使用到的外部服務,在下一篇文章中,我們將繼續完成該掛鐘的DIY製作。