ThingsBoard-Gateway(Java版)在树莓派上的使用-ModBus协议


前言

ThingsBoard GateWay 是在ThingsBoard下的一款高度集成遗留系统和第三方系统上联接设备的开源解决方案。
具有以下几个特点:

  • MQTT扩展 - 于控制、配置和收集使用现有协议连接到外部MQTT代理的IoT设备数据。
  • OPC-UA扩展 - 收集连接到OPC-UA服务端的IoT设备数据。
  • Sigfox扩展 - 收集连接到Sigfox后端的IoT设备数据。
  • 数据持久 - 网络和硬件异常时保证数据正常传输。
  • 自动重新连接到UlyncThings集群。
  • 将传入的数据和消息映射到统一格式。
    本篇将介绍在树莓派上安装ThingsBoard GateWay使用Modbus协议遥测数据。

    准备工作

  1. 启动ThingsBoard服务
  2. 在树莓派上安装ThingsBoard GateWay
  3. 启动ThingsBoard GateWay服务
  4. 树莓派串口配置
  5. 树莓派RS485扩展板一块,将扩展板插入树莓派,并与自己的传感设备连接好
  6. 将树莓派ttyAMA0串口权限开放

    系统配置

    配置网关扩展

    [{
     "id": "modbus-water",
     "type": "MODBUS",
     "configuration": {
         "servers": [{
             "transport": {
                 "type": "rtu",
                 "portName": "ttyAMA0",
                 "encoding": "rtu",
                 "timeout": 5000,
                 "baudRate": 9600,
                 "dataBits": 8,
                 "stopBits": 1,
                 "parity": "none"
             },
             "devices": [{
                 "unitId": 1,
                 "deviceName": "水压-设备1",
                 "attributesPollPeriod": 1000,
                 "timeseriesPollPeriod": 1000,
                 "attributes": [],
                 "timeseries": [{
                     "tag": "pressure",
                     "type": "long",
                     "pollPeriod": 1000,
                     "functionCode": 3,
                     "address": 4,
                     "registerCount": 1,
                     "bit": 0,
                     "byteOrder": "BIG"
                 }]
             }]
         }]
     }
    }]
    
## 配置网关服务文件tb-gateway.yml
```$xslt
server:
  # Server bind address
  address: "0.0.0.0"
  # Server bind port
  port: "9090"

# Check new version updates parameters
updates:
  # Enable/disable updates checking.
  enabled: "${UPDATES_ENABLED:true}"

gateways:
  tenants:
    -
      label: "Tenant"
      reporting:
        interval: 60000
      persistence:
        type: file
        path: storage
        bufferSize: 1000
      connection:
        host: #ThingsBoard服务地址#
        port: 1883
        retryInterval: 3000
        maxInFlight: 1000
        security:
          accessToken: #网关设备的令牌#
      remoteConfiguration: true
      extensions:
        -
          id: "http"
          type: "HTTP"
          extensionConfiguration: http-config.json

重启GateWay服务

#问题
整个安装配置过程中出现了一个问题花了好久,在配置并重启GateWay服务后,发现网关设备始终没有同步,查看日志后发现

2019-11-19 18:36:13,160 [pool-1-thread-1] ERROR o.t.g.extensions.modbus.ModbusClient - MBS[ttyAMA0] connection failed!
java.io.IOException: Port [ttyAMA0] cannot be opened or does not exist - Valid ports are: [ttyAMA0]
    at com.ghgande.j2mod.modbus.net.SerialConnection.open(SerialConnection.java:127)
    at com.ghgande.j2mod.modbus.facade.ModbusSerialMaster.connect(ModbusSerialMaster.java:96)
    at org.thingsboard.gateway.extensions.modbus.ModbusClient.connect(ModbusClient.java:121)
    at java.util.ArrayList.forEach(ArrayList.java:1257)
    at org.thingsboard.gateway.extensions.modbus.DefaultModbusService.init(DefaultModbusService.java:64)
    at org.thingsboard.gateway.service.TenantServiceRegistry.updateExtensionConfiguration(TenantServiceRegistry.java:83)
    at org.thingsboard.gateway.service.DefaultTenantManagerService.lambda$init$0(DefaultTenantManagerService.java:64)
    at org.thingsboard.gateway.service.gateway.MqttGatewayService.updateConfiguration(MqttGatewayService.java:515)
    at org.thingsboard.gateway.service.gateway.MqttGatewayService.onGatewayAttributesGet(MqttGatewayService.java:496)
    at org.thingsboard.gateway.service.gateway.MqttGatewayService.lambda$onMessage$17(MqttGatewayService.java:426)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
2019-11-19 18:36:13,165 [pool-1-thread-1] ERROR o.t.g.e.modbus.DefaultModbusService - [Tenant] Modbus service initialization failed

日志显示ttyAMA0口不能打开或不存在。dose not exist肯定是不可能的,那就是串口打不开。
最后在这里找到了解决办法。将ttyAMA0口的权限设置为任何人可以读,写。
/etc/udev/rules.d中添加100-ttyAMA0.rules,内容为:

KERNEL=="ttyAMA0", MODE="666"

文章作者: Niww
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Niww !
 上一篇
ThingsBoard PE版破解 ThingsBoard PE版破解
ThingsBoard是一款开源的IOT平台,有CE,PE两个版本,PE版需要付费,功能也更加丰富。为了体验下PE版的功能,尝试着对PE版进行破解。 按照官方文档进行安装,跳过步骤中的填写license部分 启动服务,当然此时是无法访
2019-12-23
下一篇 
跨域解决方案---CORS 跨域解决方案---CORS
一、什么是跨域访问说到跨域访问,必须先解释一个名词:同源策略。所谓同源策略就是在浏览器端出于安全考量,向服务端发起请求必须满足:协议相同、Host(ip)相同、端口相同的条件,否则访问将被禁止,该访问也就被称为跨域访问。虽然跨域访问被禁止之
2019-09-18
  目录