1. 程式人生 > 實用技巧 >Thingsboard 簡單教程:使用 ThingsBoard 檢視物聯網資料

Thingsboard 簡單教程:使用 ThingsBoard 檢視物聯網資料

好東西分享給大家

==========================================================

什麼是ThingsBoard?

ThingsBoard是一個開源平臺,用於收集和視覺化物聯網裝置的資料。可以將來自任意數量裝置的資料傳送到雲伺服器,在雲伺服器中可以通過可自定義的儀表板檢視或共享。

本指南將介紹如何在Linode上安裝ThingsBoard並使用Raspberry Pi將簡單的遙測資料傳送到雲儀表板。

注意: 本指南將使用帶有Sense HAT的Raspberry Pi 3 。您可以替換任何能夠傳送遙測資料的裝置,或者curl在不使用任何外部裝置的情況下用於試驗ThingsBoard。

安裝ThingsBoard

ThingsBoard在Java 8上執行,建議使用Oracle JDK。

  • 安裝software-properties-common:

sudo apt install software-properties-common

  • 新增Oracle PPA儲存庫:

sudo apt-add-repository ppa:webupd8team/java

  • 更新您的系統:

sudo apt update

  • 安裝Oracle JDK。要安裝Java 9 JDK,java8請java9在命令中更改為:

sudo apt install oracle-java8-installer

  • 檢查您的Java版本:

java -version

設定PostgreSQL

  • 安裝PostgreSQL:

sudo apt install postgresql postgresql-contrib

  • 為ThingsBoard建立資料庫和資料庫使用者:

sudo -u postgres createdb thingsboard sudo -u postgres createuser thingsboard

  • 為thingsboard使用者設定密碼並授予對資料庫的訪問許可權:

sudo -u postgres psql thingsboard ALTER USER thingsboard WITH PASSWORD 'thingsboard'; GRANT ALL PRIVILEGES ON DATABASE thingsboard TO thingsboard; \q

  • 安裝ThingsBoard

下載安裝包。檢查版本頁面,並將以下命令中的版本號替換為標記為最新版本的版本:

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

安裝ThingsBoard:

sudo dpkg -i thingsboard-1.3.1.deb

/etc/thingsboard/conf/thingsboard.yml在文字編輯器中開啟並註釋掉該HSQLDB DAO Configuration部分:

/etc/thingsboard/conf/thingsboard.yml

# HSQLDB DAO Configuration
#spring:
#  data:
#    jpa:
#      repositories:
#        enabled: "true"
#  jpa:
#    hibernate:
#      ddl-auto: "validate"
#    database-platform: "org.hibernate.dialect.HSQLDialect"
#  datasource:
#    driverClassName: "${SPRING_DRIVER_CLASS_NAME:org.hsqldb.jdbc.JDBCDriver}"
#    url: "${SPRING_DATASOURCE_URL:jdbc:hsqldb:file:${SQL_DATA_FOLDER:/tmp}/thingsboardDb;sql.enforce_size=false}"
#    username: "${SPRING_DATASOURCE_USERNAME:sa}"
#    password: "${SPRING_DATASOURCE_PASSWORD:}"

在同一節中,取消註釋PostgreSQL配置塊。用thingsboard使用者名稱和密碼替換使用者名稱和密碼欄位thingsboard:

/etc/thingsboard/conf/thingsboard.yml

# PostgreSQL DAO Configuration
spring:
  data:
    jpa:
      repositories:
        enabled: "true"
  jpa:
    hibernate:
      ddl-auto: "validate"
    database-platform: "org.hibernate.dialect.PostgreSQLDialect"
  datasource:
    driverClassName: "${SPRING_DRIVER_CLASS_NAME:org.postgresql.Driver}"
    url: "${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/thingsboard}"
    username: "${SPRING_DATASOURCE_USERNAME:thingsboard}"
    password: "${SPRING_DATASOURCE_PASSWORD:thingsboard}"
  • 執行此安裝指令碼:

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

  • 啟動ThingsBoard服務:

sudo systemctl enable thingsboard sudo systemctl start thingsboard

NGINX反向代理

localhost:8080預設情況下,ThingsBoard會監聽。出於安全考慮,最好通過反向代理服務儀表板。本指南將使用NGINX,但可以使用任何網路伺服器。

  • 安裝NGINX:

sudo apt install nginx

/etc/nginx/conf.d/thingsboard.conf使用文字編輯器建立並編輯它以匹配下面的示例。替換example.com為您的Linode的公共IP地址或FQDN。

/etc/nginx/conf.d/thingsboard.conf

