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

by 1/21/2017 0 意見

「剛剛出門之前,好像忘記把房間的電腦關掉,可是現在家裡沒人能幫我的忙耶 ~~~ @@」
「這是什麼鬼天氣,明明是冬天,客廳怎麼那麼熱,多希望在我回家之前就可以先把冷氣打開!!!」

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

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

不過,
更大的問題是:你打算在手機上面安裝多少支 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

它總共分成這些段落:
  1. 通用設定 (General configurations)
  2. 行為設定 (Action configurations)
  3. 輸出入元件設定 (I/O component configurations)
  4. 持久性設定 (Persistence configurations)
  5. 傳輸設定 (Transport configurations)
  6. 綁定設定 (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 的名稱,或是服務還沒正常啟動。


參考資料


圖片來源

  • https://pixabay.com/

更新紀錄

  • 2017/01/21 撰文。

Heracles Jam,江湖人稱「海公公」

IT 技術家 - 創站部落客

一個常用 Windows、慣用 macOS、愛用 Linux 的 3C 阿宅
現職 MIS / 業界講師 / 資訊顧問 / 部落客

0 意見 :

張貼留言