Thingsboard数据采集部分,官网文档讲的非常清楚,建议底子好还是直接看官方文档。
    tb的采集分为通过直连采集和通过网关采集两种途径。
    直连:传感器支持rj45,可以通过mqtt、coap、http连接tb通信。
    因为coap和http都是单向通信,所以一般都选择mqtt。
    下来介绍下设备怎么连接到tb上。
    1,后台新建一个设备,不要勾选网关,或者通过tb的api创建一个设备,设备创建成功后,tb会为该设备创建一个mqttserver,点开设备详情,复制访问令牌,这是mqtt的用户名,密码为空,mqtt server ip是tb的服务所在ip,端口见tb配置文件mqtt下的bind_port,默认是1883,因为和我本机mqtt冲突,我改成1884。
    2,用mqtt客户端工具连接上设备,发送遥测数据和属性数据,我理解的遥测数据属于时序数据;属性数据属于设备属性,不经常变化。
    1.2 Thingsboard 数据采集(直连&网关) - 图1
    3,配置规则引擎,一定要配置规则引擎,否则数据只会到tb转一圈,什么也不会发生,我第一次配置的时候发现什么都没发生后还以为代码出了问题,重新升级了个版本还是这样,其实只需要在规则引擎里配置存储到tb即可。
    注意配置Post telemetry,Post attribute ,然后添加保存的规则引擎节点。如图。
    1.2 Thingsboard 数据采集(直连&网关) - 图2
    4,最后就可以在设备详情中看到刚刚上报的数据。
    1.2 Thingsboard 数据采集(直连&网关) - 图3
    直连设备采集完成。

    网关接入设备数据采集:
    对于非rj45的设备,例如plc,一些通过第三方网关接入的传感器等设备,可以通过tb提供的软网关(python网关)连接到tb上,tb官方的这个网关支持一些常见的协议,例如mqtt、modbus、opcua等,国内现在也有一些第三方厂商在做可以直连到tb的硬网关,甚至还有java版本的网关。目前我发现tb自带的网关最大的诟病就是性能问题,亲测单进程1分钟处理能力只有600条数据左右,再多会有明显延迟,有不同观点的朋友可以评论区指出。
    本次介绍通过tb自带的网关接入tb,安装网关因为比较简单略过。
    1,在tb上新建一个网关,记住勾选网关,同样也可以通过api创建,复制访问token。
    2,打开/etc/thingsboard-gateway/config/tb_gateway.yaml,修改tb的ip,mqtt端口,把上一步的复制的accesstoken粘贴这里。
    3,修改/etc/thingsboard-gateway/config/mqtt.json,这里头先把第三方mqtt地址配置,因为硬件设备的数据都是从这里吐过来的。mapping这里是重点,举个例子。
    假如第三方设备吐过来的数据是这样
    {
    “3012”:”9.72”,
    “deviceType”:”etag”,
    “supplier”:”hanshuo”,
    “product”:”sws”
    }
    我这里这样配置,其中topicFilter是设备吐过来的数据发送的mqtt 的topic。deviceTypeJsonExpression是元数据的devicetype,deviceNameTopicExpression是元数据的devicename相当于设备唯一id,在规则引擎中各种数据传输,完全要依赖这两个字段来判断。attributes是设备属性,timeseries是设备遥测数据,同直连一样,我们要配置规则引擎存储该数据,否则数据会在tb空跑一圈。
    “mapping”: [
    {
    “topicFilter”: “/device/fogside/colorLight/+/data”,
    “converter”: {
    “type”: “json”,
    “deviceNameTopicExpression”: “(?<=colorLight\/)(.*?)(?=\/data)”,
    “deviceTypeJsonExpression”: “${deviceType}”,
    “timeout”: 150000,
    “attributes”: [
    {
    “type”: “string”,
    “key”: “supplier”,
    “value”: “${supplier}”
    }
    ],
    “timeseries”: [
    {
    “type”: “double”,
    “key”: “battery”,
    “value”: “${3012}”
    }
    ]
    }
    },…….
    4,通过网关采集配置完成,这时规则引擎里可以做的东西就很多了,我们可以根据温度开空调,根据红外开灯,如果有烟雾拉响警报电话通知保安等等,也可以把数据转化清洗后发送给第三方服务。
    目前使用tb上报数据,最大的感触就是觉得元数据不够用,因为tb只有devicename和devicetype两个字段,想再加几个貌似都加不上。