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;
|
}
|
|
public class Function
|
{
|
/*
|
HDL统一协议格式:16bytes
|
厂商代号:2bytes
|
通讯方式:有线/无线/ZIGBEE等1bytes
|
产品识别码:以添加设备的年月日时分秒 + 随机数 8bytes Category
|
功能类别:1bytes
|
数据表索引地址:2bytes
|
回路:2bytes
|
举例: 0001-00-2019101209001234-01-0001-0001
|
*/
|
public Function()
|
{
|
dicPropert = new Dictionary<string, string>();
|
if (trait == null || trait.Count == 0)
|
{
|
foreach (var t in trait)
|
{
|
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> trait = 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);
|
return (FunctionCategory)Enum.ToObject(typeof(FunctionCategory), Convert.ToInt32(_functionCategoryString));
|
}
|
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 = "";
|
|
|
/// <summary>
|
/// 开关状态
|
/// 0:关
|
/// 1:开
|
/// </summary>
|
[Newtonsoft.Json.JsonIgnore]
|
public string on_off
|
{
|
get
|
{
|
try
|
{
|
string o = "off";
|
dicPropert.TryGetValue("on_off", out o);
|
return o == "" ? "off" : o;
|
}
|
catch
|
{
|
MainPage.Log("on_off 数据获取失败.");
|
dicPropert.TryAdd("on_off", "0");
|
return "off";
|
}
|
}
|
set
|
{
|
try
|
{
|
dicPropert["on_off"] = value.ToString();
|
}
|
catch
|
{
|
MainPage.Log("on_off 数据刷新失败.");
|
dicPropert.TryAdd("on_off", value.ToString());
|
}
|
}
|
}
|
|
/// <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>
|
public List<string> PropertyArray
|
{
|
get
|
{
|
try
|
{
|
if (trait == null)
|
return new List<string>();
|
var proArr = new List<string>();
|
foreach (var pro in trait)
|
{
|
if (!dicPropert.ContainsKey(pro.attri))
|
{
|
dicPropert.TryAdd(pro.attri, "0");
|
}
|
if (!proArr.Contains(pro.attri))
|
{
|
proArr.Add(pro.attri);
|
}
|
}
|
return proArr;
|
}
|
catch (Exception ex)
|
{
|
MainPage.Log($"Get PropertyArray error : {ex.Message}");
|
return new List<string>();
|
}
|
}
|
}
|
|
/// <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(roomNameList != "")
|
{
|
roomNameList += ",";
|
}
|
roomNameList += findRoom.floor + "·" + findRoom.name;
|
}
|
return roomNameList;
|
}
|
|
|
/// <summary>
|
/// 更新时间
|
/// </summary>
|
public DateTime refreshTime = DateTime.MinValue;
|
}
|
}
|