当前位置: 首页 > news >正文

【物联网架构】

物联网平台为各种设备提供快速接入能力,支持Https/WebSocket/MQTT等多种标准协议以及自定义协议,提供设备管理、安全通信、规则引擎和消息下发等功能。向下支持连接海量设备,采集设备数据上云;向上提供开放API,服务端可通过调用开放API将指令消息下发至设备端,实现远程控制。

物联网平台由物联服务平台、物联管理平台、数据平台和物联网客户端几部分组成,支持集群部署以支撑100万台以上的海量设备接入。

  1. IoTServer。物联网服务平台,提供设备接入、数据接收、数据存储、指令下发等功能。
  2. IoTWeb。物联网管理平台,提供物模型管理、设备管理、数据查看等功能。
  3. IoTClient。物联网客户端,部署在设备附近的边缘网关上,接收IoTServer下发策略后采集数据并上报。
  4. IoTData。数据平台,提供数据处理能力,向应用提供设备数据以及传感器数据。
  5. IoTApp。物联网应用,从IoTData获取数据,支持数据大屏和移动端访问,以及连接IoTServer下发控制指令。

数据存储

本平台为设备采集数据提供三种存储模型(可并存):

  1. 关系型数据库。设备属性数据更新到属性表,历史数据按天分表保存,可选同步、异步或不保存。
  2. Redis实时数据。设备属性数据以SET结构存储,历史数据借助STREAM提供队列服务,可选配置。
  3. 时序数据库。专用于保存历史数据,推荐TDengine/IoTDb,可选配置。

物模型

IOT物模型若干点:

  1. 产品即是具有相同特性的一类设备,通过产品功能定义(物模型)来描述属性(点位)、事件和服务。
  2. 设备是产品的具体存在,设备属性继承自所属产品的功能定义中的属性(点位)。
  3. 设备采集上报的数据,更新设备属性并插入历史数据,提供消息队列以驱动下游业务。
  4. 设备产生的关键事件,以历史事件存储并提供消息队列。
  5. 下发指令必须符合设备服务(来自产品功能定义)的约束。
  6. 设备可通过Http/Mqtt/Tcp等多种方式接入平台,简易设备以固定物模型信息接入平台。
  7. 无法直连平台的设备,可以作为子设备通过网关设备接入通用平台,且支持平台按需下发设备物模型。

一、产品管理

设备的集合,通常指一组具有相同功能的设备。物联网平台为每个产品颁发全局唯一的ProductKey。

1.产品管理

产品作为设备的集合,决定了设备所具有的功能,主要字段如下:

参数描述
名称产品的友好显示名称
编码即ProductKey,全局唯一
密钥即ProductSecret,用于一型一密的认证方案
分类比如边缘网关、大气监测设备
节点类型分为直连设备、网关设备、网关子设备
数据格式数据传输格式,Json
协议设备接入网关的协议类型,ModbusRTU、ModbusTCP、OPC-UA、BLE、SRMP
连网方式MQTT、WiFi、蜂窝Cellular(2G/3G/4G/5G)、以太网、LoRaWAN、其它
动态注册每台设备烧录相同的产品证书,即ProductKey和ProductSecret,云端鉴权通过后下发设备证书
固定编码UUID相同,设备编码不同,且固定编码,则认为是全新设备
认证类型支持DTU直传
描述用来描述产品信息

产品下可查看该产品所有设备、进行功能定义、版本升级、以及设备统计。

2.功能定义

  • 产品所具有的功能,类似于其它平台的物模型。
  • 功能定义,多属性的数据格式,决定如何解析生成属性数据。可以从标准物模型导入。
  • 功能定义分为两层,一个产品包含若干个模块,模块可以导入,也可以自定义模块。每个模块包含多个属性、事件、服务。

什么是物模型
物模型是物理空间中的实体(如传感器、车载装置、楼宇、工厂等)在云端的数字化表示,从属性、服务和事件三个维度,分别描述了该实体是什么、能做什么、可以对外提供哪些信息。定义了物模型的这三个维度,即完成了产品功能的定义。

功能类型说明
属性(Property)用于描述设备运行时具体信息和状态。例如,环境监测设备所读取的当前环境温度、智能灯开关状态、电风扇风力等级等。属性可分为读写和只读两种类型。读写类型支持读取和设置属性值,只读类型仅支持读取属性值。
服务(Service)指设备可供外部调用的指令或方法。服务调用中可设置输入和输出参数。输入参数是服务执行时的参数,输出参数是服务执行后的结果。相比于属性,服务可通过一条指令实现更复杂的业务逻辑,例如执行某项特定的任务。服务分为异步和同步两种调用方式。
事件(Event)设备运行时,主动上报给云端的信息,一般包含需要被外部感知和处理的信息、告警和故障。事件中可包含多个输出参数。例如,某项任务完成后的通知信息;设备发生故障时的温度、时间信息;设备告警时的运行状态等。事件可以被订阅和推送。
  • 物联网平台支持为产品定义多组功能(属性、服务和事件)。一组功能定义的集合,就是一个物模型模块。多个物模型模块,彼此互不影响。
  • 物模型模块功能,解决了工业场景中复杂的设备建模,便于在同一产品下,开发不同功能的设备。
  • 例如,电暖扇产品的功能属性有电源开关、档位(高、中、低)和室内温度,您可以在一个模块添加前2个属性,在另一个模块添加三个属性,然后分别在不同设备端,针对不同物模型模块功能进行开发。此时,该产品下不同设备就可以实现不同功能。

