Raspberry Pi 的應用 - 物聯網初入門,用 OpenHAB 打造智慧家庭的控制中樞

转载于:http://blog.itist.tw/2017/01/building-smart-home-control-center-with-openhab-on-raspberry-pi.html
「剛剛出門之前,好像忘記把房間的電腦關掉,可是現在家裡沒人能幫我的忙耶 ~~~ @@」
「這是什麼鬼天氣,明明是冬天,客廳怎麼那麼熱,多希望在我回家之前就可以先把冷氣打開!!!」

我們是不是可以用電腦或手機,在外面就可以直接控制家中的電器用品呢???

當然可以囉!!!
市面上那麼多款智慧家電任君選擇,當然可以輕鬆的完成我們的願望。

不過,
更大的問題是:你打算在手機上面安裝多少支 APP 來管理它們呢?
三支?五支?十支?還是更多呢???

OpenHAB (Open Home Automation Bus) 主要的目標就是要讓使用者輕鬆的完成智慧家庭 (Smart Home) 的建置,只要一個介面就完成所有的動作。

它使用 Java 語言撰寫,所以可以輕鬆的跨平台,依據 OSGi (Open Service Gateway Initiative) 規範開發,在 Jetty Web Server 上運作。

為了讓各種軟硬體可以簡單的被整合,整體架構被設計成將軟體、硬體、協定、介面 … 等元素各自獨立,讓不同廠商或組織提供的自動化設備、智慧裝置、網路服務、通訊協定 … 等透過特製的模組來整合,讓我們不管是用電腦、手機或平板,都可以透過 WebUI 及客製的原生 App 來遠端操作。

它支援 Windows、macOS、Linux 等平台,當然也可以在 Raspberry Pi、BeagleBone Blacki、UDOO i、Cubietruck 等單板電腦上執行,甚至在 Synology 或 QNAP 的 NAS 上也可以運行。

事前準備

請先參閱 [Raspberry Pi 3] 老朋友,新功能!關於那些開箱後馬上要作的事,完成初始設定。

安裝 Java Runtime

先確認一下系統裡有沒有 Java Runtime。
java -version

如果出現了「command not found」的訊息,代表還沒有安裝。

Raspbian 官方套件庫提供了 OpenJDK 1.7 及 1.8 兩個版本。

我們在這裡用 1.8 版來實作。
sudo apt-get -y install openjdk-8-jre

這個安裝動作會跑上一小段時間,請耐心等它一下 ~~~

安裝 OpenHAB 主程式

先依據 OpenHAB Wiki 的說明,加入官方套件庫的公鑰及設定檔。
wget -qO - ‘https://bintray.com/user/downloadSubjectPublicKey?username=openhab’ | sudo apt-key add -

echo “deb http://dl.bintray.com/openhab/apt-repo stable main” | sudo tee /etc/apt/sources.list.d/openhab.list

更新套件庫的快取資料。
sudo apt-get update

這樣子就可以開始安裝 OpenHAB Runtime 了。
sudo apt-get -y install openhab-runtime

系統提醒我們要執行這些指令,讓 OpenHAB 在開機後可以自動執行。
sudo systemctl daemon-reload
sudo systemctl enable openhab
sudo systemctl start openhab

調整服務設定

為了讓管理維護單純化,我們讓 OpenHAB 使用 pi 帳號來執行,而不是使用預設的 openhab 帳號。

先讓 pi 帳號加入 openhab 群組。
sudo usermod -aG openhab pi

編輯主要參數。
sudo vi /etc/default/openhab

把使用者及群組從 openhab 修改成 pi。
USER_AND_GROUP=pi:pi

這邊還可以看到,之後從瀏覽器連線的通訊埠是 8080 和 8443,及一些額外的參數設定值。

編輯服務設定值。
sudo vi /usr/lib/systemd/system/openhab.service

同樣把使用者及群組從 openhab 修改成 pi。
User=pi
Group=pi

最後重新載入 systemd 組態設定,並重新啟動 OpenHAB 服務。
sudo systemctl daemon-reload
sudo systemctl restart openhab

這邊可以看到 OpenHAB 服務的確已經改由 pi 帳號來啟動了。

編輯主設定檔

系統預設的設定檔是 openhab_default.cfg。

它建議我們複製一份到 openhab.cfg,將自訂的設定放在這裡,以免在升級之後不小心被覆蓋掉。
sudo cp /etc/openhab/configurations/openhab_default.cfg /etc/openhab/configurations/openhab.cfg

