diff --git a/IoTSharp/Controllers/DevicesController.cs b/IoTSharp/Controllers/DevicesController.cs index b93e77f292bb252256ea676d8ee3f8f1319e25c3..a9dbad66a2f2ec8181e91bfa1fcde5be05de27ba 100644 --- a/IoTSharp/Controllers/DevicesController.cs +++ b/IoTSharp/Controllers/DevicesController.cs @@ -106,6 +106,61 @@ namespace IoTSharp.Controllers } return await devid.FirstOrDefaultAsync(); } + + /// + /// Request telemetry values from the server + /// + /// + /// + [Authorize(Roles = nameof(UserRole.NormalUser))] + [HttpGet("{deviceId}/TelemetryLatest/{keyName}")] + public async Task> GetTelemetryLatest(Guid deviceId,string keyName) + { + var dev = _context.Device.Find(deviceId); + if (dev == null) + { + return NotFound(new ApiResult(ApiCode.NotFoundDeviceIdentity, $"Device's Identity not found ")); + } + else + { + var kv = from t in _context.TelemetryLatest where t.Device == dev && t.KeyName == keyName select t; + var kxv = await kv.FirstOrDefaultAsync(); + object obj = null; + if (kxv!=null) + { + switch (kxv.Type) + { + case DataType.Boolean: + obj = kxv.Value_Boolean; + break; + case DataType.String: + obj = kxv.Value_String; + break; + case DataType.Long: + obj = kxv.Value_Long; + break; + case DataType.Double: + obj = kxv.Value_Double; + break; + case DataType.Json: + obj = kxv.Value_Json; + break; + case DataType.XML: + obj = kxv.Value_XML; + break; + case DataType.Binary: + obj = kxv.Value_Binary; + break; + case DataType.DateTime: + obj = kxv.DateTime; + break; + default: + break; + } + } + return obj; + } + } /// /// Get a device's detail