开发者社区 问答 正文

手把手学IOT服务端API编程[10、保存设备属性][step by step ALI-IOT-SERVER-API]


上节介绍批量获取设备状态后,实际使用过程中,一种设备还存在多种属性信息,比如设备的温度,湿度或颜色等,而有的时候服务端是需要设备的这些信息的;
服务端的API接口也提供了相应的功能,
这一节就来介绍一下创建和保存属性的使用,这个接口需要提供三个参数,一个是产品的key值,一个是设备的名称,一个是需要创建设备的属性名称;
接下来我们看一下具体实现;


1、脚本实现:
我们按照接口的要求,在框架页面上,提供产品的key值和设备名称,属性名称这三个输入参数框给用户输入,其中属性名称按照json格式的列表,也就是说
每个属性组由属性名和属性值组成,通过冒号分隔开,用引号把名称和值用引号扩起来,而属性和属性之间则通过逗号分开。
下面的json串为本次使用的例子:
{"color":"red","num":100}
输入一行设备名称列表,通过逗号来分割各个设备名称;
产品KEY:        <input type="text" name="pkey10">
设备名称:        <input type="text" name="devname10">
属性:        <input type="text" name="props10">


而在实际的实现代码中,我们只需要使用get函数提取这个变量就可以了,其中我们调用了explode函数来讲设备名称列表从字符串分割成名称列表的数组:
$pkey = $_GET["pkey10"];
$devname = $_GET["devname10"];
$props = $_GET["props10"];


接着引用创建设备属性的接口:
$request = new Iot\SaveDevicePropRequest();


通过查看SaveDevicePropRequest.php文件,可以知道我们需要调用setProductKey和setDeviceName两个函数,来给服务端传送产品key值和设备名称;


$request->setProductKey($pkey);
$request->setDeviceName($devname);
$request->setProps($props);


调用通用的网络查询操作后,最后对返回信息进行分析;首先显示常用的requestid和success这两个通用的信息:


echo 'RequestId :'.$response->RequestId.'<br>';
echo 'Success :'.$response->Success.'<hr>';


        
2、实际测试:
打开浏览器,转到我们框架脚本页面,这里输入我们从控制台得到的产品key值和设备名称,需要保存的属性名称,运行提交按钮后,可以得到属性是否创建成功的信息,
具体向关截图如下:


附件:
timelapse:
http://www.xunyun17.xyz/ioto/step10-SaveDevicePropRequest.mp4





展开
收起
洵云 2018-05-27 10:01:33 3566 分享 版权
阿里云 AI 助理回答

从您的描述中,您正在尝试通过阿里云物联网平台的API来创建和保存设备的属性。这里有几个关键点需要注意和补充:

  1. JSON格式属性: 您正确地指出了属性需要按照JSON格式提供,每个属性由属性名和属性值组成,例如{"color":"red","num":100}。确保这些属性与设备的实际功能相匹配,并且在设备端也能正确处理这些属性。

  2. 使用SDK调用接口: 您提到的Iot\SaveDevicePropRequest属于阿里云物联网平台SDK中的一个类,用于发起保存设备属性的请求。确保您已经安装并正确配置了阿里云物联网平台的PHP SDK。如果您还没有安装,可以从阿里云官方文档获取相应的SDK和安装指南。

  3. 设置请求参数: 代码片段展示了如何设置产品Key、设备名称以及属性。注意,setProps方法接收的是一个属性的JSON字符串,您直接将用户输入的JSON字符串赋值给了它,这是正确的做法。但请确保在实际应用中对用户输入进行验证和异常处理,以避免因不合法的JSON格式导致的错误。

  4. 网络查询操作: 虽然您提到了“调用通用的网络查询操作”,但未具体展示这部分代码。通常,这一步涉及使用SDK中的客户端实例(如DefaultAcsClient)来发送您的请求对象(在这里是$request),并接收响应。示例代码可能如下:

    // 初始化客户端
    $client = new DefaultAcsClient($profile);
    
    // 发送请求并接收响应
    $response = $client->getAcsResponse($request);
    

    其中,$profile包含了访问密钥等认证信息,需根据实际情况配置。

  5. 结果分析: 显示RequestIdSuccess字段是检查操作是否成功的基本方式。如果Successtrue,则表示属性保存成功。对于更详细的错误处理,可以进一步检查$response中的其他字段,比如错误码和错误信息,以便于调试。

  6. 安全性提醒: 在实际应用中,直接在前端页面上让用户输入产品Key和执行敏感操作(如修改设备属性)可能存在安全风险。建议采用后端服务作为中介,处理这类敏感操作,同时实施严格的权限控制和身份验证机制。

最后,您提到的视频链接无法直接查看,但从描述来看,应该是演示了整个操作流程。确保在测试环境中充分验证功能后,再部署到生产环境,以保障系统的稳定性和安全性。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答