小爱同学调用本地jar -巴法云
本文通过巴发云注册mqtt服务并在小爱同学注册实现
为什么要用巴法云的 自然是因为他免费啦
1. 准备#
1.1注册巴法云#
https://cloud.bemfa.com/
1.2 在巴法云上创建mqtt设备云#
注意
- 主题名称 一开始最好是006结尾 不是数字小爱是不会识别的
- 点击昵称就可以直接修改并且昵称和你呼叫小爱是有关系的
比如我的是电脑百度 我就告诉小爱 "打开电脑百度" 这时我写的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; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通