@@ -276,6 +276,17 @@ namespace DataVAPI.Tool.IOT | |||||
} | } | ||||
client.Subscribe(new string[] { topic }, new byte[] { 0 }); | client.Subscribe(new string[] { topic }, new byte[] { 0 }); | ||||
} | } | ||||
public void SetSub(List<string> str) | |||||
{ | |||||
str?.ForEach(par => | |||||
{ | |||||
if (SubTopicList.Contains(par)) | |||||
{ | |||||
SubTopicList.Add(par); | |||||
} | |||||
}); | |||||
} | |||||
#endregion | #endregion | ||||
#region 私有函数 | #region 私有函数 | ||||
@@ -358,6 +369,8 @@ namespace DataVAPI.Tool.IOT | |||||
SubTopicList.ForEach(par => | SubTopicList.ForEach(par => | ||||
{ | { | ||||
client.Subscribe(new string[] { par }, new byte[] { 0 }); | client.Subscribe(new string[] { par }, new byte[] { 0 }); | ||||
UNConnectMqtt?.Invoke($"订阅主题{par}!"); | |||||
}); | }); | ||||
UNConnectMqtt?.Invoke("重新连接阿里云MQTT成功!"); | UNConnectMqtt?.Invoke("重新连接阿里云MQTT成功!"); | ||||
} | } | ||||
@@ -1,6 +1,7 @@ | |||||
using DataVAPI.Model; | using DataVAPI.Model; | ||||
using DataVAPI.ModelDataBus; | using DataVAPI.ModelDataBus; | ||||
using DataVAPI.ServerDB.MongoDB; | using DataVAPI.ServerDB.MongoDB; | ||||
using DataVAPI.UpAndDown; | |||||
using Microsoft.AspNetCore.Mvc; | using Microsoft.AspNetCore.Mvc; | ||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
@@ -198,5 +199,22 @@ namespace DataVAPI.Controllers | |||||
return JsonMsg<string>.Error(null, st, ex.Message); | return JsonMsg<string>.Error(null, st, ex.Message); | ||||
} | } | ||||
} | } | ||||
/// <summary> | |||||
/// 刷新设备 | |||||
/// </summary> | |||||
[HttpGet] | |||||
public JsonMsg<string> FlushedDevice() | |||||
{ | |||||
st = System.Reflection.MethodBase.GetCurrentMethod().Name; | |||||
try | |||||
{ | |||||
ProcessServer.Instance.LoadingShopInformation(); | |||||
return JsonMsg<string>.OK("success!", st); | |||||
} | |||||
catch (Exception ex) | |||||
{ | |||||
return JsonMsg<string>.Error(null, st, ex.Message); | |||||
} | |||||
} | |||||
} | } | ||||
} | } |
@@ -2,6 +2,7 @@ | |||||
using DataVAPI.ModelDataBus; | using DataVAPI.ModelDataBus; | ||||
using DataVAPI.ServerDB.MongoDB; | using DataVAPI.ServerDB.MongoDB; | ||||
using DataVAPI.Tool.IOT; | using DataVAPI.Tool.IOT; | ||||
using DataVAPI.UpAndDown; | |||||
using Microsoft.AspNetCore.Mvc; | using Microsoft.AspNetCore.Mvc; | ||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
@@ -256,5 +257,32 @@ namespace DataVAPI.Controllers | |||||
return JsonMsg<string>.Error(null, st, ex.Message); | return JsonMsg<string>.Error(null, st, ex.Message); | ||||
} | } | ||||
} | } | ||||
/// <summary> | |||||
/// 查询设备所有文件 | |||||
/// </summary> | |||||
/// <param name="DeviceName"></param> | |||||
/// <returns></returns> | |||||
[HttpGet] | |||||
public JsonMsg<object> QueryLogFile(string DeviceName) | |||||
{ | |||||
st = System.Reflection.MethodBase.GetCurrentMethod().Name; | |||||
try | |||||
{ | |||||
if (string.IsNullOrEmpty(DeviceName)) | |||||
{ | |||||
return JsonMsg<object>.Error(null, st, "设备名称不能为空"); | |||||
} | |||||
else | |||||
{ | |||||
return JsonMsg<object>.OK(Sample.FileQueryALL(DeviceName), st); | |||||
} | |||||
} | |||||
catch (Exception ex) | |||||
{ | |||||
return JsonMsg<object>.Error(null, st, ex.Message); | |||||
} | |||||
} | |||||
} | } | ||||
} | } |
@@ -13,12 +13,17 @@ | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="AlibabaCloud.OpenApiClient" Version="0.1.3" /> | |||||
<PackageReference Include="AlibabaCloud.SDK.Iot20180120" Version="3.0.5" /> | |||||
<PackageReference Include="AlibabaCloud.TeaConsole" Version="0.1.0" /> | |||||
<PackageReference Include="AlibabaCloud.TeaUtil" Version="0.1.13" /> | |||||
<PackageReference Include="BPA.ApolloClient" Version="1.0.9" /> | <PackageReference Include="BPA.ApolloClient" Version="1.0.9" /> | ||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.1" /> | <PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.1" /> | ||||
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0" /> | <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0" /> | ||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" /> | <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" /> | ||||
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.14.0" /> | <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.14.0" /> | ||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.3.0" /> | <PackageReference Include="Swashbuckle.AspNetCore" Version="6.3.0" /> | ||||
<PackageReference Include="Tea" Version="1.0.11" /> | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
@@ -61,14 +61,14 @@ namespace DataVAPI.UpAndDown | |||||
LoadingShopInformation(); | LoadingShopInformation(); | ||||
//MQTT 数据接收处理 | //MQTT 数据接收处理 | ||||
ConsoleHelper.WriteInfoLine("尝试连接阿里云."); | ConsoleHelper.WriteInfoLine("尝试连接阿里云."); | ||||
//设置变量 | |||||
IOTDevServer.GetInstance().Set(DataBus.ProductKey, DataBus.DeviceName, DataBus.DeviceSecret); | |||||
IOTDevServer.GetInstance().SetSub(new List<string> { IOTDevServer.HeartbeatSubTopic, IOTDevServer.BroadcastTopic }); | |||||
if (IOTDevServer.GetInstance().CreateLinks(DataBus.ProductKey, DataBus.DeviceName, DataBus.DeviceSecret)) | if (IOTDevServer.GetInstance().CreateLinks(DataBus.ProductKey, DataBus.DeviceName, DataBus.DeviceSecret)) | ||||
{ | { | ||||
//属性状态变xin | |||||
//Subscribe(IOTDevServer.TargetStatusSubTopic); | |||||
//订阅上下线 | //订阅上下线 | ||||
Subscribe(IOTDevServer.HeartbeatSubTopic); | Subscribe(IOTDevServer.HeartbeatSubTopic); | ||||
//订阅主播消息 | //订阅主播消息 | ||||
Subscribe(IOTDevServer.BroadcastTopic); | Subscribe(IOTDevServer.BroadcastTopic); | ||||
ConsoleHelper.WriteSuccessLine($"阿里云【Transit】连接成功"); | ConsoleHelper.WriteSuccessLine($"阿里云【Transit】连接成功"); | ||||
@@ -104,18 +104,17 @@ namespace DataVAPI.UpAndDown | |||||
if (IOTDevServer.GetInstance().CreateLinks(DataBus.ProductKey, DataBus.DeviceName, DataBus.DeviceSecret)) | if (IOTDevServer.GetInstance().CreateLinks(DataBus.ProductKey, DataBus.DeviceName, DataBus.DeviceSecret)) | ||||
{ | { | ||||
ConsoleHelper.WriteSuccessLine($"阿里云【Transit】连接成功"); | |||||
ConsoleHelper.WriteSuccessLine($"阿里云【Transit】重新连接成功"); | |||||
//订阅上下线 | //订阅上下线 | ||||
Subscribe(IOTDevServer.HeartbeatSubTopic); | Subscribe(IOTDevServer.HeartbeatSubTopic); | ||||
//订阅主播消息 | //订阅主播消息 | ||||
Subscribe(IOTDevServer.BroadcastTopic); | Subscribe(IOTDevServer.BroadcastTopic); | ||||
} | } | ||||
else | else | ||||
{ | { | ||||
ConsoleHelper.WriteSuccessLine($"阿里云【Transit】连接失败"); | |||||
ConsoleHelper.WriteSuccessLine($"阿里云【Transit】重新连接失败"); | |||||
} | } | ||||
Thread.Sleep(10000); | |||||
Thread.Sleep(360000); | |||||
} | } | ||||
} | } | ||||
@@ -0,0 +1,105 @@ | |||||
using DataVAPI.ModelDataBus; | |||||
using DataVAPI.Tool.IOT; | |||||
using System.Collections.Generic; | |||||
using Tea; | |||||
using static AlibabaCloud.SDK.Iot20180120.Models.QueryDeviceFileResponseBody; | |||||
namespace DataVAPI.UpAndDown | |||||
{ | |||||
public class Sample | |||||
{ | |||||
/** | |||||
* 使用AK&SK初始化账号Client | |||||
* @param accessKeyId | |||||
* @param accessKeySecret | |||||
* @return Client | |||||
* @throws Exception | |||||
*/ | |||||
public static AlibabaCloud.SDK.Iot20180120.Client CreateClient(string accessKeyId, string accessKeySecret) | |||||
{ | |||||
AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config | |||||
{ | |||||
// 您的AccessKey ID | |||||
AccessKeyId = accessKeyId, | |||||
// 您的AccessKey Secret | |||||
AccessKeySecret = accessKeySecret, | |||||
}; | |||||
// 访问的域名 | |||||
config.Endpoint = "iot.cn-shanghai.aliyuncs.com"; | |||||
return new AlibabaCloud.SDK.Iot20180120.Client(config); | |||||
} | |||||
public static List<QueryDeviceFileResponseBodyData> FileQueryALL(string DeviceName) | |||||
{ | |||||
List<QueryDeviceFileResponseBodyData> retdata=new List<QueryDeviceFileResponseBodyData>(); | |||||
AlibabaCloud.SDK.Iot20180120.Client client = CreateClient("LTAI5tDbUDuCvqU5hP8ZpHHV", "SvNIRQuz3BQFEaC3PFSJdgpeOKWFRi"); | |||||
AlibabaCloud.SDK.Iot20180120.Models.QueryDeviceFileListRequest queryDeviceFileListRequest = new AlibabaCloud.SDK.Iot20180120.Models.QueryDeviceFileListRequest | |||||
{ | |||||
IotInstanceId = "iot-06z00g9pf3kwtxp", | |||||
ProductKey = DataBus.ProductKey, | |||||
DeviceName = DeviceName, | |||||
}; | |||||
AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions(); | |||||
AlibabaCloud.SDK.Iot20180120.Models.QueryDeviceFileListResponse resp = client.QueryDeviceFileListWithOptions(queryDeviceFileListRequest, runtime); | |||||
//AlibabaCloud.TeaConsole.Client.Log(); | |||||
//; | |||||
AlibabaCloudRes cloudRes= Tools.JsonToObjectTools<AlibabaCloudRes>(AlibabaCloud.TeaUtil.Common.ToJSONString(resp.ToMap())); | |||||
cloudRes?.body?.Data?.FileSummary?.ForEach(fileSummary => | |||||
{ | |||||
QueryDeviceFileResponseBodyData _data= FileQuery(DeviceName,fileSummary.FileId); | |||||
if (_data != null) | |||||
{ | |||||
retdata.Add(_data); | |||||
} | |||||
}); | |||||
return retdata; | |||||
} | |||||
public static QueryDeviceFileResponseBodyData FileQuery(string DeviceName,string FileId) | |||||
{ | |||||
AlibabaCloud.SDK.Iot20180120.Client client = CreateClient("LTAI5tDbUDuCvqU5hP8ZpHHV", "SvNIRQuz3BQFEaC3PFSJdgpeOKWFRi"); | |||||
AlibabaCloud.SDK.Iot20180120.Models.QueryDeviceFileRequest queryDeviceFileRequest = new AlibabaCloud.SDK.Iot20180120.Models.QueryDeviceFileRequest | |||||
{ | |||||
IotInstanceId = "iot-06z00g9pf3kwtxp", | |||||
DeviceName = DeviceName, | |||||
ProductKey = DataBus.ProductKey, | |||||
FileId = FileId, | |||||
}; | |||||
AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions(); | |||||
// 复制代码运行请自行打印 API 的返回值 | |||||
QueryDeviceFileResponseBodyData queryDeviceFile= client.QueryDeviceFileWithOptions(queryDeviceFileRequest, runtime).Body.Data; | |||||
return queryDeviceFile; | |||||
} | |||||
} | |||||
public class AlibabaCloudRes | |||||
{ | |||||
public object headers { get; set; } | |||||
public StrRes body { get; set; } | |||||
} | |||||
public class StrRes | |||||
{ | |||||
public string code { get; set; } | |||||
public string CurrentPage { get; set; } | |||||
public ResData Data { get; set; } | |||||
public string ErrorMessage { get; set; } | |||||
public int PageCount { get; set; } | |||||
public int PageSize { get; set; } | |||||
public string RequestId { get; set; } | |||||
public bool Success { get; set; } | |||||
public int Total { get; set; } | |||||
} | |||||
public class ResData | |||||
{ | |||||
public List<summary> FileSummary { get; set; } | |||||
} | |||||
public class summary | |||||
{ | |||||
public string UtcCreatedOn { get; set; } | |||||
public string Size { get; set; } | |||||
public string FileId { get; set; } | |||||
public string Name { get; set; } | |||||
} | |||||
} |