Thingsboard và những công nghệ liên quan-OPC UA

Tích hợp OPC-UA và Thingsboard

Trên hệ điều hành CentOS

dòng ngang

https://opcdatahub.com/Images/060313_OPC_1.gif

Giới thiệu

Tài liệu này sẽ hướng dẫn các bạn:

  • Kết nối với local KEPServerEX chạy trên window.
  • Truyền tải dữ liệu OPC-UA đến Thingsboard
  • Hiển thị dữ liệu OPC-UA lên Thingsboard

Giả sử như bạn đã cài đặt KEPServerEX trên window

SCADA là gì?

SCADA (Supervisory Control And Data Acquisition) hiểu theo nghĩa truyền thống là một hệ thống điều khiển giám sát và thu thập dữ liệu. Nhằm hỗ trợ con người trong quá trình giám sát và điều khiển từ xa.

Hệ thống SCADA đóng vai trò quan trọng với công nghiệp. SCADA đảm bảo sự hiệu quả cho dây chuyền sản xuất, xử lí dữ liệu để đưa ra những quyết định (decision), và kịp thời quản lí các vấn đề phát sinh trong hệ thống công nghiệp.

Một hệ thống SCADA bao gồm:

  • Các cảm biến (sensors) được kết nối với các PLC
  • Các PLC
  • Các HMI (Human-Machine Interface) panel và HMI Computer

Hệ thống SCADA hiện đại – OPC

Hệ thống SCADA hiện đại được kết nối thông qua OPC.

OPC (Open Platform Communications) là các chuẩn đặc trưng trong viễn thông công nghiệp, nguồn gốc từ chuẩn giao tiếp OLE for Process Control (Object Linking and Embeded for Process Control) được phát triển năm 1996.

OPC-DA

OPC-DA (OPC Data Access) là chuẩn giao tiếp đặc trưng để truyền tải dữ liệu thực (real-time data) giữa nguồn dữ liệu (data source) và nơi chứa dữ liệu (data sink) mà không cần thông qua các giao tiếp vốn có của chúng.

Năm 1994, đặc tả OPC đầu tiên là OPC Data Access hay là OPC truy cập dữ liệu thời gian thực quy định cách thức truy cập SCADA (Client) đến PLC thông qua phần mềm (Server) chạy trên máy tính hệ điều hành Windows. Hiện nay các phần mềm SCADA kết nối với các PLC thông qua 3 cách phổ biến:

  • Thông qua driver trực tiếp. SCADA sử dụng các hàm đọc/ghi/cấu hình ở trong file driver (DLL) để truy cập đến PLC;
  • Thông qua DDE Server, SCADA đóng vai trò là DDE Client;
  • Thông qua OPC Server, SCADA đóng vai trò là OPC Client (OPC ở đây là OPC DA). Thực tế người dùng (kỹ sư lập trình SCADA) hay dùng driver trực tiếp để kết nối với PLC. Khi không có driver trực tiếp, người dùng mới sử dụng OPC DA bởi một số điểm hạn chế của OPC DA;

OPC-UA

OPC-UA (OPC Unified Architecture) được hiểu là một chuẩn truyền thông bậc cao độc lập, được phát triển bởi hiệp hội OPC Foundation, nhưng OPC-UA hoàn toàn khác trước so với đặc tả đàn anh của mình OPC DA. Chính vì vậy OPC UA được hiểu bằng cụm từ Open Platform Communication (OPC) Unified Architecture (UA) nhằm tránh đi cụm từ đã không hợp thời OLE for Process Control của OPC DA và những đặc tả khác.

OPC DA hoàn toàn là hệ điều hành phụ thuộc trong khi OPC-UA độc lập với hệ điều hành. Một số ứng dụng OPC UA SDK có thể được tạo trên một nền tảng mà hệ điều hành không có mặt.

Cách giao tiếp của OPC-DA là COM /DCOM còn OPC-UA là TCP/IP hoặc HTTPS.

Máy chủ OPC UA có thể là hệ điều hành độc lập (hoàn toàn phụ thuộc vào loại SDK). Trong tương lai nếu muốn di chuyển sang bất kỳ hệ điều hành nào thì nó sẽ không bị ảnh hưởng trước.

Tích hợp OPC-UA với Thingsboard

Hệ thống

Cài đặt và khởi động Thingsboard Gateway

Cũng như Thingsboard, Thingsboard Gateway yêu cầu Java 8. Download phiên bản mới nhất của Thingsboard Gateway tại:

https://github.com/thingsboard/thingsboard-gateway/releases

Sau khi đã tải tb-gateway về, thực thi câu lệnh:

rpm -Uvh tb-gateway-

your_version.rpm

Thay you_version bằng version bạn đã tải về

Sau đó khởi động Thingsboard Gateway dưới dạng service của CentOS

sudo service tb-gateway start

Sau đó, vào đăng nhập vào Thingsboard Web UI > Vào mục Devices tạo thiết bị và tick vào ô Is Gateway

Sau khi đã tạo Devices là gateway, ta vào lấy ACCESS_TOKEN

Sau khi lấy ACCESS_TOKEN ta vào chỉnh sửa file config của Gateway:

sudo vi /etc/tb-gateway/conf/tb-gateway.yml

Ở phần

connection:

host: “${GATEWAY_HOST:YOUR_HOST}”

port: 1883

retryInterval: 3000

maxInFlight: 1000

security:

accessToken: “${GATEWAY_ACCESS_TOKEN:YOUR_TOKEN}”

thay YOUR_HOST và YOUR_TOKEN bằng host của Thingsboard (nếu bạn cài đặt Thingsboard và Thingsboard Gateway ở chung một server thì sẽ là localhost) và ACCESS_TOKEN lấy từ phần ở trên.

Bước 2: Cấu hình cho KEPServerEX

Bước 2.1: Cung cấp xác thực của gateway cho KEPServerEX

Mở cửa sổ OPC UA Configuration Manager > Hướng đến tab Trusted Clients

Import file example.der từ folder configuration của gateway được lưu tại:

Linux: /etc/tb-gateway/conf

*Lưu ý: Nếu như certificate hết hạn, bạn có thể generate sử dụng lệnh:

keytool -genkeypair -v -alias gateway -dname “CN=Thingsboard Gateway, OU=TB, O=ThingsBoard, L=San Francisco, ST=CA, C=US” -keystore example.jks -keypass secret -storepass secret -keyalg RSA -keysize 2048 -validity 9999keytool -importkeystore -srckeystore example.jks -destkeystore example.pfx -srcstoretype JKS -deststoretype PKCS12 -srcstorepass secret -deststorepass secret -srcalias gateway -destalias gateway -srckeypass secret -destkeypass secret -nopromptkeytool -exportcert -alias gateway -keypass secret -keystore example.pfx -storepass secret -file example.der

image

Bước 2.2: Thêm server endpoint cho KEPServerEX

Nếu như bạn cài đặt KEPServerEX với Thingsboard Gateway ở hai server khác nhau thì KEPServerEX cần được tùy chỉnh để remote connection.

Mở OPC UA Configuration Manager > Hướng đến tab Server Endpoints và cấu hình

image

Bước 3: Kích hoạt OPC-UA extension.

Mở file

sudo vi /etc/tb-gateway/conf/tb-gateway.yml

Tìm dòng

extensions:

id: “http”

type: “HTTP”

extensionConfiguration: http-config.json

Thêm vào:

id: “opc”

type: “OPC UA”

extensionConfiguration: opc-config.json

Mở file

sudo vi /etc/tb-gateway/conf/opc-config.json

Chỉnh sửa như code

“servers”: [

{

“applicationName”: “Thingsboard OPC-UA client”,

“applicationUri”: “”,

“host”: “YOUR_KEPSERVEREX_HOST”,

“port”: YOUR_PORT,

“scanPeriodInSeconds”: 10,

“timeoutInMillis”: 5000,

“security”: “Basic128Rsa15”,

“identity”: {

“type”: “anonymous”

},

“keystore”: {

“type”: “PKCS12”,

“location”: “example.pfx”,

“password”: “secret”,

“alias”: “gateway”,

“keyPassword”: “secret”

},

“mapping”: [

{

“deviceNodePattern”: “Channel1.Device1”,

“deviceNamePattern”: “Device ${_System._DeviceId}”,

“attributes”: [

{

“key”: “Tag1”,

“type”: “string”,

“value”: “${Tag1}”

}

],

“timeseries”: [

{

“key”: “Tag2”,

“type”: “long”,

“value”: “${Tag2}”

}

]

}

]

}

]

