IoT|硬體 |樹莓派|實作|安裝 OpenHAB / OpenHAB 2 打造智慧家庭

OpenHAB 介紹

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 上也可以運行。



OpenHAB 安裝及設定

[事前準備]

檢查 Raspbian Java 版本;如果不是1.7或更高版本,那是無法安裝 OpenHAB 的
java -version

若是版本不夠高,使用以下指令選擇較高級版本
-----------------------------------
sudo update-alternatives --config java
若有出現異常,Raspbian 官方套件庫提供了 OpenJDK 1.7 及 1.8 兩個版本,建議使用下列指令安裝
------------------------------------------------------------------------------
sudo apt-get -y install openjdk-8-jre

更新 Raspbian 系統
sudo apt-get update —> 更新軟體套件清單
sudo apt-get -y dist-upgrade —> 更新軟體套件
sudo rpi-update —>更新韌體,可以略過

[安裝 OpenHAB 主程式/啟動帳號為 pi]

安裝 OpenHAB Runtime
sudo apt-get -y install openhab-runtime

安裝異常處理
----------
錯誤訊息:
pi@MyPi1:~ $ sudo apt-get -y install openhab-runtime
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package openhab-runtime
解決方案:
1.確認 /etc/apt/sources.list.d/raspi.list 如以下內容:
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
2. 執行
echo "debhttp://dl.bintray.com/openhab/apt-repostable main" | sudo tee /etc/apt/sources.list.d/openhab.list
在依序下面2行指令執行
sudo apt-get update
sudo apt-get -y install openhab-runtime
4.如果還出現以下錯誤
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  openhab-runtime
0 upgraded, 1 newly installed, 0 to remove and 2 not upgraded.
Need to get 36.9 MB of archives.
After this operation, 41.4 MB of additional disk space will be used.
WARNING: The following packages cannot be authenticated!
  openhab-runtime
E: There were unauthenticated packages and -y was used without --allow-unauthenticated
依序下面2行指令執行
sudo apt-get clean
sudo apt-get install --reinstall openhab-runtime

設定開幾後自動執行
sudo systemctl daemon-reload
sudo systemctl enable openhab
sudo systemctl start openhab

相關服務設定,為了讓管理維護單純化,讓 OpenHAB 使用 pi 帳號來執行,而不是使用預設的 openhab 帳號。使用 pi 帳號加入 openhab 群組
sudo usermod -aG openhab pi

編輯主要參數
sudo nano /etc/default/openhab
修改以下內容
----------
USER_AND_GROUP=pi:pi
若有需要修改 HTTP 連線 port 可一併修改,這裡使用預設的 8080 port,如下圖。
編輯服務設定值
sudo nano /usr/lib/systemd/system/openhab.service
修改以下內容
----------
User=pi
Group=pi
最後重新載入 systemd 組態設定,並重新啟動 OpenHAB 服務,可從輸出的 log 來觀察 OpenHAB是否已改由 pi 帳號啟動
sudo systemctl daemon-reload
sudo systemctl restart openhab

[主設定檔編輯]

由於系統預設的設定檔是 openhab_default.cfg,先行複製一份以保留確保日後回復系統時所需
sudo cp /etc/openhab/configurations/openhab_default.cfg /etc/openhab/configurations/openhab.cfg

設定檔相關內容
nano  /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.cfg 如何設定,可使用下列網址下載 Demo

下載後執行下列步驟
---------------
unzip distribution-1.8.3-demo.zip
sudo cp -fr addons configurations /etc/openhab
sudo chmod 755 /etc/openhab/addons

重新啟動服務,整體服務啟動時間約 2分鐘
[OpenHAB]

sudo systemctl restart openhab

設定值若有修改過,則須先載入設定值
----------------------------
sudo systemctl daemon-reload

[OpenHAB 2]

sudo systemctl restart openhab2

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

[安裝 OpenHAB 2主程式/啟動帳號為 pi]

若系統有安裝過 OpenHAB 版本,請先執行以下指令移除相關軟體及套件
sudo apt-get remove openhab-runtime

