API接口开放平台GeekOpen智能插座接入阿里云物联网平台实现定制业务全屋智能开发
2023-09-19 20:28:17

本文Demo主要针对GeekOpen提供的开放智能插座进行的软件二次开发,不涉及任何硬件知识,也无需修改智能插座固件,一般开发者15分钟即可实现对设备的操控。智能插座通过MQTT协议连接阿里云物联网平台,使用阿里云SDK对智能插座进行管理,包括实时查询插座的电流电压以及累计电量,并可以实时远程控制插座的通电与断电,实现对插座的用电管理,适用的业务场景包括自助洗车、共享茶室、智慧教室、智慧办公、智慧农业、智能充电等。具体业务需要开发者自己实现,GeekOpen仅提供开放的智能设备,软件开发或固件开发的过程中遇到任何问题,请与GeekOpen技术服务团队联系。


阿里云物联网平台Java SDK使用说明

物联网平台提供的Java SDK,可帮助开发人员通过Java程序更便捷地操作物联网平台。开发人员可以添加包含Maven依赖的SDK,也可以下载安装包到本地直接安装。其他语言版本Demo,请参考阿里云或前往 GeekOpen 下载:  GeekOpen 智能硬件开放平台,支持软件二次开发与硬件定制开发! (geek-open.com)


 第一步:pom.xml添加依赖

<!-- 新版IoT Java SDK的Maven依赖坐标 -->
<dependency>
   <groupId>com.aliyun</groupId>
   <artifactId>iot20180120</artifactId>
   <version>3.0.8</version>
</dependency>

<!--阿里云Java SDK公共包Maven依赖坐标-->
<dependency>
   <groupId>com.aliyun</groupId>
   <artifactId>tea-openapi</artifactId>
   <version>0.2.2</version>
</dependency>



 第二步:阿里云RAM访问控制参数获取

前往阿里云官网,进入RAM访问控制页面,创建AccessKey 即可获取 accessKey 与 accessKeySecret 


第三步:阿里云物联网平台获取产品与设备参数

前往阿里云官网, 阿里云物联网平台获取产品与设备参数,productKey、topicFullName




第四步:运行Demo工程

前往阿里云官网, 阿里云物联网平台获取产品与设备参数,productKey、topicFullName


 



第五步:通过Postman 测试 api,控制插座的通电、断电,查询插座电压、功率与累计电量

引用阿里云物联网平台提供的SDK之后 ,使用 Client建立客户端,然后使用PubRequest发送消息即可实现对设备的消息指令发送,控制设备。


插座断电   http://localhost:8080/api/iot/close


插座通电  http://localhost:8080/api/iot/open






 

Client

Config config = new Config();

config.accessKeyId = accessKey;

config.accessKeySecret = accessKeySecret;

config.regionId = "cn-shanghai";

Client client = new Client(config);


 

附:智能插座接入阿里云物联网平台,java源码

下载地址


IotController.java

package com.geekopen.iot.aliyundemo.controllers;

import com.geekopen.iot.aliyundemo.services.IotService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Random;

@RestController
@RequestMapping ("/api/iot")
public class IotController {

    @Autowired
    private IotService iotService;
    private String topic = "/a18VyElLe8c/smart-plug-test/user/get";

    /**
     * 智能插座、智能开关 - 通电
     * @ return
     */
    @GetMapping ("/open")
    @ResponseBody
    public String open()
    {
        String message = "{\"type\":\"event\",\"key\":1}";
        iotService.pub(topic,message);
        return "ok";
    }

    /**
     * 智能插座、智能开关 - 断电
     * @ return
     */
    @GetMapping ("/close")
    @ResponseBody
    public String close()
    {
        String message = "{\"type\":\"event\",\"key\":0}";
        iotService.pub(topic,message);
        return "ok";
    }


    /**
     * 智能插座用电信息查询 - 电量采集、电压查询、功率监控
     * @ return
     */
    @GetMapping ("/statistic")
    @ResponseBody
    public String statistic()
    {
        String messageId = "myMessageId"+ new Random().nextInt(1,100) ;
        String message = "{\"messageId\":\""+ messageId +"\",\"type\":\"statistic\"}";
        iotService.pub(topic,message);
        return messageId;
    }

}


IotService.java

package com.geekopen.iot.aliyundemo.services;

import com.aliyun.iot20180120.Client;
import com.aliyun.iot20180120.models.PubRequest;
import com.aliyun.iot20180120.models.PubResponse;
import com.aliyun.iot20180120.models.SubscribeTopicRequest;
import com.aliyun.iot20180120.models.SubscribeTopicResponse;
import com.aliyun.tea.TeaException;
import com.aliyun.teaopenapi.models.Config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import java.util.Base64;
import java.util.List;


@Service
public class IotService {

    private static final Logger log = LoggerFactory.getLogger(IotService.class);

    /**
     * 您的AccessKey ID。
     * 阿里云账号 RAM访问控制,可以申请 AccessKey
     */
    private String  accessKey = "***************";
    /**
     * 您的AccessKey Secret。
     * 阿里云账号 RAM访问控制,申请 AccessKey 获得 accessKeySecret
     */
    private String accessKeySecret = "*****************";
    /**
     * 阿里云物联网平台 productKey,创建产品时获得
     */
    private String productKey = "a18VyElLe8c";


    /**
     * 使用AK&SK初始化Client。
     */
    private Client createClient() throws Exception {
        Config config = new Config();
        config.accessKeyId = accessKey;
        config.accessKeySecret = accessKeySecret;
        // 您的可用区ID。阿里云物联网平台公共实例使用 cn-shanghai
        config.regionId = "cn-shanghai";
        return new Client(config);
    }

    /**
     * 发布消息,调用次方法,控制智能插座、智能开关等
     * @param topic
     * @param message
     */
    public void pub(String topic, String message) {
        try {
            Client client = createClient();
            PubRequest request = new PubRequest()
                    //如果使用阿里云物联网平台公共实例,则无需设置IotInstanceId
                    //.setIotInstanceId ("${iotInstanceId}")
                    .setProductKey(productKey)
                    .setMessageContent(Base64.getEncoder().encodeToString(message.getBytes()))
                    //.setMessageContent ("{\"type\":\"event\",\"key\":1}")
                    .setTopicFullName(topic)
                    .setQos(0);//目前支持QoS0和QoS1。

            PubResponse response = client.pub(request);

            //获取本次调用requestId。
            log.info("获取本次调用requestId:"+response.getBody().getRequestId());
            //调用是否成功。
            log.info("调用是否成功:"+response.getBody().getSuccess());

            //调用成功。
            if (response.getBody().getSuccess()) {
                //获取云端消息ID。
                log.info("获取云端消息ID:"+response.getBody().getMessageId());

                //do业务逻辑。
            } else {
                //调用失败。
                //获取调用失败错误码。
                log.info("调用失败,code:"+response.getBody().getCode());
                //获取调用失败错误描述。
                log.info("调用失败,message:"+response.getBody().getErrorMessage());
            }
        } catch (TeaException error) {
            //服务端业务异常。
            log.info("服务端业务异常,code:"+error.getCode());
            log.info("服务端业务异常,message:"+error.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }



}



进阶,服务端订阅










GeekOpen原创文章,转载请注明来源  http://www.geek-open.com 

 

地址:湖北省武汉市高新大道光谷崇文中心
电话:027-87001787
Copyright © 2020-2025 Smart-bird. All Rights Reserved. 
武汉智鸟科技有限责任公司 版权所有