基本完成MQTT消息的发送

This commit is contained in:
2025-09-10 18:15:31 +08:00
parent a9ca89b44a
commit a43b978097
13 changed files with 127 additions and 23 deletions

View File

@@ -5,6 +5,7 @@ using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using DMS.Core.Models;
@@ -215,17 +216,17 @@ namespace DMS.Infrastructure.Services
/// <summary>
/// 发布变量数据到MQTT服务器
/// </summary>
public async Task PublishVariableDataAsync(VariableMqtt variableMqtt, CancellationToken cancellationToken = default)
public async Task PublishVariableDataAsync(VariableMqttAlias variableMqtt, CancellationToken cancellationToken = default)
{
if (variableMqtt?.Mqtt == null || variableMqtt.Variable == null)
if (variableMqtt?.MqttServer == null || variableMqtt.Variable == null)
{
_logger.LogWarning("无效的VariableMqtt对象跳过发布");
return;
}
if (!_mqttContexts.TryGetValue(variableMqtt.Mqtt.Id, out var context))
if (!_mqttContexts.TryGetValue(variableMqtt.MqttServer.Id, out var context))
{
_logger.LogWarning("未找到MQTT服务器 {MqttServerId}", variableMqtt.Mqtt.Id);
_logger.LogWarning("未找到MQTT服务器 {MqttServerId}", variableMqtt.MqttServer.Id);
return;
}
@@ -239,11 +240,11 @@ namespace DMS.Infrastructure.Services
{
var topic = context.MqttServer.PublishTopic;
var sendMsg = $"{variableMqtt.Variable.Name}:{variableMqtt.Variable.DataValue}";
var sendMsg = BuildSendMessage(variableMqtt);
await context.MqttService.PublishAsync(topic, sendMsg);
_logger.LogDebug("成功向MQTT服务器 {ServerName} 发布变量 {VariableName} 的数据",
context.MqttServer.ServerName, variableMqtt.Variable.Name);
_logger.LogDebug("成功向MQTT服务器 {ServerName} 发布变量 {VariableName} 的数据{sendMsg}",
context.MqttServer.ServerName, variableMqtt.Variable.Name,sendMsg);
}
catch (Exception ex)
{
@@ -252,6 +253,18 @@ namespace DMS.Infrastructure.Services
}
}
private string BuildSendMessage(VariableMqttAlias variableMqtt)
{
StringBuilder sb = new StringBuilder();
var now = DateTime.Now;
var timestamp = ((DateTimeOffset)now).ToUnixTimeMilliseconds();
sb.Append(variableMqtt.MqttServer.MessageHeader.Replace("{timestamp}",timestamp.ToString()));
sb.Append(variableMqtt.MqttServer.MessageContent.Replace("{name}",variableMqtt.Alias).Replace("{value}",variableMqtt.Variable.DataValue));
sb.Append(variableMqtt.MqttServer.MessageFooter);
return sb.ToString();
}
/// <summary>
/// 发布批量变量数据到MQTT服务器
/// </summary>