server {
    listen 80;
    listen [::]:80;

    server_name example.com;

    location / {
        # try_files $uri $uri/ =404;
        proxy_pass http://localhost:8080/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }
}
  • 重啟NGINX:

sudo systemctl restart nginx

設定ThingsBoard裝置

使用Web瀏覽器導航到您的Linode的IP地址。你應該看到ThingsBoard登入頁面:

模擬賬戶登入[email protected]和密碼是tenant。登入後,您應該將其更改為更安全的密碼。

  • 在主選單中,單擊“ 裝置”圖示,然後單擊右下角的+圖示以新增新裝置。

  • 選擇裝置名稱。將裝置型別設定為PI。

  • 新增裝置後,單擊“ 裝置”選單中的圖示。單擊COPY ACCESS TOKEN複製此裝置的API金鑰(在下面使用)。
    配置Raspberry Pi

注意以下步驟假定您具有對Raspberry Pi的終端訪問許可權,並且已配置Sense HAT及其庫。有關Sense HAT入門的更多資訊,請參閱Raspberry Pi 官方文件。如果您更願意使用curl將模擬資料傳送到ThingsBoard,則可以跳過本節。

  • 基本Python指令碼

使用文字編輯器,thingsboard.py在您選擇的目錄中建立。使用上一節中複製到剪貼簿的API金鑰新增以下內容:

thingsboard.py

#!/usr/bin/env python

import json
import requests
from sense_hat import SenseHat
from time import sleep

# Constants

API_KEY          = "<ThingsBoard API Key>"
THINGSBOARD_HOST = "<Linode Public IP Address>"

thingsboard_url  = "http://{0}/api/v1/{1}/telemetry".format(THINGSBOARD_HOST, API_KEY)

sense = SenseHat()


data = {}

while True:
    data['temperature'] = sense.get_temperature()
    data['pressure']    = sense.get_pressure()
    data['humidity']    = sense.get_humidity()

    #r = requests.post(thingsboard_url, data=json.dumps(data))
    print(str(data))
    sleep(5)

通過從命令列執行指令碼來測試指令碼:

python thingsboard.py

基本遙測應每五秒列印到控制檯:

{'pressure': 1020.10400390625, 'temperature': 31.81730842590332, 'humidity': 19.72637939453125}
{'pressure': 1020.166259765625, 'temperature': 31.871795654296875, 'humidity': 20.247455596923828}
{'pressure': 1020.119140625, 'temperature': 31.908119201660156, 'humidity': 19.18065643310547}
{'pressure': 1020.11669921875, 'temperature': 31.908119201660156, 'humidity': 20.279142379760742}
{'pressure': 1020.045166015625, 'temperature': 31.92628288269043, 'humidity': 20.177040100097656}

如果指令碼正常工作,請刪除該print語句並取消註釋該r = requests.post()行。還要增加sleep()時間間隔:

thingsboard.py

while True:
    data['temperature'] = sense.get_temperature()
    data['pressure']    = sense.get_pressure()
    data['humidity']    = sense.get_humidity()

    r = requests.post(thingsboard_url, data=json.dumps(data))
    sleep(60)

建立系統服務

您現在應該能夠從命令列執行指令碼,每分鐘傳輸一次溫度,壓力和溼度資料。但是,為了確保持續傳送資料,最好啟用一個新服務,該服務將在伺服器重新啟動時自動執行指令碼。

  • 將指令碼複製到/usr/bin/並使其可執行:

sudo cp thingsboard.py /usr/bin/thingsboard.py sudo chmod +x /usr/bin/thingsboard.py

  • 建立服務檔案以將Python指令碼作為服務執行:

/lib/systemd/system/thingsdata.service

[Unit]
Description=Push telemetry data from Sense HAT to ThingsBoard.

[Service]
Type=simple
ExecStart=/usr/bin/thingsboard.py

[Install]
WantedBy=multi-user.target
  • 啟用並啟動服務:

sudo systemctl enable thingsdata.service sudo systemctl start thingsdata.service

  • 檢查新服務的狀態:

sudo systemctl status thingsdata.service

使用cURL傳送資料

注意: 如果您使用的是Raspberry Pi,請跳過此部分。

  • 使用虛擬資料建立示例JSON檔案:
dummy_data.json
{
  "temperature": 38,
  "humidity": 50,
  "pressure": 1100
}

用於curl向ThingsBoard伺服器傳送POST請求:

curl -v -X POST -d @dummy_data.json http://$THINGSBOARD_HOST:$THINGSBOARD_PORT/api/v1/$ACCESS_TOKEN/telemetry --header "Content-Type:application/json"

檢視ThingsBoard中的資料

如果服務成功執行,則應每隔60秒將資料傳輸到ThingsBoard伺服器。

  • 重新登入瀏覽器中的ThingsBoard儀表板,然後在“ 裝置”選單中單擊裝置的卡。從結果詳細資訊頁面中選擇最新的遙測選項卡。您應該看到裝置的溫度,溼度和壓力資料:

  • 單擊其中一種資料型別旁邊的複選框,然後單擊“在小元件上顯示”。

  • 使用下拉選單和輪播選單選擇一個預設小元件,以在儀表板上顯示此資料型別。選擇視窗小部件後,單擊“ 新增到儀表板”。

下一步

ThingsBoard提供的小部件可以輕鬆編輯,也可以建立新的小部件。可以組合表示來自多個裝置的多個數據流的多個小部件,以生成定製的儀表板。然後,這些儀表板可以公開或與客戶共享。

有關如何自定義和設定控制元件和儀表盤的更多資訊,請參閱ThingsBoard 部件庫和儀表板頁面的ThingsBoard Github上回購也有例如儀表板的影象。

更多資訊

有關此主題的其他資訊,您可能需要參考以下資源。雖然提供這些是希望它們有用,但請注意,我們無法保證外部託管材料的準確性或及時性。

入門 - ThingsBoard

ThingsBoard Github Repo

來源:https://cloud.tencent.com/developer/article/1343322

感謝社群,感謝作者,源與社群一起進步:

IoTSchool物聯網社群Q群:121202538

Thingsboard 話題討論區:https://forum.iotschool.com/topics/node8

歡迎大家加入thingsboard 二次開發討論群:121202538