using System;
|
using System.Collections.Generic;
|
using Newtonsoft.Json.Linq;
|
using ZigBee.Device;
|
using ZigBee.Common;
|
using Shared.Common;
|
using System.Collections.Specialized;
|
using System.Net;
|
using System.IO;
|
using Shared.R;
|
|
namespace Shared.Phone.Device.Logic
|
{
|
public class Method
|
{
|
|
// <summary>
|
/// 通过设备找到区域(房间)名称
|
/// </summary>
|
/// <param name="button">Btnregionname.</param>
|
/// <param name="device">Device.</param>
|
public static void RoomNmae(Button button, CommonDevice device)
|
{
|
button.Text = HdlRoomLogic.Current.GetRoomNameByDevice(device);
|
}
|
/// <summary>
|
/// 返回楼层所有的房间的列表
|
/// </summary>
|
/// <param name="type">判断字符串</param>
|
/// <param name="floorId">楼层ID</param>
|
/// <returns></returns>
|
public static List<Common.Room> GetRoomList(string type, string floorId = null)
|
{
|
var list = new List<Common.Room>();
|
var listAllRoom = HdlRoomLogic.Current.GetAllListRooms();
|
for (int i = 0; i < listAllRoom.Count; i++)
|
{
|
if (type == "action_logicscene" || type == "action_lockscene")
|
{
|
if (listAllRoom[i].ListSceneId.Count == 0)
|
{ ///过滤掉没有场景的房间
|
continue;
|
}
|
}
|
else
|
{
|
///区分出输入条件和输出目标设备
|
var listdevicetype = GetDevice(type);
|
var listdevice = GetDeviceUIList(listAllRoom[i], listdevicetype, type);
|
if (listdevice.Count == 0)
|
{
|
///过滤掉没有设备的房间
|
continue;
|
}
|
}
|
list.Add(listAllRoom[i]);
|
}
|
if (string.IsNullOrEmpty(floorId))
|
{
|
//没有楼层直接返回所有的房间;
|
return list;
|
}
|
//某楼层所有的房间;
|
return list.FindAll((obj) => obj.FloorId == floorId);
|
}
|
/// <summary>
|
/// 获取房间的设备列表
|
/// </summary>
|
/// <param name="room">当前房间</param>
|
/// <param name="deviceTypelist">设备类型</param>
|
/// /// <param name="type">逻辑类型</param>
|
/// <returns></returns>
|
public static List<CommonDevice> GetDeviceUIList(Common.Room room, List<DeviceType> deviceTypelist,string type)
|
{
|
var deviceUIlist = new List<CommonDevice>();
|
foreach (var deviceKey in room.ListDevice)
|
{
|
var device = HdlDeviceCommonLogic.Current.GetDevice(deviceKey);
|
if (device == null)
|
{
|
continue;
|
}
|
if (!deviceTypelist.Contains(device.Type))
|
{
|
//过滤掉不支持的设备
|
continue;
|
}
|
if (device.Type == DeviceType.DoorLock)
|
{
|
var myInfo = HdlDeviceCommonLogic.Current.GetMyDeviceEnumInfo(new List<CommonDevice>() { device });
|
if (myInfo.ConcreteType == DeviceConcreteType.IntelligentLocks_Sone)
|
{
|
//暂时不支持S-one门锁;
|
//过滤掉不支持S-one门锁设备;
|
continue;
|
}
|
}
|
if (type == "condition_mould")
|
{
|
if (device.Type == DeviceType.IASZone)
|
{
|
if (device.IasDeviceType != 13)
|
{//自动化模板只支持红外传感器
|
continue;
|
}
|
if (device.ModelIdentifier == "MSPIRB-ZB.10")
|
{
|
//自动化模板不支持光照度
|
continue;
|
}
|
|
}
|
}
|
deviceUIlist.Add(device);
|
}
|
return deviceUIlist;
|
}
|
/// <summary>
|
/// 排列所有设备类型的列表
|
/// </summary>
|
/// <param name="devicelist">设备列表</param>
|
/// <returns></returns>
|
public static List<string> GetDeviceTypeList(List<CommonDevice> devicelist)
|
{
|
List<string> devicetypelist = new List<string>();
|
devicetypelist.Clear();
|
|
var lightjosn = devicelist.Find((device) => device.Type == DeviceType.DimmableLight || device.Type == DeviceType.OnOffOutput || device.Type == DeviceType.ColorTemperatureLight);
|
if (lightjosn != null)
|
{
|
devicetypelist.Add(Language.StringByID(MyInternationalizationString.Lights));
|
}
|
|
var curtainjosn = devicelist.Find((device) => device.Type == DeviceType.WindowCoveringDevice);
|
if (curtainjosn != null)
|
{
|
devicetypelist.Add(Language.StringByID(MyInternationalizationString.Curtains));
|
}
|
|
var ac = devicelist.Find((device) => device.Type == DeviceType.Thermostat);
|
if (ac != null)
|
{
|
devicetypelist.Add(Language.StringByID(MyInternationalizationString.AC));
|
}
|
|
var onOffSwitchjson = devicelist.Find((device) => device.Type == DeviceType.OnOffSwitch);
|
if (onOffSwitchjson != null)
|
{
|
devicetypelist.Add(Language.StringByID(MyInternationalizationString.OnOffSwitch));
|
}
|
|
var doorLock = devicelist.Find((device) => device.Type == DeviceType.DoorLock);
|
if (doorLock != null)
|
{
|
devicetypelist.Add(Language.StringByID(MyInternationalizationString.doorLock));
|
}
|
|
var airSwitch = devicelist.Find((device) => device.Type == DeviceType.AirSwitch);
|
if (airSwitch != null)
|
{
|
devicetypelist.Add(Language.StringByID(MyInternationalizationString.Airswitch));
|
}
|
|
var iASZonejosn = devicelist.Find((device) => device.Type == DeviceType.IASZone || device.Type == DeviceType.TemperatureSensor);
|
if (iASZonejosn != null)
|
{
|
devicetypelist.Add(Language.StringByID(MyInternationalizationString.sensor));
|
}
|
|
return devicetypelist;
|
|
}
|
/// <summary>
|
/// 某个设备类型的列表
|
/// </summary>
|
/// <param name="devicetype">判断字符串</param>
|
/// <returns></returns>
|
public static List<DeviceType> GetDeviceType(string devicetype)
|
{
|
List<DeviceType> DeviceTypeList = new List<DeviceType>();
|
DeviceTypeList.Clear();
|
if (devicetype == Language.StringByID(MyInternationalizationString.Lights))
|
{
|
DeviceTypeList.Add(DeviceType.OnOffOutput);//0x0101十进制257
|
DeviceTypeList.Add(DeviceType.DimmableLight);
|
DeviceTypeList.Add(DeviceType.ColorTemperatureLight);
|
}
|
else if (devicetype == Language.StringByID(MyInternationalizationString.Curtains))
|
{
|
DeviceTypeList.Add(DeviceType.WindowCoveringDevice);
|
}
|
else if (devicetype == Language.StringByID(MyInternationalizationString.OnOffSwitch))
|
{
|
DeviceTypeList.Add(DeviceType.OnOffSwitch);
|
}
|
else if (devicetype == Language.StringByID(MyInternationalizationString.sensor))
|
{
|
DeviceTypeList.Add(DeviceType.IASZone);
|
DeviceTypeList.Add(DeviceType.TemperatureSensor);
|
}
|
else if (devicetype == Language.StringByID(MyInternationalizationString.doorLock))
|
{
|
DeviceTypeList.Add(DeviceType.DoorLock);
|
}
|
else if (devicetype == Language.StringByID(MyInternationalizationString.Curtains))
|
{
|
DeviceTypeList.Add(DeviceType.WindowCoveringDevice);
|
}
|
else if (devicetype == Language.StringByID(MyInternationalizationString.AC))
|
{
|
DeviceTypeList.Add(DeviceType.Thermostat);
|
}
|
else if (devicetype == Language.StringByID(MyInternationalizationString.Airswitch))
|
{
|
DeviceTypeList.Add(DeviceType.AirSwitch);
|
}
|
return DeviceTypeList;
|
}
|
/// <summary>
|
/// 显示某个类型设备的图标
|
/// </summary>
|
/// <param name="devicetype">判断字符串</param>
|
/// <returns></returns>
|
public static string GetDeviceTypeIcon(string devicetype)
|
{
|
string patm = "";
|
if (devicetype == Language.StringByID(MyInternationalizationString.OnOffSwitch))
|
{
|
patm = "ZigeeLogic/selectedpanel.png";
|
}
|
else if (devicetype == Language.StringByID(MyInternationalizationString.sensor))
|
{
|
patm = "ZigeeLogic/selectedsenor.png";
|
}
|
else if (devicetype == Language.StringByID(MyInternationalizationString.doorLock))
|
{
|
patm = "ZigeeLogic/selecteddoorlock.png";
|
}
|
else if (devicetype == Language.StringByID(MyInternationalizationString.Lights))
|
{
|
patm = "ZigeeLogic/selectedlight.png";
|
}
|
else if (devicetype == Language.StringByID(MyInternationalizationString.Curtains))
|
{
|
patm = "ZigeeLogic/selectedcurtain.png";
|
}
|
else if (devicetype == Language.StringByID(MyInternationalizationString.AC))
|
{
|
patm = "ZigeeLogic/selectedac.png";
|
}
|
else if (devicetype == Language.StringByID(MyInternationalizationString.Airswitch))
|
{
|
patm = "ZigeeLogic/selectedairswitch.png";
|
}
|
return patm;
|
}
|
/// <summary>
|
/// 显示设备的图标
|
/// </summary>
|
/// <param name="device">设备对象</param>
|
/// <param name="button">显示图标的控件</param>
|
public static void GetDeviceIcon(CommonDevice device, Button button)
|
{
|
string patm = "";
|
string selectedpatm = "";
|
switch (device.Type)
|
{
|
case DeviceType.OnOffOutput:
|
{
|
patm = "ZigeeLogic/light.png";
|
selectedpatm = "ZigeeLogic/selectedlight.png";
|
}
|
break;
|
case DeviceType.IASZone:
|
{
|
var iASZonedevice = device as IASZone;
|
if (iASZonedevice.DeviceID != 1026)
|
{
|
break;
|
}
|
|
if (device.ModelIdentifier == "MSPIRB-ZB.10")
|
{
|
patm = $"ZigeeLogic/sensor541.png";
|
selectedpatm = $"ZigeeLogic/selectedsensor541.png";
|
}
|
else
|
{
|
patm = $"ZigeeLogic/sensor{iASZonedevice.IasDeviceType}.png";
|
selectedpatm = $"ZigeeLogic/selectedsensor{iASZonedevice.IasDeviceType}.png";
|
}
|
}
|
break;
|
case DeviceType.TemperatureSensor:
|
{
|
var temperatureSensor = device as TemperatureSensor;
|
if (temperatureSensor.SensorDiv == 1)
|
{
|
patm = $"ZigeeLogic/temperature.png";
|
selectedpatm = $"ZigeeLogic/selectedtemperature.png";
|
}
|
else
|
{
|
patm = "ZigeeLogic/humidity.png";
|
selectedpatm = "ZigeeLogic/selectedhumidity.png";
|
}
|
}
|
break;
|
case DeviceType.OnOffSwitch:
|
{
|
patm = "ZigeeLogic/panel.png";
|
selectedpatm = "ZigeeLogic/selectedpanel.png";
|
}
|
break;
|
case DeviceType.DoorLock:
|
{
|
patm = "ZigeeLogic/doorlock.png";
|
selectedpatm = "ZigeeLogic/selecteddoorlock.png";
|
}
|
break;
|
case DeviceType.DimmableLight:
|
{
|
|
patm = "ZigeeLogic/dimmableLight.png";
|
selectedpatm = "ZigeeLogic/selecteddimmableLight.png";
|
}
|
break;
|
case DeviceType.WindowCoveringDevice:
|
{
|
patm = "ZigeeLogic/curtain.png";
|
selectedpatm = "ZigeeLogic/selectedcurtain.png";
|
}
|
break;
|
case DeviceType.Thermostat:
|
{
|
patm = "ZigeeLogic/ac.png";
|
selectedpatm = "ZigeeLogic/selectedac.png";
|
}
|
break;
|
case DeviceType.AirSwitch:
|
{
|
patm = "ZigeeLogic/airswitch.png";
|
selectedpatm = "ZigeeLogic/selectedairswitch.png";
|
}
|
break;
|
case DeviceType.ColorTemperatureLight:
|
{
|
patm = "ZigeeLogic/nightLight.png";
|
selectedpatm = "ZigeeLogic/nightLightSelected.png";
|
}
|
break;
|
}
|
button.UnSelectedImagePath = patm;
|
button.SelectedImagePath = selectedpatm;
|
}
|
/// <summary>
|
/// 支持的设备
|
/// </summary>
|
/// <param name="type">判断字符串</param>
|
/// <returns></returns>
|
public static List<DeviceType> GetDevice(string type)
|
{
|
/// 设备类型列表
|
List<DeviceType> deviceTypeList = new List<DeviceType>();
|
deviceTypeList.Clear();
|
switch (type)
|
{
|
case "condition_logic":
|
{//自动化支持的条件设备
|
deviceTypeList.Add(DeviceType.IASZone);
|
deviceTypeList.Add(DeviceType.OnOffSwitch);
|
deviceTypeList.Add(DeviceType.OnOffOutput);
|
deviceTypeList.Add(DeviceType.DoorLock);
|
deviceTypeList.Add(DeviceType.TemperatureSensor);
|
}
|
break;
|
case "action_logic":
|
{
|
|
//自动化支持的目标设备
|
deviceTypeList.Add(DeviceType.OnOffOutput);
|
deviceTypeList.Add(DeviceType.DimmableLight);
|
deviceTypeList.Add(DeviceType.WindowCoveringDevice);
|
deviceTypeList.Add(DeviceType.Thermostat);
|
deviceTypeList.Add(DeviceType.AirSwitch);
|
deviceTypeList.Add(DeviceType.ColorTemperatureLight);
|
///门锁特殊
|
// deviceTypeList.Add(DeviceType.DoorLock);
|
}
|
break;
|
case "condition_mould":
|
{
|
//自动化模板支持的条件设备
|
deviceTypeList.Add(DeviceType.IASZone);
|
}
|
break;
|
case "action_mould":
|
{ //自动化模板支持的目标设备
|
deviceTypeList.Add(DeviceType.OnOffOutput);
|
}
|
break;
|
case "action_lockaction":
|
{//门锁联动事件支持的目标设备
|
deviceTypeList.Add(DeviceType.OnOffOutput);
|
deviceTypeList.Add(DeviceType.DimmableLight);
|
deviceTypeList.Add(DeviceType.WindowCoveringDevice);
|
deviceTypeList.Add(DeviceType.Thermostat);
|
deviceTypeList.Add(DeviceType.AirSwitch);
|
deviceTypeList.Add(DeviceType.ColorTemperatureLight);
|
///门锁特殊
|
// deviceTypeList.Add(DeviceType.DoorLock);
|
}
|
break;
|
|
}
|
return deviceTypeList;
|
}
|
|
/// <summary>
|
/// 更新执行周期的方法
|
/// </summary>
|
/// <param name="button">显示周期文本</param>
|
/// <param name="currentLogic">当前逻辑对象</param>
|
public static void UpdateWeek(Button button, Common.Logic currentLogic)
|
{
|
|
switch (currentLogic.TimeAttribute.Repeat)
|
{
|
///0:只执行一次,执行后IsEnable值置;1,今年内执行;2:每天执行;3:每月执行;4:每年执行;5:周重复。
|
case 0:
|
{
|
button.Text = Language.StringByID(MyInternationalizationString.executeonce);
|
}; break;
|
case 1: { }; break;
|
case 2:
|
{
|
button.Text = Language.StringByID(MyInternationalizationString.everyday);
|
}; break;
|
case 3:
|
{
|
|
string len = "", value = "";
|
var stringvalue = Convert.ToString(currentLogic.TimeAttribute.MonthDate, 2);
|
var str = stringvalue.Insert(0, new string('0', 32 - stringvalue.Length));
|
for (int j = 31; j >= 0; j--)
|
{
|
len += str.Substring(j, 1);
|
}
|
for (int j = 0; j < len.Length; j++)
|
{
|
var strvalue = len.Substring(j, 1);
|
if (strvalue == "1")
|
{
|
value += (j + 1).ToString() + ",";
|
}
|
}
|
button.Text = Language.StringByID(MyInternationalizationString.monthly) + value.TrimEnd(',') + Language.StringByID(MyInternationalizationString.day);
|
|
}; break;
|
case 4:
|
{
|
|
Dictionary<int, int> dictionary = new Dictionary<int, int>();
|
///找出执行的月份和天数
|
if (currentLogic.TimeAttribute.SelectMonDate.Count != 0)
|
{
|
for (int i = 0; i < currentLogic.TimeAttribute.SelectMonDate.Count; i++)
|
{
|
var dayvalue = currentLogic.TimeAttribute.SelectMonDate[i];
|
if (dayvalue != 0)
|
{
|
dictionary.Add(i + 1, dayvalue);
|
}
|
}
|
}
|
if (dictionary.Count != 0 && dictionary.Count == 1)
|
{
|
string len = "", leng = "";
|
int minvalue = 0, Maximum = 0;
|
foreach (var value in dictionary)
|
{
|
///取出月份
|
var month = value.Key;
|
///取出日数
|
var day = value.Value;
|
var maxvalue = Convert.ToString(day, 2);
|
var str = maxvalue.Insert(0, new string('0', 32 - maxvalue.Length));
|
for (int j = 31; j >= 0; j--)
|
{
|
len += str.Substring(j, 1);
|
}
|
|
for (int j = 0; j < len.Length; j++)
|
{
|
var strvalue = len.Substring(j, 1);
|
if (strvalue == "1")
|
{
|
minvalue = j + 1;
|
break;
|
}
|
}
|
for (int j = 0; j < len.Length; j++)
|
{
|
var strvalue = len.Substring(j, 1);
|
if (strvalue == "1")
|
{
|
Maximum = j + 1;
|
}
|
}
|
|
if (month.ToString().Length < 2)
|
{
|
leng = "0" + month.ToString();
|
}
|
else
|
{
|
leng = month.ToString();
|
}
|
if (minvalue == Maximum)
|
{
|
button.Text = Language.StringByID(MyInternationalizationString.everyyear) + leng + "/" + (minvalue.ToString().Length < 2 ? "0" + minvalue.ToString() : minvalue.ToString());
|
}
|
else
|
{
|
button.Text = Language.StringByID(MyInternationalizationString.everyyear) + leng + "/" + (minvalue.ToString().Length < 2 ? "0" + minvalue.ToString() : minvalue.ToString()) + "-" + leng + "/" + (Maximum.ToString().Length < 2 ? "0" + Maximum.ToString() : Maximum.ToString());
|
}
|
}
|
|
}
|
else
|
{
|
int b = 0;
|
string stringtext = "";
|
foreach (var value in dictionary)
|
{
|
string len = "", leng = "";
|
int minvalue = 0, Maximum = 0;
|
///取出月份
|
var month = value.Key;
|
///取出日数
|
var day = value.Value;
|
var maxvalue = Convert.ToString(day, 2);
|
var str = maxvalue.Insert(0, new string('0', 32 - maxvalue.Length));
|
for (int j = 31; j >= 0; j--)
|
{
|
len += str.Substring(j, 1);
|
}
|
|
|
if (month.ToString().Length < 2)
|
{
|
leng = "0" + month.ToString();
|
}
|
else
|
{
|
leng = month.ToString();
|
}
|
|
|
|
if (b == 0)
|
{
|
for (int j = 0; j < len.Length; j++)
|
{
|
var strvalue = len.Substring(j, 1);
|
if (strvalue == "1")
|
{
|
minvalue = j + 1;
|
break;
|
}
|
}
|
stringtext += leng + "/" + (minvalue.ToString().Length < 2 ? "0" + minvalue.ToString() : minvalue.ToString()) + "-";
|
|
}
|
|
if (b == dictionary.Count - 1)
|
{
|
for (int j = 0; j < len.Length; j++)
|
{
|
var strvalue = len.Substring(j, 1);
|
if (strvalue == "1")
|
{
|
Maximum = j + 1;
|
}
|
}
|
stringtext += leng + "/" + (Maximum.ToString().Length < 2 ? "0" + Maximum.ToString() : Maximum.ToString());
|
|
}
|
b++;
|
}
|
button.Text = Language.StringByID(MyInternationalizationString.everyyear) + stringtext;
|
}
|
|
}; break;
|
case 5:
|
{
|
string len = "";
|
string text = "";
|
string weekStr = Language.StringByID(MyInternationalizationString.week1);
|
List<int> listvalueInt = new List<int>();
|
listvalueInt.Clear();
|
var maxvalue = Convert.ToString(currentLogic.TimeAttribute.WeekDay, 2);
|
var str = maxvalue.Insert(0, new string('0', 8 - maxvalue.Length));
|
for (int j = 7; j >= 0; j--)
|
{
|
len += str.Substring(j, 1);
|
}
|
|
for (int j = 0; j < len.Length; j++)
|
{
|
var strvalue = len.Substring(j, 1);
|
if (strvalue == "1")
|
{
|
listvalueInt.Add(j + 1);
|
switch ((j + 1)) {
|
case 1: {
|
text += weekStr + Language.StringByID(MyInternationalizationString.mon1) + ",";
|
}
|
break;
|
case 2: {
|
text += weekStr + Language.StringByID(MyInternationalizationString.tue1) + ",";
|
}
|
break;
|
case 3: {
|
text += weekStr + Language.StringByID(MyInternationalizationString.wed1) + ",";
|
}
|
break;
|
case 4: {
|
text += weekStr + Language.StringByID(MyInternationalizationString.thu1) + ",";
|
}
|
break;
|
case 5: {
|
text += weekStr + Language.StringByID(MyInternationalizationString.frl1) + ",";
|
}
|
break;
|
case 6: {
|
text += weekStr + Language.StringByID(MyInternationalizationString.sat1) + ",";
|
}
|
break;
|
case 7: {
|
text += weekStr + Language.StringByID(MyInternationalizationString.sun1) + ",";
|
}
|
break;
|
}
|
|
}
|
}
|
//暂时隐藏掉,需要显示周末和工作日再放开;
|
//if (listvalueInt.Count == 5 && !listvalueInt.Contains(6) && !listvalueInt.Contains(7))
|
//{
|
// btndisplaycycle.Text = Language.StringByID(MyInternationalizationString.workingday);
|
//}
|
//else if (listvalueInt.Count == 2 && listvalueInt.Contains(6) && listvalueInt.Contains(7))
|
//{
|
// btndisplaycycle.Text = Language.StringByID(MyInternationalizationString.weekend);
|
//}
|
//else if (listvalueInt.Count == 7)
|
//{
|
// btndisplaycycle.Text = Language.StringByID(MyInternationalizationString.everyday);
|
//}
|
//else
|
//{
|
// btndisplaycycle.Text = Language.StringByID(MyInternationalizationString.week1) + text.Replace(Language.StringByID(MyInternationalizationString.week1), "").TrimEnd(',');
|
//}
|
button.Text = weekStr + text.Replace(weekStr, "").TrimEnd(',');
|
}; break;
|
}
|
|
|
}
|
/// <summary>
|
///返回设备的方法
|
/// </summary>
|
/// <param name="DeviceAddr">设备Mac</param>
|
/// <param name="Epoint">设备端口</param>
|
/// <returns></returns>
|
public static ZigBee.Device.CommonDevice GetCommonDevice(string DeviceAddr, string Epoint)
|
{
|
|
var device = Common.Logic.LogicDviceList.Find((obj) => { return ((obj.DeviceAddr == DeviceAddr) && (obj.DeviceEpoint.ToString() == Epoint)); });
|
if (device == null)
|
{
|
device = new ZigBee.Device.CommonDevice();
|
}
|
return device;
|
}
|
/// <summary>
|
/// 推送设置的方法
|
/// </summary>
|
/// <param name="middle"></param>
|
public static void Push(VerticalScrolViewLayout middle)
|
{
|
LogicView.Addview pushview = new LogicView.Addview();
|
pushview.switchBtn.Visible = true;
|
pushview.titleBtn.TextID = MyInternationalizationString.pushswitch;
|
middle.AddChidren(pushview.AddDeviceView());
|
|
LogicView.Addview custompushview = new LogicView.Addview();
|
custompushview.iconBtn.Visible = true;
|
custompushview.iconBtn.UnSelectedImagePath = "ZigeeLogic/next.png";
|
custompushview.titleBtn.TextID = MyInternationalizationString.custompush;
|
custompushview.lineBtn.BackgroundColor = ZigbeeColor.Current.LogicBlankBackgroundColor;
|
middle.AddChidren(custompushview.AddDeviceView());
|
|
EventHandler<MouseEventArgs> customclick = (sender, e) =>
|
{
|
var CustomText = new CustomText();
|
UserView.HomePage.Instance.AddChidren(CustomText);
|
UserView.HomePage.Instance.PageIndex += 1;
|
CustomText.Show();
|
};
|
custompushview.frameLayout.MouseUpEventHandler += customclick;
|
custompushview.clickBtn.MouseUpEventHandler += customclick;
|
// bool tag = false;//标记开关状态;
|
pushview.clickBtn.MouseUpEventHandler += (sender1, e1) =>
|
{
|
pushview.switchBtn.IsSelected = !pushview.switchBtn.IsSelected;
|
if (pushview.switchBtn.IsSelected)
|
{
|
LogicView.IfString.Tag = true;
|
custompushview.frameLayout.Height = Application.GetRealHeight(160);
|
Common.Logic.CurrentLogic.LogicIsCustomPushText = 1;
|
pushview.lineBtn.BackgroundColor = ZigbeeColor.Current.LogicRowLayoutLineColor;
|
|
}
|
else
|
{
|
LogicView.IfString.Tag = false;
|
custompushview.frameLayout.Height = Application.GetRealHeight(0);
|
Common.Logic.CurrentLogic.LogicIsCustomPushText = 0;
|
pushview.lineBtn.BackgroundColor = ZigbeeColor.Current.LogicBlankBackgroundColor;
|
}
|
if (!Config.Instance.Home.IsVirtually)
|
{
|
Send.Zj(LogicView.IfString.Tag, Common.Logic.CurrentLogic);
|
|
}
|
};
|
|
if (Common.Logic.CurrentLogic.LogicIsCustomPushText == 0)
|
{
|
LogicView.IfString.Tag = false;
|
pushview.switchBtn.IsSelected = false;
|
custompushview.frameLayout.Height = Application.GetRealHeight(0);
|
pushview.lineBtn.BackgroundColor = ZigbeeColor.Current.LogicBlankBackgroundColor;
|
}
|
else
|
{
|
LogicView.IfString.Tag = true;
|
pushview.switchBtn.IsSelected = true;
|
custompushview.frameLayout.Height = Application.GetRealHeight(160);
|
pushview.lineBtn.BackgroundColor = ZigbeeColor.Current.LogicRowLayoutLineColor;
|
}
|
}
|
/// <summary>
|
/// 保存自动化的方法
|
/// </summary>
|
/// <param name="if_logic">判断跳转界面的字符串</param>
|
/// <param name="name">逻辑名称</param>
|
/// <param name="tag"></param>
|
/// <param name="CurrentLogic">当前逻辑</param>
|
public async static void SaveLogic(string if_logic, string name, bool tag, Common.Logic CurrentLogic)
|
{
|
|
if (CurrentLogic.Conditions.Count == 0 || CurrentLogic.Actions.Count == 0)
|
{
|
var alert = new ShowMsgControl(ShowMsgType.Normal,
|
Language.StringByID(MyInternationalizationString.addnull),
|
Language.StringByID(MyInternationalizationString.confrim));
|
alert.Show();
|
return;
|
}
|
|
if (string.IsNullOrEmpty(name))
|
{
|
var alert = new ShowMsgControl(ShowMsgType.Normal,
|
Language.StringByID(MyInternationalizationString.PleaseEnterLogicName),
|
Language.StringByID(MyInternationalizationString.confrim));
|
alert.Show();
|
return;
|
}
|
///先隐藏判断名字相同的功能;
|
//var logicname = Common.Logic.LogicList.Find((logic) => Common.Logic.CurrentLogic.LogicId != logic.LogicId && logic.LogicName == name);
|
//if (logicname != null)
|
//{
|
// new Alert(Language.StringByID(MyInternationalizationString.Tip), Language.StringByID(MyInternationalizationString.Rename), Language.StringByID(MyInternationalizationString.Close)).Show();
|
// return;
|
//}
|
|
CurrentLogic.LogicName = name;
|
bool succeed = false;
|
//判断是新添加逻辑(默认0)还是修改逻辑
|
CommonPage.Loading.Start();
|
|
if (Config.Instance.Home.IsVirtually)
|
{
|
if (Common.Logic.LogicList.Count == 0)
|
{
|
CurrentLogic.LogicId = 1;
|
Common.Logic.LogicList.Add(CurrentLogic);
|
}
|
|
if (CurrentLogic.LogicId == 0)
|
{
|
bool d = false;
|
for (int i = 1; i < 50; i++)
|
{
|
|
for (int j = 0; j < Common.Logic.LogicList.Count; j++)
|
{
|
if (i != Common.Logic.LogicList[j].LogicId)
|
{
|
CurrentLogic.LogicId = i;
|
Common.Logic.LogicList.Add(CurrentLogic);
|
d = true;
|
break;
|
}
|
}
|
if (d)
|
{
|
break;
|
}
|
}
|
|
}
|
else
|
{
|
for (int j = 0; j < Common.Logic.LogicList.Count; j++)
|
{
|
if (CurrentLogic.LogicId == Common.Logic.LogicList[j].LogicId)
|
{
|
Common.Logic.LogicList.RemoveAt(j);
|
Common.Logic.LogicList.Insert(j,CurrentLogic);
|
break;
|
}
|
}
|
|
}
|
|
//自动化逻辑列表
|
}
|
else
|
{
|
if (CurrentLogic.LogicId == 0)
|
{
|
//发送添加逻辑命令
|
var logicifon = await Send.AddModifyLogic(CurrentLogic);
|
if (logicifon != null && logicifon.LogicId != 0)
|
{
|
succeed = true;
|
CurrentLogic.LogicId = logicifon.LogicId;
|
if (LogicView.IfString._Logic == if_logic || LogicView.IfString._SoneLogic == if_logic)
|
{
|
//自动化逻辑列表
|
Common.Logic.LogicList.Add(CurrentLogic);
|
}
|
if (LogicView.IfString._LockLogic == if_logic)
|
{
|
//门锁联动事件逻辑列表
|
Common.Logic.LockLogicList.Add(CurrentLogic);
|
}
|
if (LogicView.IfString._SoneLogic == if_logic)
|
{
|
//Sone门锁常开模式逻辑列表
|
Common.Logic.SoneLogicList.Add(CurrentLogic);
|
|
}
|
if (tag)
|
{
|
Send.Zj(tag, CurrentLogic);
|
}
|
}
|
}
|
else
|
{
|
//发送修改逻辑命令;
|
//修改命令不需要等待回复;
|
Send.AddModifyLogic(CurrentLogic);
|
//编辑默认成功(不考虑网络情况);
|
succeed = true;
|
}
|
}
|
CommonPage.Loading.Hide();
|
|
if (!succeed)//succeed标记是添加成功还是失败
|
{
|
//网关回复失败,不关闭界面,让它停留当前界面;
|
//(原因:考虑到失败重新编辑原来数据给用户带来了麻烦)
|
///提示:添加自动化失败;
|
//TipView("添加自动化失败");
|
//return;
|
}
|
|
UserView.HomePage.Instance.RemoveViewByTag("Logic");//移除所有标记Logic界面
|
if (LogicView.IfString._Logic == if_logic)
|
{
|
|
//查询-当前逻辑-是否添加地理位置作为条件
|
var exist = Common.Logic.CurrentLogic.Conditions.Find((obj) => obj["Type"] == "7");
|
if (exist==null)
|
{
|
bool if_type = false;
|
//查询-逻辑列表-是否添加过地理位置作为条件
|
for (int a = 0; a < Common.Logic.LogicList.Count; a++)
|
{
|
var logic = Common.Logic.LogicList[a];
|
var exist_logic = logic.Conditions.Find((obj) => obj["Type"] == "7");
|
if (exist_logic != null)
|
{
|
//是否存在地理位置条件
|
if_type = true;
|
//退出for循环
|
break;
|
}
|
}
|
if (if_type)
|
{
|
//查询之前状态是否已经开启GPS服务(以本地存储状态为主 0:没开启; 1:开启)
|
if (Send.If_Exist == "0")
|
{
|
//开启GPS服务
|
Application.StartGPSLocationService();
|
//保存GPS服务开启状态
|
Send.SaveLocalFile(Config.Instance.HomeId + "_GPS_File", "1");
|
}
|
|
}
|
else
|
{
|
//如果找不到地理位置作为条件的话,关闭GPS服务(减少耗电)
|
if (Send.If_Exist == "1")
|
{
|
//关闭GPS服务
|
Application.StopGPSLocationService();
|
//保存GPS服务关闭状态
|
Send.SaveLocalFile(Config.Instance.HomeId + "_GPS_File", "0");
|
}
|
}
|
}
|
else
|
{
|
//查询之前状态是否已经开启GPS服务(以本地存储状态为主 0:没开启; 1:开启)
|
if (Send.If_Exist == "0")
|
{
|
//开启GPS服务
|
Application.StartGPSLocationService();
|
//保存GPS服务开启状态
|
Send.SaveLocalFile(Config.Instance.HomeId + "_GPS_File", "1");
|
}
|
}
|
//只刷新分类-自动化上下滑动view;
|
Phone.Category.CategoryMainForm.instance?.RefreshBodyView();
|
// Category.Category.instance?.RefreshBodyView();
|
}
|
else if (LogicView.IfString._LockLogic == if_logic)
|
{
|
//跳到门锁联动事件列表界面
|
UserView.HomePage.Instance.RemoveViewByTag("LockListView");//移除所有标记LockListView界面
|
var doorLockLogicList = new DoorLockLogic.LockLogicList();
|
UserView.HomePage.Instance.AddChidren(doorLockLogicList);
|
UserView.HomePage.Instance.PageIndex += 1;
|
doorLockLogicList.Show();
|
}
|
else if (LogicView.IfString._SoneLogic == if_logic)
|
{
|
//跳到Sone门锁联动事件列表界面
|
//UserView.HomePage.Instance.RemoveViewByTag("SoneLogic");//移除所有标记LockListView界面
|
//var soneLogicList = new SoneLogicList();
|
//UserView.HomePage.Instance.AddChidren(soneLogicList);
|
//UserView.HomePage.Instance.PageIndex += 1;
|
//soneLogicList.Show();
|
|
SoneLogicList.soneLogicList?.RefreshView();
|
}
|
|
}
|
/// <summary>
|
/// 跳入输出目标功能界面的方法
|
/// </summary>
|
/// <param name="str1">设备界面识别字符串</param>
|
/// <param name="str2">场景界面识别字符串</param>
|
public static void View(string str1, string str2)
|
{
|
var deviceTarget = new DeviceTarget();
|
UserView.HomePage.Instance.AddChidren(deviceTarget);
|
UserView.HomePage.Instance.PageIndex += 1;
|
deviceTarget.Show(str1, str2);
|
}
|
|
/// <summary>
|
/// 界面高度
|
/// </summary>
|
public static int H = 1922;
|
|
|
|
}
|
}
|