| | |
| | | #region ◆ 变量____________________________ |
| | | |
| | | /// <summary>
|
| | | /// 是否是自定义图片
|
| | | /// 设备MAC地址
|
| | | /// </summary> |
| | | public bool IsCustomizeImage = false; |
| | | |
| | | //DeviceUI_DeviceFilePath |
| | | public override bool Equals(object obj) |
| | | { |
| | | var other= obj as DeviceUI; |
| | | if (CommonDevice.DeviceAddr==other.CommonDevice.DeviceAddr && CommonDevice.DeviceEpoint==other.CommonDevice.DeviceEpoint) |
| | | { |
| | | return true; |
| | | } |
| | | return false; |
| | | //CommonDevice.DeviceEpoint.Equals(other.CommonDevice.DeviceEpoint) && CommonDevice.DeviceAddr.Equals(other.CommonDevice.DeviceAddr); |
| | | |
| | | } |
| | | |
| | | public override int GetHashCode() |
| | | { |
| | | return base.GetHashCode(); |
| | | } |
| | | public string DeviceAddr = string.Empty; |
| | | /// <summary>
|
| | | /// 设备端点
|
| | | /// </summary> |
| | | public int DeviceEpoint = 0; |
| | | |
| | | /// <summary> |
| | | /// 设备文件 |
| | |
| | | public string FileName |
| | | { |
| | | get |
| | | { |
| | | return $"DeviceUI_{DeviceFileName}"; |
| | | {
|
| | | var myDevice = Common.LocalDevice.Current.GetDevice(DeviceAddr, DeviceEpoint);
|
| | | if (myDevice != null)
|
| | | {
|
| | | return myDevice.FilePath;
|
| | | } |
| | | return $"Device_Unkwon"; |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 设备文件名(并非deviceUI设备文件名,指的是device) |
| | | /// </summary> |
| | | public string DeviceFileName = string.Empty; |
| | | |
| | | /// <summary> |
| | | /// 图片 |
| | | /// </summary> |
| | | public string IconPath = string.Empty; |
| | | |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public ZigBee.Device.CommonDevice CommonDevice |
| | | { |
| | | get |
| | | { |
| | | return Common.LocalDevice.Current.GetDevice(DeviceAddr, DeviceEpoint); |
| | | } |
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 是否是自定义图片
|
| | | /// </summary> |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public bool IsCustomizeImage
|
| | | {
|
| | | get
|
| | | {
|
| | | var myDevice = Common.LocalDevice.Current.GetDevice(DeviceAddr, DeviceEpoint);
|
| | | if (myDevice != null)
|
| | | {
|
| | | return myDevice.IsCustomizeImage;
|
| | | }
|
| | | return false;
|
| | | }
|
| | | } |
| | | /// <summary> |
| | | /// 设备图片 |
| | | /// </summary> |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public string IconPath
|
| | | {
|
| | | get
|
| | | {
|
| | | var myDevice = Common.LocalDevice.Current.GetDevice(DeviceAddr, DeviceEpoint);
|
| | | if (myDevice != null)
|
| | | {
|
| | | return myDevice.IconPath;
|
| | | }
|
| | | return string.Empty;
|
| | | }
|
| | | } |
| | | /// <summary> |
| | | /// 设备图片--在线或者选中状态 |
| | | /// </summary> |
| | |
| | | { |
| | | get |
| | | { |
| | | if (string.IsNullOrEmpty(IconPath)) |
| | | { |
| | | return string.Empty; |
| | | } |
| | | var pathArr = IconPath.Split('.'); |
| | | if (pathArr == null || string.IsNullOrEmpty(pathArr[0])) |
| | | { |
| | | return string.Empty; |
| | | } |
| | | return $"{pathArr[0]}Selected.png"; |
| | | var myDevice = Common.LocalDevice.Current.GetDevice(DeviceAddr, DeviceEpoint);
|
| | | if (myDevice != null)
|
| | | {
|
| | | return myDevice.OnlineIconPath;
|
| | | }
|
| | | return string.Empty; |
| | | } |
| | | } |
| | | //[Newtonsoft.Json.JsonIgnore] |
| | | //ZigBee.Device.CommonDevice commonDevice; |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public ZigBee.Device.CommonDevice CommonDevice |
| | | { |
| | | get |
| | | { |
| | | //commonDevice = ZigBee.Device.CommonDevice.CommonDeviceByFilePath(DeviceFilePath); |
| | | //return commonDevice; |
| | | //if (commonDevice == null) |
| | | //{ |
| | | // return ReCommonDevice; |
| | | //} |
| | | //else{ |
| | | //return commonDevice; |
| | | if (DeviceFileName.Split('_').Length < 4) |
| | | { |
| | | return null; |
| | | } |
| | | return Common.LocalDevice.Current.GetDevice(DeviceFileName.Split('_')[2], int.Parse(DeviceFileName.Split('_')[3])); |
| | | //} |
| | | } |
| | | } |
| | | |
| | | //[Newtonsoft.Json.JsonIgnore] |
| | | //public ZigBee.Device.CommonDevice ReCommonDevice |
| | | //{ |
| | | // get |
| | | // { |
| | | //commonDevice= ZigBee.Device.CommonDevice.CommonDeviceByFilePath(DeviceFilePath); |
| | | //return commonDevice; |
| | | // } |
| | | //} |
| | | |
| | | /// <summary> |
| | | /// 控制延时默认反馈的线程列表 |
| | |
| | | Application.RunOnMainThread(() => |
| | | { |
| | | string msg = Language.StringByID(r); |
| | | var tip = new Phone.UserCenter.TipViewControl(msg, 1000, 1); |
| | | tip.ShowView(); |
| | | var tip = new Phone.UserCenter.ShowMsgControl(Phone.UserCenter.ShowMsgType.Tip, msg); |
| | | tip.Show(); |
| | | }); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ◆ 保存____________________________ |
| | | |
| | | /// <summary> |
| | | /// 保存 |
| | | /// </summary> |
| | | public void Save() |
| | | { |
| | | if (Global.IsExistsByHomeId(FileName)) |
| | | { |
| | | return; |
| | | } |
| | | ReSave(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 重新保存 |
| | | /// </summary> |
| | | public void ReSave() |
| | | { |
| | | var paths = DeviceFileName.Split('_'); |
| | | if (paths.Length < 3) |
| | | { |
| | | return; |
| | | } |
| | | if (IconPath == string.Empty) |
| | | { |
| | | //控制面板是一个点
|
| | | if (paths[1] == ZigBee.Device.DeviceType.OnOffSwitch.ToString())
|
| | | {
|
| | | IconPath = "Device/DryContact.png";
|
| | | }
|
| | | else if (paths[1] == ZigBee.Device.DeviceType.ColorDimmableLight.ToString()) |
| | | { |
| | | //彩灯 |
| | | IconPath = "Device/ColorDimmableLight.png"; |
| | | }
|
| | | else if (paths[1] == ZigBee.Device.DeviceType.DimmableLight.ToString()) |
| | | { |
| | | //调光器 |
| | | IconPath = "Device/DimmableLight.png"; |
| | | } |
| | | else if (CommonDevice != null)
|
| | | {
|
| | | //其他的图标有点特殊
|
| | | string unSelectPic = string.Empty;
|
| | | string selectPic = string.Empty;
|
| | | LocalDevice.Current.GetDeviceBeloneIcon(new List<CommonDevice> { CommonDevice }, ref unSelectPic, ref selectPic);
|
| | | IconPath = unSelectPic;
|
| | | } |
| | | } |
| | | Global.WriteFileByBytesByHomeId(FileName, System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this))); |
| | | } |
| | | |
| | | #endregion |
| | |
| | | { |
| | | case DeviceType.OnOffSwitch: |
| | | //控制面板 |
| | | ImagePath= "Device/DryContact.png"; |
| | | ImagePath = "Device/DryContact.png"; |
| | | break; |
| | | case DeviceType.OnOffOutput: |
| | | //继电器 |
| | | ImagePath= "Device/Relay.png"; |
| | | ImagePath = "Device/Relay.png"; |
| | | break; |
| | | case DeviceType.DimmableLight: |
| | | //调光灯 |
| | | ImagePath= "Device/DimmableLight.png"; |
| | | ImagePath = "Device/DimmableLight.png"; |
| | | break; |
| | | case DeviceType.WindowCoveringDevice: |
| | | //窗帘 |
| | | ImagePath= "Device/Curtain.png"; |
| | | ImagePath = "Device/Curtain.png"; |
| | | break; |
| | | case DeviceType.Thermostat: |
| | | //空调 |
| | | ImagePath= "Device/AirConditioner.png"; |
| | | ImagePath = "Device/AirConditioner.png"; |
| | | break; |
| | | case DeviceType.IASZone: |
| | | //传感器 |
| | | ImagePath= "Device/Sensor.png"; |
| | | ImagePath = "Device/Sensor.png"; |
| | | break; |
| | | case DeviceType.AirSwitch: |
| | | //空气开关 |
| | | ImagePath= "Device/AirSwitch.png"; |
| | | ImagePath = "Device/AirSwitch.png"; |
| | | break; |
| | | case DeviceType.Repeater: |
| | | //中继器 |
| | | ImagePath = "Device/AirSwitch.png"; |
| | | break; |
| | | case DeviceType.TemperatureSensor: |
| | | //温湿度传感器 |
| | | ImagePath = "Device/Sensor.png"; |
| | | break; |
| | | default: |
| | | ImagePath= "Device/Relay.png"; |
| | | ImagePath = "Device/Relay.png"; |
| | | break; |
| | | } |
| | | return ImagePath; |
| | |
| | | //中继器 |
| | | deviceTypeR = R.MyInternationalizationString.Repeater; |
| | | break; |
| | | case DeviceType.DoorLock: |
| | | //门锁 |
| | | deviceTypeR = R.MyInternationalizationString.DoorLock; |
| | | break; |
| | | |
| | | case DeviceType.TemperatureSensor: |
| | | //温度传感器 |
| | | deviceTypeR = R.MyInternationalizationString.TemperatureAndHumiditySensor; |
| | | break; |
| | | default: |
| | | deviceTypeR = R.MyInternationalizationString.UnknowDevice; |
| | | break; |
| | |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ◆ 通过id获取设备区域_____________ |
| | | |
| | | /// <summary> |
| | | /// GetZone |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public string GetZone() |
| | | { |
| | | var room = Room.CurrentRoom.GetRoomByDevice(CommonDevice); |
| | | if (room == null) |
| | | { |
| | | return Language.StringByID(R.MyInternationalizationString.UnallocatedArea); |
| | | } |
| | | if(string.IsNullOrEmpty(room.FloorId)) |
| | | { |
| | | return room.Name; |
| | | } |
| | | var floorName = Config.Instance.Home.GetFloorNameById(room.FloorId); |
| | | if (floorName == null) |
| | | { |
| | | return room.Name; |
| | | } |
| | | return $"{floorName},{room.Name}"; |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | /// <summary> |
| | | /// GetDeviceStatu |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public string GetDeviceStatu() |
| | | { |
| | | var device = CommonDevice; |
| | | if (device.Type == DeviceType.OnOffOutput) |
| | | { |
| | | if ((device as ToggleLight).OnOffStatus == 1) |
| | | { |
| | | return Language.StringByID(R.MyInternationalizationString.Open); |
| | | } |
| | | return Language.StringByID(R.MyInternationalizationString.Shut); |
| | | } |
| | | else if (device.Type == DeviceType.AirSwitch) |
| | | { |
| | | if ((device as ZigBee.Device.AirSwitch).OnOffStatus == 1) |
| | | { |
| | | return Language.StringByID(R.MyInternationalizationString.Open); |
| | | } |
| | | return Language.StringByID(R.MyInternationalizationString.Shut); |
| | | } |
| | | else if (device.Type == DeviceType.DimmableLight) |
| | | { |
| | | if ((device as DimmableLight).OnOffStatus == 0 || (device as DimmableLight).Level == 0) |
| | | { |
| | | return Language.StringByID(R.MyInternationalizationString.Shut); |
| | | } |
| | | return $"{(int)((device as DimmableLight).Level * 1.0 / 254 * 100)}%"; |
| | | } |
| | | else if (device.Type == DeviceType.WindowCoveringDevice) |
| | | { |
| | | if ((device as Rollershade).WcdCurrentPositionLiftPercentage == 0) |
| | | { |
| | | return Language.StringByID(R.MyInternationalizationString.Shut); |
| | | } |
| | | return $"{(device as Rollershade).WcdCurrentPositionLiftPercentage}%"; |
| | | } |
| | | else if (device.Type == DeviceType.Thermostat) |
| | | { |
| | | //温度,模式,风速 |
| | | string tempareture = string.Empty; |
| | | string model = string.Empty; |
| | | string wind = string.Empty; |
| | | |
| | | var ac = CommonDevice as AC; |
| | | |
| | | if (ac.currentSystemMode == 0) |
| | | { |
| | | return Language.StringByID(R.MyInternationalizationString.Shut); |
| | | } |
| | | else if (ac.currentSystemMode == 1) |
| | | { |
| | | model = Language.StringByID(R.MyInternationalizationString.Mode_Auto); |
| | | tempareture = $"{ac.currentCoolingSetpoint} ℃"; |
| | | } |
| | | else if (ac.currentSystemMode == 3) |
| | | { |
| | | model = Language.StringByID(R.MyInternationalizationString.Mode_Cool); |
| | | tempareture = $"{ac.currentCoolingSetpoint} ℃"; |
| | | } |
| | | else if (ac.currentSystemMode == 4) |
| | | { |
| | | model = Language.StringByID(R.MyInternationalizationString.Mode_Heat); |
| | | tempareture = $"{ac.currentHeatingSetpoint} ℃"; |
| | | } |
| | | else if (ac.currentSystemMode == 7) |
| | | { |
| | | model = Language.StringByID(R.MyInternationalizationString.Mode_FanOnly); |
| | | } |
| | | else if (ac.currentSystemMode == 8) |
| | | { |
| | | model = Language.StringByID(R.MyInternationalizationString.Mode_Dry); |
| | | tempareture = $"{ac.currentCoolingSetpoint} ℃"; |
| | | } |
| | | |
| | | if (ac.currentFanMode == 1) |
| | | { |
| | | wind = Language.StringByID(R.MyInternationalizationString.Fan_Low); |
| | | } |
| | | else if (ac.currentFanMode == 2) |
| | | { |
| | | wind = Language.StringByID(R.MyInternationalizationString.Fan_Middle); |
| | | } |
| | | else |
| | | { |
| | | wind = Language.StringByID(R.MyInternationalizationString.Fan_Height); |
| | | } |
| | | |
| | | if (string.IsNullOrEmpty(tempareture)) |
| | | { |
| | | return $"{model},{wind}"; |
| | | } |
| | | return $"{model},{wind},{tempareture}"; |
| | | } |
| | | else if (device.Type == DeviceType.IASZone) |
| | | { |
| | | var ias = CommonDevice as IASZone; |
| | | //区分传感器具体类型 |
| | | var info = Common.LocalDevice.Current.GetNotHdlMyDeviceEnumInfo(new List<CommonDevice> { device },false); |
| | | if (info.ConcreteType == DeviceConcreteType.Sensor_Infrared) |
| | | { |
| | | //红外 |
| | | if (ias.iASInfo?.Alarm1 == 1) |
| | | { |
| | | return Language.StringByID(R.MyInternationalizationString.IASZone_Statu_HavePerson); |
| | | } |
| | | return Language.StringByID(R.MyInternationalizationString.IASZone_Statu_NoPerson); |
| | | } |
| | | else if (info.ConcreteType == DeviceConcreteType.Sensor_Water) |
| | | { |
| | | //水浸 |
| | | if (ias.iASInfo?.Alarm1 == 1) |
| | | { |
| | | return Language.StringByID(R.MyInternationalizationString.IASZone_Statu_HaveWater); |
| | | } |
| | | return Language.StringByID(R.MyInternationalizationString.IASZone_Statu_Normal); |
| | | } |
| | | else if (info.ConcreteType == DeviceConcreteType.Sensor_DoorWindow) |
| | | { |
| | | //门窗 |
| | | if (ias.iASInfo?.Alarm1 == 1) |
| | | { |
| | | return Language.StringByID(R.MyInternationalizationString.IASZone_Statu_Open); |
| | | } |
| | | return Language.StringByID(R.MyInternationalizationString.IASZone_Statu_Close); |
| | | } |
| | | else if (info.ConcreteType == DeviceConcreteType.Sensor_CarbonMonoxide) |
| | | { |
| | | //燃气 |
| | | if (ias.iASInfo?.Alarm1 == 1) |
| | | { |
| | | return Language.StringByID(R.MyInternationalizationString.IASZone_Statu_Alarm); |
| | | } |
| | | return Language.StringByID(R.MyInternationalizationString.IASZone_Statu_Safe); |
| | | } |
| | | else if (info.ConcreteType == DeviceConcreteType.Sensor_Fire) |
| | | { |
| | | //烟雾 |
| | | if (ias.iASInfo?.Alarm1 == 1) |
| | | { |
| | | return Language.StringByID(R.MyInternationalizationString.IASZone_Statu_Alarm); |
| | | } |
| | | return Language.StringByID(R.MyInternationalizationString.IASZone_Statu_Safe); |
| | | } |
| | | else if (info.ConcreteType == DeviceConcreteType.Sensor_Pir) |
| | | { |
| | | //pir |
| | | if (ias.iASInfo?.Alarm1 == 1) |
| | | { |
| | | return Language.StringByID(R.MyInternationalizationString.IASZone_Statu_Alarm); |
| | | } |
| | | return Language.StringByID(R.MyInternationalizationString.IASZone_Statu_Safe); |
| | | } |
| | | else if (info.ConcreteType == DeviceConcreteType.Sensor_Keyfob) |
| | | { |
| | | //钥匙扣 |
| | | if (ias.iASInfo?.Alarm1 == 1) |
| | | { |
| | | return Language.StringByID(R.MyInternationalizationString.IASZone_Statu_Alarm); |
| | | } |
| | | return Language.StringByID(R.MyInternationalizationString.IASZone_Statu_Normal); |
| | | } |
| | | else if (info.ConcreteType == DeviceConcreteType.Sensor_Motion) |
| | | { |
| | | //运动传感器 |
| | | if (ias.iASInfo?.Alarm1 == 1) |
| | | { |
| | | return Language.StringByID(R.MyInternationalizationString.IASZone_Statu_Alarm); |
| | | } |
| | | return Language.StringByID(R.MyInternationalizationString.IASZone_Statu_Normal); |
| | | } |
| | | else if (info.ConcreteType == DeviceConcreteType.Sensor_EmergencyButton) |
| | | { |
| | | //紧急按钮 |
| | | if (ias.iASInfo?.Alarm1 == 1) |
| | | { |
| | | return Language.StringByID(R.MyInternationalizationString.IASZone_Statu_Alarm); |
| | | } |
| | | return Language.StringByID(R.MyInternationalizationString.IASZone_Statu_Normal); |
| | | } |
| | | return null; |
| | | } |
| | | else if (device.Type == DeviceType.TemperatureSensor) |
| | | { |
| | | var tempera = CommonDevice as TemperatureSensor; |
| | | if(tempera.SensorDiv==1) |
| | | { |
| | | if (tempera.Temperatrue == 0) |
| | | { |
| | | return "--℃"; |
| | | } |
| | | return $"{tempera.Temperatrue}℃"; |
| | | } |
| | | else if(tempera.SensorDiv==2) |
| | | { |
| | | if (tempera.Humidity == 0) |
| | | { |
| | | return "--%"; |
| | | } |
| | | return $"{tempera.Humidity}%"; |
| | | } |
| | | return null; |
| | | } |
| | | else |
| | | { |
| | | return null; |
| | | } |
| | | } |
| | | } |
| | | } |