using System;
|
using System.Collections.Generic;
|
using Shared;
|
|
namespace HDL_ON.UI.UI2.Intelligence.Automation
|
{
|
|
public class LogicMethod
|
{
|
/// <summary>
|
/// 表示是条件
|
/// </summary>
|
public const string condition_if = "条件";
|
/// <summary>
|
/// 表示是目标
|
/// </summary>
|
public const string target_if = "目标";
|
/// <summary>
|
/// 移除所有"Logic"界面
|
/// </summary>
|
public static void RemoveAllView()
|
{
|
MainPage.BasePageView.RemoveViewByTag("Logic");
|
}
|
|
/// <summary> Converts an array of bytes into a formatted string of hex digits (ex: E4 CA B2)</summary>
|
/// <param name="data"> The array of bytes to be translated into a string of hex digits. </param>
|
/// <returns> Returns a well formatted string of hex digits with spacing. </returns>
|
static string byteArrayToHexString(byte[] data)
|
{
|
System.Text.StringBuilder sb = new System.Text.StringBuilder();
|
foreach (byte b in data)
|
{
|
sb.Append(Convert.ToString(b, 16).PadLeft(2, '0'));
|
}
|
|
return sb.ToString().ToUpper();
|
}
|
|
/**
|
* int转byte[]
|
* 该方法将一个int类型的数据转换为byte[]形式,因为int为32bit,而byte为8bit所以在进行类型转换时,知会获取低8位,
|
* 丢弃高24位。通过位移的方式,将32bit的数据转换成4个8bit的数据。注意 &0xff,在这当中,&0xff简单理解为一把剪刀,
|
* 将想要获取的8位数据截取出来。
|
* @param i 一个int数字
|
* @return byte[]
|
*/
|
public static byte[] int2ByteArray(int i)
|
{
|
byte[] result = new byte[4];
|
result[0] = (byte)((i >> 24) & 0xFF);
|
result[1] = (byte)((i >> 16) & 0xFF);
|
result[2] = (byte)((i >> 8) & 0xFF);
|
result[3] = (byte)(i & 0xFF);
|
return result;
|
}
|
/// <summary>
|
/// 获取时间戳
|
/// </summary>
|
/// <returns></returns>
|
static int getTimeStamp()
|
{
|
TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
|
return (int)ts.TotalSeconds;
|
}
|
/// <summary>
|
/// 生成逻辑sid方法
|
/// </summary>
|
public static string NewSid()
|
{
|
string logicId = "";
|
try
|
{
|
string sOidBeginsWith = "000101";//厂商 + 通讯方式
|
DateTime dt = DateTime.Now;
|
DateTime startTime = TimeZoneInfo.ConvertTimeToUtc(new DateTime(2020, 1, 1));
|
long m = (long)((dt - startTime).TotalMilliseconds / 10);
|
string sTimeSpan = byteArrayToHexString(int2ByteArray(getTimeStamp()));
|
|
|
|
logicId = sOidBeginsWith + sTimeSpan;
|
|
logicId += "15";
|
logicId += "1501";
|
//1501 物模型为逻辑, 0001 表示 1 号逻辑功能
|
int maxId = 1;
|
|
|
for (int i = 0; i < Logic.LogicList.Count; i++)
|
{
|
string s = Logic.LogicList[i].sid.Substring(20, 4);
|
int iThisSceneId = Convert.ToInt16(s, 16);
|
if (iThisSceneId > maxId)
|
maxId = iThisSceneId;
|
}
|
|
logicId += (maxId + 1).ToString("X4");//逻辑号 两个byte
|
logicId += "0000";
|
}
|
catch
|
{
|
return logicId;
|
}
|
return logicId;
|
}
|
|
/// <summary>
|
/// 封装Dictionary对象
|
/// </summary>
|
/// <param name="dic">Dictionary类</param>
|
/// <param name="key">健</param>
|
/// <param name="value">值</param>
|
public static void dictionary(Dictionary<string, string> dic, string key, string value)
|
{
|
if (dic.ContainsKey(key)) //判断是否存在键值
|
{
|
//键存在移除
|
dic.Remove(key);
|
}
|
//添加键值
|
dic.Add(key, value);
|
}
|
/// <summary>
|
/// 获取网关房间列表
|
/// </summary>
|
/// <returns></returns>
|
public static List<HDL_ON.Entity.Room> GetGatewayRoomList()
|
{
|
return HDL_ON.Entity.SpatialInfo.CurrentSpatial.RoomList;
|
}
|
/// <summary>
|
/// 获取网关房间列表
|
/// </summary>
|
/// <returns></returns>
|
public static List<HDL_ON.Entity.Room> GetGatewayRoomList(string name)
|
{
|
|
List<Entity.Room> roomList = new List<Entity.Room>();
|
Entity.Room room1 = new Entity.Room();
|
room1.roomName = name;//默认一个房间名为:全部区域
|
room1.uid = "全部区域";//默认sid用识别该房间
|
roomList.Add(room1);//默认添加到房间列表里
|
var roomLists = GetGatewayRoomList();
|
foreach (var room in roomLists)
|
{
|
roomList.Add(room);
|
}
|
|
return roomList;
|
}
|
/// <summary>
|
/// 获取网关设备列表
|
/// </summary>
|
/// <returns></returns>
|
public static List<HDL_ON.Entity.Function> GetGatewayDeviceList()
|
{
|
return Entity.FunctionList.List.GetDeviceFunctionList();
|
}
|
/// <summary>
|
/// 获取网关场景列表
|
/// </summary>
|
/// <returns></returns>
|
public static List<HDL_ON.Entity.Scene> GetSceneList()
|
{
|
return HDL_ON.Entity.FunctionList.List.scenes;
|
}
|
/// <summary>
|
/// 获取房间的设备列表
|
/// </summary>
|
/// <param name="room">当前房间</param>
|
/// <returns></returns>
|
public static List<HDL_ON.Entity.Function> GetRoomDevice(HDL_ON.Entity.Room room)
|
{
|
List<HDL_ON.Entity.Function> deviceLists = new List<Entity.Function>();
|
List<HDL_ON.Entity.Function> lists = GetGatewayDeviceList();
|
foreach (var dev in lists)
|
{
|
if (dev.roomIds.Find((id) => id == room.uid) != null)
|
{
|
deviceLists.Add(dev);
|
}
|
if (room.uid == "全部区域")
|
{
|
//房间名为全部区域时,显示网关全部设备
|
deviceLists = lists;
|
}
|
|
}
|
return deviceLists;
|
}
|
/// <summary>
|
/// 获取当个设备
|
/// </summary>
|
/// <param name="sid">设备唯一标识</param>
|
/// <returns></returns>
|
public static HDL_ON.Entity.Function GetDevice(string sid)
|
{
|
HDL_ON.Entity.Function device = new Entity.Function() { name = "Unknown" };
|
List<HDL_ON.Entity.Function> deviceLists = GetGatewayDeviceList();
|
foreach (var dev in deviceLists)
|
{
|
if (dev.sid == sid)
|
{
|
device = dev;
|
break;
|
}
|
}
|
return device;
|
}
|
|
/// <summary>
|
/// 获取当个场景
|
/// </summary>
|
/// <param name="sid">场景唯一标识</param>
|
/// <returns></returns>
|
public static HDL_ON.Entity.Scene GetSecne(string sid)
|
{
|
HDL_ON.Entity.Scene scene = new Entity.Scene() { name = "Unknown" };
|
List<HDL_ON.Entity.Scene> sceneLists = GetSceneList();
|
foreach (var sce in sceneLists)
|
{
|
if (sce.sid == sid)
|
{
|
scene = sce;
|
break;
|
}
|
}
|
return scene;
|
}
|
/// <summary>
|
/// 获取房间名(即是=区域名称)
|
/// </summary>
|
/// <param name="device">设备</param>
|
/// <returns></returns>
|
public static string GetGetRoomName(HDL_ON.Entity.Function device)
|
{
|
string roomName = "";
|
List<HDL_ON.Entity.Room> roomLists = GetGatewayRoomList();
|
|
foreach (var dev in device.roomIds)
|
{
|
var room = roomLists.Find((c) => c.uid == dev);
|
if (room != null)
|
{
|
roomName += room.floorName + "." + room.roomName + ",";
|
}
|
}
|
|
return roomName.TrimEnd(',');
|
}
|
/// <summary>
|
/// 获取设备类型图标
|
/// </summary>
|
/// <param name="functionType">设备类型</param>
|
/// <returns></returns>
|
public static string GetIconPath(FunctionType functionType)
|
{
|
string strPath = "";
|
switch (functionType)
|
{
|
case FunctionType.Relay:
|
case FunctionType.RGB:
|
case FunctionType.RGBW:
|
case FunctionType.ColorTemperature:
|
case FunctionType.Dimmer:
|
{
|
strPath = "LogicIcon/lightloguc.png";
|
}
|
break;
|
case FunctionType.Curtain:
|
case FunctionType.RollingShutter:
|
case FunctionType.MotorCurtain:
|
{
|
strPath = "LogicIcon/curtainlogic.png";
|
}
|
break;
|
case FunctionType.AC:
|
{
|
strPath = "LogicIcon/airconditionerlogic.png";
|
}
|
break;
|
case FunctionType.FloorHeating:
|
{
|
strPath = "LogicIcon/heatlogic.png";
|
}
|
break;
|
|
}
|
return strPath;
|
}
|
/// <summary>
|
/// 设备类型的列表(灯光类,窗帘类。。。)
|
/// </summary>
|
/// <param name="deviceList">设备列表</param>
|
/// <returns></returns>
|
public static List<string> GetDeviceTypeList(List<HDL_ON.Entity.Function> deviceList)
|
{
|
List<string> deviceStrTypeList = new List<string>();
|
deviceStrTypeList.Clear();
|
var lightjosn = deviceList.Find((device) => device.functionType == FunctionType.Relay || device.functionType == FunctionType.Dimmer || device.functionType == FunctionType.ColorTemperature || device.functionType == FunctionType.RGB || device.functionType == FunctionType.RGBW);
|
if (lightjosn != null)
|
{
|
deviceStrTypeList.Add(Language.StringByID(StringId.Lights));
|
}
|
|
var curtainjosn = deviceList.Find((device) => device.functionType == FunctionType.Curtain || device.functionType == FunctionType.MotorCurtain || device.functionType == FunctionType.RollingShutter);
|
if (curtainjosn != null)
|
{
|
deviceStrTypeList.Add(Language.StringByID(StringId.Curtain));
|
}
|
|
var ac = deviceList.Find((device) => device.functionType == FunctionType.AC);
|
if (ac != null)
|
{
|
deviceStrTypeList.Add(Language.StringByID(StringId.AC));
|
}
|
var floorHeating = deviceList.Find((device) => device.functionType == FunctionType.FloorHeating);
|
if (floorHeating != null)
|
{
|
deviceStrTypeList.Add(Language.StringByID(StringId.FloorHeating));
|
}
|
return deviceStrTypeList;
|
|
}
|
/// <summary>
|
/// 设备类型FunctionType列表
|
/// </summary>
|
/// <param name="deviceType">设备类型(灯光类,窗帘类。)</param>
|
/// <returns></returns>
|
public static List<FunctionType> GetDeviceTypeFunctionList(string deviceType)
|
{
|
List<FunctionType> functionTypeList = new List<FunctionType>();
|
if (deviceType == Language.StringByID(StringId.Lights))
|
{
|
functionTypeList.Add(FunctionType.Relay);
|
functionTypeList.Add(FunctionType.Dimmer);
|
functionTypeList.Add(FunctionType.RGB);
|
functionTypeList.Add(FunctionType.RGBW);
|
functionTypeList.Add(FunctionType.ColorTemperature);
|
}
|
else if (deviceType == Language.StringByID(StringId.Curtain))
|
{
|
functionTypeList.Add(FunctionType.Curtain);
|
functionTypeList.Add(FunctionType.RollingShutter);
|
functionTypeList.Add(FunctionType.MotorCurtain);
|
}
|
else if (deviceType == Language.StringByID(StringId.AC))
|
{
|
functionTypeList.Add(FunctionType.AC);
|
}
|
else if (deviceType == Language.StringByID(StringId.FloorHeating))
|
{
|
functionTypeList.Add(FunctionType.FloorHeating);
|
}
|
return functionTypeList;
|
|
}
|
/// <summary>
|
/// 条件/目标支持设备
|
/// </summary>
|
/// <returns></returns>
|
public static List<FunctionType> GetSupportEquipment(string if_type)
|
{
|
List<FunctionType> deviceTypeList = new List<FunctionType>();
|
switch (if_type)
|
{
|
case condition_if:
|
{
|
deviceTypeList.Add(FunctionType.Relay);
|
deviceTypeList.Add(FunctionType.RGB);
|
deviceTypeList.Add(FunctionType.RGBW);
|
deviceTypeList.Add(FunctionType.Dimmer);
|
deviceTypeList.Add(FunctionType.ColorTemperature);
|
deviceTypeList.Add(FunctionType.Curtain);
|
deviceTypeList.Add(FunctionType.RollingShutter);
|
deviceTypeList.Add(FunctionType.MotorCurtain);
|
deviceTypeList.Add(FunctionType.AC);
|
deviceTypeList.Add(FunctionType.FloorHeating);
|
}
|
break;
|
case target_if:
|
{
|
deviceTypeList.Add(FunctionType.Relay);
|
deviceTypeList.Add(FunctionType.RGB);
|
deviceTypeList.Add(FunctionType.RGBW);
|
deviceTypeList.Add(FunctionType.Dimmer);
|
deviceTypeList.Add(FunctionType.ColorTemperature);
|
deviceTypeList.Add(FunctionType.Curtain);
|
deviceTypeList.Add(FunctionType.RollingShutter);
|
deviceTypeList.Add(FunctionType.MotorCurtain);
|
deviceTypeList.Add(FunctionType.AC);
|
deviceTypeList.Add(FunctionType.FloorHeating);
|
}
|
break;
|
}
|
return deviceTypeList;
|
}
|
/// <summary>
|
/// 显示的设备列表
|
/// </summary>
|
/// <param name="functionType">源数据列表1</param>
|
/// <param name="deviceList">源数据列表2</param>
|
/// <returns></returns>
|
public static List<Entity.Function> GetShowDeviceList(List<FunctionType> functionType, List<HDL_ON.Entity.Function> deviceList)
|
{
|
List<HDL_ON.Entity.Function> devList = new List<Entity.Function>();
|
foreach (var dev in deviceList)
|
{
|
if (functionType.Contains(dev.functionType))
|
{
|
///过滤掉不需要显示的设备
|
devList.Add(dev);
|
}
|
}
|
return devList;
|
}
|
/// <summary>
|
/// 返回最终支持显示出来的设备列表
|
/// </summary>
|
/// <param name="room">当前房间</param>
|
/// <param name="str">判断符(表示=输入设备和输出设备)</param>
|
/// <returns></returns>
|
public static List<Entity.Function> GetFunctionDeviceList(Entity.Room room, string str)
|
{
|
List<FunctionType> functionTypeList = GetSupportEquipment(str);
|
//返回房间设备列表
|
var roomDeviceList = GetRoomDevice(room);
|
//返回最终支持显示出来的设备列表
|
var list = GetShowDeviceList(functionTypeList, roomDeviceList);
|
return list;
|
}
|
}
|
}
|