using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Threading;
|
using HDL_ON.Common;
|
using HDL_ON.DAL;
|
using HDL_ON.DAL.Server;
|
using Shared;
|
|
namespace HDL_ON.Entity
|
{
|
public class FunctionList
|
{
|
static FunctionList _FunctionList;
|
public static FunctionList List
|
{
|
get
|
{
|
if(_FunctionList == null)
|
{
|
_FunctionList = new FunctionList();
|
#region 恢复数据
|
var filePathList = FileUtlis.Files.ReadFiles();
|
foreach (var filePath in filePathList)
|
{
|
_FunctionList.IniFunctionList(filePath);
|
}
|
#endregion
|
}
|
return _FunctionList;
|
}
|
}
|
/// <summary>
|
/// 功能列表
|
/// </summary>
|
public List<Function> Functions = new List<Function>();
|
|
|
|
|
|
/// <summary>
|
/// 空调列表
|
/// </summary>
|
public List<AC> aCs = new List<AC>();
|
/// <summary>
|
/// 灯光列表
|
/// </summary>
|
public List<Light> lights = new List<Light>();
|
/// <summary>
|
/// 窗帘列表
|
/// </summary>
|
public List<Curtain> curtains = new List<Curtain>();
|
/// <summary>
|
/// 地热列表
|
/// </summary>
|
public List<FloorHeating> floorHeatings = new List<FloorHeating>();
|
#region 家电列表 electricals
|
/// <summary>
|
/// 家电列表
|
/// </summary>
|
public List<Function> electricals
|
{
|
get
|
{
|
if(fans == null)
|
{
|
fans = new List<Fan>();
|
}
|
if(switchSockets == null)
|
{
|
switchSockets = new List<SwitchSocket>();
|
}
|
if(tVs == null)
|
{
|
tVs = new List<TV>();
|
}
|
if (airCleaners == null)
|
{
|
airCleaners = new List<AirCleaner>();
|
}
|
if (weepRobots == null)
|
{
|
weepRobots = new List<WeepRobot>();
|
}
|
if(waterValveList == null)
|
{
|
waterValveList = new List<Function>();
|
}
|
if(clothesHangerList == null)
|
{
|
clothesHangerList = new List<Function>();
|
}
|
var list = new List<Function>();
|
list.AddRange(fans);
|
list.AddRange(switchSockets);
|
list.AddRange(tVs);
|
list.AddRange(airCleaners);
|
list.AddRange(weepRobots);
|
list.AddRange(waterValveList);
|
list.AddRange(clothesHangerList);
|
return list;
|
}
|
}
|
/// <summary>
|
/// 风扇列表
|
/// </summary>
|
public List<Fan> fans = new List<Fan>();
|
/// <summary>
|
/// 电视列表
|
/// </summary>
|
public List<TV> tVs = new List<TV>();
|
/// <summary>
|
/// 家电列表
|
/// </summary>
|
public List<SwitchSocket> switchSockets = new List<SwitchSocket>();
|
/// <summary>
|
/// 空气净化器列表
|
/// </summary>
|
public List<AirCleaner> airCleaners = new List<AirCleaner>();
|
/// <summary>
|
/// 扫地机器人列表
|
/// </summary>
|
public List<WeepRobot> weepRobots = new List<WeepRobot>();
|
/// <summary>
|
/// 水阀列表
|
/// </summary>
|
public List<Function> waterValveList = new List<Function>();
|
/// <summary>
|
/// 凉霸列表
|
/// </summary>
|
public List<Function> clothesHangerList = new List<Function>();
|
/// <summary>
|
/// 红外宝列表
|
/// </summary>
|
public List<Function> irModule = new List<Function>();
|
|
#endregion
|
/// <summary>
|
/// 环境传感器列表
|
/// </summary>
|
public List<Sensor> sensorsEnvironmentalScience = new List<Sensor>();
|
/// <summary>
|
/// 安防设备列表
|
/// </summary>
|
public List<Sensor> sensorsArm = new List<Sensor>();
|
|
public List<Scene> scenes = new List<Scene>();
|
/// <summary>
|
/// 功能列表
|
/// </summary>
|
List<Function> deviceFunctionList = new List<Function>();
|
|
|
/// <summary>
|
/// 加载功能列表
|
/// todo 需要优化,后期不能保证能使用sid解析出是什么类型的设备
|
/// </summary>
|
/// <param name="filePath"></param>
|
public void IniFunctionList(string filePath)
|
{
|
// todo 增加设备,增加功能进功能列表
|
if (filePath.StartsWith("FunctionData_"))
|
{
|
var functionDataBytes = Common.FileUtlis.Files.ReadFile(filePath);
|
var functionDataString = System.Text.Encoding.UTF8.GetString(functionDataBytes);
|
var tempFunction = Newtonsoft.Json.JsonConvert.DeserializeObject<Function>(functionDataString);
|
if (tempFunction == null)
|
{
|
FileUtlis.Files.DeleteFile(filePath);
|
return;
|
}
|
{
|
switch (tempFunction.spk)
|
{
|
case SPK.LightSwitch:
|
case SPK.LightDimming:
|
case SPK.LightRGB:
|
case SPK.LightRGBW:
|
case SPK.LightCCT:
|
var light = Newtonsoft.Json.JsonConvert.DeserializeObject<Light>(functionDataString);
|
List.lights.Add(light);
|
deviceFunctionList.Add(light);
|
break;
|
case SPK.CurtainRoller:
|
case SPK.CurtainShades:
|
case SPK.CurtainSwitch:
|
case SPK.CurtainTrietex:
|
var curtain = Newtonsoft.Json.JsonConvert.DeserializeObject<Curtain>(functionDataString);
|
List.curtains.Add(curtain);
|
deviceFunctionList.Add(curtain);
|
break;
|
case SPK.AcStandard:
|
var ac = Newtonsoft.Json.JsonConvert.DeserializeObject<AC>(functionDataString);
|
List.aCs.Add(ac);
|
deviceFunctionList.Add(ac);
|
break;
|
case SPK.FloorHeatStandard:
|
var fh = Newtonsoft.Json.JsonConvert.DeserializeObject<FloorHeating>(functionDataString);
|
List.floorHeatings.Add(fh);
|
deviceFunctionList.Add(fh);
|
break;
|
case SPK.SensorPm25:
|
case SPK.SensorCO2:
|
case SPK.SensorTVOC:
|
case SPK.SensorTemperature:
|
case SPK.SensorHumidity:
|
var sensor = Newtonsoft.Json.JsonConvert.DeserializeObject<Sensor>(functionDataString);
|
List.sensorsEnvironmentalScience.Add(sensor);
|
deviceFunctionList.Add(sensor);
|
break;
|
case SPK.ElectricSocket:
|
var ele = Newtonsoft.Json.JsonConvert.DeserializeObject<SwitchSocket>(functionDataString);
|
List.switchSockets.Add(ele);
|
deviceFunctionList.Add(ele);
|
break;
|
case SPK.ElectricTV:
|
var tv = Newtonsoft.Json.JsonConvert.DeserializeObject<TV>(functionDataString);
|
List.tVs.Add(tv);
|
deviceFunctionList.Add(tv);
|
break;
|
case SPK.ElectricFan:
|
var fan = Newtonsoft.Json.JsonConvert.DeserializeObject<Fan>(functionDataString);
|
List.fans.Add(fan);
|
deviceFunctionList.Add(fan);
|
break;
|
case SPK.ElectricTuyaAirCleaner:
|
var airCleaner = Newtonsoft.Json.JsonConvert.DeserializeObject<AirCleaner>(functionDataString);
|
List.airCleaners.Add(airCleaner);
|
deviceFunctionList.Add(airCleaner);
|
break;
|
case SPK.ElectricTuyaFan:
|
var tuyaFan = Newtonsoft.Json.JsonConvert.DeserializeObject<Fan>(functionDataString);
|
List.fans.Add(tuyaFan);
|
deviceFunctionList.Add(tuyaFan);
|
break;
|
case SPK.ElectricTuyaWeepRobot:
|
var tuyaWeepRobot = Newtonsoft.Json.JsonConvert.DeserializeObject<WeepRobot>(functionDataString);
|
List.weepRobots.Add(tuyaWeepRobot);
|
deviceFunctionList.Add(tuyaWeepRobot);
|
break;
|
case SPK.ElectricTuyaWaterValve:
|
var tuyaWaterValve = Newtonsoft.Json.JsonConvert.DeserializeObject<Function>(functionDataString);
|
List.waterValveList.Add(tuyaWaterValve);
|
deviceFunctionList.Add(tuyaWaterValve);
|
break;
|
case SPK.SensorSmoke:
|
case SPK.SensorWater:
|
case SPK.SensorDoorWindow:
|
case SPK.SensorPir:
|
var ser = Newtonsoft.Json.JsonConvert.DeserializeObject<Sensor>(functionDataString);
|
List.sensorsArm.Add(ser);
|
deviceFunctionList.Add(ser);
|
break;
|
case SPK.ClothesHanger:
|
var ch = Newtonsoft.Json.JsonConvert.DeserializeObject<Function>(functionDataString);
|
List.clothesHangerList.Add(ch);
|
deviceFunctionList.Add(ch);
|
break;
|
case SPK.IrModule:
|
var irm = Newtonsoft.Json.JsonConvert.DeserializeObject<Function>(functionDataString);
|
List.irModule.Add(irm);
|
deviceFunctionList.Add(irm);
|
break;
|
}
|
}
|
}
|
if (filePath.StartsWith("SceneData_"))
|
{
|
var sceneDataBytes = FileUtlis.Files.ReadFile(filePath);
|
var sceneDataString = System.Text.Encoding.UTF8.GetString(sceneDataBytes);
|
var tempScene = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene>(sceneDataString);
|
List.scenes.Add(tempScene);
|
}
|
}
|
|
/// <summary>
|
/// 获取设备功能列表
|
/// </summary>
|
public List<Function> GetDeviceFunctionList(SPK.BrandType brandType = SPK.BrandType.All)
|
{
|
if (deviceFunctionList == null || deviceFunctionList.Count == 0)
|
{
|
deviceFunctionList = new List<Function>();
|
deviceFunctionList.AddRange(aCs);
|
deviceFunctionList.AddRange(lights);
|
deviceFunctionList.AddRange(curtains);
|
deviceFunctionList.AddRange(floorHeatings);
|
deviceFunctionList.AddRange(electricals);
|
deviceFunctionList.AddRange(sensorsEnvironmentalScience);
|
deviceFunctionList.AddRange(sensorsArm);
|
deviceFunctionList.AddRange(UI.Music.A31MusicModel.A31MusicModelList);
|
try
|
{
|
deviceFunctionList = deviceFunctionList.OrderByDescending(o => o.controlCounter).ToList();
|
}
|
catch (Exception ex)
|
{
|
MainPage.Log($"设备功能排序异常:{ex.Message}");
|
}
|
}
|
|
List<Function> resultFunctions = new List<Function>();
|
if (brandType == SPK.BrandType.All)
|
{
|
}
|
else
|
{
|
switch (brandType)
|
{
|
case SPK.BrandType.Hdl:
|
foreach (var function in deviceFunctionList)
|
{
|
if (!SPK.Get3tySpk(SPK.BrandType.All3tyBrand).Contains(function.spk))
|
{
|
resultFunctions.Add(function);
|
}
|
}
|
break;
|
|
case SPK.BrandType.Tuya:
|
foreach (var function in deviceFunctionList)
|
{
|
if (SPK.Get3tySpk(SPK.BrandType.Tuya).Contains(function.spk))
|
{
|
resultFunctions.Add(function);
|
}
|
}
|
break;
|
}
|
return resultFunctions;
|
}
|
|
return deviceFunctionList;
|
}
|
|
/// <summary>
|
/// 清空设备功能列表
|
/// </summary>
|
public void Clear()
|
{
|
List.aCs = new List<AC>();
|
List.lights = new List<Light>();
|
List.curtains = new List<Curtain>();
|
List.floorHeatings = new List<FloorHeating>();
|
List.sensorsEnvironmentalScience = new List<Sensor>();
|
#region 家电
|
List.fans = new List<Fan>();
|
List.switchSockets = new List<SwitchSocket>();
|
List.tVs = new List<TV>();
|
List.airCleaners = new List<AirCleaner>();
|
List.weepRobots = new List<WeepRobot>();
|
List.waterValveList = new List<Function>();
|
List.clothesHangerList = new List<Function>();
|
#endregion
|
|
List.scenes = new List<Scene>();
|
List.deviceFunctionList = new List<Function>();
|
_FunctionList = null;
|
}
|
|
/// <summary>
|
/// 功能绑定房间
|
/// </summary>
|
public string FunctionsBindRooms(List<string> roomIds,List<string> deviceIds)
|
{
|
var pm = new HttpServerRequest();
|
var pack = pm.BindDeviceToRoom(deviceIds, roomIds);
|
if(pack.Code == StateCode.SUCCESS)
|
{
|
|
}
|
else
|
{
|
IMessageCommon.Current.ShowErrorInfoAlter(pack.Code);
|
}
|
return pack.Code;
|
}
|
|
/// <summary>
|
/// 删除场景
|
/// todo
|
/// </summary>
|
public void DeleteScene(Scene scene,bool upSevser)
|
{
|
if (upSevser)
|
{
|
var pm = new HttpServerRequest();
|
var packCode = pm.DeleteScene(scene.userSceneId);
|
if (packCode == StateCode.SUCCESS)
|
{
|
FileUtlis.Files.DeleteFile(scene.savePath);
|
List.scenes.Remove(scene);
|
}
|
else
|
{
|
IMessageCommon.Current.ShowErrorInfoAlter(packCode);
|
}
|
}
|
else
|
{
|
FileUtlis.Files.DeleteFile(scene.savePath);
|
List.scenes.Remove(scene);
|
}
|
}
|
/// <summary>
|
/// 删除本地功能及文件
|
/// </summary>
|
public void DeleteFunction(Function delTemp)
|
{
|
switch (delTemp.spk)
|
{
|
case SPK.LightSwitch:
|
case SPK.LightDimming:
|
case SPK.LightRGB:
|
case SPK.LightRGBW:
|
case SPK.LightCCT:
|
List.lights.Remove(List.lights.Find((obj) => obj.deviceId == delTemp.deviceId));
|
break;
|
case SPK.CurtainRoller:
|
case SPK.CurtainShades:
|
case SPK.CurtainSwitch:
|
case SPK.CurtainTrietex:
|
List.curtains.Remove(List.curtains.Find((obj) => obj.deviceId == delTemp.deviceId));
|
break;
|
case SPK.AcStandard:
|
List.aCs.Remove(List.aCs.Find((obj) => obj.deviceId == delTemp.deviceId));
|
break;
|
case SPK.FloorHeatStandard:
|
List.floorHeatings.Remove(List.floorHeatings.Find((obj) => obj.deviceId == delTemp.deviceId));
|
break;
|
case SPK.SensorPm25:
|
case SPK.SensorCO2:
|
case SPK.SensorTVOC:
|
case SPK.SensorTemperature:
|
case SPK.SensorHumidity:
|
List.sensorsEnvironmentalScience.Remove(List.sensorsEnvironmentalScience.Find((obj) => obj.deviceId == delTemp.deviceId));
|
break;
|
case SPK.ElectricSocket:
|
List.switchSockets.Remove(List.switchSockets.Find((obj) => obj.deviceId == delTemp.deviceId));
|
break;
|
case SPK.ElectricTV:
|
List.tVs.Remove(List.tVs.Find((obj) => obj.deviceId == delTemp.deviceId));
|
break;
|
case SPK.ElectricFan:
|
case SPK.ElectricTuyaFan:
|
List.fans.Remove(List.fans.Find((obj) => obj.deviceId == delTemp.deviceId));
|
break;
|
case SPK.ElectricTuyaAirCleaner:
|
List.airCleaners.Remove(List.airCleaners.Find((obj) => obj.deviceId == delTemp.deviceId));
|
break;
|
case SPK.ElectricTuyaWaterValve:
|
List.waterValveList.Remove(List.waterValveList.Find((obj) => obj.deviceId == delTemp.deviceId));
|
break;
|
case SPK.ElectricTuyaWeepRobot:
|
List.weepRobots.Remove(List.weepRobots.Find((obj) => obj.deviceId == delTemp.deviceId));
|
break;
|
case SPK.ClothesHanger:
|
List.clothesHangerList.Remove(List.clothesHangerList.Find((obj) => obj.deviceId == delTemp.deviceId));
|
break;
|
case SPK.SensorSmoke:
|
case SPK.SensorWater:
|
case SPK.SensorDoorWindow:
|
case SPK.SensorPir:
|
List.sensorsArm.Remove(List.sensorsArm.Find((obj)=>obj.deviceId == delTemp.deviceId));
|
break;
|
}
|
var removeTemp = deviceFunctionList.Find((obj) => obj.deviceId == delTemp.deviceId);
|
if(removeTemp!= null)
|
{
|
deviceFunctionList.Remove(removeTemp);
|
}
|
Common.FileUtlis.Files.DeleteFile(delTemp.savePath);
|
}
|
|
bool lockReadFunctionStatus = false;
|
|
/// <summary>
|
/// 读取第三方设备状态
|
/// </summary>
|
public void Read3tyFunctionStatus()
|
{
|
//读取涂鸦设备状态
|
if (GetDeviceFunctionList(SPK.BrandType.Tuya).Count > 0)
|
{
|
var page = new List<string>();
|
int count = 0;
|
foreach (var function in GetDeviceFunctionList(SPK.BrandType.Tuya))
|
{
|
page.Add(function.deviceId);
|
count++;
|
if (count > 9)
|
{
|
DriverLayer.Control.Ins.ReadFunctionsInfo(page);
|
page.Clear();
|
count = 0;
|
}
|
}
|
DriverLayer.Control.Ins.ReadFunctionsInfo(page);
|
}
|
|
}
|
|
/// <summary>
|
/// 读取全部功能的状态
|
/// </summary>
|
public void ReadAllFunctionStatus()
|
{
|
if (lockReadFunctionStatus)
|
{
|
MainPage.Log($"多次进入--返回");
|
return;
|
}
|
new Thread(() =>
|
{
|
if (lockReadFunctionStatus)
|
{
|
MainPage.Log($"多次进入--返回");
|
return;
|
}
|
MainPage.Log($"进入--读取");
|
lockReadFunctionStatus = true;
|
try
|
{
|
Read3tyFunctionStatus();
|
|
if(DriverLayer.Control.Ins.GatewayOnline_Local)
|
{
|
foreach (var function in GetDeviceFunctionList(SPK.BrandType.Hdl))
|
{
|
switch (function.Spk_Prefix)
|
{
|
case FunctionCategory.Music:
|
case FunctionCategory.DryContact:
|
continue;
|
}
|
DriverLayer.Control.Ins.SendReadCommand(function);
|
//switch (function.Spk_Prefix)
|
//{
|
// case FunctionCategory.Light:
|
// case FunctionCategory.Electric:
|
// case FunctionCategory.Curtain:
|
// case FunctionCategory.AC:
|
// case FunctionCategory.FloorHeat:
|
// case FunctionCategory.Sensor:
|
// DriverLayer.Control.Ins.SendReadCommand(function);
|
// break;
|
//}
|
}
|
}
|
else
|
{
|
var page = new List<string>();
|
int count = 0;
|
|
foreach (var function in GetDeviceFunctionList(SPK.BrandType.Hdl))
|
{
|
page.Add(function.deviceId);
|
count++;
|
if (count > 9)
|
{
|
DriverLayer.Control.Ins.SendApiReadCommand(page);
|
page.Clear();
|
count = 0;
|
}
|
}
|
DriverLayer.Control.Ins.SendApiReadCommand(page);
|
}
|
}
|
catch (Exception ex)
|
{
|
MainPage.Log($"Refresh Residence Function Status Error : {ex.Message}");
|
}
|
finally
|
{
|
lockReadFunctionStatus = false;
|
MainPage.Log($"结束--读取");
|
}
|
|
|
})
|
{ IsBackground = true }.Start();
|
}
|
#region 场景相关
|
/// <summary>
|
/// 添加场景
|
/// </summary>
|
public string AddScene(Scene scene, out Scene result)
|
{
|
Scene tempScene = null;
|
var pm = new HttpServerRequest();
|
var revPack = pm.AddScene(scene);
|
if (revPack.Code == StateCode.SUCCESS)
|
{
|
var sceneList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Scene>>(revPack.Data.ToString());
|
tempScene = sceneList.Find((obj) => obj.sid == scene.sid);
|
var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(tempScene));
|
FileUtlis.Files.WriteFileByBytes(scene.savePath, ssd);
|
result = tempScene;
|
}
|
else
|
{
|
result = tempScene;
|
}
|
return revPack.Code;
|
}
|
#endregion
|
|
#region 收藏功能
|
|
/// <summary>
|
/// 收藏场景
|
/// </summary>
|
public string CollectScene(Scene scene)
|
{
|
var result = "";
|
if (scene.collect)
|
{
|
result = ApiUtlis.Ins.HttpRequest.CollectDevice(scene.userSceneId).Code;
|
}
|
else
|
{
|
result = ApiUtlis.Ins.HttpRequest.CancelCollectDevice(scene.userSceneId).Code;
|
}
|
|
//提示错误
|
if (result != StateCode.SUCCESS)
|
{
|
IMessageCommon.Current.ShowErrorInfoAlter(result);
|
}
|
|
return result;
|
}
|
|
#endregion
|
|
|
#region
|
|
|
|
#endregion
|
}
|
|
}
|