更新 Raspbian 系統
sudo apt-get update —> 更新軟體套件清單
sudo apt-get -y dist-upgrade —> 更新軟體套件
sudo rpi-update —>更新韌體,可以略過

下載安裝包及安裝
cd /tmp

解壓縮
=====
sudo apt-get install unzip
sudo unzip openhab-download.zip -d /opt/openhab2
刪除已安裝的壓縮檔
===============
rm openhab-download.zip

修改權限
sudo chown -hR pi:pi /opt/openhab2

執行openhab 系統程式,啟動時間大約5分鐘
sudo su -s /bin/bash -c '/opt/openhab2/start.sh'pi

如果終端機顯示下面畫面,表示啟動成功;開啟瀏覽器,輸入  http:192.168.100.210:8080,選擇Standard (recommended setup),安裝 UI 整體時間大約30分鐘
異常處理
=======
如果你檢查瀏覽器,看到404頁面,可在控制台上重新運 openhab,方法是輸入
sudo su -s /bin/bash -c '/opt/openhab2/start.sh'pi

用瀏覽器打開 http://192.168.100.210:8080/start/index,就可以用看到以下畫面

[OpenHAB2 建立服務並啟動執行]

如果從運行時註銷(logout),您將注意到OpenHAB將不會運行。我們可以創建一個服務文件,這樣OpenHAB將自動運行每一個啓動,而不需要啓動運行時。
在終端機輸入
logout

建一個服務文件
sudo nano /lib/systemd/system/openhab2.service
將 User 及 Group 由 openhab 改成 pi
文件內容
=======
[Unit]
Description=The openHAB 2 Home Automation Bus Solution
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
User=pi
Group=pi
GuessMainPID=yes
WorkingDirectory=/opt/openhab2
#EnvironmentFile=/etc/default/openhab2
ExecStart=/opt/openhab2/start.sh server
ExecStop=/bin/kill -SIGINT $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target

將該文件作為服務
sudo systemctl daemon-reload
sudo systemctl enable openhab2.service
sudo systemctl start openhab2.service
sudo systemctl status openhab2.service

重新啓動你的Raspberry Pi,然後再次嘗試頁面
sudo reboot

相關目錄
DIRECTORIES of Manual Method
openHAB application     /opt/openhab2
Additional add-on files     /opt/openhab2/addons
Site configuration      /opt/openhab2/conf
Log files           /opt/openhab2/userdata/logs
Userdata like rrd4j databases   /opt/openhab2/userdata
Service configuration       /lib/systemd/system/openhab2.service

OpenHAB GPIO 簡介

為了管理方便及彈性,OpenHAB 把硬體支援、功能延伸、程式串接 ... 等功能,以外掛的方式來提供支援,目前多達將近200種附加功能,這就是為什麼OpenHAB是一個強大的系統,它可以與所有不同的控制系統組合成一個統一的接口。

[GPIO 支援與功能綁定]

[準備材料]
LED *1GPIO 4
樹莓派 3B * 1
麵包版 *1
[OpenHAB]

安裝 OpenHAB for GPIO 擴充功能
sudo apt-get -y install openhab-addon-io-gpio openhab-addon-binding-gpio

異常處理
-------
出現以下錯誤訊息
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libjna-java libjna-jni
Suggested packages:
  libjna-java-doc
The following NEW packages will be installed:
  libjna-java libjna-jni openhab-addon-binding-gpio openhab-addon-io-gpio
0 upgraded, 4 newly installed, 0 to remove and 2 not upgraded.
Need to get 369 kB of archives.
After this operation, 465 kB of additional disk space will be used.
WARNING: The following packages cannot be authenticated!
  openhab-addon-io-gpio openhab-addon-binding-gpio
E: There were unauthenticated packages and -y was used without --allow-unauthenticated

執行下列指令
sudo apt-get clean
sudo apt-get install --reinstall openhab-addon-io-gpio openhab-addon-binding-gpio

[OpenHAB 2]

安裝 OpenHAB for GPIO 擴充功能; GPIO Binding binding-gpio - 1.9.0

使用 GPIO 搜尋並安裝

