From 34e965100d635346e2d4cd6e6013bdaed66b3004 Mon Sep 17 00:00:00 2001
From: gxc <guoxuecheng@guoxuechengdeMacBook-Pro.local>
Date: 星期四, 02 一月 2020 19:52:13 +0800
Subject: [PATCH] 2019.1.2-3
---
ZigbeeApp/Shared/Phone/ZigBee/Device/IASZone.cs | 329 ++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 300 insertions(+), 29 deletions(-)
diff --git a/ZigbeeApp/Shared/Phone/ZigBee/Device/IASZone.cs b/ZigbeeApp/Shared/Phone/ZigBee/Device/IASZone.cs
index 97b37d5..a299727 100755
--- a/ZigbeeApp/Shared/Phone/ZigBee/Device/IASZone.cs
+++ b/ZigbeeApp/Shared/Phone/ZigBee/Device/IASZone.cs
@@ -17,6 +17,11 @@
/// </summary>
public int LightLevelCount = -1;
+ /// <summary>
+ /// 褰撳墠Lux鍊�
+ /// </summary>
+ public int PirLux = -1;
+
#region IAS瀹夐槻淇℃伅涓婃姤.
/// <summary>
/// IAS瀹夐槻淇℃伅涓婃姤
@@ -383,9 +388,9 @@
public class ConfigureParamates
{
/// <summary>
- ///浜害锛堝厜鐓у害锛変娇鑳�
- ///<para> false:涓嶄娇鑳�</para>
- /// <para>true:浣胯兘</para>
+ /// 浜害锛堝厜鐓у害锛変娇鑳�
+ /// <para> false锛�0锛�:涓嶄娇鑳�</para>
+ /// <para>true锛�1锛�:浣胯兘</para>
/// </summary>
public bool levelEnable;
/// <summary>
@@ -395,8 +400,8 @@
public int levelSize = -1;
/// <summary>
///鎺у埗璁惧浣胯兘浣�
- ///<para> false:涓嶄娇鑳�</para>
- /// <para>true:浣胯兘</para>
+ ///<para> false锛�0锛�:涓嶄娇鑳�</para>
+ /// <para>true锛�1锛�:浣胯兘</para>
/// </summary>
public bool controlDevEnable;
/// <summary>
@@ -404,7 +409,38 @@
/// <para>0-65535 鍗曚綅绉�</para>
/// </summary>
public int transitionTime;
-
+ /// <summary>
+ /// IAS涓婃姤鍛ㄦ湡
+ /// <para>10-0xffff 绉�</para>
+ /// </summary>
+ public int iasReportPeriod;
+ /// <summary>
+ /// 鍏夌収搴︾瓑绾�
+ /// <para>0锛氬崐鑷姩妯″紡</para>
+ /// <para>1锛氳嚜鍔ㄦā寮�</para>
+ /// </summary>
+ public int mode = 0;
+ /// <summary>
+ /// 寮�鐏被鍨�
+ /// <para>鍊硷細0锛氳皟鍏�</para>
+ ///<para>1锛氬紑鍏� </para>
+ /// </summary>
+ public int type = 0;
+ /// <summary>
+ /// 璋冨厜妯″紡锛屽埌杈惧紑鐏寒搴︾殑鏃堕棿
+ /// <para>鍊硷細0-10 绉�</para>
+ /// </summary>
+ public int dimmerOnTime = 0;
+ /// <summary>
+ /// 璋冨厜妯″紡锛屽叧鐏埌杈�0%鎵�闇�瑕佺殑鏃堕棿
+ /// <para>鍊硷細0-10 绉�</para>
+ /// </summary>
+ public int dimmerOffTime = 0;
+ /// <summary>
+ /// 璋冨厜妯″紡寮�鐏殑浜害
+ /// <para>0-0xff 锛堥鐣欙級</para>
+ /// </summary>
+ public int dimmerLevel = 0;
}
/// <summary>
@@ -414,19 +450,26 @@
string SetPIRSensorData(ConfigureParamates configureParamates)
{
string data = "";
- string dataLength = "09";
+ string dataLength = "10";
string dataComand1 = "00";
string dataComand2 = "03";
string dataSerialNum = "01";
- string addDataLength = "05";
+ string addDataLength = "0C";
string levelEnable = "";
string levelSize = "";
string controlDevEnable = "";
string transitionTime = "";
+ string iasReportPeriod = "";
+ string mode = "";
+ string type = "";
+ string dimmerOnTime = "";
+ string dimmerOffTime = "";
+ string dimmerLevel = "";
try
{
if (configureParamates != null)
{
+ //levelEnable
if (configureParamates.levelEnable)
{
levelEnable = "01";
@@ -438,13 +481,14 @@
//鍏夌収绛夌骇
if (configureParamates.levelSize > 0)
{
- levelSize = configureParamates.levelSize.ToString().PadLeft(2, '0');
+ var tempLevelEnable = Convert.ToString(configureParamates.levelSize, 16);
+ levelSize = tempLevelEnable.ToString().PadLeft(2, '0');
}
else
{
levelSize = "00";
}
-
+ //controlDevEnable
if (configureParamates.controlDevEnable)
{
controlDevEnable = "01";
@@ -453,27 +497,102 @@
{
controlDevEnable = "00";
}
+ //transitionTime,iasReportPeriod
+ for (int j = 0; j < 2; j++)
+ {
+ var tempBytes = new byte[2];
+ if (j == 0)
+ {
+ for (int i = 0; i < 2; i++)
+ {
+ tempBytes[i] = (byte)(configureParamates.transitionTime >> (i * 8) & 0xff);
+ }
+ }
+ else
+ {
+ for (int i = 0; i < 2; i++)
+ {
+ tempBytes[i] = (byte)(configureParamates.iasReportPeriod >> (i * 8) & 0xff);
+ }
+ }
+ var time1 = Convert.ToString(tempBytes[0], 16);
+ var time2 = Convert.ToString(tempBytes[1], 16);
+ if (time1.Length == 1)
+ {
+ time1 = "0" + time1;
+ }
+ if (time2.Length == 1)
+ {
+ time2 = "0" + time2;
+ }
+ if (j == 0)
+ {
+ transitionTime = (time1 + time2).ToUpper();
- var tempBytes = new byte[2];
- for (int i = 0; i < 2; i++)
- {
- tempBytes[i] = (byte)(configureParamates.transitionTime >> (i * 8) & 0xff);
- }
- var time1 = Convert.ToString(tempBytes[0], 16);
- var time2 = Convert.ToString(tempBytes[1], 16);
- if (time1.Length == 1)
- {
- time1 = "0" + time1;
+ }
+ else
+ {
+ iasReportPeriod = (time1 + time2).ToUpper();
+ }
}
- if (time2.Length == 1)
+ //mode
+ if (configureParamates.mode == 1)
{
- time2 = "0" + time2;
+ mode = "01";
}
- transitionTime = (time1 + time2).ToUpper();
- }
+ else
+ {
+ mode = "00";
+ }
+ //type
+ if (configureParamates.type == 1)
+ {
+ type = "01";
+ }
+ else
+ {
+ type = "00";
+ }
+ //dimmerOnTime
+ if (configureParamates.dimmerOnTime > 0)
+ {
+ var tempDimmerOnTime = Convert.ToString(configureParamates.dimmerOnTime, 16);
+ dimmerOnTime = tempDimmerOnTime.ToString().PadLeft(2, '0');
+ }
+ else
+ {
+ dimmerOnTime = "00";
+ }
+ dimmerOnTime = dimmerOnTime.ToUpper();
+ if (configureParamates.dimmerOffTime > 0)
+ {
+ var tempDimmerOffTime = Convert.ToString(configureParamates.dimmerOffTime, 16);
+ dimmerOffTime = tempDimmerOffTime.ToString().PadLeft(2, '0');
+ }
+ else
+ {
+ dimmerOffTime = "00";
+ }
+ dimmerOffTime = dimmerOffTime.ToUpper();
+ //dimmerLevel
+ string temp = "";
+ var sbString = new System.Text.StringBuilder();
+ string temp2 = Convert.ToString(configureParamates.dimmerLevel, 16);
+ switch (temp2.Length)
+ {
+ case 1:
+ temp = "0" + temp2;
+ break;
+ case 2:
+ temp = temp2;
+ break;
+ }
+ sbString.Append(temp.ToUpper());
- data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength +
- levelEnable + levelSize + controlDevEnable + transitionTime;
+ data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength +
+ levelEnable + levelSize + controlDevEnable + transitionTime + iasReportPeriod
+ + mode + type + dimmerOnTime + dimmerOffTime + sbString;
+ }
}
catch { };
@@ -531,7 +650,7 @@
if (gatewayTemp.clientDataPassthroughResponseData?.PassData != null)
{
var data = gatewayTemp.clientDataPassthroughResponseData.PassData;
- if (data.Length == 20)
+ if (data.Length == 34)
{
var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString();
if (command == "0302")
@@ -549,7 +668,7 @@
}
var size = data[12].ToString() + data[13].ToString();
- tempD.levelSize = Convert.ToInt32(size);
+ tempD.levelSize = Convert.ToInt32(size, 16);
var cdl = data[14].ToString() + data[15].ToString();
if (cdl == "01")
@@ -560,8 +679,14 @@
{
tempD.controlDevEnable = false;
}
-
tempD.transitionTime = Convert.ToInt32(data[18].ToString() + data[19].ToString() + data[16].ToString() + data[17].ToString(), 16);
+ tempD.iasReportPeriod = Convert.ToInt32(data[22].ToString() + data[23].ToString() + data[20].ToString() + data[21].ToString(), 16);
+ tempD.mode = Convert.ToInt32(data[24].ToString() + data[25].ToString(), 16);
+ tempD.type = Convert.ToInt32(data[26].ToString() + data[27].ToString(), 16);
+ tempD.dimmerOnTime = Convert.ToInt32(data[28].ToString() + data[29].ToString(), 16);
+ tempD.dimmerOffTime = Convert.ToInt32(data[30].ToString() + data[31].ToString(), 16);
+ tempD.dimmerLevel = Convert.ToInt32(data[32].ToString() + data[33].ToString(), 16);
+
configureParamates = tempD;
result = new ParamatesInfo { configureParamates = tempD };
System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_command:0301_{ topic}");
@@ -631,6 +756,152 @@
}
#endregion
+ #region 鑾峰彇PIR lux鍊硷紙Lux鍊硷級
+ ///<summary >
+ ///鑾峰彇PIR lux鍊硷紙Lux鍊硷級
+ /// <para>reserve:0-ff</para>
+ /// </summary>
+ public async System.Threading.Tasks.Task<PirLuxAbilitySizeInfo> GetPirLuxAbilitySizeAsync(string reserve = "01")
+ {
+ PirLuxAbilitySizeInfo result = null;
+ if (Gateway == null)
+ {
+ result = new PirLuxAbilitySizeInfo { errorMessageBase = "褰撳墠娌℃湁缃戝叧" };
+ return result;
+ }
+ return await System.Threading.Tasks.Task.Run(async () =>
+ {
+ Action<string, string> action = (topic, message) =>
+ {
+ var gatewayID = topic.Split('/')[0];
+ var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
+ if (topic == gatewayID + "/" + "Error_Respon")
+ {
+ var gatewayTemp = new ZbGateway() { Time = jobject.Value<int>("Time"), DataID = jobject.Value<int>("Data_ID"), CurrentGateWayId = Gateway.getGatewayBaseInfo.gwID };
+ var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ZbGateway.ErrorResponData>(jobject["Data"].ToString());
+
+ if (temp == null)
+ {
+ result = new PirLuxAbilitySizeInfo { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" };
+ }
+
+ else
+ {
+ result = new PirLuxAbilitySizeInfo { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) };
+ }
+ }
+
+ if (topic == gatewayID + "/" + "ZbDataPassthrough")
+ {
+ var gatewayTemp = new ZbGateway() { DataID = jobject.Value<int>("Data_ID") };
+ gatewayTemp.clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<ClientDataPassthroughResponseData>(jobject["Data"].ToString());
+
+ if (gatewayTemp.clientDataPassthroughResponseData == null)
+ {
+ result = new PirLuxAbilitySizeInfo { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" };
+ }
+ else
+ {
+ if (gatewayTemp.clientDataPassthroughResponseData?.PassData != null)
+ {
+ var data = gatewayTemp.clientDataPassthroughResponseData.PassData;
+ if (data.Length == 12)
+ {
+ var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString();
+ if (command == "0306")
+ {
+ var cou = data[10].ToString() + data[11].ToString();
+ int countTemp = Convert.ToInt32(cou, 16);
+ PirLux = countTemp;
+ result = new PirLuxAbilitySizeInfo { pirLux = countTemp };
+ System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_command:0303_{ topic}");
+ }
+ }
+ }
+ }
+ }
+ };
+
+ Gateway.Actions += action;
+ System.Console.WriteLine("ClientDataPassthrough_Actions 鍚姩" + System.DateTime.Now.ToString());
+
+ try
+ {
+ var passData = SendPIRLuxAbilitySizeData(reserve);
+ var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } };
+ var data = new JObject { { "PassData", passData } };
+ jObject.Add("Data", data);
+ Gateway.Send(("ClientDataPassthrough"), jObject.ToString());
+ }
+ catch { }
+
+ var dateTime = DateTime.Now;
+ while ((DateTime.Now - dateTime).TotalMilliseconds < 9000)//WaitReceiveDataTime)
+ {
+ await System.Threading.Tasks.Task.Delay(10);
+ if (result != null)
+ {
+ break;
+ }
+ }
+ if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime)
+ {
+ result = new PirLuxAbilitySizeInfo { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" };
+ }
+ Gateway.Actions -= action;
+ System.Console.WriteLine("ClientDataPassthrough_Actions 閫�鍑�" + System.DateTime.Now.ToString());
+
+ return result;
+ });
+ }
+
+ /// <summary>
+ ///鑾峰彇PIR lux鍊�
+ /// </summary>
+ string SendPIRLuxAbilitySizeData(string reserve)
+ {
+ string data = "";
+ string dataLength = "05";
+ string dataComand1 = "05";
+ string dataComand2 = "03";
+ string dataSerialNum = "01";
+ string addDataLength = "01";
+ string reserveData = reserve;
+
+ try
+ {
+ data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength +
+ reserveData;
+ }
+ catch { };
+
+ return data;
+ }
+
+ /// <summary>
+ /// PIR閰嶇疆鍙傛暟鍥炲
+ /// </summary>
+ public PirLuxAbilitySizeInfo pirLuxAbilitySizeInfo;
+ [System.Serializable]
+ public class PirLuxAbilitySizeInfo
+ {
+ /// <summary>
+ /// 閿欒淇℃伅
+ /// </summary>
+ public string errorMessageBase;
+ /// <summary>
+ /// 缃戝叧淇℃伅閿欒鍙嶉
+ /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para>
+ /// </summary>
+ public ErrorResponData errorResponData;
+ /// <summary>
+ /// 褰撳墠Lux鍊�
+ /// <para>0-0xff Lux</para>
+ /// </summary>
+ public int pirLux = -1;
+ }
+
+ #endregion
}
}
--
Gitblit v1.8.0