请注意,网关型产品,因为不确定会添加什么设备,因此没有功能定义。而连接网关的设备,通过配置通道,来定义如何采集数据以及解析,通道仅用于自动采集。

功能定义的主要字段如下:

参数描述
产品功能所属产品
模块功能分组,分为默认模块和自定义模块
种类分为属性、事件、服务
名称功能名称
标识功能唯一标识,比如Temperature
访问模式只读、读写、只写
必填可用于服务的参数校验
数据类型可以是基础数据类型或子设备产品。基础数据类型有小数、整数、文本。选择子设备产品时,将本产品按照子设备产品去解析
长度文本类型的最大长度
最小值数字类型的最小值,比如-40
最大值数字类型的最大值,比如120
步长数值类型的最小间隔
最大间隔数值类型的最大间隔,超过该值时被抛弃
单位数据的单位,比如℃
单位名称数据单位名称,比如摄氏度
调用方式服务的调用方式,同步sync,异步async
地址用于解析原始数据,原始数据的第几个字节
大小用于解析原始数据,占原始数据几个字节
交换16用于解析原始数据,字节交换,12转21,默认为false,大端字节序
交换32用于解析原始数据,字节交换,1234转3412,默认为false,大端字节序
掩码读取线圈时使用
缩放因子n*scaling+constant
常量因子n*scaling+constant
描述功能描述

功能定义不仅描述了产品应该具有什么属性、事件、服务,还描述了使用者应该怎么去使用。对接物联网平台的客户端,可以导出产品的物模型,根据定义好的属性和相应格式上报数据,可上报的事件以及提供的服务,都按照物模型来定义。
用于数据采集类的网关,可以根据设备关联的通道,设置采集通道,以便传感器数据能正常采集并上报至平台。

  • 物模型TSL字段说明
{"schema": "物模型结构定义的访问URL。","profile": {"productKey": "当前产品的ProductKey。"},"properties": [{"identifier": "属性唯一标识符(物模型模块下唯一)。","name": "属性名称","accessMode": "属性读写类型:只读(r)或读写(rw)。","required": "是否是标准功能的必选属性:是(true),否(false)。","dataType": {"type": "属性类型: int(原生)、float(原生)、double(原生)、text(原生)、date(String类型UTC毫秒)、bool(0或1的int类型)、enum(int类型,枚举项定义方法与bool类型定义0和1的值方法相同)、struct(结构体类型,可包含前面7种类型,下面使用"specs":[{}]描述包含的对象)、array(数组类型,支持int、double、float、text、struct)。","specs": {"min": "参数最小值(int、float、double类型特有)。","max": "参数最大值(int、float、double类型特有)。","unit": "属性单位(int、float、double类型特有,非必填)。","unitName": "单位名称(int、float、double类型特有,非必填)。","size": "数组元素的个数,最大512(array类型特有)。","step": "步长(text、enum类型无此参数)。","length": "数据长度,最大10240(text类型特有)。","0": "0的值(bool类型特有)。","1": "1的值(bool类型特有)。","item": {"type": "数组元素的类型(array类型特有)。"}}}}],"events": [{"identifier": "事件唯一标识符(物模型模块下唯一,其中post是默认生成的属性上报事件)。","name": "事件名称。","desc": "事件描述。","type": "事件类型(info、alert、error)。","required": "是否是标准功能的必选事件:是(true),否(false)。","outputData": [{"identifier": "参数唯一标识符。","name": "参数名称。","dataType": {"type": "属性类型: int(原生)、float(原生)、double(原生)、text(原生)、date(String类型UTC毫秒)、bool(0或1的int类型)、enum(int类型,枚举项定义方法与bool类型定义0和1的值方法相同)、struct(结构体类型,可包含前面7种类型,下面使用"specs":[{}]描述包含的对象)、array(数组类型,支持int、double、float、text、struct)。","specs": {"min": "参数最小值(int、float、double类型特有)。","max": "参数最大值(int、float、double类型特有)。","unit": "属性单位(int、float、double类型特有,非必填)。","unitName": "单位名称(int、float、double类型特有,非必填)。","size": "数组元素的个数,最大512(array类型特有)。","step": "步长(text、enum类型无此参数)。","length": "数据长度,最大10240(text类型特有)。","0": "0的值(bool类型特有)。","1": "1的值(bool类型特有)。","item": {"type": "数组元素的类型(array类型特有)。"}}}}],"method": "事件对应的方法名称(根据identifier生成)。"}],"services": [{"identifier": "服务唯一标识符(物模型模块下唯一,其中set/get是根据属性的accessMode默认生成的服务)。","name": "服务名称。","desc": "服务描述。","required": "是否是标准功能的必选服务:是(true),否(false)。","callType": "async(异步调用)或sync(同步调用)。","inputData": [{"identifier": "入参唯一标识符。","name": "入参名称。","dataType": {"type": "属性类型: int(原生)、float(原生)、double(原生)、text(原生)、date(String类型UTC毫秒)、bool(0或1的int类型)、enum(int类型,枚举项定义方法与bool类型定义0和1的值方法相同)、struct(结构体类型,可包含前面7种类型,下面使用"specs":[{}]描述包含的对象)、array(数组类型,支持int、double、float、text、struct)。","specs": {"min": "参数最小值(int、float、double类型特有)。","max": "参数最大值(int、float、double类型特有)。","unit": "属性单位(int、float、double类型特有,非必填)。","unitName": "单位名称(int、float、double类型特有,非必填)。","size": "数组元素的个数,最大512(array类型特有)。","step": "步长(text、enum类型无此参数)。","length": "数据长度,最大10240(text类型特有)。","0": "0的值(bool类型特有)。","1": "1的值(bool类型特有)。","item": {"type": "数组元素的类型(array类型特有)。"}}}}],"outputData": [{"identifier": "出参唯一标识符。","name": "出参名称。","dataType": {"type": "属性类型: int(原生)、float(原生)、double(原生)、text(原生)、date(String类型UTC毫秒)、bool(0或1的int类型)、enum(int类型,枚举项定义方法与bool类型定义0和1的方法相同)、struct(结构体类型,可包含前面7种类型,下面使用"specs":[{}]描述包含的对象)、array(数组类型,支持int、double、float、text、struct)。","specs": {"min": "参数最小值(int、float、double类型特有)。","max": "参数最大值(int、float、double类型特有)。","unit": "属性单位(int、float、double类型特有,非必填)。","unitName": "单位名称(int、float、double类型特有,非必填)。","size": "数组元素的个数,最大512(array类型特有)。","step": "步长(text、enum类型无此参数)。","length": "数据长度,最大10240(text类型特有)。","0": "0的值(bool类型特有)。","1": "1的值(bool类型特有)。","item": {"type": "数组元素的类型(array类型特有)。"}}}}],"method": "服务对应的方法名称(根据identifier生成)。"}],//仅自定义模块的TSL中有以下参数。"functionBlockId": "自定义模块的唯一标识符,模块ID。","functionBlockName": "自定义模块名称。",//当产品下添加了自定义模块,默认模块TSL中会包含以下参数,表示已添加的自定义模块列表。"functionBlocks": [{"functionBlockId": "自定义模块的唯一标识符,模块ID。","functionBlockName": "自定义模块名称。","productKey": "产品ProductKey。"}]
}

