using System;
|
using System.Collections.Generic;
|
using Newtonsoft.Json.Linq;
|
namespace ZigBee.Device
|
{
|
/// <summary>
|
///注意事项:晾衣架,只显示并存储1端点,其他端点(2~5)过滤,不存储,
|
///因为其他端点只有控制作用,(端点2:控制照明,端点3:控制风干,端点4:控制烘干,端点5:控制消毒)
|
/// </summary>
|
[System.Serializable]
|
public class Airer : CommonDevice
|
{
|
public Airer()
|
{
|
this.Type = DeviceType.Airer;
|
}
|
|
/// <summary>
|
/// 开光状态:0=关,1=开,
|
///注意事项:晾衣架,只显示并存储1端点,其他端点(2~5)过滤,不存储,
|
///因为其他端点只有控制作用,(端点2:控制照明,端点3:控制风干,端点4:控制烘干,端点5:控制消毒)
|
/// </summary>
|
[Newtonsoft.Json.JsonIgnore]
|
public int OnOffStatus = 0;
|
|
/// <summary>
|
/// 烘干状态:0=关,1=开,
|
/// </summary>
|
[Newtonsoft.Json.JsonIgnore]
|
public int DryOnOffStatus = 0;
|
|
/// <summary>
|
/// 风干状态:0=关,1=开,
|
/// </summary>
|
[Newtonsoft.Json.JsonIgnore]
|
public int WindOnOffStatus = 0;
|
|
/// <summary>
|
/// 消毒状态:0=关,1=开,
|
/// </summary>
|
[Newtonsoft.Json.JsonIgnore]
|
public int DisinfectOnOffStatus = 0;
|
|
/// <summary>
|
/// 烘干时间
|
/// </summary>
|
[Newtonsoft.Json.JsonIgnore]
|
public int DryTime = 0;
|
/// <summary>
|
/// 剩余烘干时间 (默认0秒)
|
/// </summary>
|
[Newtonsoft.Json.JsonIgnore]
|
public int DryRemainTime = 0;
|
|
/// <summary>
|
/// 风干时间
|
/// </summary>
|
[Newtonsoft.Json.JsonIgnore]
|
public int WindTime = 0;
|
/// <summary>
|
/// 剩余风干时间 (默认0秒)
|
/// </summary>
|
[Newtonsoft.Json.JsonIgnore]
|
public int WindRemainTime = 0;
|
|
/// <summary>
|
/// 消毒时间
|
/// </summary>
|
[Newtonsoft.Json.JsonIgnore]
|
public int DisinfectTime = 0;
|
/// <summary>
|
/// 剩余消毒时间 (默认0秒)
|
/// </summary>
|
[Newtonsoft.Json.JsonIgnore]
|
public int DisinfectRemainTime = 0;
|
|
#region 开关
|
///<summary >
|
///衣架开关停控制
|
/// <para>command的值</para>
|
///<para>0 : 衣架设备上拉或打开</para>
|
///<para>1: 衣架设备下降或关闭</para>
|
///<para>2:衣架设备停止</para>
|
///<para>注意事项:晾衣架,只显示并存储1端点,其他端点(2~5)过滤,不存储,</para>
|
///<para>因为其他端点只有控制作用,(端点2:控制照明,端点3:控制风干,端点4:控制烘干,端点5:控制消毒) </para>
|
/// </summary>
|
public void AirerUpDownStopControl(int command)
|
{
|
var jobject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", DeviceEpoint }, { "Cluster_ID", 258 }, { "Command", command }, { "SendMode", 2 } };
|
Gateway?.Send("DeviceControl", jobject.ToString());
|
System.Console.WriteLine("CurtainOpenControl_发送数据" + "_" + jobject.ToString() + "_" + System.DateTime.Now.ToString());
|
}
|
#endregion
|
|
#region ■ 设备时间设置___________________________
|
///<summary >
|
///设备时间设
|
///<para>注意事项:晾衣架,只显示并存储1端点,其他端点(2~5)过滤,不存储,</para>
|
///<para>因为其他端点只有控制作用,(端点2:控制照明,端点3:控制风干,端点4:控制烘干,端点5:控制消毒) </para>
|
/// </summary>
|
public async System.Threading.Tasks.Task<SetWritableValueResponAllData> SetAirerTimeAsync(int time, int controlEpoint)
|
{
|
if (Gateway == null)
|
{
|
return null;
|
}
|
return await System.Threading.Tasks.Task.Run(async () =>
|
{
|
SetWritableValueResponAllData d = null;
|
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 temp = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ErrorResponData>(jobject["Data"].ToString());
|
|
if (temp == null)
|
{
|
d = new SetWritableValueResponAllData { errorMessageBase = "网关错误回复,且数据是空" };
|
}
|
else
|
{
|
d = new SetWritableValueResponAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) };
|
}
|
}
|
|
if (topic == gatewayID + "/" + "SetWritableValue_Respon")
|
{
|
var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<SetWritableValueResponData>(jobject["Data"].ToString());
|
|
if (tempData == null)
|
{
|
d = new SetWritableValueResponAllData { errorMessageBase = "网关返回的数据为空" };
|
}
|
else
|
{
|
d = new SetWritableValueResponAllData { setWritableValueResponData = tempData };
|
DebugPrintLog($"UI收到通知后的主题_{ topic}");
|
}
|
}
|
};
|
Gateway.Actions += action;
|
DebugPrintLog("SetWritableValue_Actions 启动" + "_" + System.DateTime.Now.ToString());
|
try
|
{
|
var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", controlEpoint }, { "Cluster_ID", 6 }, { "Command", 120 } };
|
var data = new JObject { { "Undivided", 0 }, { "AttributeId", 16385 }, { "AttributeDataType", 33 }, { "AttributeData", time } };
|
jObject.Add("Data", data);
|
Gateway.Send("SetWritableValue", jObject.ToString());
|
}
|
catch { }
|
|
var dateTime = DateTime.Now;
|
while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime)
|
{
|
await System.Threading.Tasks.Task.Delay(10);
|
if (d != null)
|
{
|
break;
|
}
|
}
|
if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime)
|
{
|
d = new SetWritableValueResponAllData { errorMessageBase = " 回复超时,请重新操作" };
|
}
|
Gateway.Actions -= action;
|
DebugPrintLog("SetWritableValue_Actions 退出" + System.DateTime.Now.ToString());
|
return d;
|
});
|
}
|
#endregion
|
|
#region ■ 设备时间设置___________________________
|
/// <summary>
|
/// 设置时间到衣架
|
///<para>注意事项:晾衣架,只显示并存储1端点,其他端点(2~5)过滤,不存储,</para>
|
///<para>因为其他端点只有控制作用,(端点2:控制照明,端点3:控制风干,端点4:控制烘干,端点5:控制消毒) </para>
|
/// </summary>
|
public async void SetAirerFunTimeDevice(int time, int controlEpoint)
|
{
|
await SetAirerTimeAsync(time, controlEpoint);
|
}
|
#endregion
|
|
#region 开关
|
///<summary >
|
///开关控制(仅用于cluster=6的设备)
|
/// <para>设备支持cluster=6的设备才能调用该接口</para>
|
/// <para>command的值</para>
|
///<para>0 : 关闭</para>
|
///<para>1: 打开</para>
|
///<para>2:取反</para>
|
/// </summary>
|
public void SwitchControl(int command, int ctrlEpoint)
|
{
|
try
|
{
|
var jobject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", ctrlEpoint }, { "Cluster_ID", 6 }, { "Command", command }, { "SendMode", 2 } };
|
Gateway?.Send(("DeviceControl"), jobject.ToString());
|
System.Console.WriteLine("SwitchControl_发送数据" + "_" + jobject.ToString() + "_" + System.DateTime.Now.ToString());
|
|
}
|
catch { }
|
}
|
#endregion
|
}
|
}
|