*Lưu ý: Những giá trị YOUR_HOST, YOUR_PORT là tùy chỉnh theo từng máy

Bước 4: Truyền dữ liệu

Tạo file opc-ua-extension.json với nội dung

[{

“id”: “opc”,

“type”: “OPC UA”,

“configuration”: {

“servers”: [

{

“applicationName”: “Thingsboard OPC-UA client”,

“applicationUri”: “”,

“host”: “YOUR_KEPSERVEREX_HOST”,

“port”: YOUR_PORT,

“scanPeriodInSeconds”: 10,

“timeoutInMillis”: 5000,

“security”: “Basic128Rsa15”,

“identity”: {

“type”: “anonymous”

},

“keystore”: {

“type”: “PKCS12”,

“location”: “example.pfx”,

“password”: “secret”,

“alias”: “gateway”,

“keyPassword”: “secret”

},

“mapping”: [

{

“deviceNodePattern”: “Channel1.Device1”,

“deviceNamePattern”: “Device ${_System._DeviceId}”,

“attributes”: [

{

“key”: “Tag1”,

“type”: “string”,

“value”: “${Tag1}”

}

],

“timeseries”: [

{

“key”: “Tag2”,

“type”: “long”,

“value”: “${Tag2}”

}

]

}

]

}

]

}

}]

Sau đó import vào phần Extension của Device Gateway vừa tạo ở trên

*Lưu ý:

Ở phần

“deviceNodePattern”: “Channel1.Device1”,

Cần chỉnh sửa sao cho phù hợp với tên node trên KEPServerEX.

Thingsboard và những công nghệ liên quan – R

Tích hợp Cassandra và Spark sử dụng ngôn ngữ thống kê R

Trên hệ điều hành CentOS

dòng ngang

Giới thiệu

Tổng quan về R

R là một công cụ rất mạnh cho học máy, thống kê và phân tích dữ liệu. Nó là một ngôn ngữ lập trình.

Ngôn ngữ R là mã nguồn mở nên ai trong chúng ta cũng có thể phân tích source code để hiểu được chính xác cách R vận hành. Bất kỳ ai cũng có thể thêm tính năng và fix bug mà không cần chờ nhà phát hành ra bản vá. Đồng thời, R có thể tích hợp được với ngôn ngữ khác (C,C++).

Spark là gì?

Apache Spark là một open source cluster computing framework được phát triển sơ khởi vào năm 2009.

Thành phần trung của Spark là Spark Core: cung cấp những chức năng cơ bản nhất của Spark như lập lịch cho các tác vụ, quản lý bộ nhớ, fault recovery, tương tác với các hệ thống lưu trữ…Đặc biệt, Spark Core cung cấp API để định nghĩa RDD (Resilient Distributed DataSet) là tập hợp của các item được phân tán trên các node của cluster và có thể được xử lý song song.

Spark có thể chạy trên nhiều loại Cluster Managers như Hadoop YARN, Apache Mesos hoặc trên chính cluster manager được cung cấp bởi Spark được gọi là Standalone Scheduler.

Cassandra là gì?

Cassandra là một quản trị hệ cơ sở dữ liệu phân tán mã nguồn mở được thiết kế để xử lý một khối lượng lớn dữ liệu dàn trải trên nhiều node mà vẫn đảm bảo tính sẵn sàng cao (Highly Availability), khả năng mở rộng hay thu giảm số node linh hoạt (Elastic Scalability) và chấp nhận một số lỗi (Fault Tolerant).

Đặc điểm của Cassandra:

  • Tính phân tán và không tập trung (distributed and decentralized)
  • Tính mềm dẻo (elastic scalability)
  • High availability
  • Fault tolerance
  • Column oriented key-value store

Cách cài đặt

Giả sử như tất cả các package cơ bản như jdk, wget, git đã được cài đặt

Cài đặt Spark

Download spark trên trang chủ http://spark.apache.org/downloads.html

wget http://mirror.downloadvn.com/apache/spark/spark-2.4.0/spark-2.4.0-bin-hadoop2.7.tgz

Sau đó tiến hành khai báo SPARK_HOME và PATH

export SPARK_HOME=/home/spark/

export PATH=$PATH:$SPARK_HOME/bin/

Sau đó khởi động host master và slave của spark

./$SPARK_HOME/sbin/start-master.sh

./$SPARK_HOME/sbin/start-slave.sh “MASTER_URL”