若产品的节点类型是网关子设备,且接入网关协议为Modbus、OPC UA或自定义时,可以查看物模型扩展配置信息。

Modbus协议产品的扩展配置可用于Modbus子设备的物联网边缘计算,请参见物联网边缘计算文档。

Modbus协议产品的扩展配置数据结构如下:

{"profile": {"productKey": "产品ProductKey。"},"properties": [{"identifier": "属性唯一标识符(产品下唯一)。","operateType": "(线圈状态/离散量输入/保持寄存器/输入寄存器: coilStatus/inputStatus/holdingRegister/inputRegister)。","registerAddress": "寄存器地址。","originalDataType": {"type": "原始数据类型:int16、uint16、int32、uint32、int64、uint64、float、double、string、bool、customized data(按大端顺序返回hex data)。","specs": {"registerCount": "寄存器数据个数,string、customized data特有。","swap16": "交换寄存器内高低字节,把寄存器内16位数据的前后8个bit互换(byte1byte2 -> byte2byte1),除string和bool外,其他数据类型特有。","reverseRegister": "交换寄存器顺序,把原始数据32位数据的前后16个bit互换(byte1byte2byte3byte4 -> byte3byte4byte1byte2),除string和bool外,其他数据类型特有。"}},"scaling": "缩放因子,除string和bool外,其他数据类型特有。","trigger": "数据上报方式。1代表按时上报,2代表变更上报。","writeFunctionCode":"读写操作,对于不同的operateType,可选的取值不同。coilStatus:5代表读写(读0x01,写0x05),15代表读写(读0x01,写0x0F),0代表只读0x01,6代表只写0x05,15代表只写0x0F。inputStatus:0代表只读0x02。holdingRegister:6代表读写(读0x03,写0x06),16代表读写(读0x03,写0x10),0代表只读0x03,6代表只写0x06,16代表只写0x10。inputRegister:0代表只读0x04。","writeOnly":"是否只写。0代表非只写,1代表只写。","pollingTime":"采集间隔,单位是ms。无需传入,将使用设备配置的采集间隔。","bitMask":"掩码,bool特有。取值:1、2、4、8、16、32、64、128、256、512、1024、2048、4096、8192、16384、32768,即1<<(0~15)。"}]
}

3.版本升级

边缘网关客户端自动更新,升级管理。
平台维护产品版本,可上传新的版本,通过指令下发至客户端进行升级,客户端收到升级包下载url,自行下载升级。如果处于业务高峰期,可在空闲时间进行下载升级。

4.设备统计

对每个产品下设备进行每日统计,统计维度包括以下几点:

