using System;
using System.Collections;
using System.Collections.Generic;
using Newtonsoft.Json.Linq;
using Shared;
namespace HDL_ON.Entity
{
public class AC : Function
{
/*
* 空调:trait: [switch, mode, fan, temperature, swing, lock]
* 属性 描述
* on_off on/off
* mode mode: auto, cool, heat, dry, fan
* fan high, medium, low, auto
* temperature up,down,value
* swing up/down/left/right
* lock boolean (Lock锁定控制)
*/
public AC()
{
}
///
/// 当前温度模式
/// 0:摄氏度
/// 1:华氏度
///
[Newtonsoft.Json.JsonIgnore]
public int curTempType = 0;
///
/// 当前温度模式字符
///
public string tempUnitString
{
get
{
if (curTempType == 0)
{
return "°C";
}
else
{
return "°F";
}
}
}
///
/// 当前模式索引
/// bus控制命令使用
///
[Newtonsoft.Json.JsonIgnore]
public byte curModeIndex
{
get
{
try
{
byte index = 0;
switch (trait_mode.value.ToString())
{
case "auto":
index = 3;
break;
case "cool":
index = 0;
break;
case "heat":
index = 1;
break;
case "dry":
index = 4;
break;
case "fan":
index = 2;
break;
default:
index = 0;
break;
}
return index;
}
catch (Exception ex)
{
MainPage.Log($"get curModeIndex error : {ex.Message}");
return 0;
}
}
set
{
switch (value)
{
case 0:
trait_mode.value = "cool";
break;
case 1:
trait_mode.value = "heat";
break;
case 2:
trait_mode.value = "fan";
break;
case 3:
trait_mode.value = "auto";
break;
case 4:
trait_mode.value = "dry";
break;
default:
trait_mode.value = "cool";
break;
}
}
}
///
/// 当前风速索引
/// bus控制命令使用
///
[Newtonsoft.Json.JsonIgnore]
public byte curFanIndex
{
get
{
try
{
byte index = 0;
switch (trait_fan.value.ToString())
{
case "high":
index = 1;
break;
case "medium":
index = 2;
break;
case "low":
index = 3;
break;
case "auto":
index = 0;
break;
default:
index = 0;
break;
}
return index;
}
catch (Exception ex)
{
MainPage.Log($"get curFanIndex error : {ex.Message}");
return 0;
}
}
set
{
switch (value)
{
case 0:
trait_fan.value = "auto";
break;
case 1:
trait_fan.value = "high";
break;
case 2:
trait_fan.value = "medium";
break;
case 3:
trait_fan.value = "low";
break;
default:
trait_fan.value = "high";
break;
}
}
}
Trait _trait_mode;
///
/// 模式属性
///
[Newtonsoft.Json.JsonIgnore]
public Trait trait_mode
{
get
{
if (_trait_mode == null)
{
_trait_mode = function.Find((obj) => obj.name == "mode");
//找不到属性需要声明一个,防止报错闪退
if (_trait_mode == null)
{
_trait_mode = new Trait()
{
name = "mode",
value_key = new List { "auto", "cool", "heat", "dry", "fan" },
max = 4,
min = 0,
};
}
_trait_mode.value = _trait_mode.value_key.Count > 0 ? _trait_mode.value_key[0] : "";
}
return _trait_mode;
}
}
Trait _trait_fan;
[Newtonsoft.Json.JsonIgnore]
public Trait trait_fan
{
get
{
if (_trait_fan == null)
{
_trait_fan = function.Find((obj) => obj.name == "fan");
//找不到属性需要声明一个,防止报错闪退
if (_trait_fan == null)
{
_trait_fan = new Trait()
{
name = "fan",
value_key = new List { "high", "medium", "low", "auto" },
max = 3,
min = 0,
};
}
_trait_fan.value = _trait_fan.value_key.Count > 0 ? _trait_fan.value_key[0] : "";
}
return _trait_fan;
}
}
Trait _trait_temp;
///
/// 当前空调温度
///
[Newtonsoft.Json.JsonIgnore]
public Trait trait_temp
{
get
{
if (_trait_temp == null)
{
_trait_temp = function.Find((obj) => obj.name == "temperature");
//找不到属性需要声明一个,防止报错闪退
if (_trait_temp == null)
{
_trait_temp = new Trait()
{
name = "temperature",
value_key = new List { },
max = 32,
min = 16,
};
}
_trait_temp.value = 16;
}
return _trait_temp;
}
}
Trait _trait_swting;
[Newtonsoft.Json.JsonIgnore]
public Trait trait_swting
{
get
{
if (_trait_swting == null)
{
_trait_swting = function.Find((obj) => obj.name == "swting");
//找不到属性需要声明一个,防止报错闪退
if (_trait_swting == null)
{
_trait_swting = new Trait()
{
name = "swting",
value_key = new List { "up", "down", "left", "right" },
max = 3,
min = 0,
};
}
_trait_swting.value = _trait_swting.value_key.Count > 0 ? _trait_swting.value_key[trait_mode.min] : "";
}
return _trait_swting;
}
}
///
/// 空调扫风模式列表
///
[Newtonsoft.Json.JsonIgnore]
public List swting
{
get
{
try
{
return trait_swting.value_key;
}
catch (Exception ex)
{
MainPage.Log($"ac get swting error : {ex.Message}");
return new List { "up", "down", "left", "right" };
}
}
}
///
/// 室内温度
///
[Newtonsoft.Json.JsonIgnore]
public int indoorTemp = 20;
///
/// 当前模式的icon路径
///
[Newtonsoft.Json.JsonIgnore]
public string curModeImage
{
get
{
try
{
var imagePath = "FunctionIcon/AC/CoolIcon.png";
switch (trait_mode.value.ToString())
{
case "auto":
imagePath = "FunctionIcon/AC/AutoIcon.png";
break;
case "cool":
imagePath = "FunctionIcon/AC/CoolIcon.png";
break;
case "heat":
imagePath = "FunctionIcon/AC/HeatingIcon.png";
break;
case "dry":
imagePath = "FunctionIcon/AC/DehumidificationIcon.png";
break;
case "fan":
imagePath = "FunctionIcon/AC/AirSupplyIcon.png";
break;
default:
imagePath = "FunctionIcon/AC/CoolIcon.png";
break;
}
return imagePath;
}
catch (Exception ex)
{
MainPage.Log($"ac ge curModeImage error : {ex.Message}");
return "FunctionIcon/AC/CoolIcon.png";
}
}
}
///
/// 当前风速的icon路径
///
[Newtonsoft.Json.JsonIgnore]
public string curFanImage
{
get
{
try
{
var imagePath = "FunctionIcon/AC/WindHighIcon.png";
switch (trait_fan.value.ToString())
{
case "high":
imagePath = "FunctionIcon/AC/WindHighIcon.png";
break;
case "medium":
imagePath = "FunctionIcon/AC/WindMediumIcon.png";
break;
case "low":
imagePath = "FunctionIcon/AC/WindLowIcon.png";
break;
case "auto":
imagePath = "FunctionIcon/AC/AutoIcon.png";
break;
default:
imagePath = "FunctionIcon/AC/WindHighIcon.png";
break;
}
return imagePath;
}catch (Exception ex)
{
MainPage.Log($"ac get curFanImage error : {ex.Message}");
return "FunctionIcon/AC/WindHighIcon.png";
}
}
}
///
/// 拼接、获取A协议操作数据
///
public override JObject GetSendJObject(CommandType_A command)
{
var sendJob = new JObject();
if (command == CommandType_A.write)
{
sendJob = new JObject { { "Namespace", vendor_code }, { "Command", command.ToString() }, { "Type", "device" } };
JObject data = new JObject { { "sid", sid } };
sendJob.Add("objects", data);
List controlData = new List();
controlData.Add(new ControlData()
{
name = "on_off",
data_type = "Bool",
value = trait_on_off.value.ToString()
});
}
else if (command == CommandType_A.read)
{
sendJob = new JObject { { "Namespace", vendor_code }, { "Command", command.ToString() }, { "Type", "device" } };
var data = new JObject { { "sid", sid } };
sendJob.Add("objects", data);
}
return sendJob;
}
}
}