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+"=1\r\n";
        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)+"=0\r\n";
        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关闭电源,至于是那一个设备就是阿里云物联网平台里你设备的三元关键信息所决定的了。这里你没看到是因为我为了方便管理设备,我将所有的设备都放进数据库表格里存储起来了,这样的话就能保护我们的关键信息不会以明文的方式出现在代码里。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ForestSpringH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值