属性描述
总数 截止今天的全部设备数
活跃数最后登录位于今天设备数
7天活跃数最后登录位于7天内的设备数
30天活跃数最后登录位于30天内的设备数
新增数今天创建的设备数
7天新增数7天内创建的设备数
30天新增数30天内创建的设备数
注册数今天激活或重新激活的设备数
最高在线今天在线设备最高数量
最高在线时间最高在线发生时间点

二、设备管理

1.设备管理

归属于某个产品下的具体设备。物联网平台为设备颁发产品内唯一的证书DeviceName。设备可以直接连接物联网平台,也可以作为子设备通过网关连接物联网平台。

设备接入平台之前,需要通过注册和认证。接入物联网平台的设备身份注册方式有两种。

一型一密:

同一产品下设备烧录相同产品证书(ProductKey和ProductSecret)。需要开通产品动态注册功能,如果没有开启此功能,设备会注册到平台,但是设备状态是禁用状态。动态注册又分为以下两种情况:

预注册:

需要在平台创建设备,这种认证类型的设备在注册到物联网平台需要携带ProductKey、ProductSecret、DeviceName三个参数,平台检验通过后,为设备颁发DeviceSecret。此后,设备就可通过设备证书ProductKey、DeviceName和DeviceSecret进行登录,登陆成功平台会下发令牌即DeviceToken。设备与平台的后续通信通过令牌来鉴别身份。

免预注册:

不需要在物联网平台预先创建设备,DeviceName可以直接从设备中读取到的ID,如设备的MAC地址、IMEI或SN码等。平台发现该设备为注册,则会进行自动注册,并颁发DeviceSecret。设备再通过ProductKey、DeviceName和DeviceSecret进行登录获取令牌。

一机一密:

这种方式要求预先在平台注册设备,获取设备证书信息(ProductKey、DeviceName、DeviceSecret)。然后将设备证书烧录到设备固件,设备联网后直接通过设备证书进行登录获取设备令牌。此方式安全性最高,推荐使用。

设备与云端通信携带令牌,通过设备鉴权后接入平台,后续也可进行设备注销。

2.令牌管理

设备连接平台,通过鉴权后,会得到一个token令牌。此令牌用于访问平台的各个接口。设备后续的通信均需携带令牌进行认证。当令牌过期,客户端可通过心跳机制对令牌进行更新。平台会记录每个设备使用的token,以及刷新记录。
通过使用令牌,可以防止非法设备访问,有效保护通信安全。

3.设备分组

物联网平台支持建立设备分组,分组中可包含不同产品下的设备。通过设备组来进行跨产品管理设备。

4.设备在线

设备接入平台之后,设备在平台的状态显示为在线,建立连接后需要一个心跳机制来保持这种状态,设备需要定时发送心跳消息到平台以保持活跃。
心跳周期一般设置为60秒,心跳除了刷新在线状态,还会刷新令牌。如果超过1.5倍心跳时间没有心跳,平台会将设备置为下线状态。

5.下行指令

所有下行指令由平台下发至设备,设备与平台之间有WebSocket长连接,基于消息队列实时向终端设备推送指令。每条消息均有唯一消息标id,指令响应结果也包含下行指令携带的消息id,确保响应消息与下行指令一一对应。

6.设备历史

设备历史记录设备上线下线等操作,按年分表。该历史不仅详细记录了平台对设备的所有操作,同时还有操作详细内容,以及操作成功状态。甚至还有追踪标识,还原整个调用链。

7.子设备

由于传感器子设备不能直接连接平台,或者需要拓扑关系管理,这时候设备可以作为网关子设备,连入网关,由网关代理连接平台通信。业务平台给子设备发送消息时无需感知物理物理拓扑结构。

三、系统架构图

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、核心功能

1.数据处理流程

数据流程:IotClient => IotServer => IotData 分别是数据采集/上报,数据接收/解析/存储,数据转发 三个阶段。

在这里插入图片描述

2.产品模板

(1)功能简介

预定义产品模板及产品功能模板,用户可以通过产品模板快速创建新的产品信息。
该功能以阿里云IOT平台的TSL为基础(参考1),并根据实际业务场景进行扩展,用户可以通过TSL快速编辑管理产品模板功能定义、产品功能定义(包括:属性、服务、事件)。

(2)界面及功能要点说明
  • 模板信息列表

在这里插入图片描述

  • 新增产品模板信息

在这里插入图片描述

  • 模板名称:基于当前模板生成的产品,名称会使用模板名称。
  • 节点类型:主要分三类,分别为网关设备、子设备、直连设备,其中网关设备不能定义功能模板(物模型)。
  • 数据格式:目前支持Json
  • 协议类型:目前默认实现了Modbus相关协议,后续开发人员可以根据二次开发情况自行扩展。
  • 启用:该产品是否启用以及参与数据解析。
  • 固定编码:用户判断自动接入的设备是否被自动注册为新设备,主要用于设备的自动身份识别,配合一物一码使用。
  • 校验:主要用于校验TSL模板与产品关联的物模型信息之间一致性,启用状态TSL模板导入过程会强制校验当前产品模板或产品所关联的功能模板/功能定义(物属性),TSL模板中不存在的功能定义将被停用;反之TSL模板导入只新增或更新TSL模板中涉及的功能模板/功能定义。
  • 模板类型说明
    只有子设备和直连设备可以定义功能模板,网关设备不涉及数据采集及解析,所以不能定义功能模板。
  • 功能模板(物属性)列表
    在这里插入图片描述