我們來看一下主設定檔到底長怎樣。
vi /etc/openhab/configurations/openhab.cfg

它總共分成這些段落:
通用設定 (General configurations)
行為設定 (Action configurations)
輸出入元件設定 (I/O component configurations)
持久性設定 (Persistence configurations)
傳輸設定 (Transport configurations)
綁定設定 (Binding configurations)
更詳細的說明可以參閱 Openhab Wiki - Configuring the openHAB runtime。

壓根不知道怎麼設定的話,可以到 官網 去下載 Demo Setup。
wget https://bintray.com/artifact/download/openhab/bin/distribution-1.8.3-demo.zip

把它解壓縮到 /etc/openhab 裡。
unzip distribution-1.8.3-demo.zip
sudo cp -fr addons configurations /etc/openhab
sudo chmod 755 /etc/openhab/addons

重新啟動服務。
sudo systemctl restart openhab

用瀏覽器打開 http://raspberrypi.local:8080/openhab.app?sitemap=demo,就可以用範例管理介面來操作看看了。

GPIO 控制

為了管理方便及彈性,OpenHAB 把硬體支援、功能延伸、程式串接 … 等功能,以外掛的方式來提供支援,目前有 195 種附加功能。
sudo apt-cache search ^openhab-addon

詳細的支援清單可以參閱 OpenHAB - Supported Technologies。

既然是初入門,我們就別瞎折騰自己,先從最簡單的 GPIO 控制 來練習。

首先加入 GPIO 的支援及功能綁定。
sudo apt-get -y install openhab-addon-io-gpio openhab-addon-binding-gpio

確認我要將要使用的 GPIO 腳位編號,請依 Raspberry Pi 的型號及版本確認編號。

這是 Model A / B 的 GPIO 腳位圖。

這是 Model A+ / B+ / 2B / 3B / Zero 的 GPIO 腳位圖。

新增開關物件 (Item)。
sudo vi /etc/openhab/configurations/items/led.items

定義一個開關在 GPIO 接腳的第 4 Pin。
Switch LED1 { gpio=”pin:4” }

新增 UI 地圖 (Sitemap),語法格式請參閱 OpenHAB Wiki - Explanation of Sitemaps。
sudo vi /etc/openhab/configurations/sitemaps/default.sitemap

定義這個開關的描述及位置。
sitemap default label=”Heracles Lab” {
Frame label=”Raspberry Pi GPIO LED” {
Switch item=LED1
}
}

最後重新啟動 OpenHAB 服務。
sudo systemctl restart openhab

操作實測

那要怎麼實測呢???。
正巧手邊有一顆之前在 Arduino 上測試用的 LED,那就拿它來開刀好了,先把它接上麵包板,再跟 GPIO 第 4 Pin 連接好。

連上網頁介面,它的介面的長相壓根就是 iOS 6.x 之前尚未扁平化的風格,如果已經修改過 hostname,請換成現行的 hostname 或是 IP 位址來連線。
http://raspberrypi.local:8080/openhab.app?sitemap=default

這邊就可以看到我們剛剛定義的 GPIO 開關,我們可以點選 LED 開關按鈕,就可以開啟或關閉。

這邊有 OpenHAB GPIO 控制的實作影片 可以參考。

除了 WebUI 介面之外,還有官方發行的 iOS App 及 Android App 可以免費下載。

OpenHAB iOS App

OpenHAB Android App

異常處理

問題:服務無法啟動。

關鍵在「no java executable found at /usr/bin/java」,這代表沒有安裝 Java Runtime。
sudo apt-get -y install openjdk-8-jre

問題:重新啟動服務時,出現 Warning 訊息。

因為設定值被修改過了,所以要重新載入一次 systemd 組態設定。
sudo systemctl daemon-reload

問題:WebUI 出現 HTTP ERROR 500 的錯誤訊息。

沒有建立預設的 Sitemap、指定錯誤的 Sitemap 的名稱,或是服務還沒正常啟動。

參考資料
OpenHAB 官方社群
Make - Building a Home Automation System with OpenHAB to Control LEDs Wirelessly
instructables - Uber Home Automation w/ Arduino & Pi
makeuseof - Getting Started with OpenHAB Home Automation on Raspberry Pi
https://github.com/openhab/openhab
http://www.freebuf.com/geek/78462.html

圖片來源
https://pixabay.com/

更新紀錄
2017/01/21 撰文。

你可能感兴趣的:(树莓派,raspberry,pi)