diff --git a/IoTSharp.Data/Enums.cs b/IoTSharp.Data/Enums.cs
index d7ad5c90b8f877be350915661fdb7d5c969cf332..d28944f39adb76864f9dcfd703dbfc2888db43b7 100644
--- a/IoTSharp.Data/Enums.cs
+++ b/IoTSharp.Data/Enums.cs
@@ -173,12 +173,33 @@ namespace IoTSharp.Data
/// 不使用
///
None,
+ ///
+ /// 平均数
+ ///
Mean,
+ ///
+ /// 中值
+ ///
Median,
+ ///
+ /// 最后一个值
+ ///
Last,
+ ///
+ /// 第一个值
+ ///
First,
+ ///
+ /// 最大
+ ///
Max,
+ ///
+ /// 最小
+ ///
Min,
+ ///
+ /// 合计
+ ///
Sum
}
diff --git a/IoTSharp/Controllers/DevicesController.cs b/IoTSharp/Controllers/DevicesController.cs
index 9b7f312e0462e9435811cb941a80da293b65a1c1..36cd4edc1978c6c5db00749ccb0dba03932bd7b5 100644
--- a/IoTSharp/Controllers/DevicesController.cs
+++ b/IoTSharp/Controllers/DevicesController.cs
@@ -527,8 +527,15 @@ namespace IoTSharp.Controllers
///
/// 返回指定设备的的遥测数据, 按照keyname 和指定时间范围获取,如果keyname 为 all , 则返回全部key 的数据
///
- /// Which device do you read?
- /// 查询条件
+ /// 指定设备ID
+ /// 查询条件例子:
+ ///{
+ /// "keys": "",
+ /// "begin": "2022-03-23T11:44:56.488Z",
+ /// "every": "1.03:14:56:166",
+ /// "aggregate": "Mean"
+ /// }
+ ///
///
[Authorize(Roles = nameof(UserRole.NormalUser))]
[HttpPost("{deviceId}/TelemetryData")]
diff --git a/IoTSharp/Dtos/TelemetryDataDto.cs b/IoTSharp/Dtos/TelemetryDataDto.cs
index 87729dffe9e124fd3d7d35acc9218fb97e1c7b0a..b02791caf453f7b7b9c026bbe5ff7f6b1aa5216d 100644
--- a/IoTSharp/Dtos/TelemetryDataDto.cs
+++ b/IoTSharp/Dtos/TelemetryDataDto.cs
@@ -3,6 +3,7 @@ using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
+using System.Text.Json;
using System.Threading.Tasks;
namespace IoTSharp.Dtos
@@ -16,6 +17,39 @@ namespace IoTSharp.Dtos
public object Value { get; set; }
}
+ public class TimespanConverterNewtonsoft : Newtonsoft.Json.JsonConverter
+ {
+ ///
+ /// Format: Days.Hours:Minutes:Seconds:Milliseconds
+ ///
+ public const string TimeSpanFormatString = @"d\.hh\:mm\:ss\:FFF";
+
+ public override void WriteJson(Newtonsoft.Json.JsonWriter writer, TimeSpan value, Newtonsoft.Json.JsonSerializer serializer)
+ {
+ var timespanFormatted = $"{value.ToString(TimeSpanFormatString)}";
+ writer.WriteValue(timespanFormatted);
+ }
+
+ public override TimeSpan ReadJson(Newtonsoft.Json.JsonReader reader, Type objectType, TimeSpan existingValue, bool hasExistingValue, Newtonsoft.Json.JsonSerializer serializer)
+ {
+ TimeSpan parsedTimeSpan;
+ TimeSpan.TryParseExact((string)reader.Value, TimeSpanFormatString, null, out parsedTimeSpan);
+ return parsedTimeSpan;
+ }
+ }
+ public class TimeSpanConverter : System.Text.Json.Serialization.JsonConverter
+ {
+ public override TimeSpan Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+ {
+ return TimeSpan.Parse(reader.GetString());
+ }
+
+ public override void Write(Utf8JsonWriter writer, TimeSpan value, JsonSerializerOptions options)
+ {
+ writer.WriteStringValue(value.ToString());
+ }
+ }
+
///
/// 查询历史遥测数据请求结构体
///
@@ -24,7 +58,7 @@ namespace IoTSharp.Dtos
///
/// 要获取的键值, 如果为空, 则为全部
///
- public string keys { get; set; }=String.Empty;
+ public string keys { get; set; }= string.Empty;
///
/// 开始时间
///
@@ -36,6 +70,11 @@ namespace IoTSharp.Dtos
///
/// 数据截面聚合间隔
///
+ /// 1.03:14:56:166
+ /// d.hh:mm:ss:FFF
+ [Newtonsoft.Json. JsonConverter(typeof(TimespanConverterNewtonsoft))]
+ [Newtonsoft.Json.JsonProperty(TypeNameHandling = Newtonsoft.Json.TypeNameHandling.All)]
+ [System.Text.Json.Serialization.JsonConverter(typeof(TimeSpanConverter))]
public TimeSpan every { get; set; }= TimeSpan.Zero;
///
/// 数据截面计算方式,
diff --git a/IoTSharp/IoTSharp.xml b/IoTSharp/IoTSharp.xml
index a7c73ab0579bbecf16ad7f15dba331a6254fdd2a..4363454797314540d584825d8be71e644d36130a 100644
--- a/IoTSharp/IoTSharp.xml
+++ b/IoTSharp/IoTSharp.xml
@@ -701,6 +701,11 @@
是否被安装
+
+
+ Format: Days.Hours:Minutes:Seconds:Milliseconds
+
+
查询历史遥测数据请求结构体