其中复制功能可以快速创建类型相同名称、标识不同的物属性。(建议:物模型的管理可以通过TSL模型管理)(参考1)

TSL模板管理(参考1)
在这里插入图片描述
注:如果产品模板开启校验功能,TSL模板导入到功能模板(物属性)中会自动停用TSL模板中没有包含的属性。
创建产品
点击创建产品连接,会自动基于当前产品模板相关信息以Copy的方式创建产品信息。
在这里插入图片描述
注:创建出来的产品编码会进行调整(由于产品编码全表唯一),运维人员可以根据实际部署情况进行对产品编码进行调整。

在这里插入图片描述
(3)TSL操作流程
在这里插入图片描述

3.产品定义

4.设备配置

(1)功能简介

对于设备物模型属性以及自定义模型属性管理,同时定义了数据解析模型,使用者可以通过属性的定义明确了解设备相关上报数据内容。

IOT平台为了满足复杂的生产环境需求,目前IOT平台设备属性数据采用客户端采集并解析,相关的解析信息是在客户端连接服务端时获取,并且后续的变更会定时推送到客户端。

(2)解析规则
解析规则:客户端上报到服务端的数据是字节数组,解析规则采用DynamicExpresso.Core(参考2)

转换扩展参考-
data.ToUInt16()data.ToBase64()
data.ToUInt32()
data.ToUInt64()
data.ToDateTime()
data.ToBoolean()
data.ToDouble()
data.ToStr()
data.ToHex()
(3)接口说明
接口信息 (参考:附件1)
Thing - 上报设备属性 接口
Thing - 获取设备属性 接口

5.设备在线

主要是展示当前各设备在线状态

6.设备统计

基于产品维度的日活、7日活、30日活以及日新增、7日新增、30日新增设备总数。

7.设备分组

编辑设备类型分组字典信息。

8.规则策略

(1)功能介绍
用户可以从产品维度和设备纬度分别设置规则策略,系统会根据用户所设置的规则策略逐一校验设备属性字段是否符合预期阀值,并将达到阀值的数据以事件的方式发送到事件队列当中。由事件队列消费端对事件消息进行处理。
规则引擎方面,本系统引入了 DynamicExpresso.Core(参考地址:https://github.com/dynamicexpresso/DynamicExpresso)组件,规则表达式采用简单的c#表达式编写。例:@temp>5 表示temp属性的值大于5及满足规则要求。
(2)界面及功能要点说明
在这里插入图片描述

规则编辑页
在这里插入图片描述

名称:规则名称必填
产品信息:每个规则需要关联一个产品ID或设备ID(最高优先级),数据上报过程中会将上报的数据逐一校验规则,筛选符合规则的数据并进行相关操作,如果事件通知、事件报警或服务调用等;
设备信息:匹配设备的规则优先级最高。
表达式:规则判断逻辑
动作:符合规则的数据需要触发的后续操作;主要分为五类,事件通知、事件告警、事件错误、服务调用、设置属性。
数据:关联动作需要生成的消息通知模板,如发出事件报警,这里可以指定消息报警模板内容。

9.数据推送配置

(1)功能介绍
主要对原始监测数据、报警数据、事件数据进行第三方转发,需要第三提供相应的数据接口。
数据推送具体模型取决于监测数据上传时数据模型,接口会将相应数据转换为json字符串作为三方接口入参。
用户根据实际需要指定topic并且支持基于产品、设备、事件名称、事件类型动态分发队列。
(2)推送方式
主要支持:mqtt、http两种方案。
(3)消息队列主题定义

序号占位符号名称备注
1{productCode}产品编号
2{deviceCode}设备编号
3{eventType}事件类型事件推送生效
4{name}事件名称事件推送生效

(4)系统界面

在这里插入图片描述
在这里插入图片描述

10.设备数据

(1)功能介绍
备主要分为原始数据、计算修正后数据、分钟统计、15分钟统计、小时统计数据几个部分。设备上报的原始数据会经过特定的数据清洗规则进行分库、分表存储到指定库表当中,以便后续业务层系统进行使用。
(2)主要信息
主要信息包括:设备编号、主题、数据原始报文。
在这里插入图片描述

11.设备历史

主要记录了各个节点的上下线信息、更新信息、令牌刷新、Socket连接等等信息。

在这里插入图片描述

12.设备事件

(1)功能介绍
主要记录由设备端主动发出的事件消息,主要包括 报警、通知、错误日志三个方面。
(2)系统界面
在这里插入图片描述

13.设备服务

(1)功能介绍
设备服务主要由用户通过接口或界面新增服务记录,系统会实时将服务指令下发给相关边缘网关系统。网关设备在执行完相关任务后将相关的执行结果通知服务端。
(2)系统界面
在这里插入图片描述

客户端反馈时间
在这里插入图片描述

14.设备影子

(1)功能介绍
对设备配置影子数据进行管理维护,可以记录设备最新的完整状态信息。
(2)系统界面

在这里插入图片描述
在这里插入图片描述

15.设备信息

(1)功能介绍
通过设备心跳将当前网关设备的实时运行状态信息上报至服务端,方便运维人员对网关设备运行状态进行实时监控。该功能主要结合星尘监控系统完成对系统的全链路监控。
(2)系统界面

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、应用管理

1.应用系统
应用密钥管理,可调用应用层接口,读写数据
2.应用钩子
拦截产品或设备指定动作,如上线下线,回调外方接口
重要位置点的回调函数设置,触发某个动作时,回调业务层接口,可能需要令牌验证

六、边缘网关

NewLife.IoT

1.客户端配置

Iot.Client项目主要用于主设备对子设备的数据采集工作,支持Windows,Linux64,LinuxArm等系统运行,通过ModBus等协议主设备下挂子设备通道数据采集回来并上传至IotWeb平台。
使用配置:
1)找到IotClient运行目录对应的Config/ IoTClient.config文件
2)内容如下
在这里插入图片描述

