云服务器内容精选
-
非直连设备状态更新 注册观察者对非直连设备状态更新结果进行相应处理。 123456 //注册观察者AgentLiteHub agentLiteHub = AgentLiteHub.getInstance();HubService hubService = HubService.getInstance();hubService.registerObserver(agentLiteHub);//sensor状态更新agentLiteHub.updataDeviceStatus(); 非直连设备添加上时,一般情况下是“离线”状态。所以在非直连设备添加成功后,或者在非直连设备上报数据前,要调用HubService.updateDeviceStatus(int cookie, String deviceId, String status, String statusDetail)进行设备状态更新。 1 2 3 4 5 6 7 8 91011 public void updataDeviceStatus() {System.out.println(" ============= updataDeviceStatus ============== "); int cookie; Random random = new Random(); cookie = random.nextInt(65535); String sensorId = GatewayInfo.getSensorId(); System.out.println("cookie = " + cookie); System.out.println("sensorId = " + sensorId); HubService.updateDeviceStatus(cookie, sensorId, "ONLINE", "NONE");}
-
数据上报和数据发布 设备或网关向 物联网平台 上报数据可以通过调用SDK的“设备服务数据上报”接口或“数据发布”接口: “设备服务数据上报”接口:deviceId,requstId和serviceId由SDK组装为消息的header;serviceProperties由SDK组装为消息的body。消息组装格式为JSON。 注册观察者对网关数据上报结果进行相应处理。 123456 //注册观察者AgentLiteDataTrans agentLiteDataTrans = AgentLiteDataTrans.getInstance();DataTransService dataTransService = DataTransService.getInstance();dataTransService.registerObserver(agentLiteDataTrans);//数据上报agentLiteDataTrans.gwDataReport(); 设备或网关登录成功后可以调用DataTransService.dataReport(int cookie, String requstId, String deviceId, String serviceId, String serviceProperties)接口上报数据。 1 2 3 4 5 6 7 8 910111213 public void gwDataReport() { System.out.println(" ============= gwDataReport! ============== "); int cookie; Random random = new Random(); cookie = random.nextInt(65535); String deviceId = GatewayInfo.getDeviceID(); JsonObject data = new JsonObject(); data.addProperty("storage", "10240"); data.addProperty("usedPercent", "20"); DataTransService.dataReport(cookie, null, deviceId, "Storage", data.toString());} 数据上报成功后可以在设备的“历史数据” 中看到上报的数据了。 “数据发布”接口:topic固定为“/cloud/signaltrans/v2/categories/data”;“serviceData”参数作为消息体(包括header和body),SDK只进行透传,不进行格式调整和组装。 注册观察者对网关数据上报结果进行相应处理。 123456 //注册观察者AgentLiteDataTrans agentLiteDataTrans = AgentLiteDataTrans.getInstance();DataTransService dataTransService = DataTransService.getInstance();dataTransService.registerObserver(agentLiteDataTrans);//数据发布agentLiteDataTrans.gwDataReportByMqttDataPub(); 设备或网关登录成功后可以调用DataTransService. mqttDataPub(int cookie, String topic, int qos, byte[] serviceData)接口发布数据。 “topic”是要发布数据的topic。 “qos”是mqtt协议的一个参数。 “serviceData”实际上是一个json字符串,内容是健值对(可以有多组健值对)。每个健是profile中定义的属性名(propertyName),值就是具体要上报的内容了。 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233 public void gwDataReportByMqttDataPub() { System.out.println(" ============= gwDataReportByMqttDataPub! ============== "); int cookie; Random random = new Random(); cookie = random.nextInt(65535); String deviceId = GatewayInfo.getDeviceID(); JsonObject headerData = new JsonObject(); headerData.addProperty("method", "PUT"); String fromStr = "/device/"+deviceId+"/services/Storage"; String toStr = "/data/v1.1.0/devices/"+deviceId+"/services/Storage"; headerData.addProperty("from", fromStr); headerData.addProperty("to", toStr); headerData.addProperty("access_token", GatewayInfo.getAccessToken()); SimpleDateFormat df = new SimpleDateFormat(MSG_TIMESTAMP_FORMAT); df.setTimeZone(TimeZone.getTimeZone("UTC")); String curTime = df.format(new Date(System.currentTimeMillis())); headerData.addProperty("timestamp", curTime); headerData.addProperty("eventTime", curTime); JsonObject bodyData = new JsonObject(); bodyData.addProperty("storage", "10240"); bodyData.addProperty("usedPercent", "18"); JsonObject mqttMsg = new JsonObject(); mqttMsg.add("header", headerData); mqttMsg.add("body", bodyData); DataTransService.mqttDataPub(cookie, "/cloud/signaltrans/v2/categories/data", 1, mqttMsg.toString().getBytes());}
-
添加非直连设备 在添加非直连设备前,确认非直连设备的profile已经上传了,详见上传Profile并注册设备步骤。 修改非直连设备信息,包括“nodeId”(设备标识码)、“manufactureId”(厂商Id)、“deviceType”(设备类型)、“model”(设备模型)和“protocolType”(协议类型)。这里非直连设备的设备固有信息是测试数据,真实情况下,网关往往需要跟具体的非直连设备交互,才能得到具体的设备固有信息。 1 2 3 4 5 6 7 8 91011121314 public void addSensor() { System.out.println(" ============= addSensor! ============== "); int cookie; Random random = new Random(); cookie = random.nextInt(65535); String nodeId = "5432154321"; String manufatrueId = "Huawei"; String deviceType = "Motion"; String model = "test01"; String protocolType = "MQTT"; deviceInfo = new IotaDeviceInfo(nodeId, manufatrueId, deviceType, model, protocolType); ...} 注册观察者对添加设备结果进行相应处理。 123456 //注册观察者AgentLiteHub agentLiteHub = AgentLiteHub.getInstance();HubService hubService = HubService.getInstance();hubService.registerObserver(agentLiteHub);//sensor添加agentLiteHub.addSensor(); 在设备或网关登录成功后就可以调用HubService.addDevice(int cookie, IotaDeviceInfo deviceInfo)接口添加非直连设备。添加非直连设备成功后就能从广播中得到非直连设备的“deviceId”。 12345678 public void addSensor() { System.out.println(" ============= addSensor! ============== "); int cookie; Random random = new Random(); cookie = random.nextInt(65535); ... HubService.addDevice(cookie, deviceInfo);} 非直连设备添加成功后在“设备列表”中看到新增一条记录。
-
命令接收 当开发者希望设备或网关只接收topic为“/gws/deviceid/signaltrans/v2/categories/”的消息,且对消息中的header进行解析时,可以调用“设备命令接收”接口。 应用服务器可以调用物联网平台的应用侧API接口给设备或网关下发命令,所以网关得随时监听命令下发的广播,以便接收到命令时进行相应业务处理。 注册观察者对命令接收进行相应处理。 123456 //注册观察者AgentLiteDataTrans agentLiteDataTrans = AgentLiteDataTrans.getInstance();DataTransService dataTransService = DataTransService.getInstance();dataTransService.registerObserver(agentLiteDataTrans);//命令接收agentLiteDataTrans.getCmdReceive(); 被动接收命令的方法getCmdReceive: 1 2 3 4 5 6 7 8 91011121314151617 private void getCmdReceive(IotaMessage iotaMsg) { System.out.println("=========receive iotCMD ============"); String deviceId = iotaMsg.getString(DataTransService.DATATRANS_IE_DEVICEID); String requestId = iotaMsg.getString(DataTransService.DATATRANS_IE_REQUSTID); String serviceId = iotaMsg.getString(DataTransService.DATATRANS_IE_SERVICEID); String method = iotaMsg.getString(DataTransService.DATATRANS_IE_METHOD); String cmd = iotaMsg.getString(DataTransService.DATATRANS_IE_CMDCONTENT); if (method.equals("REMOVE_GATEWAY")) { //rmvGateway(context); } System.out.println ("Receive cmd :" + "ndeviceId = " + deviceId + "nrequestId = " + requestId + "nserviceId = " + serviceId + "nmethod = " + method + "ncmd = " + cmd);}
-
绑定和登录 设备或网关第一次接入物联网平台时需要进行绑定操作,从而将设备或网关与平台进行关联。开发者通过传入设备验证码以及设备信息,将设备或网关绑定到物联网平台。 修改绑定参数。 绑定时使用的设备固有信息(如设备型号等)是从“AgentLiteBind.java”文件中读取的,所以需要修改./src/main目录下“AgentLiteBind.java”文件中的如下信息: 物联网平台的设备对接地址(MQ TTS )和端口,可参考平台对接信息获取。 123 //设置配置参数private static final String PLATFORM_IP = "100.100.100.100";private static final String HTTPS_PORT = "8943"; “verifyCode”(设备验证码)和必要的设备信息,包括“nodeId”(设备标识码)、“manufactureId”(厂商Id)、“deviceType”(设备类型)、“model”(设备模型)和“protocolType”(协议类型)。“verifyCode”的值与“nodeId”保持一致,“manufactureId”(厂商Id)、“deviceType”(设备类型)、“model”(设备模型)和“protocolType”(协议类型)与Profile文件中的定义保持一致。 如果开发者通过“设备管理服务控制台”注册设备,则“verifyCode”填写为设备注册时的“preSecret”(预置密钥)。 如果通过开发中心注册设备,则“verifyCode”填写为设备注册时设置的“nodeId”(设备标识)。 1 2 3 4 5 6 7 8 91011 public void bindAction() {System.out.println(" ============= start bind ============== ");String nodeId = "1234568";String verifyCode = "1234568";String manufactrueId = "Huawei";String deviceType = "Gateway";String model = "AgentLite01";String protocolType = "LWM2M";deviceInfo = new IotaDeviceInfo(nodeId, manufactrueId, deviceType, model, protocolType); ...} 绑定设备。 注册观察者对设备绑定结果进行相应处理。 123456 //注册观察者AgentLiteBind agentLiteBind = AgentLiteBind.getInstance();BindService bindService = BindService.getInstance();bindService.registerObserver(agentLiteBind);//网关绑定agentLiteBind.bindAction(); 调用API接口BindConfig.setConfig()设置绑定配置,接着调用API接口BindService .bind(String verifyCode, IotaDeviceInfo deviceInfo)绑定设备。 12345678 public void bindAction() { System.out.println(" ============= start bind ============== "); ... //绑定配置 configBindPara(); //发起绑定请求 BindService.bind(verifyCode, deviceInfo);} 1234567 //绑定配置private static void configBindPara() {boolean res = false;res = BindConfig.setConfig(BindConfig.BIND_CONFIG_ADDR, PLATFORM_IP);res = BindConfig.setConfig(BindConfig.BIND_CONFIG_PORT, HTTPS_PORT);...} 设备或网关绑定成功,后续就不需要再绑定了,除非设备或网关被删除,才需要重新绑定。 设备绑定成功会收到BindService发出的通知,通知内容请参考Agent Lite API接口文档中设备绑定接口的返回结果说明和demo中update函数的处理。 修改登录参数。 在demo的./src/main/AgentLiteLogin.java设置物联网平台的接入IP与端口。 123 private static final String PLATFORM_IP = "100.100.100.100";private static final String MQTTS_PORT = "8883";private static final String HTTPS_PORT = "8943"; 设备登录。 注册观察者对设备登录结果进行相应处理。 123456 //注册观察者AgentLiteLogin agentLiteLogin = AgentLiteLogin.getInstance();LoginService loginService = LoginService.getInstance();loginService.registerObserver(agentLiteLogin);//网关登录agentLiteLogin.loginAction(); 调用API接口LoginConfig.setConfig()传入所需的登录信息,接着调用API接口LoginService.login()进行直连设备登录,具体API的参数使用参考Agent Lite接口文档中的设备登录接口说明。 “设备Id”(即网关Id, “ LOG IN_CONFIG_DEVICEID”),“appId”(“LOGIN_CONFIG_APPID”)和“密码”(“LOGIN_CONFIG_SECRET”),这些信息是都是从网关绑定成功的通知中得到的。 “平台HTTP地址”(“LOGIN_CONFIG_IOCM_ADDR”)和“MQTT地址”(“LOGIN_CONFIG_MQTT_ADDR”)一般是同一个地址。 12345 public void loginAction() { System.out.println(" ============= start login ============== "); configLoginPara(); LoginService.login();} 1 2 3 4 5 6 7 8 9101112131415161718 private static void configLoginPara() { if(AgentLiteUtil.isStringEmpty(GatewayInfo.getDeviceID()) || AgentLiteUtil.isStringEmpty(GatewayInfo.getAppID()) || AgentLiteUtil.isStringEmpty(GatewayInfo.getSecret())){ String jsonStr = AgentLiteUtil.readToString("./workdir/gwbindinfo.json"); JsonObject json = new Gson().fromJson(jsonStr, JsonObject.class); GatewayInfo.setDeviceID(json.get("deviceId").getAsString()); GatewayInfo.setAppID(json.get("appId").getAsString()); GatewayInfo.setSecret(json.get("deviceSecret").getAsString()); } LoginConfig.setConfig(LoginConfig.LOGIN_CONFIG_DEVICEID, GatewayInfo.getDeviceID()); LoginConfig.setConfig(LoginConfig.LOGIN_CONFIG_APPID, GatewayInfo.getAppID()); LoginConfig.setConfig(LoginConfig.LOGIN_CONFIG_SECRET, GatewayInfo.getSecret()); LoginConfig.setConfig(LoginConfig.LOGIN_CONFIG_IOCM_ADDR, PLATFORM_IP); LoginConfig.setConfig(LoginConfig.LOGIN_CONFIG_IOCM_PORT, HTTPS_PORT); LoginConfig.setConfig(LoginConfig.LOGIN_CONFIG_MQTT_ADDR, PLATFORM_IP); LoginConfig.setConfig(LoginConfig.LOGIN_CONFIG_MQTT_PORT, MQTTS_PORT);}
-
使用必读 开发环境要求: 使用的SDK版本为jdk1.8.0_45,适用的操作系统为Windows系统。 工程目录结构及文件说明: 目录结构 目录 说明 AgentLiteDemo │ ├─src │ └─com │ └─huawei │ └─agentlitedemo ├─libs │ └─agentlite-0.0.1-SNAPSHOT │ └─usp_agentlite.jar │ └─.dll └─workdir │ └─conf src 存放Agentlite Demo代码。 libs 存放Agentlite提供的jar包和第三方jar包,以及.dll动态库(工程必须的三个文件,“agentlite-0.0.1-SNAPSHOT”,“usp_agentlite.jar”,“.dll”文件)。 workdir 存放工程日志文件,由agentlite初始化资源设置。 conf 存放TLS证书文件。 如果开发者没有设备,可以直接在X86 Linux系统进行开发。
-
初始化 在发起业务前,需要先初始化Agent Lite相关资源,调用API接口BaseService.init(),初始化Agent Lite资源,具体API的参数使用参考Agent Lite API接口文档。 调用BaseService.init(String workPath, String logPath)初始化AgentLite资源。 1 res = BaseService.init("./workdir", null);
更多精彩内容
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格