Merge remote-tracking branch 'origin/main' into dyf-device
This commit is contained in:
@ -1,49 +0,0 @@
|
|||||||
package com.fuyuanshen.app.controller;
|
|
||||||
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
|
||||||
import com.fuyuanshen.app.domain.bo.AppUserBo;
|
|
||||||
import com.fuyuanshen.app.domain.vo.AppUserVo;
|
|
||||||
import com.fuyuanshen.app.domain.vo.DeviceVo;
|
|
||||||
import com.fuyuanshen.app.service.DeviceService;
|
|
||||||
import com.fuyuanshen.app.service.IAppUserService;
|
|
||||||
import com.fuyuanshen.common.core.domain.R;
|
|
||||||
import com.fuyuanshen.common.core.validate.AddGroup;
|
|
||||||
import com.fuyuanshen.common.core.validate.EditGroup;
|
|
||||||
import com.fuyuanshen.common.excel.utils.ExcelUtil;
|
|
||||||
import com.fuyuanshen.common.idempotent.annotation.RepeatSubmit;
|
|
||||||
import com.fuyuanshen.common.log.annotation.Log;
|
|
||||||
import com.fuyuanshen.common.log.enums.BusinessType;
|
|
||||||
import com.fuyuanshen.common.mybatis.core.page.PageQuery;
|
|
||||||
import com.fuyuanshen.common.mybatis.core.page.TableDataInfo;
|
|
||||||
import com.fuyuanshen.common.web.core.BaseController;
|
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
|
||||||
import jakarta.validation.constraints.NotEmpty;
|
|
||||||
import jakarta.validation.constraints.NotNull;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import org.springframework.validation.annotation.Validated;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* APP 设备信息管理
|
|
||||||
* @date 2025-06-27
|
|
||||||
*/
|
|
||||||
@Validated
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
@RestController
|
|
||||||
@RequestMapping("/app/device")
|
|
||||||
public class AppDeviceController extends BaseController {
|
|
||||||
|
|
||||||
private final DeviceService deviceService;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询设备信息列表
|
|
||||||
*/
|
|
||||||
@GetMapping("/list")
|
|
||||||
public TableDataInfo<DeviceVo> list(AppUserBo bo, PageQuery pageQuery) {
|
|
||||||
return deviceService.queryPageList(bo, pageQuery);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -293,3 +293,12 @@ file:
|
|||||||
pic: C:\eladmin\file\ #设备图片存储路径
|
pic: C:\eladmin\file\ #设备图片存储路径
|
||||||
#ip: http://fuyuanshen.com:81/ #服务器地址
|
#ip: http://fuyuanshen.com:81/ #服务器地址
|
||||||
ip: https://fuyuanshen.com/ #服务器地址
|
ip: https://fuyuanshen.com/ #服务器地址
|
||||||
|
# MQTT配置
|
||||||
|
mqtt:
|
||||||
|
username: admin
|
||||||
|
password: fys123456
|
||||||
|
url: tcp://47.107.152.87:1883
|
||||||
|
subClientId: fys_subClient_01
|
||||||
|
subTopic: worker/alert/#,worker/location/#
|
||||||
|
pubTopic: worker/location
|
||||||
|
pubClientId: fys_pubClient_01
|
@ -0,0 +1,90 @@
|
|||||||
|
package com.fuyuanshen.common.core.utils;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public class ImageToCArrayConverterUtils {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
try {
|
||||||
|
convertImageToCArray("E:\\workspace\\6170_强光_160_80_2.jpg", "E:\\workspace\\output.c", 160, 80);
|
||||||
|
System.out.println("转换成功!");
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.err.println("转换失败: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void convertImageToCArray(String inputPath, String outputPath,
|
||||||
|
int width, int height) throws IOException {
|
||||||
|
// 读取原始图片
|
||||||
|
BufferedImage originalImage = ImageIO.read(new File(inputPath));
|
||||||
|
|
||||||
|
// 调整图片尺寸
|
||||||
|
BufferedImage resizedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
|
||||||
|
resizedImage.getGraphics().drawImage(
|
||||||
|
originalImage, 0, 0, width, height, null);
|
||||||
|
|
||||||
|
// 转换像素数据为RGB565格式(高位在前)
|
||||||
|
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
|
||||||
|
for (int y = 0; y < height; y++) {
|
||||||
|
for (int x = 0; x < width; x++) {
|
||||||
|
int rgb = resizedImage.getRGB(x, y);
|
||||||
|
|
||||||
|
// 提取RGB分量
|
||||||
|
int r = (rgb >> 16) & 0xFF;
|
||||||
|
int g = (rgb >> 8) & 0xFF;
|
||||||
|
int b = rgb & 0xFF;
|
||||||
|
|
||||||
|
// 转换为RGB565(5位红,6位绿,5位蓝)
|
||||||
|
int r5 = (r >> 3) & 0x1F;
|
||||||
|
int g6 = (g >> 2) & 0x3F;
|
||||||
|
int b5 = (b >> 3) & 0x1F;
|
||||||
|
|
||||||
|
// 组合为16位值
|
||||||
|
int rgb565 = (r5 << 11) | (g6 << 5) | b5;
|
||||||
|
|
||||||
|
// 高位在前(大端序)写入字节
|
||||||
|
byteStream.write((rgb565 >> 8) & 0xFF); // 高字节
|
||||||
|
byteStream.write(rgb565 & 0xFF); // 低字节
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
byte[] imageData = byteStream.toByteArray();
|
||||||
|
|
||||||
|
// 生成C语言数组文件
|
||||||
|
try (FileOutputStream fos = new FileOutputStream(outputPath)) {
|
||||||
|
// 写入注释行(包含尺寸信息)
|
||||||
|
String header = String.format("/* 0X10,0X10,0X00,0X%02X,0X00,0X%02X,0X01,0X1B, */\n",
|
||||||
|
width, height);
|
||||||
|
fos.write(header.getBytes());
|
||||||
|
|
||||||
|
// 写入数组声明
|
||||||
|
fos.write("const unsigned char gImage_data[] = {\n".getBytes());
|
||||||
|
|
||||||
|
// 写入数据(每行16个字节)
|
||||||
|
for (int i = 0; i < imageData.length; i++) {
|
||||||
|
// 写入0X前缀
|
||||||
|
fos.write(("0X" + String.format("%02X", imageData[i] & 0xFF)).getBytes());
|
||||||
|
|
||||||
|
// 添加逗号(最后一个除外)
|
||||||
|
if (i < imageData.length - 1) {
|
||||||
|
fos.write(',');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 换行和缩进
|
||||||
|
if ((i + 1) % 16 == 0) {
|
||||||
|
fos.write('\n');
|
||||||
|
} else {
|
||||||
|
fos.write(' ');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 写入数组结尾
|
||||||
|
fos.write("\n};\n".getBytes());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -105,6 +105,14 @@
|
|||||||
<artifactId>fys-common-sse</artifactId>
|
<artifactId>fys-common-sse</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-integration</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.integration</groupId>
|
||||||
|
<artifactId>spring-integration-mqtt</artifactId>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
@ -0,0 +1,33 @@
|
|||||||
|
package com.fuyuanshen.system.mqtt.config;
|
||||||
|
|
||||||
|
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory;
|
||||||
|
import org.springframework.integration.mqtt.core.MqttPahoClientFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: HarryLin
|
||||||
|
* @Date: 2025/3/20 14:40
|
||||||
|
* @Company: 北京红山信息科技研究院有限公司
|
||||||
|
* @Email: linyun@***.com.cn
|
||||||
|
**/
|
||||||
|
@Configuration
|
||||||
|
public class MqttConfiguration {
|
||||||
|
@Autowired
|
||||||
|
private MqttPropertiesConfig mqttPropertiesConfig;
|
||||||
|
/** 创建连接工厂 **/
|
||||||
|
@Bean
|
||||||
|
public MqttPahoClientFactory mqttPahoClientFactory(){
|
||||||
|
DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
|
||||||
|
MqttConnectOptions options = new MqttConnectOptions();
|
||||||
|
options.setCleanSession(true); //设置新会话
|
||||||
|
options.setUserName(mqttPropertiesConfig.getUsername());
|
||||||
|
options.setPassword(mqttPropertiesConfig.getPassword().toCharArray());
|
||||||
|
options.setServerURIs(new String[]{mqttPropertiesConfig.getUrl()});
|
||||||
|
factory.setConnectionOptions(options);
|
||||||
|
return factory;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package com.fuyuanshen.system.mqtt.config;
|
||||||
|
|
||||||
|
import org.springframework.integration.annotation.MessagingGateway;
|
||||||
|
import org.springframework.integration.mqtt.support.MqttHeaders;
|
||||||
|
import org.springframework.messaging.handler.annotation.Header;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: HarryLin
|
||||||
|
* @Date: 2025/3/20 17:06
|
||||||
|
* @Company: 北京红山信息科技研究院有限公司
|
||||||
|
* @Email: linyun@***.com.cn
|
||||||
|
**/
|
||||||
|
@MessagingGateway(defaultRequestChannel = "mqttOutboundChannel")
|
||||||
|
public interface MqttGateway {
|
||||||
|
public abstract void sendMsgToMqtt(@Header(value = MqttHeaders.TOPIC) String topic, String payload);
|
||||||
|
public abstract void sendMsgToMqtt(@Header(value = MqttHeaders.TOPIC) String topic, @Header(value = MqttHeaders.QOS) int qos, String payload );
|
||||||
|
}
|
@ -0,0 +1,60 @@
|
|||||||
|
package com.fuyuanshen.system.mqtt.config;
|
||||||
|
|
||||||
|
|
||||||
|
import com.fuyuanshen.system.mqtt.receiver.ReceiverMessageHandler;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
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.MqttPahoClientFactory;
|
||||||
|
import org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter;
|
||||||
|
import org.springframework.integration.mqtt.support.DefaultPahoMessageConverter;
|
||||||
|
import org.springframework.messaging.MessageChannel;
|
||||||
|
import org.springframework.messaging.MessageHandler;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: HarryLin
|
||||||
|
* @Date: 2025/3/20 14:54
|
||||||
|
* @Company: 北京红山信息科技研究院有限公司
|
||||||
|
* @Email: linyun@***.com.cn
|
||||||
|
**/
|
||||||
|
@Configuration
|
||||||
|
public class MqttInboundConfiguration {
|
||||||
|
@Autowired
|
||||||
|
private MqttPropertiesConfig mqttPropertiesConfig;
|
||||||
|
@Autowired
|
||||||
|
private MqttPahoClientFactory mqttPahoClientFactory;
|
||||||
|
@Autowired
|
||||||
|
private ReceiverMessageHandler receiverMessageHandler;
|
||||||
|
//消息通道
|
||||||
|
@Bean
|
||||||
|
public MessageChannel messageInboundChannel(){
|
||||||
|
return new DirectChannel();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 配置入站适配器
|
||||||
|
* 作用: 设置订阅主题,以及指定消息的通道 等相关属性
|
||||||
|
* */
|
||||||
|
@Bean
|
||||||
|
public MessageProducer messageProducer(){
|
||||||
|
MqttPahoMessageDrivenChannelAdapter mqttPahoMessageDrivenChannelAdapter = new MqttPahoMessageDrivenChannelAdapter(
|
||||||
|
mqttPropertiesConfig.getUrl(),
|
||||||
|
mqttPropertiesConfig.getSubClientId(),
|
||||||
|
mqttPahoClientFactory,
|
||||||
|
mqttPropertiesConfig.getSubTopic().split(",")
|
||||||
|
);
|
||||||
|
mqttPahoMessageDrivenChannelAdapter.setQos(1);
|
||||||
|
mqttPahoMessageDrivenChannelAdapter.setConverter(new DefaultPahoMessageConverter());
|
||||||
|
mqttPahoMessageDrivenChannelAdapter.setOutputChannel(messageInboundChannel());
|
||||||
|
return mqttPahoMessageDrivenChannelAdapter;
|
||||||
|
}
|
||||||
|
/** 指定处理消息来自哪个通道 */
|
||||||
|
@Bean
|
||||||
|
@ServiceActivator(inputChannel = "messageInboundChannel")
|
||||||
|
public MessageHandler messageHandler(){
|
||||||
|
return receiverMessageHandler;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,50 @@
|
|||||||
|
package com.fuyuanshen.system.mqtt.config;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
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.mqtt.core.MqttPahoClientFactory;
|
||||||
|
import org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler;
|
||||||
|
import org.springframework.messaging.MessageChannel;
|
||||||
|
import org.springframework.messaging.MessageHandler;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: HarryLin
|
||||||
|
* @Date: 2025/3/20 15:46
|
||||||
|
* @Company: 北京红山信息科技研究院有限公司
|
||||||
|
* @Email: linyun@***.com.cn
|
||||||
|
**/
|
||||||
|
@Configuration
|
||||||
|
@Slf4j
|
||||||
|
public class MqttOutboundConfiguration {
|
||||||
|
@Autowired
|
||||||
|
private MqttPropertiesConfig mqttPropertiesConfig;
|
||||||
|
@Autowired
|
||||||
|
private MqttPahoClientFactory mqttPahoClientFactory;
|
||||||
|
|
||||||
|
// 消息通道
|
||||||
|
@Bean
|
||||||
|
public MessageChannel mqttOutboundChannel(){
|
||||||
|
return new DirectChannel();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** 配置出站消息处理器 */
|
||||||
|
@Bean
|
||||||
|
@ServiceActivator(inputChannel = "mqttOutboundChannel") // 指定处理器针对哪个通道的消息进行处理
|
||||||
|
public MessageHandler mqttOutboundMessageHandler(){
|
||||||
|
MqttPahoMessageHandler mqttPahoMessageHandler = new MqttPahoMessageHandler(
|
||||||
|
mqttPropertiesConfig.getUrl(),
|
||||||
|
mqttPropertiesConfig.getPubClientId(),
|
||||||
|
mqttPahoClientFactory
|
||||||
|
);
|
||||||
|
mqttPahoMessageHandler.setDefaultQos(1);
|
||||||
|
mqttPahoMessageHandler.setDefaultTopic("worker/location");
|
||||||
|
mqttPahoMessageHandler.setAsync(true);
|
||||||
|
return mqttPahoMessageHandler;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
package com.fuyuanshen.system.mqtt.config;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: HarryLin
|
||||||
|
* @Date: 2025/3/20 14:32
|
||||||
|
* @Company: 北京红山信息科技研究院有限公司
|
||||||
|
* @Email: linyun@***.com.cn
|
||||||
|
**/
|
||||||
|
@Data
|
||||||
|
@ConfigurationProperties(prefix = "mqtt")
|
||||||
|
@Component
|
||||||
|
public class MqttPropertiesConfig {
|
||||||
|
private String username;
|
||||||
|
private String password;
|
||||||
|
private String url;
|
||||||
|
private String subClientId;
|
||||||
|
private String subTopic;
|
||||||
|
private String pubClientId;
|
||||||
|
private String pubTopic;
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
package com.fuyuanshen.system.mqtt.publish;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/api/")
|
||||||
|
@Slf4j
|
||||||
|
public class DeviceDataController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MqttClientTest mqttClientTest;
|
||||||
|
|
||||||
|
// @PostMapping("/{deviceId}/command")
|
||||||
|
public ResponseEntity<String> sendCommand() {
|
||||||
|
|
||||||
|
mqttClientTest.sendMsg();
|
||||||
|
return ResponseEntity.ok("success");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
package com.fuyuanshen.system.mqtt.publish;
|
||||||
|
|
||||||
|
|
||||||
|
import com.fuyuanshen.system.mqtt.config.MqttGateway;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
public class MqttClientTest {
|
||||||
|
@Autowired
|
||||||
|
private MqttGateway mqttGateway;
|
||||||
|
|
||||||
|
public void sendMsg() {
|
||||||
|
mqttGateway.sendMsgToMqtt("worker/location/1", "hello mqtt spring boot");
|
||||||
|
log.info("message is send");
|
||||||
|
|
||||||
|
mqttGateway.sendMsgToMqtt("worker/alert/2", "hello mqtt spring boot2");
|
||||||
|
log.info("message is send2");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
package com.fuyuanshen.system.mqtt.publish;
|
||||||
|
|
||||||
|
import com.fuyuanshen.system.mqtt.config.MqttGateway;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.integration.mqtt.support.MqttHeaders;
|
||||||
|
import org.springframework.messaging.handler.annotation.Header;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: HarryLin
|
||||||
|
* @Date: 2025/3/20 16:16
|
||||||
|
* @Company: 北京红山信息科技研究院有限公司
|
||||||
|
* @Email: linyun@***.com.cn
|
||||||
|
**/
|
||||||
|
@Service
|
||||||
|
public class MqttMessageSender {
|
||||||
|
@Autowired
|
||||||
|
private MqttGateway mqttGateway;
|
||||||
|
public void sendMsg(@Header(value = MqttHeaders.TOPIC) String topic, String payload) {
|
||||||
|
mqttGateway.sendMsgToMqtt(topic,payload);
|
||||||
|
}
|
||||||
|
public void sendMsg(@Header(value = MqttHeaders.TOPIC) String topic, @Header(value = MqttHeaders.QOS) int qos, String payload) {
|
||||||
|
mqttGateway.sendMsgToMqtt(topic,qos,payload);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
package com.fuyuanshen.system.mqtt.receiver;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.messaging.Message;
|
||||||
|
import org.springframework.messaging.MessageHandler;
|
||||||
|
import org.springframework.messaging.MessageHeaders;
|
||||||
|
import org.springframework.messaging.MessagingException;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: HarryLin
|
||||||
|
* @Date: 2025/3/20 15:24
|
||||||
|
* @Company: 北京红山信息科技研究院有限公司
|
||||||
|
* @Email: linyun@***.com.cn
|
||||||
|
**/
|
||||||
|
@Service
|
||||||
|
@Slf4j
|
||||||
|
public class ReceiverMessageHandler implements MessageHandler {
|
||||||
|
@Override
|
||||||
|
public void handleMessage(Message<?> message) throws MessagingException{
|
||||||
|
Object payload = message.getPayload();
|
||||||
|
MessageHeaders headers = message.getHeaders();
|
||||||
|
String receivedTopic = Objects.requireNonNull(headers.get("mqtt_receivedTopic")).toString();
|
||||||
|
String receivedQos = Objects.requireNonNull(headers.get("mqtt_receivedQos")).toString();
|
||||||
|
String timestamp = Objects.requireNonNull(headers.get("timestamp")).toString();
|
||||||
|
log.info("MQTT payload= {} \n receivedTopic = {} \n receivedQos = {} \n timestamp = {}"
|
||||||
|
,payload,receivedTopic,receivedQos,timestamp);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user