樹莓派 Model A+ / B+ / 2B / 3B / Zero 的 GPIO 腳位圖

OpenHAB 及OpenHAB 2實際運作

Items是存放你想要在系統里用到的每一個控制設備、傳感器或信息元素的庫。它不一定是一個物理設備,你可以定義一個網絡來源如天氣或股票。每個項都可以被命名或指定多個組,並連接到特定的bindings。

當你打開openHAB移動或Web應用程式時,Sitemaps只關心你會看到的介面。你可以控制按鈕如何放置以及信息如何呈現出來。您可以為你的每一個房間定義最高級別的組,點擊每個房間的設備列表。或您可能更喜歡一種類型的設備為一組。

Rules是家庭自動化方面發揮作用的地方,在那裡你可以預設打開設備的時間表或條件。比如在晚上10點打開臥室紅色的燈;或者,如果溫度小於0或有人在房間裡的時候就打開一個供暖器。你可以找到一個腳本文件夾,它提供了類似的功能規則。

persistence engine是一個重要問題,不過本文不提。默認情況下,openHAB只會顯示事物的現狀;如果你想隨著時間的推移跟蹤數據,你需要設置一個數據源為持續數值。在這你可以設置通常數據點多久測一次,或刪除舊的數據點,你還需要告訴它使用什麼樣的資料庫,如MySQL或簡單記錄到一個文件。

在openHAB里,sitemap和items文件必不可少;其餘的都可選擇。你可以有多個sitemaps和Item,所以你可以控制demo內容,或嘗試一種新的家居控制介面。

[OpenHAB]

設定硬體 GPIO
[OpenHAB]
sudo nano /etc/openhab/configurations/items/led.items

[OpenHAB 2]
sudo nano/opt/openhab2/conf/items/led.items
內容如下(選擇下列其一):
---------
客戶:Switch LED1 "LED BCM pin4" { gpio="pin:4" }
MyPi1:Switch LED1 "LED BCM pin12" { gpio="pin:12" }





[OpenHAB 2]

OpenHAB 2 版本需要多做這個動作,指定 default.sitemap 為 UI 檔(Services/Basic UI)

新增 UI 元件
[OpenHAB]
sudo nano /etc/openhab/configurations/sitemaps/default.sitemap

[OpenHAB 2]
sudo nano /opt/openhab2/conf/sitemaps/default.sitemap

內容如下
=======
sitemap default label="Heracles Lab" {
  Frame label="Raspberry Pi GPIO LED" {
    Switch item=LED1
  }
}

相關語法,可參考以下網址:
-----------------

重啟服務
重新啟動服務,整體服務啟動時間約 2分鐘
[OpenHAB]
sudo systemctl restart openhab

[OpenHAB 2]
sudo systemctl restart openhab2

設定值若有修改過,則須先載入設定值
----------------------------
sudo systemctl daemon-reload

[控制 LED1]

使用瀏覽器;開啟網址




OpenHAB 手機 APP,Google APPOpenHAB iOS App

openHAB 有 iOS和Android 版本的原生應用程式,它們看起來要比默認的瀏覽器介面更漂亮。在設置中,輸入本地地址作為內部的IP 及 Port number。但是如果還沒有註冊 MyOpenHAB,則只能從本地 Wi-Fi 訪問系統。
手機 Settings

Local
-----
Locla server URL:http://192.168.100.210:8080 <— OpenHab 安裝的 ip address
Username: pi
Password:9999998

Remote
------




通過REST來使用藍牙狀態傳感器


