百度天工服务分为物接入IOTHub、物解析IOTParser、物管理IOTDevice、时序数据库TSDB、规则引擎RuleEngine还有物可视IOTVisualization,目前物可视在官方公测阶段,需要开发者在物可视界面申请。
物接入IoTHub是全托管的云服务,通过主流的物联网协议(如MQTT)通讯,可以在智能设备与云端之间建立安全的双向连接,快速实现物联网项目。支持亿级并发连接和消息数,建立海量设备与云端安全可靠的双向连接,无缝对接天工平台和百度云的各项产品和服务。
物接入资源分为两类:物接入、物接入(SIM版),本文主要讲解物接入方式,SIM版读者有兴趣可以试试。
MQTT概述
MQTT(MessageQueuingTelemetryTransport)是一个客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,易于实现。这些特点使得它对很多场景来说都是很好的选择,特别是对于受限的环境如机器与机器的通信(M2M)以及物联网环境(IoT)。
MQTT客户端
使用MQTT的程序或设备,推荐您使用MQTT.fx。客户端总是通过网络连接到服务端。它可以
MQTT服务端
全托管的云服务,帮助建立设备与云端之间安全可靠的双向连接,以支撑海量设备的数据收集、监控、故障预测等各种物联网场景。
名词解释
系统限制
注意
说明:
创建实例时,IoTHub默认提供三种地址,选择不同的地址,意味着您可以通过不同的方式连接到百度云IoTHub。
成功创建IoTHub实例后,点击实例名称,进入配置IoTHub实例页面,创建设备、身份和策略。具体操作步骤如下:
1、创建设备:选择设备列表,点击“创建设备”,输入需要连接IoTHub服务的设备名称。为了便于灵活连接IoTHub服务,每一台设备thing都需要绑定相应的身份principal。
3、创建策略:在策略输入框内点击“创建”,快速创建策略policy。输入policy名称,主题topic,选择该身份拥有的权限:发布消息(publish)、订阅消息(subscribe)。
每个policy可以创建多个主题topic,在创建策略弹框右侧,点击“+”可以绑定更多的主题。
4、成功创建身份principal后,返回密码,在配置客户端时会用到,需要复制保存,如下图所示:
配置MQTT的应用客户端,可以快速验证是否可以实现与物接入服务交流发送或者接收消息。
操作步骤
1、打开MQTT客户端的设置页面,点击“+”按键,创建一个新的配置文件。
c、配置SSL/TLS安全认证,勾选EnableSSL/TLS,选择CAsignedservercertificate认证。
d、点击“Apply”按键,完成客户端配置。
2、返回MQTT客户端界面,选择新创建的配置文件,点击“connect”按键连接服务。
3、成功连接后,即可开始订阅消息。
打开Subscribe标签,填写主题topic,创建设备时自己定义的主题,选择默认的QoS0,点击“Subscribe”进行订阅操作。
4、发布消息。
打开Publish标签,填写主题topic,创建设备时自己定义的主题,选择默认的QoS0,点击“Publish”进行发布操作。
5、返回Subscribe界面,即可看到已接收的订阅消息。
类似地,在物联网中,由于数据量巨大,业务规则可能多种多样,也需要将规则的设置变得简单和友好以适应业务规则的多样和变化。大量的数据往往对应着不同的应用分析场景,如监控厂区的温度湿度监控点,每十分钟都会有温度和湿度数据传往云端;对于这些数据,我们往往希望它们发挥不同的作用,例如以下应用场景:
规则引擎就是通过灵活的设定规则,将设备传上云端的数据,送往不同的数据目的地(如时序数据库TSDB、Kafka、对象存储BOS等)以达到不同的业务目标。
优势:
例:城市路灯管理属于一个典型的物联网场景,该场景可以复制到很多其它的领域。
传统情况下,路灯管理基本上靠人力,例如:巡查、维护,甚至是靠人工控制路灯开关;而城市路灯数量巨大,分布复杂,对于管理部门来说可能已经投入了大量的人力成本,但仍然会出现故障发现和抢修不及时的情况。同时在传统情况下,由于缺少路灯的运行环境(例如:电压、温度),使用寿命等数据,很难有针对性改进使用方法,进而延长使用寿命,也很难指定准确的维护策略和备件策略。
路灯接入可以采用多种方式,例如:3G/4G,电力载波,LPWAN等,无论采用哪种方式,用户只需在接入设备中预装EdgeSDK,都能轻松打通路灯和百度云之间的双向安全通道,实现将路灯接入百度云的物接入服务。路灯可以实时将设备状态、电压电流、环境温度、地理坐标等信息发送至物接入服务。同时在工程师的智能终端上预装APP对接百度云,可实时上报工程师的地理位置坐标。
物接入接收到路灯上送的消息后,可将消息分别转发至物管理和规则引擎服务。用户可在规则引擎上制定策略,实现以下操作:
操作流程介绍:
2.2、创建目的地:规则引擎可根据预先设置的规则将消息转发至百度云的其它服务,例如时序数据库、百度Kafka或物接入主题。在配置规则引擎前,建议您先创建好需要用到的其它服务。
百度Kafka是基于ApacheKafka的分布式、高可扩展、高通量、多分区和多副本的消息托管服务。百度Kafka封装了Kafka集群细节,并以托管服务形式提供,您可以直接使用百度Kafka创建主题来集成大规模分布式应用,而无需考虑集群运维,仅按照使用量支付处理数据的费用。
物接入主题
物接入主题是物接入服务与前端设备进行消息传播的媒介。规则引擎支持将在一个主题中收到的信息,转发至另一个主题中。如将主题temperature订阅到的消息,筛选出大于阈值的消息,转发至主题alarm中,再用其他客户端订阅alarm客户端主题即可。
2、选择“产品服务>规则引擎>规则列表”,进入“规则列表”页面。
3、点击“新建规则”,进入规则创建页面,填写以下配置信息:
查询字段:从消息中筛选出来用于后续操作(如:转发至TSDB或百度Kafka)的数据。如果填写“*”,则将原样转发payload中的所有数据至目的地。
约束条件:后续操作的触发条件。缺省情况下,转发每一条消息至目的地。
其中,查询字段和约束条件中支持的操作符如下:
4、点击“添加数据目的地”,新增一个数据目的地,此处可添加多个。
规则引擎支持将数据转发至“时序数据库TSDB”、“百度Kafka”或“其它物接入主题”。
返回“规则列表”页面,查看已经创建的规则。
用户可以自己构建Json格式的Payload,对已经创建的规则的筛选结果进行验证。在执行以下操作前,用户应先创建规则。
1、选择“产品服务>规则引擎>规则列表”,进入“规则列表”页面,查看已经创建的规则。
2、找到指定的规则,点击规则名称,进入规则详情页面;点击“规则验证”,验证已经创建的规则。
3、在“输入数据”中构建Json格式的原始数据,选择数据目的地并点击“验证”,此时系统将根据已经创建的规则自动输出筛选后的数据。
1、存入TSDB数据库
通过简单规则调整数据格式:以下方法仅针对value存放在消息中,如果value存放在数组中,请看下面的通过"_TSDB_META"调整数据格式。
TSDB数据库要求数据必须包含metric、value和timestamp三个字段,以及额外一个或多个数据作为tag。如果原始消息中不包含这些字段,在将数据转发至TSDB前,需要对数据格式进行调整,如下所示:
原始数据:
{
"time":1465376157007,
"name":"cpu_idle",
"score":51,
"host":"server1",
"rack":"rack1",
"other":"something"
}
原始数据中的"score":51为整型,数据没有放在引号""中。如果原始数据为"score":"51",此时该数据为字符串类型。字符串类型数据写入TSDB后将无法在查看面板中生成图表。
规则引擎设置
查询字段:nameASmetric,scoreAS_value,`time`AS_timestamp,host,rack
由于time为SQL的关键字,使用时需要加反单引号(重音符)。
约束条件:score>50
输出数据:
"metric":"cpu_idle",
"_value":51,
"_timestamp":1465376157007,
"rack":"rack1"
通过"_TSDB_META"调整数据格式:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2、转发到MQTT主题
规则引擎可以从接收到的消息中自动提取MQTT主题,并将消息转发至该主题,具体操作如下所示:
"msg":"hello",
"info":{
"name":"chiller-2016"
下图是规则调试的结果
以下是规则编辑界面,查询字段和查询主题是必填项,查询主题代表需要处理的是哪个主题的消息,也可以写通配符“#”,代表所有主题消息
添加数据目的地:
以上是两个数据库和一个转发的主题,共3个数据目的地。
规则引擎还有很多东西,我以后实验过了再补上!!!!!!
产品功能:
名词解释:
度量(metric):数据指标的类别,如发动机的温度、发动机转速、模拟量等。
域(field):在指定度量下数据的子类别。即一个metric支持多个field,如metric为wind,该metric可以有两个field:direction和speed。
数值(value):度量(metric)对应的数值,如56°C、1000r/s等(实际中不带单位)。如果有多个field,每个field都有相应的value。不同的field支持不同的数据类型写入。对于同一个field,如果写入了某个数据类型的value之后,相同的field不允许写入其他数据类型。
标签(tag):一个标签是一个key-value对,用于提供额外的信息,如"设备号=95D8-7913"、“型号=ABC123”、“出厂编号=1234567890”等。
数据点(datapoint):“1个metric+1个field(可选)+1个timestamp+n个tag(n>=1)”唯一定义了一个数据点。当写入的metric、field、timestamp、n个tag都相同时,后写入的value会覆盖先写入的value。
分组(group):可以按标签(tag)对数据点进行分组。
数据库(database):一个用户可以有多个数据库,一个数据库可以写入多个“度量”的“数据点”。
栗子:
单域:
监测温度的值,把温度(temperature)作为一个度量(metric),用标签(tag)来标识每一个数据的额外信息,比如每个数据点都有3个tag,tag是一个key-value对,tag的key分别是deivceID、floor、room。
多域:
监测风力的值,把风力(wind)作为一个度量(metric),风力(wind)分为两个域:风向(direction)和速度(speed)。这些监测数据是从不同的传感器传输到云端的,用标签(tag)来标识每一个数据的额外信息,比如每个数据点有三个tag,tag是一个key-value对;tag的key分别是sensor、city、province。
为了表示在广东省深圳市传感器编号95D8-7913上传风向(direction)数据,可以将这个数据点的tag为标记为sensor=95D8-7913、city=深圳、province=广东。
2、选择“产品服务>时序数据库TSDB”,进入“数据库列表”页面。
3、点击“创建数据库”,进入创建数据库页面,填写配置信息,包括: