初嘗簡易的 IOT 平台 Thingsboard

在網路上有許多 IOT 平台,但是對我這種都沒有實作過的人來說,有些平台是有進入的門檻,就算架起來也不會運用,在經過數天的研究後,找到了一個功能蠻”陽春”的開源軟體 (Open Source),在把資料轉成視覺方面可以很快的上手,讓需求很容易達成喔。

 

我所找到的軟體叫 thingsboard  (https://thingsboard.io),這套也是安裝在 Linux上面,先前測試 YouPHPTube 類似的步驟,如果上次有留下安裝完成的 VMWare 主機,那這次就可以很快速的完成OS的安裝,安裝步驟我就不再貼圖了,僅依照手冊上面的指令來說明,讓我弄得比較久的反而是資料傳入到平台上面。

 

以下說明都是依照官方文件操作,有任何不清楚的地方請至 https://thingsboard.io/docs/user-guide/install/linux/ 參考

我是使用 Ubuntu 16.04 LTS Server 版,在安裝完成後本身先更新到最新的套件請參考:

 

sudo apt-get update

sudo apt-get dist-upgrade

sudo apt-get upgrade

 

我是會再多做一次重新開機 sudo reboot

 

首先是要安裝 Oracle JDK,請參考此篇文章(https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-get-on-ubuntu-16-04#installing-the-oracle-jdk),其相關指令如下:

 

sudo apt-get install default-jdk

sudo add-apt-repository ppa:webupd8team/java

sudo apt-get update

sudo apt-get install oracle-java8-installer

 

安裝完成後也別忘了修改一下環境變數喔.

 

sudo update-alternatives –config java

sudo nano /etc/environment

 

把這行新增進去

JAVA_HOME=”/usr/lib/jvm/java-8-oracle”

 

執行

source /etc/environment

 

檢查一下是否有設定正確

echo $JAVA_HOME

 

再回到原來的安裝文件繼續下去,我是沒有安裝其他的資料庫而是使用內建的,應該可以符合測試的目的,所以安裝 PostgreSQL 或是 NoSQL 的部分我就跳過。

 

接下來要下載 thingsboard, 先跳到自己的目錄去抓檔案,以免把檔案寫在其他的路徑下.

 

cd

wget https://github.com/thingsboard/thingsboard/releases/download/v1.3.1/thingsboard-1.3.1.deb

sudo dpkg -i thingsboard-1.3.1.deb

sudo /usr/share/thingsboard/bin/install/install.sh –loadDemo

sudo service thingsboard start

 

到此為止已經設定完畢了,非常簡單,系統預設會在網站會開在 8080 port, 所以需要利用另外一台電腦連線測試,http://<yourip>:8080, 如果沒有意外就可以看到登入畫面,此時輸入id輸入 tenant@thingsboard.org ,密碼是 tenant 就可開始使用。

Thingsboard login screen
Thingsboard login screen

進入後可以看到底下的畫面

Main Menu of thingsboard
Main Menu of thingsboard

 

我們利用資訊機房溫度偵測的例子來示範如何開始收集資料,最後呈現在面板上,在建立一個新的帳號把面板內容讓這位 User 可以看到。

 

模擬情況假設,設定在電腦機房內有一個IOT溫度計,可以收集溫、濕度數字,並透過網路把資料傳送回主機,但因實際上沒有這台機器,所以利用一個十來行的 VBScript 產生亂數後把數字回傳。

 

這套軟體我覺得比較特別的地方是他不需要建立資料儲存格式,我測試時是用Json 的方式把資料傳回去,都不需要在平台上先把資料結構定義好,直接傳就好,上傳的資料也分成兩種,第一種叫 attribute (屬性),這個是一個固定值,例如韌體版本、偵測器ID、所在位置等等,屬於不會變更或是變更頻率很低,且不需要保存變更前的數字,另一個叫 Telemetry (遙測值),記錄偵測值的數據,例如以上的例子:溫、濕度,資料本身不需要把時間加入,存在資料庫的時間是以機器的時間為主。

 

首先要在 Device (裝置)的地方新增一台裝置,名稱不是很重要,但是需要知道這台機器建立時所產生的 Token (一串亂數),這串數字決定你的資料要往哪裡丟,點選右下方的 + 符號來新增裝置,只要輸入 Device Name 就可以,Device Type 其實跟資料收集一點關係都沒有,只是後面可以利用這個條件來快速篩選,如果未來有很多不同的 sensor的話,定義要小心一點即可。

Add a device in thingsboard
Add a device in thingsboard

 

新增完成後可以但底下的畫面,點選名稱就可以進入到明細設定

 

我們只要留意有個按鈕叫 Copy Access Token,按下後會把上述解釋的亂碼複製到電腦記憶體內,等一下會用到,如果點選 Attribute 或 Telemetry 兩個都是空的,如果有資料開始用裡面到,這邊就會顯示相關文數字。

Device settings of thingsboard
Device settings of thingsboard

 

接下來我是利用一個簡單的 VBScript 來做到模擬上傳資料,請參考底下程式碼,把 <YourAccessToken>換成上述步驟的數字, 檔案另存成 .vbs 檔案

 

 

Dim objXmlHttpMain , URL

Dim vMax, vMin, sTemp, sHum

vMax = 60

vMin = 0

 

Randomize

sTemp = cstr((max-min+1)*Rnd*vMax)

 

Randomize

sHum = cstr((max-min+1)*Rnd*vMax)

 

strJSONToSend = “{“”temperature””:” + sTemp + “, “”humidity””:” + sHum + “, “”active””: false}”

 

URL=”http://<YourIP>:8080/api/v1/<YourAccessToken>/telemetry”

Set objXmlHttpMain = CreateObject(“Msxml2.ServerXMLHTTP”)

on error resume next

 

On Error Resume Next   ‘enable error handling

objXmlHttpMain.open “POST”,URL, False

If Err Then            ‘handle errors

WScript.Echo Err.Description & ” [0x” & Hex(Err.Number) & “]”

WScript.Quit 1

End If

On Error Goto 0        ‘disable error handling again

 

objXmlHttpMain.setRequestHeader “Content-Type”, “application/json”

 

objXmlHttpMain.send strJSONToSend

 

set objJSONDoc = nothing

set objResult = nothing

 

以上script是由網路上收集來做小幅度修正,並不是本人所撰寫。

 

修改了 <YourIP>, <YourAccessToken> 之後就可以打開 DOS box 輸入 cscript <YourFileName>.vbs 來看結果,該在點選 device -> latest telemetry 可以看到類似底下的數字,這樣就代表資料有進來了,如果沒有應該 VBScript 會顯示錯誤的訊息來除錯。

list telemetry value of Thingsboard
list telemetry value of Thingsboard

 

接下來利用左方的 Menu Bar 選擇 DASHBOARD 來新增一個儀表板,選擇右下方的  + 按鈕,給他一個可以識別的名稱 (我使用 Demo Dashboard)

 

之後點選這個面板, 來增加幾個儀表板 (widget)

added dashboard of thingsboard
added dashboard of thingsboard

 

 

點選右下角紅底白色的筆,來新增一個 widget,首先要選擇一個 Widget 出來,可由系統內建的幾種選一個, 其中有 Alarm、Analogue、Cards、Charts、Control、Digital gauges、GPIO、Map 等幾種內建的種類.

 

本次示範我選一個類比式(溫度),一個數位式的(濕度),以及一個圖表來展示,類比式我選擇標準溫度計.

widget of dashboard of thingsboard
widget of dashboard of thingsboard

 

點選之後會出現有幾個參數要輸入, 最重要的是 Data Sources,這邊我們要選擇由先前建立的 device 收集而來。

 

這套軟體比較特別的地方是不用先去建立基本資料,而是需要使用時再去產生,例如底下的例子來看,我先前的 device 叫做 Server Room Device, 建立 Data source 時我用 SRD 縮寫作為 Data Source Name,在系統上不用先去建立然後再選入,反而是需要的時候發現沒有這個 data source,重新建立就好.

Add datasource of widget, Thingsboard
Add datasource of widget, Thingsboard

 

因為 SRD 不存在,所以選擇底下的 Create a new one 這個連結.

select "create a new one" when add a new datasource, Thingsboard
select “create a new one” when add a new datasource, Thingsboard

 

這邊就會要求你來填入資料,Filter Type 就選擇 device type, Device type 我沒有增加所以就要 Default,前面有提到這個屬性就是拿來篩選使用的,特別要留意的是 Device name starts with 這個欄位,系統也不會列出符合上述的條件,需要輸入 device name 的前幾個字,只要有符合條件且唯一,系統就會默認不會額外再問喔,所以這邊自己的命名規則要留意清楚。

 

這邊選擇好 Device 之後,收集的數據就可以用挑的,點選上方 Timeseries 的地方就會出現可以選擇的數據,也請留意先前我們並沒有定義要收集何種數據,所以必須要在這個 device 先產生數據才能選得到。

 

當然溫度計要配合溫度數字., 選擇好基本就可以看到成果了

 

在這個系統中,每一個 widget 都有很多屬性是可以自己設定,就可以組合出來很多不同的變化,但我這邊先使用預設值先不作任何更動。

 

這樣第一個 widget 就完成了,

 

 

接下來我使用數位式的儀表板呈現濕度,其過程如上,只是選擇 widget 選不同的項目,Data Source 選擇 Humidity 就有以下這個效果。

 

最後我們作一個 Chart 來作資料收集的比較圖,比較不同的選擇 Chart 是可以允許較多來源的,這樣兩者才有比較基礎,同時這邊是可以設定顯示的時間區間,勾選 Use dashboard timewindows 就是 wiget 自動,不勾選則是 Timewindows 則是讓觀看者自訂,

 

產出的結過就會變成底下的圖示,當然就要多執行幾次 vbs 產生一些資料讓表格有東西可以顯示。

 

以上就能快速地產生一些 IOT 的即時面板。

 

學習心得:

 

  1. 如果目的僅是快速的顯示各項 Sensor 的資料,這套軟體倒是不錯使用,不過在數據分析上就完全不行,必須要透過其他的軟體來達成,例如他可透過 Rule 把資料同時輸入到 Apache Spark 來做分析(https://zh.wikipedia.org/wiki/Apache_Spark)。
  2. 這套軟體不需要事先定義資料結構,所以可以很快速的上手,這個概念倒是蠻新的,在資料儲存上有值得研究的地方,這種方式可以讓 User 快速上手,但是在資料運算,儲存方面比較不利。
  3. 後續其實還有警示(Alarm)的功能尚未測試,這個需要了解 Rule engine 的基本運作及一點點程式撰寫的技巧來達成。
  4. 另外平台也支援由其他IOT機器收集來的資訊,透過 MQTT 的通訊協定把資料傳進來,這個才是正統的做法,但手邊沒有機器也沒有一個特殊目的來玩,實作就需要參考該網站的例子來試試看。

發表迴響

%d 位部落客按了讚: