基于 MQTT 协议的安圣(AnSheng)IoT 设备控制 SDK,支持云喇叭和智能开关的远程指令下发与事件监听。
- TTS 语音播报(文本转语音)
- URL 音频文件播放
- 音频控制(音量调节、暂停、停止、下一曲)
- 智能开关控制(开关操作、延时任务)
- 订单/充电管理任务
- 设备配置(MQTT 参数、按键配置、自动上报)
- 设备状态查询与事件监听
- Java 17
- Spring Boot 3.2.5
- Eclipse Paho MQTT v3 (1.2.5)
- Jackson Databind
- Lombok
- Maven(多模块构建)
as-sound-reminder/
├── as-sound-reminder-client/ # SDK 核心库
│ └── src/main/java/com/as/soundreminder/
│ ├── spi/ # 接口定义(DeviceClient、DeviceEventListener)
│ ├── mqtt/ # MQTT 传输层实现
│ ├── model/request/ # 请求模型
│ ├── model/response/ # 响应模型
│ ├── config/ # 配置类
│ └── autoconfigure/ # Spring Boot 自动配置
├── as-sound-reminder-client-demo/ # 示例应用
│ └── src/main/java/com/as/soundreminder/
│ ├── config/ # 示例配置
│ └── example/ # 使用示例
└── pom.xml # 父 POM
mvn clean install -DskipTests在你的 Spring Boot 项目中添加依赖:
<dependency>
<groupId>com.as</groupId>
<artifactId>as-sound-reminder-client</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>在 application.yml 中添加配置:
mqtt:
broker-url: tcp://mqtt.example.com:1883
client-id: your-client-id
username: your-username
password: your-password
publish-topic: /as/sub/client-{imei}
subscribe-topic: /as/pub/#
default-qos: 1
keep-alive: 30
clean-session: true
command-timeout-ms: 10000@Configuration
public class MyMqttConfig extends MqttConfig {
// 扩展自定义属性(如设备 IMEI)
}@Service
public class MyService {
@Autowired
private DeviceClient deviceClient;
public void playTts(String imei, String text) {
TtsPlayRequest request = TtsPlayRequest.builder()
.text(text)
.build();
BaseResponse response = deviceClient.ttsPlay(imei, request);
}
}请求-响应模式(基于 MQTT):
- 每个命令生成唯一
frameId(基于时间戳) - 命令序列化为 JSON 并发布到
/as/sub/client-{imei} - 客户端通过
CompletableFuture阻塞等待响应 - 设备通过
/as/pub/#返回相同frameId的响应 MqttCallbackHandler根据frameId匹配响应并完成 Future- 超时时间可配置(默认 10 秒)
| 类/接口 | 说明 |
|---|---|
DeviceClient |
SPI 接口,定义 30+ 设备控制方法 |
MqttDeviceClient |
DeviceClient 的 MQTT 实现 |
MqttGateway |
管理 MQTT 连接、主题解析、待处理请求 |
MqttCallbackHandler |
消息路由:匹配 frameId 或分发至事件监听器 |
DeviceEventListener |
设备事件回调接口 |
# 运行 Demo 应用
mvn spring-boot:run -pl as-sound-reminder-client-demo
# 运行测试
mvn test -pl as-sound-reminder-client-demoPrivate