使用my.openhab IFTTT遠程訪問(*若有更新樹莓派需更改 My.OpenHAB uuid 及 secret 資訊

[OpenHAB]

本段落可以參考這篇文章:my.openHAB Persistence

首先安裝 binding,可以透過  apt-cache search myopenhab

安裝 myopenhab 擴充功能
sudo apt-get install openhab-addon-io-myopenhab
sudo chown -hR pi:pi /usr/share/openhab

在 webapps/static 文件夾中找到一個secret文件。打開 secret 檔案和 uuid 檔案,並準備複製
cd /usr/share/openhab/webapps/static

secret 檔案內容

uuid 檔案內容

註冊一個 My.OpenHAB帳戶,user 註冊訊息

收到由 OpenHAB 所寄來的註冊訊息


myopenhab 設置默認的persistence engine(建立一些基本的東西可以將數據「出口」到在線服務,並使IFTTT可見)。
編輯 openhab.cfg
grep persistence:default/etc/openhab/configurations/openhab.cfg
nano /etc/openhab/configurations/openhab.cfg

編輯以下內容:
------------
# The name of the default persistence service to use
#persistence:default=rrd4j
persistence:default=myopenhab

建立 myopenhab.persist 檔案
nano /etc/openhab/configurations/persistence/myopenhab.persist
新增以下內容:
-----------
Strategies {
    default = everyChange
}
Items {
    * : strategy = everyChange
}

前往openHAB 通道(你需要驗證並允許它訪問你的 myopenhab 帳戶)連接IFTTT。還要注意,除非你的項至少有一次改變,否則 IFTTT 上的項目清單是不會出現的,所以如果沒有出現,你就切換一下開關,然後重新加載。恭喜你,你現在可以通過IFTTT 可以訪問你的openHAB系統了!

重啟服務
重新啟動服務,整體服務啟動時間約 2分鐘
[OpenHAB]
sudo systemctl restart openhab

[OpenHAB 2]
sudo systemctl restart openhab2

設定值若有修改過,則須先載入設定值
----------------------------
sudo systemctl daemon-reload

查看日誌
[OpenHAB]
tail /var/log/openhab/openhab.log

[OpenHAB 2]
tail /opt/openhab2/userdata/logs/openhab.log

OpenHAB with MySQL

安裝以及設定 MySQL root 帳號密碼
sudo apt-get install mysql-server

[登入 MySQL]

使用 root 帳號登入 MySQL
sudo mysql -u root -p

輸入 root 密碼 999999

建立資料庫 for OpenHAB
CREATE DATABASE OpenHAB;

建立一個 user OpenHAB for OpenHAB
CREATE USER 'openhab'@'localhost' IDENTIFIED BY '999999';

授權 openhab 權限 for OpenHAB
GRANT ALL PRIVILEGES ON OpenHAB.* TO 'openhab'@'localhost';

離開 MySQL
quit

使用 openhab 測試是否可以登入
mysql  -u openhab -p
quit

[設定系統組態檔 ]

nano /etc/openhab/configurations/openhab.cfg

找到 mysql 相關資訊,然後開始編輯,編輯完成後存檔離開
############################ SQL Persistence Service ##################################
# the database url like 'jdbc:mysql://<host>:<port>/<database>' (without quotes)
#mysql:url=jdbc:mysql://localhost/openhab

# the database user
#mysql:user=openhab

# the database password
#mysql:password=999999

# the reconnection counter
#mysql:reconnectCnt=1

# the connection timeout (in seconds)
#mysql:waitTimeout=

Install persistence
sudo apt-get install openhab-addon-persistence-mysql

新增 mysql.persist
nano /etc/openhab/configurations/persistence/mysql.persist
 
內容如下:
-------------
Strategies {

default = everyChange

}
Items {

* : strategy = everyChange, restoreOnStartup

}

重新啟動 openHAB 服務
sudo systemctl restart openhab

設定值若有修改過,則須先載入設定值
----------------------------
sudo systemctl daemon-reload


[異常處理]

問題:重新啟動服務時,出現 Warning 訊息。因為設定值被修改過了,所以要重新載入一次 systemd 組態設定。 
sudo systemctl daemon-reload

問題:WebUI 出現 HTTP ERROR 500 的錯誤訊息。
沒有建立預設的 Sitemap、指定錯誤的 Sitemap 的名稱,或是服務還沒正常啟動。

[參考]





留言

這個網誌中的熱門文章

IoT|硬體|樹莓派|外接麥克風及喇叭設置

成長|語文|學習-英文 持續更新!

IoT|硬體|通訊|Arduino 使用 SoftwareSerial Library 與電腦通訊