「剛剛出門之前,好像忘記把房間的電腦關掉,可是現在家裡沒人能幫我的忙耶 ~~~ @@」
「這是什麼鬼天氣,明明是冬天,客廳怎麼那麼熱,多希望在我回家之前就可以先把冷氣打開!!!」
我們是不是可以用電腦或手機,在外面就可以直接控制家中的電器用品呢???
當然可以囉!!!
市面上那麼多款智慧家電任君選擇,當然可以輕鬆的完成我們的願望。
不過,
更大的問題是:你打算在手機上面安裝多少支 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)
壓根不知道怎麼設定的話,可以到 官網 去下載 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 撰文。
0 意見 :
張貼留言