diff --git a/WeiCloud.Fusion/Alarm.Application/Alarm.Application.csproj b/WeiCloud.Fusion/AlarmService/Alarm.Application/Alarm.Application.csproj
similarity index 100%
rename from WeiCloud.Fusion/Alarm.Application/Alarm.Application.csproj
rename to WeiCloud.Fusion/AlarmService/Alarm.Application/Alarm.Application.csproj
diff --git a/WeiCloud.Fusion/Alarm.Application/RequestDto/SubscribeEventReqDto.cs b/WeiCloud.Fusion/AlarmService/Alarm.Application/RequestDto/SubscribeEventReqDto.cs
similarity index 99%
rename from WeiCloud.Fusion/Alarm.Application/RequestDto/SubscribeEventReqDto.cs
rename to WeiCloud.Fusion/AlarmService/Alarm.Application/RequestDto/SubscribeEventReqDto.cs
index caf5969..21a454e 100644
--- a/WeiCloud.Fusion/Alarm.Application/RequestDto/SubscribeEventReqDto.cs
+++ b/WeiCloud.Fusion/AlarmService/Alarm.Application/RequestDto/SubscribeEventReqDto.cs
@@ -7,7 +7,6 @@ namespace Alarm.Application.RequestDto
[JsonPropertyName("param")]
public required SubscribeParam Param { get; init; }
}
-
public sealed class SubscribeParam
{
[JsonPropertyName("monitors")]
diff --git a/WeiCloud.Fusion/Alarm.Application/ResponeDto/EventEnvelopeDto.cs b/WeiCloud.Fusion/AlarmService/Alarm.Application/ResponeDto/EventEnvelopeDto.cs
similarity index 100%
rename from WeiCloud.Fusion/Alarm.Application/ResponeDto/EventEnvelopeDto.cs
rename to WeiCloud.Fusion/AlarmService/Alarm.Application/ResponeDto/EventEnvelopeDto.cs
diff --git a/WeiCloud.Fusion/Alarm.DomainService/Alarm.DomainService.csproj b/WeiCloud.Fusion/AlarmService/Alarm.DomainService/Alarm.DomainService.csproj
similarity index 64%
rename from WeiCloud.Fusion/Alarm.DomainService/Alarm.DomainService.csproj
rename to WeiCloud.Fusion/AlarmService/Alarm.DomainService/Alarm.DomainService.csproj
index 1df926c..7adf5ab 100644
--- a/WeiCloud.Fusion/Alarm.DomainService/Alarm.DomainService.csproj
+++ b/WeiCloud.Fusion/AlarmService/Alarm.DomainService/Alarm.DomainService.csproj
@@ -13,9 +13,10 @@
+
+
+
-
-
diff --git a/WeiCloud.Fusion/Alarm.DomainService/DahAlarm/DahuaGeneralCtlService.cs b/WeiCloud.Fusion/AlarmService/Alarm.DomainService/DahAlarm/DahuaGeneralCtlService.cs
similarity index 87%
rename from WeiCloud.Fusion/Alarm.DomainService/DahAlarm/DahuaGeneralCtlService.cs
rename to WeiCloud.Fusion/AlarmService/Alarm.DomainService/DahAlarm/DahuaGeneralCtlService.cs
index c95d75b..db1ff2f 100644
--- a/WeiCloud.Fusion/Alarm.DomainService/DahAlarm/DahuaGeneralCtlService.cs
+++ b/WeiCloud.Fusion/AlarmService/Alarm.DomainService/DahAlarm/DahuaGeneralCtlService.cs
@@ -1,6 +1,7 @@
using Alarm.Application.RequestDto;
using Alarm.Application.ResponeDto;
using Common.Shared.Application.DaHua;
+using Common.Shared.DomainService.MqttClient;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Org.BouncyCastle.Crypto.Parameters;
@@ -17,12 +18,37 @@ namespace Alarm.DomainService.DahAlarm
private readonly ILogger _logger;
private readonly IConfiguration _configuration;
private readonly HttpClient _http;
+ private readonly MQTTClient _mqttClient;
+ private readonly IMqttClientService _mqttClientService;
+ private string mqttHostIp;
+ private int mqttHostPort;
+ private int mqttTimeout;
+ private string mqttUsername;
+ private string mqttPassword;
+ private string mqttClientId;
+ private string topicName;
- public DahuaGeneralCtlService(ILogger logger, IConfiguration configuration, HttpClient http)
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public DahuaGeneralCtlService(ILogger logger, IConfiguration configuration, HttpClient http, MQTTClient mQTTClient, IMqttClientService mqttClientService)
{
_logger = logger;
_configuration = configuration;
_http = http;
+ _mqttClient = mQTTClient;
+ mqttHostIp = _configuration["SubscribeMQTT:HostIP"]!;//IP地址
+ mqttHostPort = _configuration["SubscribeMQTT:HostPort"].ToInt();//端口号
+ mqttTimeout = _configuration["SubscribeMQTT:Timeout"].ToInt();//超时时间
+ mqttUsername = _configuration["SubscribeMQTT:UserName"]!;//用户名
+ mqttPassword = _configuration["SubscribeMQTT:Password"]!;//密码
+ mqttClientId = _configuration["SubscribeMQTT:ClientId"]!;
+ topicName = _configuration["SubscribeMQTT:TopicName"]!;
+ _mqttClientService = mqttClientService;
}
///
@@ -258,6 +284,12 @@ namespace Alarm.DomainService.DahAlarm
//这是大华的残卫报警类型
if (dto.Info.AlarmType == 4321)
{
+ //拼接物联平台标准的mqtt消息格式
+ var payload = "[{\"taglabel\":\"" + dto.Info.DeviceCode + " + \".alart.\" + " + dto.Info.DeviceName + "\",\"value\":\"" + dto.Info.AlarmStat + "\",\"time\":\"" + DateTimeOffset.UtcNow.ToUnixTimeSeconds() + "\"}]";
+
+ await _mqttClient.EnsureConnectedAsync(mqttHostIp, mqttHostPort, mqttUsername, mqttPassword, topicName, mqttClientId);
+
+ await _mqttClientService.PublishAsync("/zrh/sun/alarm", payload);
}
}
}
diff --git a/WeiCloud.Fusion/Alarm.DomainService/DahAlarm/IDahuaGeneralCtlService.cs b/WeiCloud.Fusion/AlarmService/Alarm.DomainService/DahAlarm/IDahuaGeneralCtlService.cs
similarity index 100%
rename from WeiCloud.Fusion/Alarm.DomainService/DahAlarm/IDahuaGeneralCtlService.cs
rename to WeiCloud.Fusion/AlarmService/Alarm.DomainService/DahAlarm/IDahuaGeneralCtlService.cs
diff --git a/WeiCloud.Fusion/AlarmService/AlarmService.API/AlarmService.API.csproj b/WeiCloud.Fusion/AlarmService/AlarmService.API/AlarmService.API.csproj
index 446c877..3e9bdc0 100644
--- a/WeiCloud.Fusion/AlarmService/AlarmService.API/AlarmService.API.csproj
+++ b/WeiCloud.Fusion/AlarmService/AlarmService.API/AlarmService.API.csproj
@@ -7,9 +7,11 @@
-
+
+
+
diff --git a/WeiCloud.Fusion/AlarmService/AlarmService.API/Program.cs b/WeiCloud.Fusion/AlarmService/AlarmService.API/Program.cs
index 5e4b3a3..f1bc05b 100644
--- a/WeiCloud.Fusion/AlarmService/AlarmService.API/Program.cs
+++ b/WeiCloud.Fusion/AlarmService/AlarmService.API/Program.cs
@@ -1,6 +1,7 @@
using AlarmService.API.Infrastructure;
using Autofac;
using Autofac.Extensions.DependencyInjection;
+using Common.Shared.DomainService.MqttClient;
using Microsoft.OpenApi.Models;
using NLog;
using NLog.Extensions.Logging;
@@ -86,6 +87,14 @@ namespace AlarmService.API
options.Limits.MaxRequestBodySize = 200 * 1024 * 1024; // Ĭ 200MB
});
+ #region mqttclient
+
+ builder.Services.AddSingleton();
+
+ builder.Services.AddSingleton();
+
+ #endregion mqttclient
+
var app = builder.Build();
if (app.Environment.IsDevelopment())
diff --git a/WeiCloud.Fusion/AlarmService/AlarmService.API/appsettings.json b/WeiCloud.Fusion/AlarmService/AlarmService.API/appsettings.json
index 10f68b8..df0f96a 100644
--- a/WeiCloud.Fusion/AlarmService/AlarmService.API/appsettings.json
+++ b/WeiCloud.Fusion/AlarmService/AlarmService.API/appsettings.json
@@ -5,5 +5,16 @@
"Microsoft.AspNetCore": "Warning"
}
},
+ "SubscribeMQTT": {
+ "TopicName": "datasource_points_AXYJPT_v4",
+ "ProjectId": 530522108656160,
+ "HostIP": "v4.weienergy.cn",
+ "HostPort": 18883,
+ "Timeout": 5000,
+ "UserName": "test",
+ "Password": "test123",
+ "ClientId": "datasource_points_AXYJPT_v4",
+ "ApiUrl": "http://v4.weienergy.cn/datastream"
+ },
"AllowedHosts": "*"
-}
+}
\ No newline at end of file
diff --git a/WeiCloud.Fusion/Common.SharedService/Common.Shared.DomainService/Common.Shared.DomainService.csproj b/WeiCloud.Fusion/Common.SharedService/Common.Shared.DomainService/Common.Shared.DomainService.csproj
index 3530a2b..bad3a67 100644
--- a/WeiCloud.Fusion/Common.SharedService/Common.Shared.DomainService/Common.Shared.DomainService.csproj
+++ b/WeiCloud.Fusion/Common.SharedService/Common.Shared.DomainService/Common.Shared.DomainService.csproj
@@ -9,7 +9,6 @@
-
diff --git a/WeiCloud.Fusion/Common.SharedService/Common.Shared.DomainService/MqttClient/IMqttClientService.cs b/WeiCloud.Fusion/Common.SharedService/Common.Shared.DomainService/MqttClient/IMqttClientService.cs
index 136e26a..cf53d32 100644
--- a/WeiCloud.Fusion/Common.SharedService/Common.Shared.DomainService/MqttClient/IMqttClientService.cs
+++ b/WeiCloud.Fusion/Common.SharedService/Common.Shared.DomainService/MqttClient/IMqttClientService.cs
@@ -1,5 +1,4 @@
-using MQTTnet;
-using MQTTnet.Client;
+using MQTTnet.Client;
namespace Common.Shared.DomainService.MqttClient
{
diff --git a/WeiCloud.Fusion/Common.SharedService/Common.Shared.DomainService/MqttClient/MQTTClient.cs b/WeiCloud.Fusion/Common.SharedService/Common.Shared.DomainService/MqttClient/MQTTClient.cs
index 64addd6..b072841 100644
--- a/WeiCloud.Fusion/Common.SharedService/Common.Shared.DomainService/MqttClient/MQTTClient.cs
+++ b/WeiCloud.Fusion/Common.SharedService/Common.Shared.DomainService/MqttClient/MQTTClient.cs
@@ -10,12 +10,27 @@ namespace Common.Shared.DomainService.MqttClient
{
private readonly ILogger _logger;
internal IMqttClient mqttClient;
+ public bool IsConnected => mqttClient != null && mqttClient.IsConnected;
public MQTTClient(ILogger logger)
{
_logger = logger;
}
+ ///
+ /// 如果未连接,则按参数调用 Init;成功后返回当前连接状态。
+ ///
+ public async Task EnsureConnectedAsync(
+ string serverIp, int port, string authUser, string authPwd,
+ string topicNameStrs = "", string clientId = "")
+ {
+ if (mqttClient == null || !mqttClient.IsConnected)
+ {
+ await Init(serverIp, port, authUser, authPwd, topicNameStrs, clientId);
+ }
+ return mqttClient != null && mqttClient.IsConnected;
+ }
+
private async Task Subscribe(string topicNameStrs)
{
if (!string.IsNullOrWhiteSpace(topicNameStrs))
diff --git a/WeiCloud.Fusion/Common.SharedService/Common.Shared.DomainService/MqttClient/MqttClientService.cs b/WeiCloud.Fusion/Common.SharedService/Common.Shared.DomainService/MqttClient/MqttClientService.cs
index 912ffb1..0dcae36 100644
--- a/WeiCloud.Fusion/Common.SharedService/Common.Shared.DomainService/MqttClient/MqttClientService.cs
+++ b/WeiCloud.Fusion/Common.SharedService/Common.Shared.DomainService/MqttClient/MqttClientService.cs
@@ -1,9 +1,8 @@
-using Common.Shared.DomainService.MqttClient;
-using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Configuration;
using MQTTnet;
using MQTTnet.Client;
-namespace WeiCloud.SafetyFirePro.Services
+namespace Common.Shared.DomainService.MqttClient
{
public class MqttClientService : IMqttClientService
{
diff --git a/WeiCloud.Fusion/WeiCloud.Fusion.sln b/WeiCloud.Fusion/WeiCloud.Fusion.sln
index b0e6721..93850b8 100644
--- a/WeiCloud.Fusion/WeiCloud.Fusion.sln
+++ b/WeiCloud.Fusion/WeiCloud.Fusion.sln
@@ -47,16 +47,16 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AlarmService", "AlarmServic
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AlarmService.API", "AlarmService\AlarmService.API\AlarmService.API.csproj", "{2677EAF0-9F7F-4969-B8B1-3006F35EB93E}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Alarm.DomainService", "Alarm.DomainService\Alarm.DomainService.csproj", "{3ED553C4-3A63-4613-B979-472FDA5EA346}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common.SharedService", "Common.SharedService", "{80F3B34B-C334-44D2-A861-31FD403AD57D}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Alarm.Application", "Alarm.Application\Alarm.Application.csproj", "{89367194-A636-41B9-81F0-283DCB84C296}"
-EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common.Shared.Application", "Common.SharedService\Common.Shared.Application\Common.Shared.Application.csproj", "{9A5FBAFF-EBE8-3156-5547-FB3ED1DEB545}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common.Shared.DomainService", "Common.SharedService\Common.Shared.DomainService\Common.Shared.DomainService.csproj", "{C2757FC0-54A9-BBD3-2E23-55F2F3912BA4}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Alarm.DomainService", "AlarmService\Alarm.DomainService\Alarm.DomainService.csproj", "{B6DDF83D-591E-38B6-2902-1624BE8AE9B9}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Alarm.Application", "AlarmService\Alarm.Application\Alarm.Application.csproj", "{4B2C6EBE-E719-9F40-ADE6-C82DA632E554}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -123,14 +123,6 @@ Global
{2677EAF0-9F7F-4969-B8B1-3006F35EB93E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2677EAF0-9F7F-4969-B8B1-3006F35EB93E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2677EAF0-9F7F-4969-B8B1-3006F35EB93E}.Release|Any CPU.Build.0 = Release|Any CPU
- {3ED553C4-3A63-4613-B979-472FDA5EA346}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3ED553C4-3A63-4613-B979-472FDA5EA346}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {3ED553C4-3A63-4613-B979-472FDA5EA346}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {3ED553C4-3A63-4613-B979-472FDA5EA346}.Release|Any CPU.Build.0 = Release|Any CPU
- {89367194-A636-41B9-81F0-283DCB84C296}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {89367194-A636-41B9-81F0-283DCB84C296}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {89367194-A636-41B9-81F0-283DCB84C296}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {89367194-A636-41B9-81F0-283DCB84C296}.Release|Any CPU.Build.0 = Release|Any CPU
{9A5FBAFF-EBE8-3156-5547-FB3ED1DEB545}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9A5FBAFF-EBE8-3156-5547-FB3ED1DEB545}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9A5FBAFF-EBE8-3156-5547-FB3ED1DEB545}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -139,6 +131,14 @@ Global
{C2757FC0-54A9-BBD3-2E23-55F2F3912BA4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C2757FC0-54A9-BBD3-2E23-55F2F3912BA4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C2757FC0-54A9-BBD3-2E23-55F2F3912BA4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B6DDF83D-591E-38B6-2902-1624BE8AE9B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B6DDF83D-591E-38B6-2902-1624BE8AE9B9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B6DDF83D-591E-38B6-2902-1624BE8AE9B9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B6DDF83D-591E-38B6-2902-1624BE8AE9B9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4B2C6EBE-E719-9F40-ADE6-C82DA632E554}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4B2C6EBE-E719-9F40-ADE6-C82DA632E554}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4B2C6EBE-E719-9F40-ADE6-C82DA632E554}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4B2C6EBE-E719-9F40-ADE6-C82DA632E554}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -159,10 +159,10 @@ Global
{40B0D902-553C-C52F-71A2-56FB176FCCBD} = {44DAA396-C724-480A-A2BC-9A33D29E8FEA}
{9F2BD2C5-6496-419D-B87A-4F481E963C4D} = {19A25984-FFA8-49BE-A710-6F269A406C61}
{2677EAF0-9F7F-4969-B8B1-3006F35EB93E} = {18791734-CA81-482D-964A-CA6D0F308B8E}
- {3ED553C4-3A63-4613-B979-472FDA5EA346} = {18791734-CA81-482D-964A-CA6D0F308B8E}
- {89367194-A636-41B9-81F0-283DCB84C296} = {18791734-CA81-482D-964A-CA6D0F308B8E}
{9A5FBAFF-EBE8-3156-5547-FB3ED1DEB545} = {80F3B34B-C334-44D2-A861-31FD403AD57D}
{C2757FC0-54A9-BBD3-2E23-55F2F3912BA4} = {80F3B34B-C334-44D2-A861-31FD403AD57D}
+ {B6DDF83D-591E-38B6-2902-1624BE8AE9B9} = {18791734-CA81-482D-964A-CA6D0F308B8E}
+ {4B2C6EBE-E719-9F40-ADE6-C82DA632E554} = {18791734-CA81-482D-964A-CA6D0F308B8E}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {379A56DA-D3F0-4E7E-8FF7-DA8E20015BF3}