3)其中配置支持一机一密和一型一密两种方式。
举例说明:当填写已创建主设备就直接填写设备的DeviceCode和DeviceSecret即可,系统会自动完成鉴权上线建立通讯,然后拉取设备对应产品属性及通道,进行数据采集及上传;如果设备未创建可以填写对应产品的ProductKey和ProductSecret,系统会自动创建产品的主设备,然后下发配置证书,修改配置文件。暂时为了系统安全,默认主设备启用状态为未启用,需要后台开启。
特别说明:为了系统通讯安全,当A设备初次鉴权成功,A设备的对应的唯一标识会进行IotClient的捆绑,此时即时别的设备拿到相同文件也无法通过鉴权。反之如果需要更换解绑,请清空唯一标识。

2.设备登录

设备连入系统需要进行安全认证,通过IotClient的DeviceCode和DeviceSecret及唯一标识进行鉴权,通过后可进行配置属性通道信息的下载进入采集工作和数据上传工作。
在这里插入图片描述

3.设备心跳

设备心跳跟据服务器采样周期,对设备运行健康参数进行采集,并回传至IotWeb。其中包括:设备内存,可用内存,应用所在磁盘容量,应用所在磁盘可用容量,Cpu使用率,温度,电量,开机时间,IP,设备UTC时间,延时信息。
在这里插入图片描述

4.自动更新

检查设备可用更新信息,发现更新,执行更新,实现自动更新下发的工作。
自动更新流程,下载Zip更新包,解Zip压缩包,备份当前程序,清理Exe、Dll等文件,覆盖更新文件,升级后附加命令,验证更新,成功清理备份文件,失败异常上报,停止更新。

5.物模型管理

属性集合,事件队列

6.子设备管理

子设备拉取,设备通道创建及维护

7.Modbus协议

目前支持ModbusRTU、ModbusTCP协议

8.自定义协议

如何根据协议接口,实现自定义协议

七、数据平台

主要对第三方应用系统提供一些基础的数据查询接口服务,同时集成了一些常用数据统计数据查询接口。数据统计依赖于蚂蚁调度服务平台。

1.原始数据接口

基于设备和时间区间查询原始数据,可选传感器

2.降采样算法

LTTB、LTOB、平均值采样、最大值采样、最小值采样

3.插值算法

线性插值、双线性插值、拉格朗日插值

4.数据清洗

蚂蚁调度清洗数据

5.标准数据接口

基于设备和时间区间查询MySql中清洗后数据,可选传感器

6.通用数据接口

基于设备和时间区间查询MySql设备数据,可选传感器

7.消息队列实时推送

实时推送设备数据、设备事件、设备上下线

八、部署安装

1.SSO统一登录

使用魔方作为SSO系统,用于统一控制IoT管理平台、星尘管理平台、蚂蚁管理平台等各个Web端的统一登录。同时,SSO也可能作为用户验证的链路,桥接到其它SSO登录中心。
部署要点:
1.编译最新魔方源码中的CubeDemoNC,直接作为应用部署,要求.NET6.0
2.配置文件appsettins.json,配置链接字符串 Membership 和 Log,指向MySql库的 Membership(新建库 )。
在这里插入图片描述

3.启动并访问SSO系统,首次登录可以用admin/admin进去,也可以使用第三方登录(新生命用户中心),第一个用户将会作为系统管理员,同时禁用admin
4.正式部署时,需要关闭SSO的第三方登录,魔方设置,OAuth设置,禁用所有
在这里插入图片描述
在这里插入图片描述

5.修改系统名称为XX用户中心,魔方设置,系统设置,显示名称
6.打开应用系统功能,菜单,找到App应用系统,修改为可见加必要,刷新后台。
7.新建三个应用(StarWeb/AntWeb/IoTWeb),并设置密钥,供后续使用。
在这里插入图片描述

2.星尘服务端

星尘主要用于应用性能监控以及节点监控,还有可能使用配置中心。
部署要点:
1.编译StarServer和StarWeb,部署到服务器,配置文件appsettings.json,配置连接字符串Stardust,指向MySql库的Stardust(新建库)。其它链接使用MapTo映射。
在这里插入图片描述

