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
安装ThingsBoard:
sudo dpkg -i thingsboard-1.3.1.deb
/etc/thingsboard/l在⽂本编辑器中打开并注释掉该HSQLDB DAO Configuration部分:
/etc/thingsboard/l
# 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}/force_size=false}"
#    username: "${SPRING_DATASOURCE_USERNAME:sa}"
#    password: "${SPRING_DATASOURCE_PASSWORD:}"
在同⼀节中,取消注释PostgreSQL配置块。⽤thingsboard⽤户名和密码替换⽤户名和密码字段thingsboard:
/etc/thingsboard/l
# 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.f使⽤⽂本编辑器创建并编辑它以匹配下⾯的⽰例。替换example为您的Linode的公共IP地址或FQDN。
/etc/nginx/conf.f
server {
listen 80;
listen [::]:80;
server_name example;
location / {
# try_files $uri $uri/ =404;
proxy_pass localhost:8080/;
proxy_http_version 1.1;
json检查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登录页⾯:
模拟账户登录和密码是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  = "{0}/api/v1/{1}/telemetry".format(THINGSBOARD_HOST, API_KEY)
sense = SenseHat()
data = {}
while True:
data['temperature'] = _temperature()
data['pressure']    = _pressure()
data['humidity']    = _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.0451********, 'temperature': 31.92628288269043, 'humidity': 20.177040100097656}
如果脚本正常⼯作,请删除该print语句并取消注释该r = requests.post()⾏。还要增加sleep()时间间隔:
thingsboard.py
while True:
data['temperature'] = _temperature()
data['pressure']    = _pressure()
data['humidity']    = _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 $THINGSBOARD_HOST:$THINGSBOARD_PORT/api/v1/$ACCESS_TOKEN/telemetry --header "Content-Type:application/json"
查看ThingsBoard中的数据
如果服务成功运⾏,则应每隔60秒将数据传输到ThingsBoard服务器。
重新登录浏览器中的ThingsBoard仪表板,然后在“ 设备”菜单中单击设备的卡。从结果详细信息页⾯中选择最新的遥测选项卡。您应该看到设备的温度,湿度和压⼒数据:
单击其中⼀种数据类型旁边的复选框,然后单击“在⼩组件上显⽰”。
使⽤下拉菜单和轮播菜单选择⼀个预设⼩组件,以在仪表板上显⽰此数据类型。选择窗⼝⼩部件后,单击“ 添加到仪表板”。
下⼀步
ThingsBoard提供的⼩部件可以轻松编辑,也可以创建新的⼩部件。可以组合表⽰来⾃多个设备的多个数据流的多个⼩部件,以⽣成定制的仪表板。然后,这些仪表板可以公开或与客户共享。
有关如何⾃定义和设置控件和仪表盘的更多信息,请参阅ThingsBoard 部件库和仪表板页⾯的ThingsBoard Github上回购也有例如仪表板的图像。
更多信息
有关此主题的其他信息,您可能需要参考以下资源。虽然提供这些是希望它们有⽤,但请注意,我们⽆法保证外部托管材料的准确性或及时性。
来源:
感谢社区,感谢作者,源与社区⼀起进步:
IoTSchool物联⽹社区Q:121202538
Thingsboard 话题讨论区:
欢迎⼤家加⼊thingsboard ⼆次开发讨论:121202538

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。