using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json.Linq;
using HDL_ON;
namespace HDL_ON.Entity
{
///
/// 功能属性
/// 属性字段解析:attri :属性内容,value 属性的值,max 最大值 min 最小值
///
public class Trait
{
///
/// 属性内容
///
public string attri;
///
/// 属性的值
///
public List value;
///
/// 最大值
///
public int max;
///
/// 最小值
///
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();
if (trait == null || trait.Count == 0)
{
foreach (var t in trait)
{
dicPropert.TryAdd(t.attri,t.min.ToString());
}
}
}
#region base info
///
/// 功能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
///
public string sid = "00010112345678901234560101230123AABB";
///
/// A协议功能的通行
/// 如:是AC功能:特性:on_off,mode,fan,temperature
/// attri
///
public List trait = new List();
///
/// 房间ID列表
/// 该功能添加到到房间列表
///
public List roomIdList = new List();
///
/// bus协议数据格式
/// 使用A协议控制时,改属性为空
///
public BusData bus_Data;
#endregion
///
/// 功能附带的属性与值的列表
///
public Dictionary dicPropert;
///
/// 功能类别
/// 如:空调类、灯光类、窗帘类
///
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));
}
}
///
/// 备注
///
public string name;
///
/// A协议厂商代码
///
public string vendor_code
{
get
{
string vendorCode = "HDL";
var code = sid.Substring(0, 4);
if (code == "0001")
vendorCode = "HDL";
return vendorCode;
}
}
///
/// 最后控制的一次状态
///
public string lastState = "";
///
/// 开关状态
/// 0:关
/// 1:开
///
[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());
}
}
}
///
/// 是否收藏
///
public bool collection = false;
///
/// 使用次数
///
public double usageCount = 0;
///
/// 使用频率
///
public double usageFrequency {
get
{
return usageCount / 7;
}
}
///
/// 固定的序号
///
public int fixedSerialNumber = int.MaxValue;
///
/// A协议数据
///
public List PropertyArray
{
get
{
try
{
if (trait == null)
return new List();
var proArr = new List();
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();
}
}
}
///
/// 获取A协议控制字符串
///
/// 控制命令:write,read
///
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;
}
///
/// 获取设备添加到房间的房间名称
///
///
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;
}
///
/// 更新时间
///
public DateTime refreshTime = DateTime.MinValue;
}
}