2024AloT物联网开发实例_第1页
2024AloT物联网开发实例_第2页
2024AloT物联网开发实例_第3页
2024AloT物联网开发实例_第4页
2024AloT物联网开发实例_第5页
已阅读5页,还剩339页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

AIoT(上下册合集)目录设备接入 5MQTT协与IoT物网平台 6CoAP协详解 17IoT设上云案详解 24电信NB-IoT无对接里云IoT 27LoRaWAN设接入战 35微小程序MQTT模器 42IoT设免烧三元,开即时册 51IoT存设备改造移上云 57基函数算实现IoT设动态册 64Nodejs版mqtt接阿里云IoT 68C#设接入IoT物网平台 74IoT设用HTTPS协接入联网台 80网与子备上开发战 89设用X.509证接入战(一) 97设用X.509证接入战(二) 102消息处理 110深解读IoT消洪峰么扛 111亿级IoT设连接层逻辑 117IoT平广播息Broadcast实战 125IoT设离线,下消息案 129自义Topic同调用RRPC实() 137系统Topic实云端步调用RRPC() 145设上报进制据云解析 153设备接入MMTIT<PAGE8PAGE9>PAGE9>TT协议与IoTMTT协议与IoT物联网平台一、MQTT协议介绍MQTTMQTT(消息队列遥测传输)是基于TCP/IP协议栈而构建的支持在各方之间异步通信的消息协议。MQTT在空间和时间上将消息发送者与接收者分离,因此可以在不可靠了发(u/SbQTTT这个轻量级协议可在严重受限的设备硬件和高延迟/带宽有限的网络上实现。TMQTTClientMQTTClient库在很多语言中都有实现,包括EmbeddedC、C、Java、Jvacrit、ythn、C++C#Go、i、Aridcliseao的QTTttp//wweclieor/ah/onlashpMQTT固定报头Fixedheader控制报文类型:控制报文类型标志位:剩余长度:可变报头VariableheaderMQTT内容根据报文类型的不同而不同。可变报头的报文标识符(Packetdentifier)字段存在于在多个类型的报文里。acktntifirytes:有效载荷Payload以下QTTUBLSH来说有效载荷就是业务消息。MMTIT< PAGE10 PAGE13 >MTIT二、与阿里云IoT平台建立连接CONNECT阿里云TQTTillCNNECT下:其中clientId,username,password由设备三元组(productKey,deviceName,evicecret官方文档:/document_detail/73742.html设备端代码示例(Nodejs版)client.js/**/**depenence:{mq:2.188"}*/contcpo=equecp);contmqt=equeq);设备身份三元组+区域contdeveonfg={pducK:替换,deveNam:替换,deveece:"替换,egoId:cn-hangha"};mqtcontoons=nqOpndevcenfg);constul=`cp://$devceCductKe}.iot-as-mqt.$deviceConfig.regionId}.alyuncscom18`;2.建立连接contcent=mqconncu,opn);cen.npaceend,funconpace){conoeogend+pckecmd'packtpacke)})cen.npaceeceve,funconpacke{conoeogeceve+ackecm+'pacetpacke)})IoTmtfunconnqOpndevcenfg){cotpaams={poucKe:devconfgpoucKe,devceame:devcenfg.evceame,meamp:Dae.o),cenId:ah.ano).ong6)ub2),}ONNTotopns=keepve:60,60scean:fae,ceaneonpocoeon:4Tv.1.1}1cenI,uename,paodoon.aod=gnmacha1paa,devcenfg.evceece;options.clientId=`${params.clientId}|securemode=3,signmethod=hmacsha1,timestamppaam.eamp}`;oon.uenae=`paam.evceame}&pam.pduKe}`;eunoon;}/*macha1paod参考文档:hp:hepaun.cmdoumenda742.hm?#h2u-1*/funcongnmacha1paa,devceece){etkes=Oec.kepaa).o);//按字典序排序keys=keys.sort();constlist=[];ke.make)>{.puh`ke}paamke}`);});cotconenr=.on);euncp.ceemacha1,devceece).upaecnen).dgehe);}CONNACKeceveconnckpacet>acket{cmd:connak,ean:qo:0,dup:engh:2,opc:nu,ppaoa:nu,eioneen:eunoe:0}PINGRESP endpngeqpackt>{cmd:pngq'} PINGRESPecevepngeppackt>acket{cmd:pngep,ean:qo:0,dup:fae,engh:0,opc:nu,paoa:nulDISCONNECT三、发布数据PUBLISH3.contopc=`ss$devceonfig.poducKe}$devceonfg.devceName}hngevenppep`;eInevafunco){occenpubhoc,geoDaa)qo:});},},5*1000);funcongeoDaa){cotpaoaJon={d:opaam:{empeue:ah.ooahandm)*20)+10),humd:ah.foah.ndo)*20)+60)},meho:hng.eve.ppepo"}cooe.o=poDaa\nopc"+opc)cooe.opaoaJon)eunJONngfpaoadon)}endpuhpacet>{cmd:pubh,opc:sa1hFedeud1fgsA2eIdhngevenpoepo,paoa:d:148648116paam:empeau:2humd:}"meho:hngeven.oe.p},qo:1,ean:meageId:dup:fae}PUBACKecevepubckpackt>acket{cmd:pubck,ean:qo:0,dup:fae,engh:2,opc:nu,paoa:meageId:880}四、接收数据SUBSCRIBE//4.订阅主题contubTopc=`$devceConfg.poducKe}$devceonfig.devceNae}con`;cen.ubceubopc)cen.nmeage,funcnop,meage){cooe.oopc"+oc)cooe.omeage"+meage)})UBRIBEendubcbepackt>{cm:ubcbe,ubcpon:[{opc:a1hFedeud1fgAP2eIdcono,qo:0},qo:1,ean:dup:fae,meageId:881}SUBACKSUBACK消息体:eceveubackpaket>acket{cmd:uback,ean:qo:0,dup:fae,engh:,opc:nu,paoa:ganed:[128,meageId:881UNSUBSCRIBEendunubcbepaket>{cm:unubcbe,qo:1,meageId:42,unubcpo:[a1hFedeud1fgA2eIdcono']}UNSUBACKeceveunubackpackt>acket{cmd:unuback,ean:qo:0,dup:fae,engh:2,opc:nu,paoa:meageId:423}五、服务质量QoS六、设备掉线重连设备与阿里云oTunubscrie,否则订阅关系不清理。设备重连后,依然保持之前的订阅关系,不需要重复订阅。TLSv1.2设备和TLSv12加密。TLS加密,需要下载根证书。CNNCT参数中clitId的ecremoe2ttp//helaliyncom/ocmnt_etil/7372html PAGE23 >CoAPCoAPCoAP协议详解< PAGE20 CoAP协议详解|Thttp:/oap.tehnologyCAP(CnstraindAplicatinrotocl)的缩写。在T物联网场景,为了让小设备可以接入互联网,CoAP协议被设计出来。CoAP是一种应用层UDPHTTPTCP之上。CoAP协议非常4CoAPHTTP类似的特征,核心内容为资源抽象、RESTHTTP对于受限环境的劣势既考CAP提供RIEST式以及可以独立定义的头选项提供的可扩展性。另一方面,CAP基于轻量级的DP协议,并且允许P多播。为了弥补UDP传输的不可靠性,CoAP定义了带有重传机制的事务处理机制。并且提供资源发现机制,并带有资源描述。协议特点:基于消息模型请求/响应模型双向通信轻量、低功耗支持可靠传输P非长连接通信,支持受限设备支持观察模式支持异步通信协议内容:CoAPUDP上。CoAP【Ver】版本编号。【T】报文类型,CoAP4种不同形式的报文,CON报文,NON报文,ACKRST报文。【TKL】CoAP标识符长度。CoAP协议中具有两种功能相似的标识符,一种esage()oke()【Code】功能码/响应码。CodeCoAP35cdXX表示CAPXX、.X或XX则表示CAPesaeD【TokenTKLToken【Option】报文选项,通过报文选项可设定CoAP主机,CoAPURI,CoAP请求参数和负载媒体类型等等。【11111111B】CoAP报文和具体负载之间的分隔符。请求方法:.1GT.2OT.3UT.4EETE响应码:Success2.xx这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。01Cratd02elted03Vlid04Caned05CtentClientError4.xx:这类的状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理。.0Bdeuet.1nathrized.2Bdtin.3Fridn.4tFnd.5etodotAlld.6otAcctale.12recnitinFiled.13eustntityooare.15nsprtedCtent-FrmatServerError5.xx:00teralervrrrr01otmlementd02BdGteay03ervicenavilble媒体类型:工作模式:CoAP参考了很多HTTP的设计思路,同时也根据受限资源限制设备的具体情况改良了诸多的设计细节,增加了很多实用的功能。消息类型CON:CON请求被发送,那么对方必须做出响应。NON:NON请求被发送,那么对方不必做出回应。ACK:CON消息的响应。RST:复位消息,当接收者接收到的消息包含一个错误,接收者解析消息或者不再关心发送者发送的内容,那么复位消息将会被发送。请求/响应模型:1.携带模式分离模式非确认模式CoAP协议的URI:在HTTP的世界中,正式ESTFul协议由于其简单性和适用性,在WEB应用中越CAPCAPRIRICAP//mchin.adrs:83/enor/temeratre。CoAP的默认UDP端口号为5683HTTP和CoAP对比:HTTP代表超文本传输协议,CoAP代表约束应用协议;HTTPTCP,CoAPUDP;CoAPHTTP协议的简化版;CoAPHTTP协议一样使用请求/响应模型,拥有相同的方法;CoAP开销更低,并支持多播;CAP/WN/MMCoAP和MQTT对比:MQTT协议使用发布/订阅模型,CoAP协议使用请求/响应模型;MQTT是长连接,CoAP协议是无连接;QTTCAP协议是erver和Clint之间消息传递的单对单协议;QTTClients理解的标签消息,CAP内置内容协商和发现支持,允许设备彼此窥测以找到交换数据的方式。IIT< PAGE24 PAGE25 >CoAPIoT设备上云方案详解作者|数据采集通信连接,数据存储,数据可视化,洞察,行动决策。但,在实施过程中,碎片化的设备端通信连接难题往往就阻碍了项目落地进程。今天,本文总结不同设备场景的连接上云方案,供大家参考。一、资源丰富类设备inuAdridAruio在操作系统层面,解决了不同通信模块的差异,硬件端的应用程序只需要集成云平台的IoTSDK,或者集成开源MQTTSDK即可和云端建立长连接通信链路。二、资源受限类设备ROTSMCU+通信模组的方式,实现设备数据远程采集。(B-oT/2G/3G/4G)移远通信芯讯通合宙有方科技、广和通、日海智能、高新兴等,而各家的AT指令也各不相同,为设备端应用程序开发带来了很大难度。根据模组集成度不同又细分一下几种场景方案:三、本地通信类设备igBee设备,LoRa设备,Modbus设备,而不具有互联网接入协议栈支持,此时需要DTU/网关设备MQTT协议,从而实现数据采集上云。四、本地系统整体上云面对这种场景,可以通过自有系统集成泛化SDK通过HTTP/2协议,在不改造设备前提下,高效的实现海量数据快速上云。 PAGE29 >电信oT无缝对接阿里云IoT电信电信IT无缝对接阿里云IoT< PAGE30 电信BIoT无缝对接阿里云IoT作者|NB-IoT设备必须直连电信CTWing平台T,AWSTTB-oT设备。IoT阿里云TB-oT设备。一、电信CTWing开发创建产品登陆电信CTWing控制台,创建产品:上海花城水表,选择智能水表,其他配置信息如下图:产品创建成功后,查看服务定义,可以看到属性值:用水量,标识为:water_consumption如下图:注册设备在产品详情-设备管理页面添加NB-IoT设备,这里我们输入NB-IoT水表设备的E注册应用在应用管理页面添加应用上海花城水表管理,获取到应用的AppKeyScret二、阿里云IoT平台开发开通企业实例-连接型CWing连接型创建产品在连接型实例中,新建产品:上海花城水表,选择智能水表,,其中数据格式选择:透传/自定义,数据校验级别选择:弱校验,如下图:功能定义用水量watercnsumption如下图:数据解析CTWingT创建云网关云网关,用来解析电信平台流转过来的设备数据,关联前面创建的产品上海花城水表CWing${deviced}等待几分钟,云网关创建完成后,我们获取到网关URL,如下图:三、电信IoT配置云网关配置云网关CTWing订阅管理T的云网关URL,如下图:四、联机运行NB-IoT我们启动手上的BIoTCTWing阿里云IoT我们在企业物联网平台控制的设备详情,可以看到有一台新的在线设备,物模型数据的运行状态可以看到实时的用水量值,如下图:日志服务也可以看到电信CTWing平台流转过来的B-oT设备数据在阿里云oT企业物联网平台物模型解析的完整过程,如下图:BITCWig完整数据报文至此,我们完成了电信NB-IoT设备接入阿里云IoT平台,充分享受阿里云的海量存T PAGE39 >LoRaWANLoRaWANLoRaWAN< PAGE40 LoRaWAN设备接入实战作者|随着IoT物联网的高速发展,低功耗,远距离,抗干扰的低功耗广域网快速崛起,oa与B-ToaWANT一、整体架构方案阿里云企业物联网平台开启LinkWAN服务后,即可实现LRaWAN设备的上云。LoRaWAN液位传感器为例,完整方案如下:二、阿里云IoT平台开发-LinN基础型inkWAN稍等几分钟,等待实例创建完成,可以查看完整实例信息,如下图:添加LinkWAN在LinkWAN的网关管理页面,添加网关,录入手中LinkWAN网关设备的GwEUI、PINCode和频段、通信模式,如下图:创建入网凭证在ikWAN入网凭证创建产品在设备管理LoRaLoRaWANLoRa入网凭证,如下图:inkWAN的入网凭证oa在产品详情页面的功能定义,我们添加物模型-属性:当前液位,标识符:water_level,如下图:在产品详情页面的数据解析,我们按照设备说明书编写数据解析脚本,如下图:注册设备在设备管理的设备页面,添加LoRa液位传感器具体设备,录入手上LoRa设备的DevEUI,JoinEui和AppKey信息,如下图:三、联机运行LinkWAN,LoRaLoRa当前液位值MQTTMQTT模拟器< PAGE44 PAGE49 >微信小程序MQTTMQTT模拟器作者|一、IoT设备模拟器小程序MQTT模拟器Tpicrgin接入。点击原文进入小程序二、创建产品和注册设备①我们进入物联网平台,公共实例,创建如下产品:②在产品详情页面,功能定义下添加属性和事件,如下图:③基于当前产品,注册设备,并获取身份三元组,用于设备连接时的身份认证,如下图:三、MQTT模拟器使用设备上线①打开微信,扫描进入小程序。②输入设备三元组。③选择设备所在的接入region。④点击设备上线。⑤进入物联网平台控制台,设备详情,设备为在线状态。自定义Topic①模拟设备发布传感器数据到/{pk}/{dn}/user/update主题。②在物联网平台控制台,日志服务验证数据上报:Topic①模拟设备主动订阅主题/{pk}/{dn}/user/get。②在物联网平台控制台,设备详情的Topic列表可以看到一条订阅记录。③点击发布消息,输入内容,确认发布后,小程序会实时展示收到的消息。物模型-属性上报①点击属性上报JSON结构的属性值。②物联网平台控制台,设备详情>物模型数据>运行状态,查看设备上报属性的内容。物模型-事件上报d和JON②物联网平台控制台,设备详情>物模型数据>事件管理,查看设备上报的事件标识符合输出参数内容。四、设备三元组Chrome插件为了方便在小程序里输入设备身份二维码,推荐大家安装IoT设备身份三元组转化二维码的Crme插件安装①Crme:chrome://extensions/②扩展程序设置页面右上角,开启开发者模式。③点击左上角加载已解压的扩展程序按钮,选中本地扩展程序文件夹,然后点击选择按钮。④T插件使用方式①进入物联网平台控制台,进入设备详情,点击查看DeviceSecret。②在设备证书弹框,点击一键复制。③打开浏览器右上角IoT插件,粘贴设备信息,生成二维码。④打开微信,扫描进入小程序。⑤点击小程序左上角,扫描设备身份二维码,自动填入三元组。⑥选择设备所在的接入region。⑦点击设备上线。 PAGE53 >IoTIIT< PAGE54 IoT设备免烧录三元组,开机即时注册作者|孙承旭一、背景物联网场景中,设备产线烧录不同三元组成本很高,Android设备更是无法独立烧录TTMQTT二、流程图设备动态注册三元组流程如下:三、开发实战创建产品TAroid设备。进入产品详情,获取productKey和productSecret。开启动态注册功能,如下图:接下来,我们无需按常规流程,预先注册设备,而是直接开发设备端程序。设备端开发我们以Node.js代码演示设备动态注册完整过程。动态注册CONNECT报文,报文中包含动态注册参数,请求建立连接。QTT{rouctKey}itas-mqtt.{regind.liyucscm183MQTTCONNECT报文参数和取值结构如下:mmqenI:cenIdecuemoe2auhpeegnandomxsgnmehox"mqeName:devceame&+poucKeymqaod:gnhmacpduececonen)免预注册认证方式,设备注册成功后,物联网平台使用Topic:/ext/regnwl,返回ClientID、DeviceToken。Taylad{{podcKe":x",devceNme":x",cenId":x",devceokn":}动态注册示例代码:ffuncondoevceRee){//1.产品信息contpoucIno={ppoucKe:"poucKe,poucece:"poucece,egonI:cn-hangh"}/2程序读取的设备唯一标识,比如A,ealNumer等poucInf.evceame=ahandm).ng6).ub2)/.生成设备动态注册的参数varopns=geRegeOonpoucIno,uedA);/4发起动态注册,获取设备连接cenIddevcekenvaregeent=mqconncoon);egeen.onmage,funcoopc,meage){/.fe/egn'=opc){/6断开注册连接egeen.end);/.T连接devceOnneJO.pemeage)cn-hangha)}})}生成设备动态注册的参数,示例代码和参考文档:/document_detail/132111.htmlffuncongeRegeOonpoucInf,oo){varandm=Dae.o);varcontent={devceame:poucInf.evceame,poucKe:poucInf.oucKe,andm:andm}varopns=}opions.clienId=Date.now()+|secuemode=2,authType=regnwl,andom="+andom+ignmehdhmacha1"opn.uename=poucInf.evceame+&"+poucInf.oucKeyopn.paod=gnmacha1cnen,poucInf.oucece)opn.pt=188;opopon.host=`$poducInfo.poductKey}.io-as-mqt.{poductInfo.egionId}.aiuncs.com`;opn.pocl=mq;opn.ca=ooAopn.keeave=120eunopn;}动态注册成功后,产品下会设备数量会更新:设备上线和上报数据ClintID和eviceTkenQTT连接,TCNNCTmmqenI:cenIdecuemoe-2auhpecon"mqename:deceNae+&+pduKeymqaod:deveokenmttClietIdClintDmttUsrNameevicNm+""+rouctKymttPasrdevicTkenMQTT连接和上报数据,示例代码:ffuncondevcenneoegonId){//设备MQTT连接参数varoptions={}opn.cenId=op.enId+secuemde-2aupeconn"opn.uename=op.evceame+&"+op.oucKeyopn.paod=o.deveokenopn.pt=1883opn.hot=`op.oucKe}.-amqegonId}aunc.cm`opn.pocl=mq'opn.keeave=120//设备建立MQTT连接vardevceent=necpon);//上报业务数据deviceClient.publish(`/${ductKey}/${opts.deviceName}/user/update`,"sdkclient"+Daeno),{q:1});}ClintD PAGE59 >ITIoIoT< PAGE60 IoT存量设备零改造迁移上云作者|在物联网实际项目中,有些设备采用私有协议接入了本地设备管理系统,有些NB-IoT设备被迫接入了电信AEP平台,有些设备接入了移动OneNET平台。但甲方客户的整体业务都部署在阿里云上,我们如何实现整体业务上云呢?阿里云T泛化协议SDK接入的方案T设备零改造的前提下,帮助企业快速构建云上桥接服务,通过网桥实现IoT终端设备与阿里云IoT物联网平台的双向数据通信。一、技术架构SDK适用场景SDK面向的目标场景包括:设备无ternt设备采用私有协议。存量设备不修改固件逻辑适用场景SDKServer提供基于配置文件的静态配置管理能力。提供设备连接管理能力。提供上行通信能力。提供下行通信能力。二、接入流程使用泛化协议SDK,桥接设备与物联网平台的整体流程图,如下:三、开发实战泛化SDK依赖JavaSDKMaven<dependency><dependency><gupIco.aun.peevce<gouId><afcIdoa-dgedk-oeafacId><von2.1.veon><deendec>初始化SDK您需要创建一个BridgeBootstrap对象实例,并调用bootstrap方法。泛化协议SDK初始化工作完成后,读取网桥信息,并向云端发起网桥设备上线请求等。otstrapDK注册一个onlinkChanelHnlerBBdgeBoapbdgeooap=newBdgeBoap);bdgeooapboapnewDonnkhaneande){@OvedepubcboeanpuhoDeveeioneon,ngopc,be]paoa){//云端下行控制指令ngconent=newngbe);ognfoetDonnkmeage,eon:},},},eion,oc,conen;eunue;}@Ovedepubcboeanboacangopc,be]paoa){eunfae;}});配置泛化网桥身份Java(src/mai/reurce/下的plictincnf##everenponthp2ndont=hp:/你的oducKeo--hp2cnhangha.aunccom44"auhndpnt=hp:o-auhcnhangha.aunccomaubdge"#aeaydevcenfo,poucKey&devceame&devceecetpoucKey=bdge-ducKe}devceame=bdge-evceame}devceecet=bdgeDevceece}配置网桥下设备身份ava工程的默认资源文件路径(一般是rc/main/resurces/)下的f中读取配置文件。devce-gna-Ien}{pducKy:devce-oucKe}deveName:devceDevceame}deveecet:devceDevcece}}设备上线设备上线时,需要传Session。下行消息回调时,会把Session回调给网桥。esinUUpnkhnneanderupnkaner=newUpnkhnneande;eonObectchannel=newObec);eioneion=eon.neInanceognaIen,chane);//设备上线boboeanucces=upnandedonneeon,ognaIdn);if(success){//设备上线成功,网桥接受后续设备通信请求。}ee{//设备上线失败,网桥可以拒绝后续设备通信请求,如断开连接。}设备通过网桥上报数据网桥使用泛化协议SDK代理设备上报消息,代码如下://ognaIdnyDevceIdentydevceIdenty=onfgFacoy.geDevceonfiganager).geDevceIdeniyognaIden);ooceagepocoeage=newooceage);pocoeage.eaoapaoa);pocoeage.eo0);poocoeage.etopctng.fomaOPI_MLATUSR_DFIN,devceIdenygeoduKe),devceden.gDevceame)));//网桥代理上报upnkhaneandedubhAncognaIden,pocoeage);.设备接收云端指令bAIppvaeacecuoevceeecuoevce=newheadooecuo(RunmegeRune).avabeoceo),RunmegeRune).avabeoceo)*2,60,meUnOND,newLnkedBcknguee<1000),newThreadFactoryBuilder().setDaemon(true).setNameFormat("bridge-downlink-handle-d).ud),newheadooecuoAboc));pubcacvodmanngag){Ueapcaoncof&devce.onfbydefutbdgeooap=newBdgeBoap);bdgeooapboapnewDonnkhaneande){@Ovdepucboeanpuhoevceeoneon,ngoc,be]paoa){getmeagefomcoudgetdonnkmeagefomcoudeecuoevceubm)->handeonLnkeageeon,opc,paoa));eunue;}@Ovdepucboeanbadang,be]be){eunfae;}});}});}pvaeacvodhandeonLnkeageeoneon,ngoc,be]paoa){ngconent=newngpaoad);og.noetDonLnkmeage,eion:},oc:},conen},eion,opc,conen;Obectchannel=eon.gehane);ngognaIdny=eion.eOgnaIdn);//forexample,youcansendthemessagetodeviceviachannel,itdependsonyouspecifcevermpemeaon}设备下线当设备从网桥断开后,可以调用下线接口,告知云端: upLnkade.offneognaIen); 基于函数计算实现I基于函数计算实现IoT< PAGE64 PAGE67 >基于函数计算实现IoT基于函数计算实现IoT设备动态注册作者|一、技术方案evic(HTPSFC。函数计算FC调用IoT平台的RegisterDevice接口,传递productKey和evicd。成功,返回设备三元组。失败,调用oT平台QueryDeviceDetail接口,传递roductKey和eviceId,获取设备三元组。QTTT依赖APIRegisterDevicettp//helaliyncom/ocmnt_etil/9470htmlQueryDeviceDetailtts//helaliyncm/cumentdtail/959.tml二、函数计算实现HTTPS触发器:oesccontgeRaBoy=equea-o);contco=equec);contRent=eqe@acoupo-ce).en;contoons={accKe:"云账号的AK,accKeSece:"云账号的AKece"};1.创建otppevercentcontoent=newRen{accKeId:opn.accKe,eceAceKe:opn.accKeSece,enpon:opn.endont|hp:o.n-hanga.aunc.om,apeon:opn.apeon|201801-20});contpoucKey=pduKe;moue.ep.haner=funcoeq,ep,cone){geRaBdeq,funcne,bd){boy=JON.aedecdeRIopoenbd.ng)));ccontdevceId=bo.dvceId;cofunon*){try{//创建设备cotegeRepone=edoen.que(RegeDevce,{poucKe:poucKe,devceame:devceId});ep.enJONngf{ucce:ue,daa:egeReponeDaa}));}catch(err){//设备已存在,查询设备详情cotqueRepne=edoen.eue(ueDevceDe,{pducK:poucKe,deveNam:deveId});coteunJon={ucce:ue}eunJo.da={Devceame:quRepone.aa.evceNme,oducKe:quReponeDaa.ducKe,Devceece:queRepne.Da.Deceece,IoId:queRepne.Da.IId}ep.enJONngfeunJon));}});});};三、设备调用FCHTTPSPOSTJSON触发函数计算,获取三元组。ooes版qt接入阿里云IoT< PAGE68 PAGE69 >ds版qt接入阿里云IToejs版mt接入阿里云IoT作者|一、准备工作注册阿里云账号使用个人淘宝账号或手机号,开通阿里云账号,并通过支付宝实名认证。免费开通IoTttp//wwaliyncom/rdct/it软件环境oestts//ndjorg二、开发步骤IoT创建高级版产品功能定义,添加产品属性注册设备,获得身份三元组设备端开发我们用oes创建设备端项目itdmo2个文件ackg.on和evicsckaesnTk依赖:{{name:aun-o-em,depenence:{mq:2.188"}}pmTDK: $npmnal evics/**/**depenence:{mq:2.188"}*/contcpo=equecp);contmqt=equeq);//设备身份三元组+区域constdeviceConfig={pducK:替换产品,deveNam:替换设备,deveece:"替换密码egoId:cn-hangha"};contpaas={pducK:devcenfg.oucKe,deveNam:deveonfgdeveNam,meam:Daeno),cenI:ah.ado).ng6).ub2)}ONNTontoons=keeave:0,60sceanfae,ceanesonpocVeon:4Tv.1.1}1.生成cenId,uenam,paodopn.paod=gnmacha1aam,devcenfg.evceece;options.clientId=`${paams.clientId}|securemode=3,signmethod=hmacsha1,tmestamp=$paam.meam}`;opn.uename=`paam.evceNae}&paa.pducKe}`;cconstul=`tcp://$ducKey}.iot-as-mqt.$deviceonfig.regonId}.aliunc.cm:18`;2.建立连接contcent=mqconncuopn);.属性数据上报contopc=`sy/$devceConfig.poductKey}${deviceonfg.devceName}/hing/even/popepo`;eInevafunco){occenpubhoc,geoDaa));},5*1000);//模拟数据funcongeoDaa){cotpaoaJon={d:Daeno),paam:{empeue:ah.ooahandm)*20)+10),humd:ah.foah.ndo)*20)+60)},meho:hng.eve.ppepo"}cooe.o=poDaa\nopc"+opc)cooe.opaoaJon)eunJONngfpaoadon);}/*macha1paod参考文档:hp:hepaun.cmdoumenda742.hm?#h2u-1*funcongnmacha1pam,devceece){etkes=Oec.kepaa).o);//按字典序排序kkes=ke.o);cott=;ke.make)>.puh`ke}paamke}`);});cotconenr=.on);euncp.ceemacha1,devceece.udaecnen).gehe);}三、设备运行设备启动IoTTCC设备接入IoT< PAGE74 PAGE79 >CIT#设备接入IoT物联网平台作者|一、准备工作注册阿里云账号使用淘宝账号或手机号,开通阿里云账号,并通过实名认证(可以用支付宝认证)。免费开通IoT:tts//w.liyuncm/ruct/it软件开发环境C#VialtuioE二、IoT平台云端开发创建基础版产品产品信息:pic:注册设备rdctKyevicNameevicScret:三、设备端开发IoTpassword:tts//w.yuu.cm/clu-ev/it-tec/mbm5g接入IoT平台C#版本的MQTTC#的mqtt库:https:///paho/clients/dotnet/VisualStudio工程:/downloads/download.php?file=/paho/1.2-milestones/mmtt/M2qtt4200zip设备端应用程序四、运行结果云端看到设备上线记录,数据上报记录。mttC语言开发的传感器设备接入阿里云TIITTTS< PAGE84 PAGE83 >IT设备用HTSIoT设备用HTS协议接入物联网平台作者|在物联网开发过程中,有时候我们现有的oT设备是基于HTTPS协议栈,那么我们能否接入IoT物联网平台呢?答案是肯定的。本文就通过开发实战给大家讲解如何使用HTPST华东2(上海区域。HTPSttp//helaliyncom/ocmnt_etil/83.tmlHTTPS接入主要有两个步骤:tokenHTTPS上报传感器设备采集的数据一、设备身份认证itashttpc-shngaialiync.cm认证请求示例:OTauh/1.1o:o-ahp.n-hanga.aunc.omonenpe:appcononbo:{veon:defau,cenId:mgh1000002,gnmehod:hmacha1,gn:480141D40622128BB40631A221,podcKe:1EvaNN,devceNme:Naspuh8FB,meamp:1016628"}返回示例:返回结果示例:{{coe:0/业务状态码meage:ucce,nfo:{oken:644ebf2e4d4ea181ed42f6"}}二、设备数据上报数据上报oT平台接入点:/topic/${topic}请求示例:OTopca1FLxdevce12pubo:o-ahp.n-hanga.aunc.ompaod:oen}onenpe:appconoceeambo:oudaa}返回示例:{{coe:0/业务状态码meage:ucce,nfo:{meageId:826621624040}}三、使用HTTPS上报数据实战创建产品功能定义添加产品属性定义:产品功能定义:注册设备,获得身份三元组设备详情:设备模拟代码vvarp=equeeue-pme);contcpo=equecp);contdevcenfg={poucKe:poucKe,devceame:devceame,devceece:"替换devceece"}constopc=`sy/$ductKey}/{deviceConfig.deviceName}/hngeventpropepo`;//1.获取身份tokenrp(getAuthOptions(deviceConfig)).henfuconpedBo){cooe.oAuhInfo:+ON.ngfpaedod))2.上报物模型数据puDaapc,paedBd.no.ken,geoDaa))}).cacfuncoe){cooe.oAuher:+ON.ngfe))});AuhfuncongeAuhpondvceong){contpaams={pducK:devcenfg.oucKe,deveNam:devcenfg.evceame,meam:Dae.o),cenI:ah.ano).ong6)ub2),}cenId,uenam,paodvarpaod=gnmacha1paa,devcenfg.evceece;varoons={mehd:O,u:hp:o-ahp.n-hanga.aunc.omauh,bd:{veon:defau,cenId:paamcenId,gnmehod:gn:paod,podcKe:devcenfg.oucKe,devceNme:devcenfg.evceame,meamp:paammeamp},on:ue};eunoon;}//数据上报funconpuDaaoc,oken,daa){contopns={mehd:O,u:hp:o-ahp.n-hanga.aunc.omoc'+oc,bd:daa,heae:{ppaod:okn,onenpe:appconoceeam'}}poon).hnfuncopaedBd){conoeogpbhucces:'+paeBo)}).achfuncne){conoeogpbher'+JON.ngfe))});}//模拟物模型数据functiongetPostData(){varpaodJon=d:Dae.o),paa:{humd:ah.ooahandm)*20)+60),empeue:ah.foah.ndo)*20)+10)},mehd:hng.evenppe.o"}conoeogpoDaa\nopc"+opc)conoeogaoadon)eunJONngfpaoadon);}macha1gnfuncongnmacha1pam,devcece){etkes=Obeckepaam)o);//s=ke.o);contt=;ke.make)>{.puh`ke}paamke}`);});});contconenr=.on);euncp.ceemacha1,deceece).pdecone).dgehe);}运行效果 PAGE89 >网关与子设备上云开发实战网关与子设备上云开发实战<网关与子设备上云开发实战< PAGE92 网关与子设备上云开发实战作者|在IoT物联网场景中,对我们的终端设备本身无连接互联网能力时,那么数据如何上云呢?TQTT备,由网关代理接入oT物联网平台。这样只需要网关建立一条MQTT长连接通道,所有子设备可以复用网关的MQTT通道,高效传输数据到云端。这时候网关设备除了自身作为IoT网关设备(拥有身份三元组)与IoT物联网平台建立MQTT,收发数据,还要负责子设备管理,包括:网关添加子设备网络拓扑关系mtt网关把子设备数据上报到云端网关接收指令,并转发给子设备网关上报子设备下线网关删除子设备网络拓扑关系ttpmttigBeeous、BLE、OPC-UA等,这部分逻辑由网关实现。整体架构如下:我们以JvainkKitDK一、创建网关产品基于此网关产品注册一台网关设备,并获得身份认证三元组。二、网关设备上线使用网关设备三元组身份,建立端到云上的MQTT长连接,逻辑如下:LLnkKInaamspaams=newLnkKInaam);DevceInogaeaInfo=newDevceIno);gaeaInfopducKy=gaea.odcKe;gaeaInfodeveName=gaea.evceNme;gaeaInfodeveecet=gaea.evceece;paamdevceIfo=gaeaInfo;LnkK.genance).naam,ILnkKnnecLene)此时,我们在控制台查看网关设备状态为:在线三、添加网络拓扑关系T当子设备水泵通过本地协议接入网关后,我们需要同步网络拓扑关系到云端,也就是添加子设备到这个网络里。代码逻辑如下:DDevceInodevceIfo=newDevceIno);devceIfopoucKey=poucKe;devceIfodevceame=devceame;devceIfodevceect=devcece;LnkK.genance).gaea).gaeaAdubDevc(devceIfo,子设备身份ubDevcennecLene)添加成功后,我们在控制台网关设备详情,可以看到关联的子设备列表,如下:四、子设备上线添加网络拓扑关系后,我们需要把子设备在本地网络的状态同步到云端。子设备上线代码逻辑如下:DDevceInodevceIfo=newDevceIno);devceIfopoucKey=poucKe;devceIfodevceame=devceame;devceIfodevceect=devcece;LnkK.genance).gaea).gaeaubDevceogn(devceIfo,子设备身份IubDevceconLene)子设备成功上线后,我们在网关设备详情,可以查看到子设备状态为:在线在设备详情页面,可以查看到接入的网关信息,如下图:五、子设备上报数据TDDevceInodevceIfo=newDevceIno);devceIfopoucKey=poucKe;devceIfodevceame=devceame;devceIfodevceect=devcece;LnkK.genance).gaea).gaeaubDevceuh(opc,/子设备opcdaa,/数据devceIfo,子设备身份IubDevceconLene)日志服务查看子设备上报数据的日志如下:六、子设备订阅主题oicDDevceInodevceIfo=newDevceIno);devceIfopoucKey=poucKe;devceIfodevceame=devceame;devceIfodevceect=devcece;LnkK.genance).gaea).gaeaubDevceucbe(opc,/子设备订阅opcddevceIfo,子设备身份IubDevceconLene)七、子设备下线子设备和本地网关断开连接时,我们需要把离线状态同步到云端,代码逻辑如下:DDevceInodevceIfo=newDevceIno);devceIfopoucKey=poucKe;devceIfodevceame=devceame;devceIfodevceect=devcece;LnkK.genance).gaea).gaeaubDevceogu(devceIfo,子设备身份IubDevceconLene)八、子设备网络拓扑删除子设备完全从本地网络移除是,我们需要删除设备的网络拓扑关系,代码逻辑如下:DDevceInodevceIfo=newDevceIno);devceIfopoucKey=poucKe;devceIfodevceame=devceame;devceIfodevceect=devcece;LnkK.genance).gaea).gaeaDeeeubDvce(devceIfo,子设备身份IubDevceemveLene)至此,我们掌握了网关和子设备的开发过程。如果网关设备采用C,或者Python开T PAGE101 >09)09)< PAGE100 设备用509证书接入实战(一)作者|TCA证书;将数字设备证书与设备身份相绑定。限制说明MQTTCA证书。目前仅2(上海)CA证书。CARSA签名的设备证书。10CA。CA证书注册。一、制作私有CA证书MacOpenSSLCAesl版本:opeopelveon-aOpenL0..h14Janbuton:Nov192017pafo:dan648664vmopn:bn6464)m2n)c4pcha)dedcc16n)bofhd)compile:-archx8664-fmessage-lengh=0-pipe-Wno-tigraphs-fpascal-strings-fasm-bocks-O3-DREENTRANT-DDSODLFN-DHAVE_DLFCN_H-DL_ENDIAN-DMD32_REG_T=int-DOPENSSL_NO_IDEA-DOPENSSL_PIC-DOPENSSL_THREADS-DZLB-mac-veon-mn106ONLDIR:SemLbaOpenL"CAkeyCACAkey10openssleq-new-509-days650-newkeysa:2048-keyoutmIoTARoot.key-outmyoARo.t-ubj\=NShanghaLhanghaOIoOUoN."CA证书opel09-nout-et-nmIoARo.tCA证书内容:二、制作验证证书查看私有证书注册码T在左侧导航栏,选择设备管理>CA。CACA。CA证书对话框中,获取注册码。验证证书制作OpenSSL为例,制作验证证书,操作步骤如下:Key:#生成验证证书#生成验证证书opelgena-otvefcane.key2048生成验证证书CSR,其中Cmmname需填入oTCA证书注册码:#生成验证证书#生成验证证书CSRopeleq-new-keyvefcaonekey-otvefcaonecr-ubj\=NShanghaLhanghaOIoOUoN***这里是注册码***"CACSR创建验证证书:CAkeyopensslx509-req-inverificationCert.csr-CAmyIoTCARoot.crt-CAkeymyIoTCARoot.key-Acaeeal-otvefcaonect-as65-ha12#查看验证证书内容opel09-nout-et-nvefcaonect查看验证证书:三、上传并验证私有CA证书当我们准备完成私有CA证书和对应验证证书,就可以在IoT物联网平台的控制台上传证书了。上传证书页面如下:CA证书详情页面,可以查看证书信息,参考如下:至此,我们完成了私有CA证书的制作和在oT物联网平台的注册。后续,我们会介CA.09T物联网平台。09)< PAGE104 PAGE109 >09)设备用509证书接入实战(二)作者|509一、创建产品和注册设备创建产品T控制台。在左侧导航栏,选择设备管理>产品。在产品管理页,单击创建产品。X.509,CA证书勾选是。产品创建完成后,如下图:注册设备evicNme。注册完成后,设备处于未激活状态,其中X.509证书为空。二、签发设备证书TCAenslCNevicNme。pempemkeyopelgena-otdeve-1key2048CSRopeleq-new-keydevce1.ey-otdeve-1cr-nekeya:2048-ubj\=NShanghaLhanghaOIoOUoNdn02842"#-eealCACRTopensslx09-eq-ndevice-1.csr-AmyIoTCARoot.ct-AkeymyIoCARoot.key-Aceaeeal-utdevce1.t-ds60-ha12#查看设备证书SNopel09-nout-et-ndevce1.tSN码,如下图。三、绑定设备证书T物联网平台需要用户上传设备rouctKey,eviceNme和设备证书SN的映射csvoducKeDeveNameNa1UoOALdn026ddd180a026d7TCV绑定成功后,我们查看绑定结果,如下图:四、设备激活我们以Java设备为例,介绍设备以私有证书接入过程。JavaPKCS#8OpenSSL##转换格式PKCS#8opelpkc8-ok8-nfmM-ndeve-1key-utdevce1pk8.key-ncptLSecremoe2itrt.crtSScketFactry实例。ppoeedLockeFacyceaeLocke)hoscepon{/hp:documendea7742.hml/设备.09/IoTAInpureamn=IoqlenWhAuthBX0.cass.geReouceAsteam"iooo.cr");efcaeacoycf=efcaeFco.eInance.0);efcaeca=cf.gneaeefcaen;n.oe);Keoekeoe=Keoe.geIanceKeoe.geefaupe));keoeoadn,nu);keoeeefcaenca,ca);usanageFactoymf=usManagerFacoy.geInsanceTusanageFacto.geDefauAghm));mfnkeoe);//传入设备证书、证书证书私钥InputSreamcerIn=IoMqtClentWthAuthBX509.cass.geResouceAsSteamcerPah);efcaeacoycef=efcaeFco.eInance.0);efcaecea=cef.gneaeefcaeeIn);ceIncoe);Keoeks=Keoe.geInaneKeoe.geefaupe));k.odnu,nu);k.eefcaencefcae,cea);vaeKeypvaeKey=gevaeKepvaeKeah);k.eKeyEny"pvae-key",pvateKey,pvateKeyasord.oharAay),neweticae]{cea});KeanageFacoykmf=KeManagerFacoy.geInsanceKeanageFacoy.geDeauAgoh));kmfnk,pvaeKeaod.haAa));/构造ockeFcoyttffLonetcont=Lone.geInanceLV1.2);coe.nkmf.eKeanage),mf.guanage),nu);LockeFacyockeFcoy=cone.gockeFco);eunockeFco;}QTT的CNNCT,此时srname和asrd////接入域名ngbker=:x0.."+egonId+.aunc.co:18;/TcenIdngmqenId=em.cuenme)+ecuemode2;emoeencepeence=newemoeence);mqent=newqeneveURL,mqenI,peence);qonncOpnsconnps=newqonncOpn);connp.eqeon4);/T.11/Looc,mqenIdecuemoe2。connp.eockeacceaeLocke));connp.eeaneonfae);connp.eAumacReonneue);connp.eKeeAveIneva00);//设置connect回调mqttClient.setCallback(newMqttCallback(){@OvedepubcvodmeageAvedngopc,qeagemeage)hoscepon{/只处理.09fexauhdenepone.equaoc)){JONObjectson=JSONObjec.paseObectnewtingmesage.getPayoad),tandadae.UF8));/poucKeydeveNamengpducKey=on.gengpoucKe);ngdeveName=on.gengdevceame);}ee{//处理其他下行消息,强烈建议另起线程处理,以免回调堵塞。}}@OvedepubcvoddeveopeeIDeveokenoken){}}@OvedepubcvodconeconLhoabecaue){}});mqenconncconOp);设备启动,联网后,我们可以在IoT物联网平台控制台查看设备当前状态为在线,509至此,我们完成了设备与设备证书绑定,从而使设备以X.509证书认证方式接入oT物联网平台。消息处理 PAGE113 >ITIoT< PAGE114 深度解读IoT消息洪峰怎么扛|T传统的消息队列(Kafka、RocketMQ等)经过多年打磨,在高性能、海量堆积、消息可靠性等诸多方面都已经做得非常极致,但在IoT物联网场景中,往往需要面临着海量的消息传递,传统的消息队列表现的“力不从心”。T列最大意义在于让整个消息在不可控的环境中平稳运行,因为IoT设备时不时会由于故障或网络抖动会导致大量消息洪峰。一、IoT队列和普通队列的差异点上下行隔离拆分在T支持设备级的海量topickfka的ticbroker要退化到随机写,失去优势,另外要zookeepertic多个设备tpic,再桥接映射到少量的实际kafkatoic,这方案有一定可行性,但做不到隔离效果,治标不治本。12是“海量topic尽量相互隔离,并且不影响整体性能”,尽量做到设备A的消息堆积ticB。实时生成消息优先发送(此时后端系统都恢复了有用。因此,实时生成消息优先发送,堆积的消息进入降级模式。二、IoT消息队列诞生IoTticfllw保序降级,实时优先,堆积退化;仅实时消息相对有序。tic连接、计算、存储分离。消息模式图片只是个片段,从这个模式可以看出来机制差别,大家都没有错,只是出发点不同。连接、计算、存储分离brokerbrokerolB消息策略-推拉结合取堆积消息,而拉取是由AMQP队列网关来做,给到用户接口始终是推送过去的onMessage回调。rkercnumerueenskfkakfkarcktmqbrokerrkercnumruuerucercmmit。ACK。线性扩展-离线消息部分broker三、一个思考一一如何解决海量topic问题?首先面对“大量”的问题一般都是考虑分区,单元化,分组等隔离和拆分,这里海量tic我们讨论针对一个单实例模式下如何尽可能做到更多tic10%没问题肯定是不现实的。由于rkerrker和tpictpic数据生成,broker海量ticticticrdismtttictictreivemq单个tic四、阿里云AIoT消息队列ATAQP10列和新队列,交给用户按场景来选择,用户即可选择使用kafka、mq,也可以选用iot队列,甚至组合模式,比如按消息特征规则来配置流转队列。阿里云AIoT的场景队列实践,在现有mq队列、kafka队列融合之外,加了种自有选择轻便的T PAGE123 >亿级IT亿级I亿级IoT< PAGE120 亿级IoT设备连接底层逻辑|T物模型AT熊益群一、物模型三个关键问题:为什么需要物模型?物模型能解决那些行业问题?物模型带来什么价值?JVMOS的差异差异、软硬开发耦合、全链路验证流程长、设备孤岛、数据孤岛等问题。生态化:软、硬件一旦基于物模型标准化开发和交互,围绕物联网的多角色,包括SVIHV耦,提升了设备的流通性,促进生态化。二、物模型面临哪些技术挑战?以一个灯泡为例:延展开来说,物模型的技术挑战具体有这几项:超大点位和超复杂结构:尤其工业场景,通常需要对包含大量传感器(万级别)的传力。需要能够适应物理设备模块可插拔特性。在设备运行阶段的可靠性要求非常高。可适配:由于行业里面已经有不少设备模型和交互协议,比如工业场景的Modbus,pc等,生活场景的le,zigbee等,当然还有大量三方平台私有协议,为了帮助这些存量设备能够使用物模型,物模型需要具备模型和协议适配能力。统一交互协议:设备除了需要可表达之外,还需要可访问,物模型不仅需要定义设备我们应该如何设计物模型呢?早期大多数物联网平台比如AzureAWS大多数对于设备建模都采用的是面向对象语言的思路,比如WoT、OPC、OMA、OCF、CWMP、AllJin等,面向对象语言的抽象能力在计算机编程发展的几十年已经被证明,我们物模型定义也充分借鉴,却又因物联网而有所不同。我们以面向对象语言ava里面的class做类比,classschema进行了一定的扩展,定义为属性、服务(方法)和事件三要素,事件是一类特【图为物模型基础schema(没有包括模块化、多语言、多版本等一系列高阶特性)】解决了这些挑战后,物模型的技术架构就呈现出来了。阿里云ATAlik还有一点要注意,物模型和数据标准是不一样的。schema描述设备的能力,但由于物联网碎片化,大家对于设备云T数据标准的沉淀主要来自CA标准联盟,CA模板三类素材:资源:标准库中最原子的能力,有属性、事件、服务三种类型(三要素);功能模块:一组资源的集合。集合中的资源可以是标准库中已有资源的组装,也可以是在当前功能模块新增的资源;物模板:一组功能模块和一组资源的集合。集合中的模块和资源可以是标准库中已有模块和资源的组装,也可以是在当前物模板新增的资源;下图描述了物模型、数据标准之间的关系:最终我们看下灯泡物模型示意图:数据标准的核心价值是什么呢?阿里牵头的CA标准联盟,已经沉淀了海量标准化的数据模型,核心价值一是为了建 PAGE127 >ITraastIITraat< PAGE128 IoT平台广播消息Boacast实战作者|一、消息广播实现原理Topic broacaYouroducKe}此处替换为自定义标识 服务器通过PubBroadcastAPIttp//helaliyncom/ocmnt_etil/9909html各个设备端收到的payload boada:hssboacatdaa} 二、广播开发实战产品和设备创建设备产品buttona1p36XsaOS7webAppa1p36XsaOS7ameaa1p36XsaOS7消息广播topic注:racat的ticT boacaa1p6aOshaeDaa 设备端应用程序代码业务主程序:/**/***noeboaca-evces*contmt=equeaun--m);//设备身份三元组+区域contoons=eque.odevc-cnfg.on);//建立连接contcent=mqgeAunIoenopn);//订阅广播client.subscribe(`/broadcast/${ductKey}/shareData`)cen.nmeage,funcnop,meage){cooe.oopc"+oc)cooe.omeage"+meage)})itdvicecofigsn{{poucKe:pducK,devceame:deceNae,devceece:"替换devceece,egonI:cn-hangha"}业务服务器发送广播/**/***pakageon@acoudppco:1..2"*contco=equec);ccontRent=eqe@acoupo-ce).en;contoons={accKe:"自己的acceKe,accKeSece:"自己的acceKeece"};1.创建centcontcent=newRen{accKeId:opn.accKe,eceAceKe:opn.accKeSece,enpon:hp:o.c-hanghaaun

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论