“MASTER_URL” có thể được lấy bằng các truy cập localhost:8080 (trường hợp thingsboard đang chạy WebUI ở port 8080 thì port sẽ chuyển thành 8081

Cài đặt và khởi động sparkR

Chạy commandline:

yum install R R-devel libcurl-devel openssl-devel libxml2-devel

Nếu đã khai báo PATH cho spark ta có thể khởi động trực tiếp sparkR

sparkR –packages com.datastax.spark:spark-cassandra-connector_2.11:2.4.0 –conf spark.cassandra.connection.host=127.0.0.1

spark-cassandra-connector là package sử dụng để kết nối cassandra với sparkR (default port của cassandra là 9042)

Danh sách các spark-cassandra-connector:

https://spark-packages.org/package/datastax/spark-cassandra-connector

Cài đặt các gói R cần thiết

install.packages(“devtools”)

devtools::install_github(‘apache/spark@v{SPARK_VERSION}’,

subdir=’R/pkg’)

install.packages(“sparklyr”)

install.packages(“dplyr”)

spark_install(version = “2.4.0”)

Cài đặt Cassandra

Sử dụng

vi cassandra-installation.sh

tạo file cassandra-installation.sh có nội dung như sau:

# Add cassandra repository

sudo touch /etc/yum.repos.d/datastax.repo

echo ‘[datastax]’ | sudo tee –append /etc/yum.repos.d/datastax.repo > /dev/null

echo ‘name = DataStax Repo for Apache Cassandra’ | sudo tee –append /etc/yum.repos.d/datastax.repo > /dev/null

echo ‘baseurl = http://rpm.datastax.com/community’ | sudo tee –append /etc/yum.repos.d/datastax.repo > /dev/null

echo ‘enabled = 1’ | sudo tee –append /etc/yum.repos.d/datastax.repo > /dev/null

echo ‘gpgcheck = 0’ | sudo tee –append /etc/yum.repos.d/datastax.repo > /dev/null

# Cassandra installation

sudo yum install dsc30

# Tools installation

sudo yum install cassandra30-tools

# Start Cassandra

sudo service cassandra start

# Configure the database to start automatically when OS starts.

sudo chkconfig cassandra on

Sau đó sử dụng câu lệnh

chmod +x cassandra-installation.sh

để chạy

./cassandra-installation.sh

Load data frame từ Cassandra vào R

library(sparklyr)

library(dplyr)

sc <- sparkR.session(master = “local”)

dataframe <- read.df(path = NULL, source = “org.apache.spark.sql.cassandra”, keyspace = “thingsboard”, table = “ts_kv_cf”)

r_df <- as.data.frame(dataframe[, c(‘ts’,’long_v’)])

Cassandra được load vào SparkR dưới dạng SparkData Frame, để có thể sử dụng các thao tác tính toán phân tích trên R, ta phải add SparkDataFrame thành R’s DataFrame bằng lệnh as.data.frame

Cài đặt plumber để tạo REST API

Để Spark có thể giao tiếp với bên ngoài, ta sử dụng plumber tạo REST API cho spark.

Cài đặt thư viện plumber:

install.packages(“plumber”)

Và import vào chương trình:

library(plumber)

Để chạy code có API từ plumber, từ Spark ta dùng lệnh:

plumber::plumb(“plumber.R”)$run(port = 5762)

Lưu ý rằng port sử dụng không được trùng với service nào đang chạy trên hệ thống

Code mẫu plumber.R:

library(plumber)

library(sparklyr)

library(dplyr)

library(dbplyr)

library(ggplot2)

sc <- sparkR.session(master = “local”)

dataframe <- read.df(path = NULL, source = “org.apache.spark.sql.cassandra”, keyspace = “thingsboard”, table = “ts_kv_cf”)

#* @apiTitle Predict API

#* Predict next value

#* $param result

#* @get /sum

function() {

r_df <- as.data.frame(dataframe[, c(‘ts’,’long_v’)])

sum(r_df[1:20,c(‘long_v’)])

}

Thingsboard và những công nghệ liên quan – Gatling

Sử dụng Gatling.io trong performance test

Sử dụng ngôn ngữ Scala

dòng ngang

Image result for gatling.io

Giới thiệu

Tổng quan về Gatling

Muốn đảm bảo cho service hoạt động tốt thì việc kiểm thử “áp lực” (stress test) là một quy trình không thể thiếu trong performance testing.

Stress test giúp chúng ta phát hiện các nghẽn cổ chai (bottleneck) của hệ thống, qua đó giúp chúng ta tránh khỏi việc service bị ngưng hoạt động một cách đột ngột.

Gatling là một công cụ sử dụng trong stress test. Sử dụng ngôn ngữ scala để phát triển test case, Gatling cung cấp cho người dùng một testing framework có khả năng tạo tải, kiểm thử service và xuất report dạng html.

Chức năng của Gatling

  • Test theo scenario sử dụng scenario script viết bằng scala ( gatling script cực kì dễ viết 😉 )
  • Report kết quả bằng html file với giao diện đẹp và rất dễ nhìn
  • Trang bị sẵn “recorder” giúp các bạn có thể tạo scenario bằng việc “record” lại các thao tác trên browser.

Cài đặt

Để chạy được Gatling.io, ta cần cài đặt môi trường JDK 8 (Java SE Development Kit 8)

*Lưu ý: Gatling.io chỉ tương thích với phiên bản JDK 8

sudo apt install openjdk-8-jdk -y

Tải gói Gatling.io

wget https://repo1.maven.org/maven2/io/gatling/highcharts/gatling-charts-highcharts-bundle/3.1.2/gatling-charts-highcharts-bundle-3.1.2-bundle.zip

Với phiên bản bundle (gatling-charts-highcharts-bundle-3.0.3-bundle.zip) chúng ta chỉ cần giải nén là có thể sử dụng được

Cấu trúc thư mục:

  • bin: Chứa các script thực hiện Gatling và Recorder
  • conf: Chứa cấu hình cho Gatling như Log, Report, ..
  • lib: Chứa thư viên sử dụng bởi Gatling
  • user-files: Chứa dữ liệu người dùng
  • simulations: Chứa các kịch bản test (Scale file).
  • data: Chứa các dữ liệu mẫu (Feeder files)
  • bodies: Chứa template cho Request ảo
  • results: Chứa kết quả sau những lần thực hiện test

Sử dụng

Cấu trúc test case

Một gatling testcase có rất nhiều thành phần tùy vào độ phức tạp của tác vụ. Testcase đơn giản nhất sẽ bao gồm:

  1. Khai báo thư viện
  2. Kịch bản

Chạy kịch bản

Cách 1:

Khởi động Gatling

cd gatling-charts-highcharts-bundle-3.0.3/bin./gatling.sh

Chọn kịch bản vừa quay

GATLING_HOME is set to /home/thanhnb/Bench/gatling-charts-highcharts-bundle-3.0.3

Choose a simulation number:

[0] LandingBench

[1] computerdatabase.AdvancedSimulation01

[2] computerdatabase.BasicSimulation

[3] computerdatabase.advanced.AdvancedSimulationStep01

[4] computerdatabase.advanced.AdvancedSimulationStep02

[5] computerdatabase.advanced.AdvancedSimulationStep03

[6] computerdatabase.advanced.AdvancedSimulationStep04

[7] computerdatabase.advanced.AdvancedSimulationStep05

1 < CHỌN 1 ĐÚNG KỊCH BẢN VỪA QUAY>

Select run description (optional)

<ENTER TẠI ĐÂY>

Simulation RecordedSimulation started…

Kết quả

Reports generated in 0s.Please open the following file: /home/thanhnb/Bench/gatling-charts-highcharts-bundle-3.0.3/results/advancedsimulation01-20190324145718601/index.html

Thay đổi tải mô phỏng

Để thay đổi tải mô phỏng, chúng ta sẽ sửa lại block setup trong script.

Mẫu 1: Thực hiện 1 user đồng thời

setUp(

scn.inject(

atOnceUsers(1)

)

).protocols(httpProtocol)

Mẫu 2: Thực hiện 10 user đồng thời

setUp(

scn.inject(

atOnceUsers(10)

)

).protocols(httpProtocol)

Cách 2:

Vào thư mục gatling:

cd gatling-charts-highcharts-bundle-3.0.3/

Chạy lệnh:

mvn gatling:test

Sử dụng gatling với IDE

Gatling có thể sử dụng với IntelliJ IDE, tạo project sử dụng maven archetype

Ta sẽ được project như hình bên:

Thingsboard và những công nghệ liên quan – Cách cài đặt

Cách cài đặt thingsboard

Trên hệ điều hành CentOS

dòng ngang

Image result for thingsboardCác bước cài đặt

B1: Cài đặt JDK 8

yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel

B2: Cài đặt wget

yum install wget

B3: Tải gói cài đặt thingsboard với 2.x.x là phiên bản mới nhất của thingsboard

wget https://github.com/thingsboard/thingsboard/releases/download/v2.x.x/thingsboard-2.x.x.deb

B4: Cài đặt thingsboard dưới dạng service

sudo rpm -Uvh thingsboard-2.1.rpm

B5: Chạy script cài đặt

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

Log cài đặt thành công:

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

:: ThingsBoard :: (v2.1)

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

Starting ThingsBoard Installation…

Installing DataBase schema…

Installing Cassandra DataBase schema…

Loading system data…

Installation finished successfully!

2017-07-23 21:47:12,079 INFO – Starting ServiceWrapper in the CLI mode

2017-07-23 21:47:12,317 INFO – Completed. Exit code is 0

ThingsBoard installed successfully!

B6: Khai báo tường lửa:

firewall-cmd –permanent –add-port=8080/tcp (for default)

firewall-cmd –permanent –add-port=80/tcp (for port 80)

firewall-cmd –permanent –add-port=1883/tcp (for MQTT)

firewall-cmd –reload

B7: Chạy thingsboard service

sudo service thingsboard start

[OPTIONAL] Hiệu chỉnh database và port cho thingsboard

Các config cho thingsboard được lưu vào file thingsboard.yml, để truy xuất file ta dùng lệnh:

sudo nano /etc/thingsboard/conf/thingsboard.yml

Config database

Ngoài database mặc địnhlà HSQLDB (Hyper SQL database), thingsboard còn có thể cài đặt trên Postgre SQL và Cassandra

Comment ‘# HSQLDB block để code không build HSQLDB

# 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}/thingsboard

Db;sql.enforce_size=false}”