2.StarServer默认端口6600,可在配置文件Config/StarServer.config中修改Port。记好服务端地址,其它多个项目需要用到。如果是多节点集群部署,需要修改TokenSecret为同一个。
在这里插入图片描述

3.StarWeb启动时需要指定端口,例如 dotnet StarWeb.dll urls=http://*:6680/,根据实际情况使用域名和端口。
4.StarServer和StarWeb可以不在同一台服务器,共用数据库即可。如果使用SQLite数据库,则需要在同一台服务器。如果是集群部署,需要确保各个节点的配置一致,特别是令牌密钥。
5.StarServer的配置文件appsettings.json,其中StarServer项配置监控地址,默认指向自己 http://127.0.0.1:6600,如果前面修改了端口,则这里也要修改。
6.StarWeb的配置文件appsettings.json,其中StarServer想配置监控地址,指向StarServer所在地址。这里也可以不配置,直接留空,此时将自动通过本机星尘代理StarAgent发现。
7.StarServer的配置文件 Config/StarServer.config中的WebUrl,指向StarWeb所在地址,用于生成告警到钉钉群或企业微信群的消息链接。
8.访问StarWeb,首次使用第三方登录进入,然后配置SSO为前面SSO地址,以及StarWeb应用和密钥。
在这里插入图片描述

在这里插入图片描述

3.星尘代理

星尘代理用于守护应用进程、监控服务器节点性能。
部署要点:
1.编译StarAgent,或者在线下载 http://x.newlifex.com/star/staragent60.zip 。
2.部署到每一台服务器,以管理员(Linux上是sudo)启动
在这里插入图片描述

3.按键“s”使用星尘,输入StarServer服务端地址,例如 http://10.0.0.10:6600。
4.按键“2”安装服务,Windows和Linux相同。
5.按键“3”启动服务,等同于Windows下在系统服务中找到StarAgent并启动,Linux下使用命令 sudo systemctl start StarAgent 启动。
6.访问星尘管理平台StarWeb,节点在线页面应该可以看到已安装节点。
在这里插入图片描述

7.配置守护。StarAgent具备守护本机应用的能力,修改配置文件Config/StarAgent.config,填写应用名、文件名、参数、工作目录、自动启动等。由于StarAgent已经安装成为系统服务,能够随系统启动。因此,被守护应用,在StarAgent启动时,也将会启动拉起。如果目标应用进程退出,在AutoRestart=true是,StarAgent将会再次拉起。
在这里插入图片描述

8.使用StarAgent守护所有应用!!!包括SSO、StarServer、StarWeb、AntServer、AntWeb、IoTServer、IoTWeb、IoTData等。

4.蚂蚁调度

蚂蚁调度用于数据计算。
部署要点:
1.编译AntServer,部署到服务器,默认端口9999,配置StarAgent守护,AntServer将会自动接入星尘监控。记住AntServer地址,计算型应用中需要使用。
2.编译AntWeb,部署到服务器,需要手工指定端口,配置StarAgent守护,AntWeb将会自动接入星尘监控。
3.AntServer和AntWeb配置appsettings.json,指向同一个MySql库AntJob(新建库)。
9.访问AntWeb,首次使用第三方登录进入,然后配置SSO为前面SSO地址,以及AntWeb应用和密钥。

在这里插入图片描述

在这里插入图片描述

5.IoT平台

IoT平台包括服务平台、管理平台、数据平台和边缘网关。
部署要点:
1.编译IoTServer,并部署到服务器,默认端口1881,配置StarAgent守护。
2.编译IoTWeb,并部署到服务器,配置StarAgent守护。
3.编译IoTData,并部署到服务器,配置StarAgent守护。
4.编译IoTClient,并部署到服务器,配置StarAgent守护。
5.IoTServer/IoTWeb/IoTData,配置文件appsettings.json使用相同的数据库链接IoT,指向MySql数据库IoT(新建库)。
6.IoTClient配置文件Config/IoTClient.config,修改Server指向IoTServer。
7.访问IoTWeb,首次使用第三方登录进入,然后配置SSO为前面SSO地址,以及IoTWeb应用和密钥。
在这里插入图片描述
在这里插入图片描述

(1)部署IoTServer
编译源码、修改配置、打包文件、发布应用、设置守护

(2)部署IoTWeb
编译源码、修改配置、打包文件、发布应用、设置守护

(3)部署IoTClient
编译源码、修改配置、打包文件、发布应用、设置守护

(4)部署IoTData
编译源码、修改配置、打包文件、发布应用、设置守护

九 操作流程图

在这里插入图片描述

十 边缘网关MQTT接入

一、环境依赖

1.EMQX
版本:4.4.3
文档:https://www.emqx.io/docs/zh/v4.4/
认证:启用auth_http
2.IoTServer
环境:支持Windows 、Linux
依赖:.netcore Runtime 6.0+
下载地址: https://dotnet.microsoft.com/zh-cn/download/dotnet/6.0
3.IoTWeb
环境:支持Windows、Linux
依赖:.netcore runtime 6.0+
下载地址:https://dotnet.microsoft.com/zh-cn/download/dotnet/6.0
4.客户端
环境:支持Windows7以上、ios、android
分辨率:推荐1366*768 及以上
浏览器:建议使用chrome浏览器
下载地址:https://www.google.cn/intl/zh-CN/chrome/
5.MQTT客户端
NewLife.Mqtt

