Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
jobily
IoTSharp
提交
3c13b9de
I
IoTSharp
项目概览
jobily
/
IoTSharp
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
I
IoTSharp
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
3c13b9de
编写于
10月 06, 2022
作者:
麦壳饼
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
重构设备状态部分。
上级
269eb638
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
140 addition
and
26 deletion
+140
-26
IoTSharp.Contracts/Enums.cs
IoTSharp.Contracts/Enums.cs
+11
-2
IoTSharp.EventBus.CAP/CapSubscriber.cs
IoTSharp.EventBus.CAP/CapSubscriber.cs
+13
-1
IoTSharp.EventBus.Shashlik/ShashlikSubscriber.cs
IoTSharp.EventBus.Shashlik/ShashlikSubscriber.cs
+2
-0
IoTSharp.EventBus/EventBusPublisher.cs
IoTSharp.EventBus/EventBusPublisher.cs
+39
-13
IoTSharp.EventBus/EventBusSubscriber.cs
IoTSharp.EventBus/EventBusSubscriber.cs
+34
-7
IoTSharp.EventBus/ISubscriber.cs
IoTSharp.EventBus/ISubscriber.cs
+2
-0
IoTSharp.Test/Class1.cs
IoTSharp.Test/Class1.cs
+36
-0
IoTSharp/Services/MQTTControllers/StatusController.cs
IoTSharp/Services/MQTTControllers/StatusController.cs
+3
-3
未找到文件。
IoTSharp.Contracts/Enums.cs
浏览文件 @
3c13b9de
...
...
@@ -201,6 +201,7 @@ namespace IoTSharp.Contracts
[
JsonConverter
(
typeof
(
StringEnumConverter
))]
public
enum
MountType
{
None
=-
1
,
/// <summary>
/// 原始数据
/// </summary>
...
...
@@ -220,11 +221,11 @@ namespace IoTSharp.Contracts
/// <summary>
/// 在线
/// </summary>
Online
=
4
,
Connected
=
4
,
/// <summary>
/// 离线
/// </summary>
Offline
=
5
,
Disconnected
=
5
,
/// <summary>
/// 遥测数据, key value type datetime
/// </summary>
...
...
@@ -235,6 +236,14 @@ namespace IoTSharp.Contracts
Alarm
=
7
,
DeleteDevice
=
8
,
CreateDevice
=
9
,
/// <summary>
/// 活动事件
/// </summary>
Activity
=
10
,
/// <summary>
/// 非活跃状态
/// </summary>
Inactivity
=
11
}
/// <summary>
/// 折叠数据
...
...
IoTSharp.EventBus.CAP/CapSubscriber.cs
浏览文件 @
3c13b9de
using
DotNetCore.CAP
;
using
Amazon.Runtime.Internal.Transform
;
using
DotNetCore.CAP
;
using
EasyCaching.Core
;
using
IoTSharp.Contracts
;
using
IoTSharp.Data
;
...
...
@@ -61,5 +62,16 @@ namespace IoTSharp.EventBus.CAP
{
await
CreateDevice
(
deviceId
);
}
[
CapSubscribe
(
"iotsharp.services.platform.connect"
)]
public
async
Task
connect
(
Guid
devid
,
ConnectStatus
devicestatus
)
{
await
Connect
(
devid
,
devicestatus
);
}
[
CapSubscribe
(
"iotsharp.services.platform.active"
)]
public
async
Task
active
(
Guid
devid
,
ActivityStatus
activity
)
{
await
base
.
Active
(
devid
,
activity
);
}
}
}
\ No newline at end of file
IoTSharp.EventBus.Shashlik/ShashlikSubscriber.cs
浏览文件 @
3c13b9de
...
...
@@ -21,6 +21,8 @@ namespace IoTSharp.EventBus.Shashlik
{
}
}
public
class
EventAttributeDataHandler
:
IEventHandler
<
AttributeDataEvent
>
...
...
IoTSharp.EventBus/EventBusPublisher.cs
浏览文件 @
3c13b9de
...
...
@@ -8,26 +8,52 @@ using System.Threading.Tasks;
namespace
IoTSharp.EventBus
{
/// <summary>
/// 消息发布扩展类
/// </summary>
public
static
class
EventBusPublisher
{
public
static
void
PublishAttributeData
(
this
IPublisher
cap
,
Device
device
,
Dictionary
<
string
,
object
>
keyValues
)
/// <summary>
/// 将指定字典发布到指定设备中
/// </summary>
/// <param name="_queue"></param>
/// <param name="device"></param>
/// <param name="keyValues"></param>
public
static
void
PublishAttributeData
(
this
IPublisher
_queue
,
Device
device
,
Dictionary
<
string
,
object
>
keyValues
)
{
cap
.
PublishAttributeData
(
new
PlayloadData
()
{
DeviceId
=
device
.
Id
,
MsgBody
=
keyValues
,
DataSide
=
DataSide
.
ClientSide
,
DataCatalog
=
DataCatalog
.
AttributeData
});
_queue
.
PublishAttributeData
(
new
PlayloadData
()
{
DeviceId
=
device
.
Id
,
MsgBody
=
keyValues
,
DataSide
=
DataSide
.
ClientSide
,
DataCatalog
=
DataCatalog
.
AttributeData
});
}
public
static
void
PublishTelemetryData
(
this
IPublisher
cap
,
Device
device
,
Dictionary
<
string
,
object
>
keyValues
)
/// <summary>
/// 发布属性数据
/// </summary>
/// <param name="_queue"></param>
/// <param name="device"></param>
/// <param name="_data"></param>
public
static
void
PublishAttributeData
(
this
IPublisher
_queue
,
Device
device
,
Action
<
PlayloadData
>
_data
)
{
var
dat
=
new
PlayloadData
()
{
DeviceId
=
device
.
Id
,
MsgBody
=
new
Dictionary
<
string
,
object
>(),
DataSide
=
DataSide
.
ClientSide
,
DataCatalog
=
DataCatalog
.
AttributeData
};
_data
?.
Invoke
(
dat
);
_queue
.
PublishAttributeData
(
dat
);
}
/// <summary>
/// 发布字典到遥测数据
/// </summary>
/// <param name="_queue"></param>
/// <param name="device"></param>
/// <param name="keyValues"></param>
public
static
void
PublishTelemetryData
(
this
IPublisher
_queue
,
Device
device
,
Dictionary
<
string
,
object
>
keyValues
)
{
cap
.
PublishTelemetryData
(
new
PlayloadData
()
{
DeviceId
=
device
.
Id
,
MsgBody
=
keyValues
,
DataSide
=
DataSide
.
ClientSide
,
DataCatalog
=
DataCatalog
.
TelemetryData
});
_queue
.
PublishTelemetryData
(
new
PlayloadData
()
{
DeviceId
=
device
.
Id
,
MsgBody
=
keyValues
,
DataSide
=
DataSide
.
ClientSide
,
DataCatalog
=
DataCatalog
.
TelemetryData
});
}
[
Obsolete
]
public
static
void
PublishSubDeviceOnline
(
this
IPublisher
_queue
,
Guid
_gatewaydevid
,
Device
subdev
)
/// <summary>
/// 发布设备状态到属性当中。
/// </summary>
/// <param name="_queue"></param>
/// <param name="device"></param>
/// <param name="status"></param>
public
static
void
PublishStatus
(
this
IPublisher
_queue
,
Device
device
,
DeviceStatus
status
)
{
//如果是_dev的子设备, 则更新状态。
if
(
subdev
.
DeviceType
==
DeviceType
.
Device
&&
subdev
.
Id
!=
_gatewaydevid
)
{
_queue
.
PublishDeviceStatus
(
subdev
.
Id
,
DeviceStatus
.
Good
);
}
_queue
.
PublishAttributeData
(
device
,
msg
=>
msg
.
MsgBody
.
Add
(
"Status"
,
status
));
}
}
...
...
IoTSharp.EventBus/EventBusSubscriber.cs
浏览文件 @
3c13b9de
...
...
@@ -6,8 +6,6 @@ using IoTSharp.Extensions;
using
IoTSharp.Storage
;
using
Microsoft.Extensions.DependencyInjection
;
using
Microsoft.Extensions.Logging
;
using
Microsoft.Extensions.Options
;
using
Newtonsoft.Json.Linq
;
using
System
;
using
System.Collections.Generic
;
using
System.Dynamic
;
...
...
@@ -36,8 +34,11 @@ namespace IoTSharp.EventBus
_caching
=
factory
.
GetCachingProvider
(
_hc_Caching
);
_eventBusOption
=
eventBusOption
;
}
public
async
Task
StoreAttributeData
(
PlayloadData
msg
)
{
await
StoreAttributeData
(
msg
,
MountType
.
Attribute
);
}
public
async
Task
StoreAttributeData
(
PlayloadData
msg
,
MountType
_event
)
{
try
{
...
...
@@ -55,7 +56,10 @@ namespace IoTSharp.EventBus
_logger
.
LogError
(
$"
{
ex
.
Key
}
{
ex
.
Value
}
{
Newtonsoft
.
Json
.
JsonConvert
.
SerializeObject
(
msg
.
MsgBody
[
ex
.
Key
])}
"
);
});
_logger
.
LogInformation
(
$"更新
{
device
.
Name
}
(
{
device
.
Id
}
)属性数据结果
{
result2
.
ret
}
"
);
await
RunRules
(
msg
.
DeviceId
,
dc
.
ToDynamic
(),
MountType
.
Attribute
);
if
(
_event
!=
MountType
.
None
)
{
await
RunRules
(
msg
.
DeviceId
,
dc
.
ToDynamic
(),
_event
);
}
}
}
}
...
...
@@ -68,7 +72,7 @@ namespace IoTSharp.EventBus
}
p
rivate
async
Task
RunRules
(
Guid
deviceId
,
object
obj
,
MountType
attribute
)
p
ublic
async
Task
RunRules
(
Guid
deviceId
,
object
obj
,
MountType
attribute
)
{
await
_eventBusOption
.
RunRules
(
deviceId
,
obj
,
attribute
);
}
...
...
@@ -120,12 +124,12 @@ namespace IoTSharp.EventBus
{
if
(
status
.
DeviceStatus
!=
DeviceStatus
.
Good
)
{
await
RunRules
(
dev
.
Id
,
status
,
MountType
.
Offline
);
await
RunRules
(
dev
.
Id
,
status
,
MountType
.
Disconnected
);
//真正离线
}
else
if
(
status
.
DeviceStatus
==
DeviceStatus
.
Good
)
{
await
RunRules
(
dev
.
Id
,
status
,
MountType
.
Online
);
await
RunRules
(
dev
.
Id
,
status
,
MountType
.
Connected
);
//真正掉线
}
var
result2
=
await
_dbContext
.
SaveAsync
<
AttributeLatest
>(
status
.
ToDictionary
(),
dev
.
Id
,
DataSide
.
ServerSide
);
...
...
@@ -165,5 +169,28 @@ namespace IoTSharp.EventBus
await
RunRules
(
deviceId
,
new
object
(),
MountType
.
CreateDevice
);
}
public
async
Task
Active
(
Guid
devid
,
ActivityStatus
activity
)
{
var
msg
=
new
PlayloadData
();
msg
.
DeviceId
=
devid
;
msg
.
DataCatalog
=
DataCatalog
.
AttributeData
;
msg
.
DataSide
=
DataSide
.
ServerSide
;
msg
.
MsgBody
.
Add
(
activity
==
ActivityStatus
.
Activity
?
"LastActivityDateTime"
:
"InactivityAlarmDateTime "
,
DateTime
.
Now
);
msg
.
MsgBody
.
Add
(
"Active"
,
activity
==
ActivityStatus
.
Activity
);
await
StoreAttributeData
(
msg
,
activity
==
ActivityStatus
.
Activity
?
MountType
.
Activity
:
MountType
.
Inactivity
);
}
public
async
Task
Connect
(
Guid
devid
,
ConnectStatus
devicestatus
)
{
var
msg
=
new
PlayloadData
();
msg
.
DeviceId
=
devid
;
msg
.
DataCatalog
=
DataCatalog
.
AttributeData
;
msg
.
DataSide
=
DataSide
.
ServerSide
;
msg
.
MsgBody
.
Add
(
devicestatus
==
ConnectStatus
.
Connected
?
"LastConnectDateTime"
:
"LastDisconnectDateTime"
,
DateTime
.
Now
);
await
StoreAttributeData
(
msg
,
devicestatus
==
ConnectStatus
.
Connected
?
MountType
.
Connected
:
MountType
.
Disconnected
);
}
}
}
\ No newline at end of file
IoTSharp.EventBus/ISubscriber.cs
浏览文件 @
3c13b9de
...
...
@@ -13,5 +13,7 @@ namespace IoTSharp.EventBus
public
Task
StoreTelemetryData
(
PlayloadData
msg
);
public
Task
DeleteDevice
(
Guid
deviceId
);
public
Task
CreateDevice
(
Guid
deviceId
);
public
Task
Connect
(
Guid
devid
,
ConnectStatus
devicestatus
);
public
Task
Active
(
Guid
devid
,
ActivityStatus
activity
);
}
}
\ No newline at end of file
IoTSharp.Test/Class1.cs
0 → 100644
浏览文件 @
3c13b9de
using
Microsoft.AspNetCore.Hosting
;
using
Microsoft.AspNetCore.TestHost
;
using
Microsoft.VisualStudio.TestTools.UnitTesting
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Net.Http
;
using
System.Text
;
using
System.Threading.Tasks
;
namespace
IoTSharp.Test
{
[
TestClass
]
public
class
PrimeWebDefaultRequestShould
{
private
TestServer
_server
;
private
HttpClient
_client
;
[
TestInitialize
()]
public
void
TestServerInitialize
()
{
_server
=
new
TestServer
((
IWebHostBuilder
)
Program
.
CreateHostBuilder
(
null
));
_client
=
_server
.
CreateClient
();
}
[
TestMethod
]
public
async
Task
ReturnHelloWorld
()
{
// Act
var
response
=
await
_client
.
GetAsync
(
"/"
);
response
.
EnsureSuccessStatusCode
();
var
responseString
=
await
response
.
Content
.
ReadAsStringAsync
();
// Assert
Assert
.
AreEqual
(
"Hello World!"
,
responseString
);
}
}
}
IoTSharp/Services/MQTTControllers/StatusController.cs
浏览文件 @
3c13b9de
...
...
@@ -48,20 +48,20 @@ namespace IoTSharp.Services.MQTTControllers
public
Task
UpdateStatus
(
DeviceStatus
status
)
{
_logger
.
LogInformation
(
$"重置状态
{
device
.
Id
}
{
device
.
Name
}
"
);
_queue
.
PublishStatus
(
device
,
status
);
if
(
device
.
DeviceType
==
DeviceType
.
Device
&&
device
.
Owner
!=
null
&&
device
.
Owner
?.
Id
!=
null
&&
device
.
Owner
?.
Id
!=
Guid
.
Empty
)
//虚拟设备上线
{
_queue
.
PublishActive
(
device
.
Id
,
ActivityStatus
.
Activity
);
_queue
.
PublishActive
(
device
.
Owner
.
Id
,
ActivityStatus
.
Activity
);
_queue
.
PublishDeviceStatus
(
device
.
Id
,
status
);
_queue
.
PublishDeviceStatus
(
device
.
Owner
.
Id
,
status
!=
DeviceStatus
.
Good
?
DeviceStatus
.
PartGood
:
status
);
_logger
.
LogInformation
(
$"重置网关状态
{
device
.
Owner
.
Id
}
{
device
.
Owner
.
Name
}
"
);
}
else
{
_queue
.
PublishDeviceStatus
(
device
.
Id
,
status
);
_queue
.
PublishActive
(
device
.
Id
,
ActivityStatus
.
Activity
);
}
return
Ok
();
}
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录