Former-commit-id: 11ac050fb18e71245c40e95879ef0b20b8d47364
TangShanKaiPing
wanggang 6 years ago
parent 93d624160f
commit 767d365539

@ -67,7 +67,11 @@ namespace IoTCenter.Controllers
public IActionResult GetProducts(string token)
{
var userName = User.Identity.IsAuthenticated ? User.Identity.Name : this._jwtHelper.GetPayload(token)["UserName"].ToString();
var userName = this.GetUserName(token);
if (string.IsNullOrEmpty(userName))
{
return Forbid();
}
var model = new
{
Products = this._productRepo.ReadOnlyTable().Select(o => new
@ -85,7 +89,11 @@ namespace IoTCenter.Controllers
public IActionResult GetNodes(string token)
{
var userName = User.Identity.IsAuthenticated ? User.Identity.Name : this._jwtHelper.GetPayload(token)["UserName"].ToString();
var userName = this.GetUserName(token);
if (string.IsNullOrEmpty(userName))
{
return Forbid();
}
var model = this._nodeRepo.ReadOnlyTable()
.Include(o => o.Scenes)
.OrderBy(o => o.DisplayOrder)
@ -106,7 +114,11 @@ namespace IoTCenter.Controllers
public IActionResult GetNode(string token, string number)
{
var userName = User.Identity.IsAuthenticated ? User.Identity.Name : this._jwtHelper.GetPayload(token)["UserName"].ToString();
var userName = this.GetUserName(token);
if (string.IsNullOrEmpty(userName))
{
return Forbid();
}
var model = this._nodeRepo.ReadOnlyTable()
.Include(o => o.Scenes)
.Include(o => o.Devices)
@ -119,7 +131,11 @@ namespace IoTCenter.Controllers
public IActionResult GetProduct(string token, string number)
{
var userName = User.Identity.IsAuthenticated ? User.Identity.Name : this._jwtHelper.GetPayload(token)["UserName"].ToString();
var userName = this.GetUserName(token);
if (string.IsNullOrEmpty(userName))
{
return Forbid();
}
var model = this._productRepo.ReadOnlyTable()
.Include(o => o.Devices)
.ThenInclude(o => o.Data)
@ -131,7 +147,11 @@ namespace IoTCenter.Controllers
public IActionResult GetDevice(string token, string number)
{
var userName = User.Identity.IsAuthenticated ? User.Identity.Name : this._jwtHelper.GetPayload(token)["UserName"].ToString();
var userName = this.GetUserName(token);
if (string.IsNullOrEmpty(userName))
{
return Forbid();
}
var model = this._deviceRepo.ReadOnlyTable()
.Include(o => o.Data)
.Include(o => o.Product)
@ -144,7 +164,11 @@ namespace IoTCenter.Controllers
public IActionResult GetTemplate(string token, string number)
{
var userName = User.Identity.IsAuthenticated ? User.Identity.Name : this._jwtHelper.GetPayload(token)["UserName"].ToString();
var userName = this.GetUserName(token);
if (string.IsNullOrEmpty(userName))
{
return Forbid();
}
var node = _nodeRepo.ReadOnlyTable().FirstOrDefault(o => o.Number == number);
var template = string.IsNullOrEmpty(token) ? node.Template : node.MobileTemplate;
if (!string.IsNullOrEmpty(template))
@ -162,7 +186,11 @@ namespace IoTCenter.Controllers
{
try
{
var userName = User.Identity.IsAuthenticated ? User.Identity.Name : this._jwtHelper.GetPayload(token)["UserName"].ToString();
var userName = this.GetUserName(token);
if (string.IsNullOrEmpty(userName))
{
return Forbid();
}
CallApi(connectionId, number, method);
return Json(ApiResponse.AsyncSuccess());
}
@ -178,7 +206,11 @@ namespace IoTCenter.Controllers
{
try
{
var userName = User.Identity.IsAuthenticated ? User.Identity.Name : this._jwtHelper.GetPayload(token)["UserName"].ToString();
var userName = this.GetUserName(token);
if (string.IsNullOrEmpty(userName))
{
return Forbid();
}
foreach (var number in numbers)
{
this.CallApi(connectionId, number, method);
@ -197,7 +229,11 @@ namespace IoTCenter.Controllers
{
try
{
var userName = User.Identity.IsAuthenticated ? User.Identity.Name : this._jwtHelper.GetPayload(token)["UserName"].ToString();
var userName = this.GetUserName(token);
if (string.IsNullOrEmpty(userName))
{
return Forbid();
}
var command = this._commandRepo.ReadOnlyTable().Include(o => o.Device).ThenInclude(o => o.Node).FirstOrDefault(o => o.Id == id);
this._hub.ServerToClient(Methods.ExecCommand, command.Id, command.Device.Node.Number, connectionId);
return Json(ApiResponse.AsyncSuccess());
@ -214,7 +250,11 @@ namespace IoTCenter.Controllers
{
try
{
var userName = User.Identity.IsAuthenticated ? User.Identity.Name : this._jwtHelper.GetPayload(token)["UserName"].ToString();
var userName = this.GetUserName(token);
if (string.IsNullOrEmpty(userName))
{
return Forbid();
}
var scene = this._sceneRepo.ReadOnlyTable().Include(o => o.Node).FirstOrDefault(o => o.Id == id);
if (scene.NodeId != null)
{
@ -234,6 +274,11 @@ namespace IoTCenter.Controllers
{
try
{
var userName = this.GetUserName(token);
if (string.IsNullOrEmpty(userName))
{
return Forbid();
}
var commands = this._sceneCommandRepo.ReadOnlyTable()
.Include(o => o.Command).ThenInclude(o => o.Device).ThenInclude(o => o.Node)
.Where(o => o.SceneId == id)
@ -261,7 +306,11 @@ namespace IoTCenter.Controllers
public IActionResult GetChartData(string token, string number, string time)
{
var userName = User.Identity.IsAuthenticated ? User.Identity.Name : this._jwtHelper.GetPayload(token)["UserName"].ToString();
var userName = this.GetUserName(token);
if (string.IsNullOrEmpty(userName))
{
return Forbid();
}
var device = this._deviceRepo.ReadOnlyTable().Include(o => o.Data).FirstOrDefault(o => o.Number == number);
var url = this._configuration["influxdb:url"];
var usr = this._configuration["influxdb:usr"];
@ -349,7 +398,20 @@ namespace IoTCenter.Controllers
{
return Color.FromKnownColor(KnownColor.Orange).Name;
}
return Color.FromKnownColor(KnownColor.Blue).Name;
return Color.FromKnownColor(KnownColor.DarkBlue).Name;
}
private string GetUserName(string token)
{
try
{
return User.Identity.IsAuthenticated ? User.Identity.Name : this._jwtHelper.GetPayload(token)["UserName"].ToString();
}
catch (Exception ex)
{
ex.PrintStack();
return null;
}
}
/************************************************************/

@ -156,110 +156,76 @@
</div>
</div>
<div class="row">
<!--命令-->
<!--属性-->
<div class="col-md-12">
<div class="card">
<div class="card-header">
<h3 class="card-title"><img :src="iotCenter+model.Product.Image" />{{model.DisplayName}}</h3>
<div class="card-tools">命令</div>
<h3 class="card-title">{{model.Name}}</h3>
</div>
<div class="card-body" v-if="model.Commands.length>0">
<button class="btn btn-success" v-for="command in GetCommands()" v-on:click="CallCommand(command.Id)">{{command.Name}}</button>
<div class="card-body" v-if="model.Data.length>0">
<div class="row" v-for="data in GetDatas()">
<div class="col-md-3">{{data.Name}}</div>
<div class="col-md-9">{{data.Value}}{{data.Unit}}{{data.Description}}</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<!--属性-->
<div class="row" v-if="model.Commands.length">
<!--命令-->
<div class="col-md-12">
<div class="card">
<div class="card-header">
<h3 class="card-title">属性</h3>
<h3 class="card-title"><img :src="iotCenter+model.Product.Image" />{{model.DisplayName}}</h3>
<div class="card-tools">命令</div>
</div>
<div class="card-body" v-if="model.Data.length>0">
<div class="row" v-for="data in GetDatas()">
<div class="col-md-3">{{data.Name}}</div>
<div class="col-md-9">{{data.Value}}{{data.Unit}}{{data.Description}}</div>
</div>
<div class="card-body" v-if="model.Commands.length>0">
<button class="btn btn-success" v-for="command in GetCommands()" v-on:click="CallCommand(command.Id)">{{command.Name}}</button>
</div>
</div>
</div>
</div>
<template v-if="model.Product.Apis.length>0">
<!--接口-->
<template v-if="model.Name!=='调色灯'">
<div class="row">
<div class="col-md-12">
<button class="btn btn-success" v-for="api in Enumerable.from(model.Product.Apis).orderBy('o=>o.Name')" v-if="api.Parameters.length<=1">{{api.Name}}</button>
<div class="row" v-if="GetSimpleApis().length>0">
<div class="col-md-12">
<div class="card">
<div class="card-body">
<button class="btn btn-success" v-for="api in GetSimpleApis()" v-on:click="CallApi(model.Number,api.Path+api.Command)">{{api.Name}}</button>
</div>
</div>
</div>
<form class="form-horizontal" v-for="api in Enumerable.from(model.Product.Apis).orderBy('o=>o.Name')" v-if="api.Parameters.length>1">
<input type="hidden" name="Number" :value="model.Number" />
<input type="hidden" name="Method" :value="api.Method" />
<div class="form-group" v-for="item in api.Parameters" v-if="item.Name!=='number'">
<label :for="item.Name">{{item.Description}}:</label>
<template v-if="item.Type==='string'">
<input type="text" class="form-control" :name="item.Name" :value="GetDataValueByKey(item.Name)" />
</template>
<template v-else>
<input type="text" class="form-control" :name="item.Name" :value="GetDataValueByKey(item.Name)" />
</template>
</div>
<div class="row">
<div class="col-sm-12">
<button class="btn btn-success">{{api.Name}}</button>
</div>
<template v-if="model.Name!=='调色灯'">
<div class="=row" v-for="api in Enumerable.from(model.Product.Apis).orderBy('o=>o.Name')" v-if="api.Parameters.length>1">
<div class="card">
<div class="card-header">
<h3 class="card-title">{{api.Name}}</h3>
</div>
</div>
</form>
</template>
<template v-else-if="model.Name==='调色灯'">
<div class="row">
<div class="col-md-12">
<div class="card btns">
<div class="card-header">
<h3 class="card-title">
<img src="/images/light.png" />{{model.DisplayName||model.Name}}
</h3>
<div class="card-tools">
<img v-if="GetDataValue('状态')=='开'" v-on:click="CallApi(model.Number,'/ColorLight/Off')" src="/images/on.png" />
<img v-if="GetDataValue('状态')=='关'" v-on:click="CallApi(model.Number,'/ColorLight/On')" src="/images/off.png" />
<div class="card-body">
<form class="form-horizontal">
<input type="hidden" name="Number" :value="model.Number" />
<input type="hidden" name="Method" :value="api.Method" />
<div class="form-group" v-for="parameter in api.Parameters" v-if="parameter.Name!=='number'">
<div>{{model.Name}}{{api.Name}}{{parameter.Name}}</div>
<label :for="parameter.Name">{{parameter.Description}}:</label>
<template v-if="model.Name==='网关'&&api.Name==='删掉制定设备'&&parameter.Name==='设备编号'">
</template>
<template v-else>
<template v-if="parameter.Type==='string'">
<input type="text" class="form-control" :name="parameter.Name" :value="GetDataValueByKey(parameter.Name)" />
</template>
<template v-else>
<input type="text" class="form-control" :name="parameter.Name" :value="GetDataValueByKey(parameter.Name)" />
</template>
</template>
</div>
</div>
<div class="card-body">
<form method="get" action="/App/ExecApi">
<input type="hidden" name="Number" :value="model.Number" />
<input type="hidden" name="Method" value="/ColorLight/SetColor" />
<div class="row">
<div class="col-md-3 col-xs-4">
<label class="btn">色调</label>
</div>
<div class="col-md-9 col-xs-8">
<input v-on:change="AjaxSubmit($event,model.Number,'色调')" type="range" min="0" step="1" max="255" name="Hue" class="hue" :value="GetDataValue(model.Number,'色调')" />
</div>
</div>
<div class="row">
<div class="col-md-3 col-xs-4">
<label class="btn">饱和度</label>
</div>
<div class="col-md-9 col-xs-8">
<input v-on:change="AjaxSubmit($event,model.Number,'饱和度')" type="range" min="0" step="1" max="254" name="Saturation" class="saturation" :value="GetDataValue(model.Number,'饱和度')" />
</div>
<div class="row">
<div class="col-sm-12">
<button class="btn btn-success">确定</button>
</div>
</form>
<form method="get" action="/App/ExecApi">
<input type="hidden" name="Number" :value="model.Number" />
<input type="hidden" name="Method" value="/ColorLight/SetBrightness" />
<div class="row">
<div class="col-md-3 col-xs-4">
<label class="btn">亮度</label>
</div>
<div class="col-md-9 col-xs-8">
<input v-on:change="AjaxSubmit($event,model.Number,'亮度')" type="range" min="0" step="1" max="254" name="Brightness" class="brightness" :value="GetDataValue(model.Number,'亮度')" />
</div>
</div>
</form>
</div>
</div>
</form>
</div>
</div>
</div>

@ -709,7 +709,7 @@
</div>
</div>
<div class="card-body">
<canvas class="chart" style="width:60%;max-width:100%;" :id="device.Number"></canvas>
<canvas class="chart" style="max-height:100%;" :id="device.Number"></canvas>
</div>
</div>
</div>

@ -26,6 +26,27 @@ methods = {
GetDevice(nameOrNumber) {
return this.model;
},
GetDataValueByKey(key) {
var data = Enumerable.from(this.model.Data)
.where(function (o) { return o.Key.toLowerCase() === key; })
.firstOrDefault();
if (data != null) {
return data.Value;
}
return null;
},
GetSimpleApis() {
return Enumerable.from(this.model.Product.Apis).where(function (o) { return o.Parameters.length === 1; }).orderBy(function (o) { return o.Name;}).toArray();
},
GetParameter(api,name) {
return Enumerable.from(api.Parameters).where(function (o) { return o.Name == name;}).firstOrDefault();
},
CallCommand(id) {
ajax('/App/ExecCommand', { token: token, connectionId: connectionId, id: id }, 'post');
},
CallApi(number, method, query) {
ajax('/App/ExecApi', { token: token, connectionId: connectionId, number: number, method: method, query: query }, 'post');
},
};
function onMessage(method, json, to, from) {

@ -17,7 +17,7 @@ methods = {
|| this.model.Name.indexOf('插座') >= 0;
},
GetDevices() {
return Enumerable.from(this.model.Devices).orderBy('o=>o.DisplayOrder').toArray();
return Enumerable.from(this.model.Devices).orderBy('o=>o.DisplayOrder').orderBy('o=>o.Name').toArray();
},
GetDataValue(number, name) {
var device = Enumerable.from(this.model.Devices)

@ -1,87 +0,0 @@
using Application.Models;
using Infrastructure.Extensions;
using IoTNode.DeviceServices.FBee;
using Microsoft.AspNetCore.Mvc;
using Swashbuckle.AspNetCore.Annotations;
using System;
using System.ComponentModel.DataAnnotations;
namespace IoTNode.Controllers
{
[SwaggerTag("色暖灯")]
public class WarmLightController : SwitchController
{
internal readonly FBeeService _deviceService;
public WarmLightController(IServiceProvider applicationServices, FBeeService deviceService) : base(applicationServices, deviceService)
{
this._deviceService = deviceService;
}
[HttpGet, Route("/[controller]/[action]"), SwaggerOperation("")]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:不捕获常规异常类型", Justification = "<挂起>")]
public ApiResponse SetBrightness([SwaggerParameter("设备编号")]string number, [SwaggerParameter("亮度")][Range(0, 255)]int brightness)
{
if (number is null)
{
throw new ArgumentNullException(nameof(number));
}
try
{
var values = number.Split('-');
this._deviceService.X83(values[0], values[1], (byte)brightness);
}
catch (Exception ex)
{
ex.PrintStack();
return ApiResponse.Error(ex.Message);
}
return ApiResponse.AsyncSuccess();
}
[HttpGet, Route("/[controller]/[action]"), SwaggerOperation("")]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:不捕获常规异常类型", Justification = "<挂起>")]
public ApiResponse SetColor([SwaggerParameter("设备编号")]string number, [SwaggerParameter("色调")][Range(0, 255)]int hue, [SwaggerParameter("饱和度")][Range(0, 255)]int saturation)
{
if (number is null)
{
throw new ArgumentNullException(nameof(number));
}
try
{
var values = number.Split('-');
this._deviceService.X84(values[0], values[1], (byte)hue, (byte)saturation);
}
catch (Exception ex)
{
ex.PrintStack();
return ApiResponse.Error(ex.Message);
}
return ApiResponse.AsyncSuccess();
}
[HttpGet, Route("/[controller]/[action]"), SwaggerOperation("")]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:不捕获常规异常类型", Justification = "<挂起>")]
public ApiResponse SetColorTemperature([SwaggerParameter("设备编号")]string number, [SwaggerParameter("色温")][Range(2700, 6500)]int colorTemperature)
{
if (number is null)
{
throw new ArgumentNullException(nameof(number));
}
try
{
var values = number.Split('-');
this._deviceService.XA8(values[0], values[1], (ushort)colorTemperature);
}
catch (Exception ex)
{
ex.PrintStack();
return ApiResponse.Error(ex.Message);
}
return ApiResponse.AsyncSuccess();
}
}
}

@ -62,11 +62,30 @@ namespace IoTNode.DeviceServices.Onvif
Token = item.Attribute("token").Value,
Name = item.Elements().FirstOrDefault(o => o.Name.LocalName == "Name").Value
};
var condition = false;
var videoEncoderConfiguration = item.Elements().FirstOrDefault(o => o.Name.LocalName == "VideoEncoderConfiguration");
profile.Encoding = videoEncoderConfiguration.Elements().FirstOrDefault(o => o.Name.LocalName == "Encoding").Value;
var resolution = videoEncoderConfiguration.Elements().FirstOrDefault(o => o.Name.LocalName == "Resolution");
profile.Width = Convert.ToInt32(resolution.Elements().FirstOrDefault(o => o.Name.LocalName == "Width").Value);
profile.Height = Convert.ToInt32(resolution.Elements().FirstOrDefault(o => o.Name.LocalName == "Height").Value);
XElement resolution = null;
if (videoEncoderConfiguration == null)
{
condition = true;
videoEncoderConfiguration = item.Elements().FirstOrDefault(o => o.Name.LocalName == "VideoSourceConfiguration");
resolution = videoEncoderConfiguration.Elements().FirstOrDefault(o => o.Name.LocalName == "Bounds");
}
else
{
resolution = videoEncoderConfiguration.Elements().FirstOrDefault(o => o.Name.LocalName == "Resolution");
}
//profile.Encoding = videoEncoderConfiguration.Elements().FirstOrDefault(o => o.Name.LocalName == "Encoding").Value;
if (condition)
{
profile.Width = Convert.ToInt32(resolution.Attribute("width").Value);
profile.Height = Convert.ToInt32(resolution.Attribute("height").Value);
}
else
{
profile.Width = Convert.ToInt32(resolution.Elements().FirstOrDefault(o => o.Name.LocalName == "Width").Value);
profile.Height = Convert.ToInt32(resolution.Elements().FirstOrDefault(o => o.Name.LocalName == "Height").Value);
}
this.Profiles.Add(profile);
}
}

Loading…
Cancel
Save