二、EMQX

1.Auth_http配置
以docker emq镜像为例
docker ps 查看镜像进程
在这里插入图片描述

docker exec -it emqx bash 进入emqx镜像

cd /opt/emqx/etc/plugins 进入配置文件存在路径

编辑 emqx_auth_http.cnf 认证文件(参考:官网方文档 /认证/http认证)
注:auth.http.auth_req.url = IotServer部署地址 + 端口

进入管理后台
启用http认证插件 Plugins - emqx_auth_http - start(图1),成功启动(图2)
在这里插入图片描述

图1
在这里插入图片描述

图2

三、客户端

1.Http认证

参数说明

参数名称格式备注
ClientId$"{ProductKey}{DeviceCode}
UserName$"{DeviceCode}{DateTime.UtcNow.ToLong()}"
PasswordHash(Secret)认证密码Md5散列
2.心跳

2.1.Topic
$“sys/{ProductKey}/{DeviceCode}/thing/event/ping/post”
2.2.数据报文

名称类型备注
AvailableMemoryulong可用内存大小
AvailableFreeSpaceulong磁盘可用空间。应用所在盘
CpuRatefloat主频
Temperaturedouble温度
Batterydouble电量
UplinkSpeedulong上行速度。网络发送速度,字节每秒
DownlinkSpeedulong下行速度。网络接收速度,字节每秒
MacsstringMAC地址
IPstring本地IP地址。随着网卡变动,可能改变
Processesstring进程列表
ProcessCountint进程个数
TcpConnectionsint正在传输的Tcp连接数
TcpTimeWaitint主动关闭的Tcp连接数
TcpCloseWaitint被动关闭的Tcp连接数
Uptime int开机时间,单位s
Timelong本地UTC时间。ms毫秒
Delayint延迟
3.属性上报

3.1.Topic
$“sys/{ProductKey}/{DeviceCode}/thing/property/post”
3.2.数据报文

名称类型备注
DeviceCodeString设备编号
ItemsObject[]数据集合
Timelong采集时间戳(UTC)
NameString属性名称
ValueString属性值

在这里插入图片描述

4.指令接收(暂时未实现)

4.1.Topic

Topic备注
$“sys/{ProductKey}/{DeviceCode}/thing/event/ping/post_reply”心跳回复
$“sys/{ProductKey}/{DeviceCode}/thing/property/post_reply”属性回复
$“sys/{ProductKey}/{DeviceCode}/thing/service/property/set”属性设置
$“device/{ProductKey}/{DeviceCode}/upgrade”升级

四、服务端

1.MQTT服务器配置
默认访问地址:部署服务器:1880

在这里插入图片描述

http://www.dtcms.com/a/502864.html

相关文章:

  • 【编程】IDEA自定义系统注解格式|自定义自定义注解格式
  • 定位网站关键词dw网页制作模板源代码
  • 【Linux网络】封装Socket
  • Solidity智能合约开发入门攻略
  • AI决策系统:从数据到行动的智能跃迁——底层逻辑与实践全景解析
  • 好看的单页面网站石岩网站设计
  • 未来的 AI 操作系统(二)——世界即界面:自然语言成为新的人机交互协议
  • 经典排序算法的实现与解析
  • 流量转化与生态重构:“开源AI智能名片链动2+1模式S2B2C商城小程序”对直播电商的范式革新
  • Docker 常用命总结
  • git 和 tortoisegit的快速使用教学(上传至gitee或GitHub)
  • 基于单片机的智能家居多参数环境监测与联动报警系统设计
  • OpenHarmony 6.0 低空飞行器开发实战:从AI感知检测到组网协同
  • 专业做网站排名的人做短视频网站
  • 从协议到工程:一款超低延迟RTSP/RTMP播放器的系统级设计剖析
  • Visio 2024 下载安装教程,安装包
  • 郑州做网站公司+卓美电子商务网页设计试题
  • Java 大视界 -- 基于 Java 的大数据实时流处理在工业物联网设备状态监测中的应用与挑战
  • ESP3266 NodeMCU 使用Arduino点亮 ST7789 240x240 tft屏
  • OpenHarmony平台大语言模型本地推理:llama深度适配与部署技术详解
  • OpenHarmony 的 DataAbility:从 URI 到跨设备数据共享的完整解析
  • ipv6 over ipv4隧道技术
  • 谷歌下载官网舆情优化公司
  • 桐城网站设计做小程序用什么软件
  • 【小学教辅】六年级上册语文知识点课课贴(8页)PDF 重点课文解析 生字词易错题整理 电子版可下载打印|夸克网盘
  • 17.AVL树的实现(一)
  • 如何向文件夹内所有PDF增加水印
  • 动态规划的“生成”之美:三路指针,优雅构建「丑数」序列
  • 高并发系统中的限流与异步优化实战指南
  • agent设计模式:第一章节—提示链