Springboot接入阿里云物联网SDK实现控制网络继电器通断

今天上午实现了一个技术突破,参考阿里云的SDK设计了一套控制网络继电器的代码逻辑,对比我之前采取的主机与设备在同一局域网才能成功控制的思路来看,利用云端控制更能实现商务性和可用性,我们的腾讯云服务器已经将本地项目部署上云,所以今天测试的是服务器主机跑项目,通过访问阿里云物联网控制台结合SDK配置。

其次上午我也测试了通过AMPQ消息队列实现设备与服务端的消息收发,但是阿里云提供了这一类的解决方案。你跟着走再自己结合业务逻辑创建合理的业务代码块。

首先记录服务器部署项目的步骤:1、导入数据库SQL文件 2、配置redis(修改redis.conf文件,后台启动,验证密码,缓存过期监听,配置全部网段访问)3、开放项目运行的端口防火墙与对应的服务器安全组。4、配置java运行环境(这些环境的配置你购买服务器下载宝塔就可以一键安装)5、出问题记得找自己项目参数的问题,一般问题都出现在pom文件与application文件上,仔细点哦!

我们先看看我改进后的控制硬件设备的代码块:

/**
*  获取与阿里云物联网控制台的链接
* */
@Component
@Slf4j
public class LotConnection {
    /*账户信息访问阿里云的密钥关键字段,都是固定值,初始化SDK*/
    public static Client getClient() throws Exception {
        Config config = new Config();
        config.accessKeyId="***********每一个阿里云物联网平台用户都有******";
        config.accessKeySecret="************";
        config.regionId="cn-shanghai";
        log.info("初始化阿里云物联网平台SDK");
        return new Client(config);
    }

}

 控制代码(这里只含有控制开关通断的指令,里面的主要硬件信息我存在数据库里给我们的框架进行统一管理):

@Component
@Slf4j
public class PubMessage {

    @Autowired
    private DeviceKeyInfoService deviceKeyInfoService;
    @Autowired
    private DeviceService deviceService;

    public void sendOpenMessage(String deviceId) throws Exception {
        String device = deviceId.substring(0, 2);
        System.out.println("---------链接设备"+device);
        DeviceKeyInfo keyInfo = deviceKeyInfoService.findKeyByDeviceId(device);
        int outSign = deviceService.findOutSignByDeviceId(deviceId);
        String productKey = keyInfo.getProductKey();
        String deviceName = keyInfo.getDeviceName();

        String message = "AT+STACH"+outSign+"=1rn";
        System.out.println("---------发送指令"+message);
        String topic = "/"+productKey+"/"+deviceName+"/user/get";
        System.out.println("---------发布频道"+topic);
        try {
            Client client = LotConnection.getClient();
            PubRequest pubRequest = new PubRequest().setIotInstanceId("iot-06z00bvelwr3ai0").setProductKey(productKey)
                    .setMessageContent(Base64.getEncoder().encodeToString(message.getBytes())).setTopicFullName(topic).setQos(0);
            PubResponse response = client.pub(pubRequest);
            Boolean success = response.getBody().getSuccess();
            if (!success)
                throw new Exception("设备端ACK失败");
            else
                System.out.println("---------已经发送----------");
        }catch (Exception e){
            log.info("链接设备异常");
        }

    }

    public void sendDownMessage(String deviceId) throws Exception {
        System.out.println("---------链接设备"+deviceId.substring(0, 2));
        DeviceKeyInfo keyInfo = deviceKeyInfoService.findKeyByDeviceId(deviceId.substring(0, 2));

        String message = "AT+STACH"+deviceService.findOutSignByDeviceId(deviceId)+"=0rn";
        System.out.println("---------发送指令"+message);
        String topic = "/"+keyInfo.getProductKey()+"/"+keyInfo.getDeviceName()+"/user/get";
        System.out.println("---------发布频道"+topic);
        try {
            /**调用pub接口*/
            PubRequest pubRequest = new PubRequest().setIotInstanceId("iot-06z00bvelwr3ai0").setProductKey(keyInfo.getProductKey())
                    .setMessageContent(Base64.getEncoder().encodeToString(message.getBytes())).setTopicFullName(topic).setQos(0);
            PubResponse response = LotConnection.getClient().pub(pubRequest);
            Boolean success = response.getBody().getSuccess();
            if (!success)
                throw new Exception("设备端ACK失败");
            else
                System.out.println("---------已经发送----------");
        }catch (Exception e){
            log.info("链接设备异常");
        }

    }


}

这里是这样的:使用的指令集是AT指令:AT+STACH1=1就是让端口1打开电源,AT+STACH1=0就是让端口1关闭电源,至于是那一个设备就是阿里云物联网平台里你设备的三元关键信息所决定的了。这里你没看到是因为我为了方便管理设备,我将所有的设备都放进数据库表格里存储起来了,这样的话就能保护我们的关键信息不会以明文的方式出现在代码里。

本文章来源于互联网,如有侵权,请联系删除!原文地址:Springboot接入阿里云物联网SDK实现控制网络继电器通断

相关推荐: 物联网设备通信

一、物联网发展史 1、物联网 = 互联网 + 物 物联网定义 把所有物品通过信息传感设备与互联网连接起来,实现智能化识别、运作与管理功能的网络 互联网本质上已经实现了人与人、人与信息的连接,接下来就是人与人本身、人与物的连接了。看目前的发展趋势,我们也能很清楚…