using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using Newtonsoft.Json.Linq;
|
using HDL_ON;
|
|
namespace HDL_ON.Entity
|
{
|
/// <summary>
|
/// 功能属性
|
/// 属性字段解析:attri :属性内容,value 属性的值,max 最大值 min 最小值
|
/// </summary>
|
public class Trait
|
{
|
/// <summary>
|
/// 属性内容
|
/// </summary>
|
public string attri;
|
/// <summary>
|
/// 属性的值
|
/// </summary>
|
public List<string> value;
|
/// <summary>
|
/// 最大值
|
/// </summary>
|
public int max;
|
/// <summary>
|
/// 最小值
|
/// </summary>
|
public int min;
|
|
/// <summary>
|
/// 当前值
|
/// app软件自定义属性
|
/// 用来记录当前状态
|
/// </summary>
|
public object curValues;
|
}
|
|
public class Function
|
{
|
/*
|
HDL统一协议格式:16bytes
|
厂商代号:2bytes
|
通讯方式:有线/无线/ZIGBEE等1bytes
|
产品识别码:以添加设备的年月日时分秒 + 随机数 8bytes Category
|
功能类别:1bytes
|
数据表索引地址:2bytes
|
回路:2bytes
|
举例: 0001-00-2019101209001234-01-0001-0001
|
0001-01-14051D0A300C92C9-02-0202-0001-0001
|
*/
|
public Function()
|
{
|
//dicPropert = new Dictionary<string, string>();
|
//if (propertList == null || propertList.Count == 0)
|
//{
|
// foreach (var t in propertList)
|
// {
|
// dicPropert.TryAdd(t.attri,t.min.ToString());
|
// }
|
//}
|
}
|
#region base info
|
/// <summary>
|
/// 功能ID
|
/// 厂商代码 2bytes; 01 HDL
|
/// 通讯方式 1byte ; 01 HDL Bus; 02 Zigbee;03 KNX;04 Z-Wave
|
/// 产品GUID 8bytes
|
/// 产品类别 1byte ; 01 调光器;02继电器;03干接点模块;04传感器;05面板
|
/// 物模型类型2bytes 01 开关类 --01开关;02插座
|
/// 02 照明 --01开关类;02调光类;03色温;04LED
|
/// 03 遮阳 --01窗帘电机;02百叶窗;03开合帘;04卷帘
|
/// 04 恒温器 --01空调;02地暖;03毛细空调
|
/// 05 新风
|
/// 06 影音
|
/// 07 音乐
|
/// 08 能源
|
/// 09 安防
|
/// 通道号 2bytes
|
/// Key_id 2bytes
|
/// </summary>
|
public string sid = "00010112345678901234560101230123AABB";
|
|
/// <summary>
|
/// A协议功能的特性
|
/// 如:是AC功能:特性:on_off,mode,fan,temperature
|
/// attri
|
/// </summary>
|
public List<Trait> function = new List<Trait>();
|
|
/// <summary>
|
/// 房间ID列表
|
/// 该功能添加到到房间列表
|
/// </summary>
|
public List<string> roomIdList = new List<string>();
|
|
/// <summary>
|
/// bus协议数据格式
|
/// 使用A协议控制时,改属性为空
|
/// </summary>
|
public BusData bus_Data;
|
#endregion
|
|
|
///// <summary>
|
///// 功能附带的属性与值的列表
|
///// </summary>
|
//public Dictionary<string, string> dicPropert;
|
|
/// <summary>
|
/// 功能类别
|
/// 如:空调类、灯光类、窗帘类
|
/// </summary>
|
public FunctionCategory functionCategory
|
{
|
get
|
{
|
try
|
{
|
var _functionCategoryString = sid.Substring(24, 2);
|
var _functionCategory = Convert.ToInt32(_functionCategoryString, 16);
|
return (FunctionCategory)Enum.ToObject(typeof(FunctionCategory), _functionCategory);
|
}
|
catch (Exception ex)
|
{
|
MainPage.Log($"get FunctionCategory error : {ex.Message}");
|
return FunctionCategory.UnKown;
|
}
|
}
|
}
|
|
public FunctionType functionType
|
{
|
get
|
{
|
var _functionTypeString = sid.Substring(24, 4);
|
return (FunctionType)Enum.ToObject(typeof(FunctionType), Convert.ToInt32(_functionTypeString, 16));
|
}
|
}
|
|
/// <summary>
|
/// 备注
|
/// </summary>
|
public string name;
|
/// <summary>
|
/// A协议厂商代码
|
/// </summary>
|
public string vendor_code
|
{
|
get
|
{
|
string vendorCode = "HDL";
|
var code = sid.Substring(0, 4);
|
if (code == "0001")
|
vendorCode = "HDL";
|
return vendorCode;
|
}
|
}
|
|
/// <summary>
|
/// 最后控制的一次状态
|
/// </summary>
|
public string lastState = "";
|
|
[Newtonsoft.Json.JsonIgnore]
|
public Trait trait_on_off;
|
/// <summary>
|
/// 开关状态
|
/// 0:关
|
/// 1:开
|
/// </summary>
|
[Newtonsoft.Json.JsonIgnore]
|
public string on_off
|
{
|
get
|
{
|
try
|
{
|
if (trait_on_off == null)
|
{
|
trait_on_off = function.Find((obj) => obj.attri == "on_off");
|
//找不到属性需要声明一个,防止报错闪退
|
if (trait_on_off == null)
|
{
|
trait_on_off = new Trait()
|
{
|
attri = "on_off",
|
value = new List<string> { "on", "off" },
|
max = 1,
|
min = 0,
|
};
|
}
|
trait_on_off.curValues = trait_on_off.value[trait_on_off.min];
|
}
|
return trait_on_off.curValues.ToString();
|
}
|
catch
|
{
|
MainPage.Log("on_off 数据获取失败.");
|
function.Add( new Trait()
|
{
|
attri = "on_off",
|
value = new List<string> { "on", "off" },
|
max = 1,
|
min = 0,
|
});
|
return "off";
|
}
|
}
|
set
|
{
|
try
|
{
|
if (trait_on_off == null)
|
{
|
trait_on_off = function.Find((obj) => obj.attri == "on_off");
|
//找不到属性需要声明一个,防止报错闪退
|
if (trait_on_off == null)
|
{
|
trait_on_off = new Trait()
|
{
|
attri = "on_off",
|
value = new List<string> { "on", "off" },
|
max = 1,
|
min = 0,
|
};
|
}
|
trait_on_off.curValues = trait_on_off.min;
|
}
|
trait_on_off.curValues = value;
|
}
|
catch (Exception ex)
|
{
|
MainPage.Log($"on_off 数据刷新失败: {ex.Message}");
|
function.Add(new Trait()
|
{
|
attri = "on_off",
|
value = new List<string> { "on", "off" },
|
max = 1,
|
min = 0,
|
});
|
}
|
}
|
}
|
|
/// <summary>
|
/// 是否收藏
|
/// </summary>
|
public bool collection = false;
|
|
/// <summary>
|
/// 使用次数
|
/// </summary>
|
public double usageCount = 0;
|
/// <summary>
|
/// 使用频率
|
/// </summary>
|
public double usageFrequency {
|
get
|
{
|
return usageCount / 7;
|
}
|
}
|
/// <summary>
|
/// 固定的序号
|
/// </summary>
|
public int fixedSerialNumber = int.MaxValue;
|
|
/// <summary>
|
/// 获取A协议控制字符串
|
/// </summary>
|
/// <param name="command">控制命令:write,read</param>
|
/// <returns></returns>
|
public virtual JObject GetSendJObject(CommandType_A command)
|
{
|
var sendJob = new JObject { { "vendor_code", vendor_code }, { "Command", command.ToString() }, { "Type", "device" }, };
|
var data = new JObject { { "sid", sid } };
|
sendJob.Add("objects", data);
|
return sendJob;
|
}
|
|
public string GetBusId ()
|
{
|
string busId = "";
|
if (bus_Data != null)
|
{
|
busId = bus_Data.SubnetID + "_" + bus_Data.DeviceID + "_" + bus_Data.LoopID;
|
}
|
return busId;
|
}
|
|
/// <summary>
|
/// 获取设备添加到房间的房间名称
|
/// </summary>
|
/// <returns></returns>
|
public string GetRoomListName()
|
{
|
string roomNameList = "";
|
foreach(var roomId in roomIdList)
|
{
|
var findRoom = DB_ResidenceData.residenceData.rooms.Find(obj => obj.sid == roomId);
|
if (findRoom == null)
|
continue;
|
if(roomNameList != "")
|
{
|
roomNameList += ",";
|
}
|
roomNameList += findRoom.floor + "·" + findRoom.name;
|
}
|
return roomNameList;
|
}
|
|
|
/// <summary>
|
/// 更新时间
|
/// </summary>
|
public DateTime refreshTime = DateTime.MinValue;
|
}
|
}
|