#   username: “${SPRING_DATASOURCE_USERNAME:sa}”

#   password: “${SPRING_DATASOURCE_PASSWORD:}”

Để cài đặt thingsboard trên PostgreSQL:

Bỏ comment ‘# PostgreSQL DAO trên block config

# 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:postgres}”

password: “${SPRING_DATASOURCE_PASSWORD:postgres}”

For Cassandra DB:

Xác định và chuyển config thành ‘cassandra’.

database:

entities:

type: “${DATABASE_ENTITIES_TYPE:cassandra}” # cassandra OR sql

ts:

type: “${DATABASE_TS_TYPE:cassandra}” # cassandra OR sql (for hybrid mode, only this value should be cassandra)

Lưu ý

Nếu ở B5 ta gõ lệnh

sudo /usr/share/thingsboard/bin/install/install.sh (không có loadDemo)

thì ta phải tự tạo account tenant admin bằng cách:

+B1: Đăng nhập sysadmin

Username: sysadmin@thingsboard.org

Password: sysadmin

+B2: Tạo account tenant admin

Troubleshooting

Log của thingsboard được lưu thư mục có đường dẫn

/var/log/thingsboard

Để truy xuất log và lỗi, ta dùng lệnh:

cat /var/log/thingsboard/thingsboard.log

cat /var/log/thingsboard/thingsboard.log | grep ERROR

Các lỗi thường gặp

1. Khởi động thingsboard thành công nhưng không vào được web

Nguyên nhân có thể do:

-Chưa khai báo tường lửa

-Thingsboard đang chạy trùng port với một service khác

Nếu chưa khai báo tường lửa ta dùng lệnh

firewall-cmd –permanent –add-port=[port]/tcp

firewall-cmd –reload

Nếu thingsboard đang chạy trùng port với một service khác, ta truy xuất file thingsboard.yml

và tìm dòng HTTP_BIND_PORT và đổi port sử dụng, sau đó restart lại service thingsboard bằng câu lệnh:

service thingsboard restart

2. Không vào được account tenant admin

Nguyên nhân có thể là B5 không gõ –loadDemo, xem thêm phần “Lưu ý” để biết thêm

3. Cài đặt không thành công, reinstall báo lỗi database

Lúc này bạn tìm folder thingsboard\data\sql và xóa tất cả các file trừ những file:

schema.sql

system-data.sql

Vào Cassandra remove keyspace thingsboard

Chạy script install.sh để cài đặt lại.