使用ThingsBoard查看物联网数据

什么是ThingsBoard?

ThingsBoard是一个开源平台,用于收集和可视化物联网设备的数据。可以将来自任意数量设备的数据发送到云服务器,在云服务器中可以通过可自定义的仪表板查看或共享。

本指南将介绍如何在Linode上安装ThingsBoard并使用Raspberry Pi将简单的遥测数据发送到云仪表板。

注意: 本指南将使用带有Sense HAT的Raspberry Pi 3 。您可以替换任何能够发送遥测数据的设备,或者curl在不使用任何外部设备的情况下用于试验ThingsBoard。

安装ThingsBoard

ThingsBoard在Java 8上运行,建议使用Oracle JDK。

  1. 安装software-properties-common: sudo apt install software-properties-common
  2. 添加Oracle PPA存储库: sudo apt-add-repository ppa:webupd8team/java
  3. 更新您的系统: sudo apt update
  4. 安装Oracle JDK。要安装Java 9 JDK,java8java9在命令中更改为: sudo apt install oracle-java8-installer
  5. 检查您的Java版本: java -version

设置PostgreSQL

  1. 安装PostgreSQL: sudo apt install postgresql postgresql-contrib
  2. 为ThingsBoard创建数据库和数据库用户: sudo -u postgres createdb thingsboard sudo -u postgres createuser thingsboard
  3. 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设备

  1. 使用Web浏览器导航到您的Linode的IP地址。你应该看到ThingsBoard登录页面:

模拟账户登录tenant@thingsboard.org和密码是tenant。登录后,您应该将其更改为更安全的密码。

  1. 在主菜单中,单击“ 设备”图标,然后单击右下角的+图标以添加新设备。
  2. 选择设备名称。将设备类型设置为PI
  3. 添加设备后,单击“ 设备”菜单中的图标。单击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
}
  1. 用于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上回购也有例如仪表板的图像。

更多信息

有关此主题的其他信息,您可能需要参考以下资源。虽然提供这些是希望它们有用,但请注意,我们无法保证外部托管材料的准确性或及时性。

更多教程请前往腾讯云+社区学习更多知识。


参考文献:《https://www.linode.com/docs/development/iot/install-thingsboard-iot-dashboard/

本文的版权归 阿小庆 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Kubernetes

原 荐 基于Kubernetes的ESaaS

概述 ESaaS(ElasticSearch as a Service)是ElasticSearch on Kubernetes的产品实现,是利用Docker和...

3346
来自专栏达摩兵的技术空间

mac总是卡死折腾记

如果你确认你mac是硬件ok,但是在某些程序运行的时候导致内存飙升,比如最明显吃内存的chrome,这时候可能就是你内存分配的一些问题,近期我就根据apple ...

1404
来自专栏雨过天晴

转 树莓派无显示器安装系统

1752
来自专栏GopherCoder

Python:一周笔记

1704
来自专栏菩提树下的杨过

docker学习(2) mac中docker-machine使用vmware fusion以及配置国内镜像加速

一、前言 先回顾下上一节创建docker-machine的过程,默认情况下docker toolbox中的docker-machine使用virtual box...

30910
来自专栏张善友的专栏

SQL Server Performance Dashboard Reports

SQL Server Performance Dashboard Reports是一组Reporting Services的报表,和SQL Server Man...

2148
来自专栏Hadoop数据仓库

HAWQ技术解析(十五) —— 备份恢复

一、为什么还需要备份         HAWQ作为一个数据库管理系统,备份与恢复是其必备功能之一。HAWQ的用户数据存储在HDFS上,系统表存储在master节...

2509
来自专栏皮振伟的专栏

[qemu][io]虚拟化IO latency监控

前言: Linux的很多监控组件,主要针对IOPS和IO带宽进行监控。很多业务场景下,希望对IO的延迟做监控。单纯的await并不能反映出来IO的延迟具体情况。...

2012
来自专栏Java3y

纳税服务系统总结

纳税服务系统总结 纳税服务系统是我第一个做得比较大的项目(不同于javaWeb小项目),该项目系统来源于传智Java32期,十天的视频课程(想要视频的同学关注我...

3029
来自专栏自由而无用的灵魂的碎碎念

实战解决使用ghost安装系统出现的各种问题

昨天使用ghost给人安装系统时,把另一个分区的数据都搞没了,安装完也只剩下一个分区,相信了解的同志们知道是什么原因。

1463

扫码关注云+社区

领取腾讯云代金券