首页 > 其他分享 >小爱同学调用本地jar -巴法云

小爱同学调用本地jar -巴法云

时间:2023-05-23 16:34:53浏览次数:54  
标签:巴法云 jar integration springframework mqtt 消息 import org 小爱

本文通过巴发云注册mqtt服务并在小爱同学注册实现

为什么要用巴法云的 自然是因为他免费啦

1. 准备

1.1注册巴法云

https://cloud.bemfa.com/

1.2 在巴法云上创建mqtt设备云

image

image

image
注意

  • 主题名称 一开始最好是006结尾 不是数字小爱是不会识别的
    image
  • 点击昵称就可以直接修改并且昵称和你呼叫小爱是有关系的
    比如我的是电脑百度 我就告诉小爱 "打开电脑百度" 这时我写的jar就会获得一条消息 消息内容是"on"
    相反"关闭电脑百度" 消息内容就是是"off"

1.3 在小米手机上关联巴法云

  • 打开米家app -> 我的 -> 连接其他平台 -> 添加自己的巴法云

1.4 验证

  • 呼叫小爱同学 "打开"+你的昵称 我的就是"打开电脑百度"

2 构建springboot项目

主要是监听和发送巴法云的mqtt消息并分析所携带的值做对应的操作
同理使用mqtt的测试工具 或者 其他语言实现也可以 在此只演示Java

2.1 pom文件

        <!-- MQTT -->
        <dependency>
            <groupId>org.springframework.integration</groupId>
            <artifactId>spring-integration-mqtt</artifactId>
            <version>5.3.1.RELEASE</version>
        </dependency>

2.2 增加一个文件就行

下面这一段只是监听用的也是我从网上摘下来的一段 链接的话.... 忘了

package com.c.bafa.config;

import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.core.MessageProducer;
import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory;
import org.springframework.integration.mqtt.core.MqttPahoClientFactory;
import org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter;
import org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler;
import org.springframework.integration.mqtt.support.DefaultPahoMessageConverter;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.MessageHandler;

import java.io.IOException;

@Configuration
public class MqttConfig {

    // 消费消息

    /**
     * 创建MqttPahoClientFactory,设置MQTT Broker连接属性,如果使用SSL验证,也在这里设置。
     * @return factory
     */
    @Bean
    public MqttPahoClientFactory mqttClientFactory() {
        DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
        MqttConnectOptions options = new MqttConnectOptions();

        // 设置代理端的URL地址,可以是多个
        options.setServerURIs(new String[]{"tcp://bemfa.com:9501"});

        factory.setConnectionOptions(options);
        return factory;
    }

    /**
     * 入站通道
     */
    @Bean
    public MessageChannel mqttInputChannel() {
        return new DirectChannel();
    }

    /**
     * 入站
     */
    @Bean
    public MessageProducer inbound() {
        // Paho客户端消息驱动通道适配器,主要用来订阅主题
        MqttPahoMessageDrivenChannelAdapter adapter = new MqttPahoMessageDrivenChannelAdapter(巴法云控制台左上角 私钥,
                mqttClientFactory(), 你的主题名称 我的是"xiaoc006");
        adapter.setCompletionTimeout(5000);

        // Paho消息转换器
        DefaultPahoMessageConverter defaultPahoMessageConverter = new DefaultPahoMessageConverter();
        // 按字节接收消息
//        defaultPahoMessageConverter.setPayloadAsBytes(true);
        adapter.setConverter(defaultPahoMessageConverter);
        adapter.setQos(1); // 设置QoS
        adapter.setOutputChannel(mqttInputChannel());
        return adapter;
    }

    @Bean
    // ServiceActivator注解表明:当前方法用于处理MQTT消息,inputChannel参数指定了用于消费消息的channel。
    @ServiceActivator(inputChannel = "mqttInputChannel")
    public MessageHandler handler() {
        return message -> {
            String payload = message.getPayload().toString();

            // byte[] bytes = (byte[]) message.getPayload(); // 收到的消息是字节格式
            String topic = message.getHeaders().get("mqtt_receivedTopic").toString();

            // 根据主题分别进行消息处理。
            if (topic.matches(".+/sensor")) { // 匹配:1/sensor
                String sensorSn = topic.split("/")[0];
                System.out.println("传感器" + sensorSn + ": 的消息: " + payload);
            } else if (topic.equals("collector")) {
                System.out.println("采集器的消息:" + payload);
            } else if (topic.equals("xiaoc006")) {
                System.out.println("通知我的消息:主题[" + topic  + "],负载:" + payload);
            } else {
                System.out.println("丢弃消息:主题[" + topic  + "],负载:" + payload);
            }

            Runtime rt = Runtime.getRuntime();
            String url = "https://www.baidu.com/";
            try {
                rt.exec("rundll32 url.dll,FileProtocolHandler " + url);
            } catch (IOException e) {
                e.printStackTrace();
            }

        };
    }

    // 发送消息

    /**
     * 出站通道
     */
    @Bean
    public MessageChannel mqttOutboundChannel() {
        return new DirectChannel();
    }

    /**
     * 出站
     */
    @Bean
    @ServiceActivator(inputChannel = "mqttOutboundChannel")
    public MessageHandler outbound() {

        // 发送消息和消费消息Channel可以使用相同MqttPahoClientFactory
        MqttPahoMessageHandler messageHandler = new MqttPahoMessageHandler("publishClient", mqttClientFactory());
        messageHandler.setAsync(true); // 如果设置成true,即异步,发送消息时将不会阻塞。
        messageHandler.setDefaultTopic("command");
        messageHandler.setDefaultQos(1); // 设置默认QoS

        // Paho消息转换器
        DefaultPahoMessageConverter defaultPahoMessageConverter = new DefaultPahoMessageConverter();

        // defaultPahoMessageConverter.setPayloadAsBytes(true); // 发送默认按字节类型发送消息
        messageHandler.setConverter(defaultPahoMessageConverter);
        return messageHandler;
    }

}

标签:巴法云,jar,integration,springframework,mqtt,消息,import,org,小爱
From: https://www.cnblogs.com/-zhiwei-/p/17425597.html

相关文章

  • 解决启动jar包报错:错误找不到或无法加载主类 jar
    错误:找不到或无法加载主类jar问题描述:在使用springboot框架对项目打包后,手动使用命令java-jar包名启动jar包,报错:错误:找不到或无法加载主类jar。网上找了各办法,都是加maven插件,打成可执行jar包<build><plugins><plugin><groupId>org.springframework.bo......
  • idea中jdk11用maven编译失败 Fatal error compiling: tools.jar not found: XX\Java
    ideamaven编译需要用到jdk的lib包里面的tools.jar文件,但是jdk1.8之后就没有tools.jar了。我这里用的是graalvm的jdk11,编译一直报错,网上也查不到。解决办法: 根据对应路径创建一个lib包,并把jdk1.8的lib下面的tools.jar复制一个放到这个包下面,让这个路径有这个包就行了。我......
  • 以指定编码方式启动jar
    UTF-8编译的Java应用程序,在Windows运行,指定文件编码为UTF-8,控制台显示的中文仍乱码的解决方式。首先查看当前代码页的编码方式: 方式一:右键cmd控制台>属性,可以看到当前代码页为:936(简体中文GBK),该代码只能显示GBK编码的中文。 方式二:直接在控制台输入chcp......
  • Java系列 | IntelliJ IDEA 如何导入和使用一个Jar包
    第一步:创建lib文件创建lib文件,统一管理导入的jar包(若已有lib文件,则直接可以进行第二步)文件名称命名为`lib`第二步:对lib文件建立依赖选择【File】→【ProjectStructure…】 在弹出的页面中选择【Modules】再选择此项目,点击右边的【Dependencies】,再选择下面的小加号,选择......
  • 使用exe4j将jar包转为exe可执行文件
    1.在idea中使用maven生成jar包进入项目中,找到pom.xml文件 进入文件后,点击idea右侧栏中的maven按钮,进入maven页面 进入页面后,执行clean与package 执行完package打包后会生成一个目录,jar包就在里面了 根据目录进入页面就能看到生成的jar包了2.使用exe4j将生成的jar包......
  • Manjaro入门配置
    Manjaro的入门配置手册category:笔记罢了date:2023/03/18slug:manjaro-configstatus:Publishedsummary:内含Manjaro-kde的入门命令、配置笔记tags:Linux,笔记type:Post前言Manjaro适合有能力折腾Arch但又不想花时间折腾Arch的人关于分区以下是ChatGPT的回答......
  • maven 打包的同时将生成的jar复制到指定路径
    关资料来自百|度|知|道:<build><outputDirectory>src/main/webapp/WEB-INF/classes</outputDirectory><testOutputDirectory>src/main/webapp/WEB-INF/classes</testOutputDirectory><plugins><plugin>......
  • 如何分发Teamcenter的jar文件?
    1.将jar包拷贝到TC的Portal文件夹下的plugins文件夹中,例如:D:\Siemens\Teamcenter14\portal\plugins 2.删除用户文件中的Teamcenter临时文件,例如:C:\Users\zyq\Teamcenter 3.运行TC注册bat文件:D:\Siemens\Teamcenter14\portal\registry\genregxml.bat  ......
  • maven引入ojdbc14.jar的方法
    1、ojdbc14.jar的导入方法:①与导入其它jar包相同,在项目pom.xml文件中,可以采用Dependencies向导搜索并导入代码,可以发现其GroupId为com.oracle,ArtifactId为ojdbc14,目前最新版本为:10.2.0.4.0,因此有如下代码:com.oracleojdbc1410.2.0.4.0如果是其它一些常见的包,如Struts、Sprin......
  • IdeaJ 模块添加外部 jar 包
    如下方式针对单个模块化,如corejava的课程代码。更方便的可以通过maven管理1.下载对应的jar包2.将下载的jar包放入lib目录下3.添加 Libraries,File->ProjectStructure->Libraries->"+",添加lib目录下的jar包4.此时,Module下的code就可以正常引......