.vs/HDL_APP_Project/xs/UserPrefs.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HDL_ON/DAL/DriverLayer/A_Protocol_Common.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HDL_ON/DAL/DriverLayer/Control.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HDL_ON/DAL/Mqtt/MqttClient.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HDL_ON/Entity/DB_ResidenceData.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HDL_ON/Entity/Function/Function.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HDL_ON/Entity/FunctionList.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HDL_ON/UI/UI2/1-HomePage/HomePage.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPageBLL.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HDL_ON/UI/UI2/UserPage.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
.vs/HDL_APP_Project/xs/UserPrefs.xml
@@ -1,24 +1,25 @@ <Properties StartupConfiguration="{D998E133-F0DD-4760-BE3C-461632F54DA4}|Default"> <MonoDevelop.Ide.ItemProperties.HDL-ON__iOS PreferredExecutionTarget="MonoDevelop.IPhone.IPhoneDeviceTarget.6242be7109c740c6cb8999a8904b6e0ea8d45192" /> <MonoDevelop.Ide.Workbench ActiveDocument="HDL_ON/UI/UI1-Login/LoginPage.cs"> <MonoDevelop.Ide.Workbench ActiveDocument="HDL_ON/DAL/DriverLayer/Control.cs"> <Files> <File FileName="HDL_ON/UI/MainPage.cs" Line="203" Column="62" /> <File FileName="HDL_ON/Entity/FunctionList.cs" /> <File FileName="HDL_ON/UI/UI2/4-PersonalCenter/MemberManagement/MemberManagementPage.cs" /> <File FileName="HDL_ON/Entity/Function/Function.cs" /> <File FileName="HDL_ON/DAL/DriverLayer/Control.cs" Line="239" Column="3" /> <File FileName="HDL_ON/DAL/Server/HttpServerRequest.cs" Line="621" Column="21" /> <File FileName="HDL_ON/Entity/DB_ResidenceData.cs" /> <File FileName="HDL_ON/DAL/Server/NewApiRes.cs" /> <File FileName="HDL_ON/UI/UI1-Login/LoginPage.cs" Line="26" Column="33" /> <File FileName="HDL_ON/DAL/Mqtt/MqttClient.cs" Line="468" Column="28" /> <File FileName="HDL_ON/DAL/DriverLayer/Packet.cs" Line="491" Column="5" /> <File FileName="HDL_ON/Entity/FunctionList.cs" Line="541" Column="64" /> <File FileName="HDL_ON/Entity/DB_ResidenceData.cs" Line="290" Column="69" /> <File FileName="HDL_ON/UI/UI2/UserPage.cs" Line="132" Column="25" /> <File FileName="HDL_ON/DAL/DriverLayer/Control.cs" Line="322" Column="54" /> <File FileName="HDL_ON/DAL/DriverLayer/Control_Udp.cs" Line="538" Column="21" /> </Files> <Pads> <Pad Id="ProjectPad"> <State name="__root__"> <Node name="HDL_APP_Project" expanded="True"> <Node name="HDL_ON" expanded="True"> <Node name="Common" expanded="True" /> <Node name="DAL" expanded="True"> <Node name="DriverLayer" expanded="True" /> <Node name="DriverLayer" expanded="True"> <Node name="Control.cs" selected="True" /> </Node> <Node name="Mqtt" expanded="True" /> <Node name="Server" expanded="True" /> </Node> @@ -26,9 +27,7 @@ <Node name="Function" expanded="True" /> </Node> <Node name="UI" expanded="True"> <Node name="UI1-Login" expanded="True"> <Node name="LoginPage.cs" selected="True" /> </Node> <Node name="UI1-Login" expanded="True" /> <Node name="UI2" expanded="True"> <Node name="1-HomePage" expanded="True" /> <Node name="3-Intelligence" expanded="True"> @@ -58,7 +57,7 @@ <MonoDevelop.Ide.DebuggingService.Breakpoints> <BreakpointStore> <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/FloorsManagementPage.cs" relfile="HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/FloorsManagementPage.cs" line="176" column="1" /> <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/DAL/Server/HttpServerRequest.cs" relfile="HDL_ON/DAL/Server/HttpServerRequest.cs" line="631" column="1" /> <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/Entity/FunctionList.cs" relfile="HDL_ON/Entity/FunctionList.cs" line="534" column="1" /> </BreakpointStore> </MonoDevelop.Ide.DebuggingService.Breakpoints> <MultiItemStartupConfigurations /> HDL_ON/DAL/DriverLayer/A_Protocol_Common.cs
@@ -75,7 +75,9 @@ /// </summary> public const string BusPcGetAppSids = "/user/onpro/custom/function/list/get"; /// <summary> /// 本地控制功能状态主题 /// </summary> public string ControlFunctionTopic { get @@ -83,5 +85,15 @@ return $"/base/{Control.Ins.GatewayId}/thing/property/down"; } } /// <summary> /// 读取功能状态 /// </summary> public string ReadStatus { get { return $"/base/{Control.Ins.GatewayId}/thing/property/read"; } } } } HDL_ON/DAL/DriverLayer/Control.cs
@@ -70,6 +70,7 @@ _gatewayOnline = value; //修改主页连接状态 UI.HomePage.LoadEvent_CheckLinkStatus(); FunctionList.List.ReadAllFunctionStatus(); } } /// <summary> @@ -228,7 +229,7 @@ function.refreshTime = DateTime.Now; DAL.Server.HttpServerRequest httpServer = new DAL.Server.HttpServerRequest(); //远程通讯 if (!Ins.IsRemote) if (Ins.IsRemote || true) { //ALink控制、Bus控制使用同一个接口控制,由云端负责解析 var apiControlData = function.GetApiControlData(commandDictionary); @@ -240,7 +241,7 @@ //本地通讯 else { //ALink控制 //Bus控制 if (DB_ResidenceData.residenceData.GatewayType == 0) { try @@ -255,7 +256,7 @@ MainPage.Log($"发送数据异常: {ex.Message}"); } } //Bus控制 //ALink控制 else { if (myUdp != null) @@ -264,7 +265,6 @@ var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(functionControlDataObj); var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ControlFunctionTopic, functionControlDataJson); myUdp.SendLocalHdlLinkData(sendBytes); //MainPage.Log($"发送本地HDL-Link数据{functionControlDataJson}\r\n"); } } } @@ -277,25 +277,58 @@ public void SendReadCommand(Function function) { function.refreshTime = DateTime.Now; if (function.bus_Data != null) if (Ins.IsRemote) { try { //ReadBusData(function); } catch (Exception ex) { MainPage.Log($"发送数据异常: {ex.Message}"); } } else { //var commandObj = function.GetSendJObject(CommandType_A.read); //var commandString = Newtonsoft.Json.JsonConvert.SerializeObject(commandObj); //var commandBytes = System.Text.Encoding.UTF8.GetBytes(commandString); //MqttCommon.MqttRemoteSend(commandBytes); if (function.bus_Data != null) { try { Ins.myUdp.ReadBusData(function); } catch (Exception ex) { MainPage.Log($"发送数据异常: {ex.Message}"); } } else { var readKey = new Dictionary<string, string>(); readKey.Add("sid", function.sid); var readDataObj = new GatewayAlinkReadObj() { id = Ins.msg_id.ToString(), objects = new List<Dictionary<string, string>>() { readKey }, //time_stamp = }; var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(readDataObj); var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ReadStatus, functionControlDataJson); Ins.myUdp.SendLocalHdlLinkData(sendBytes); } } } /// <summary> /// 发送A协议读取命令 /// </summary> public void SendReadCommand(List<Dictionary<string, string>> keyValuePairs) { var readDataObj = new GatewayAlinkReadObj() { id = Ins.msg_id.ToString(), objects = keyValuePairs, //time_stamp = }; var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(readDataObj); var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ReadStatus, functionControlDataJson); Ins.myUdp.SendLocalHdlLinkData(sendBytes); } /// <summary> /// 控制a协议场景 HDL_ON/DAL/Mqtt/MqttClient.cs
@@ -10,6 +10,7 @@ using System.Security.Cryptography; using HDL_ON.DriverLayer; using HDL_ON.Entity; using HDL_ON.UI; namespace HDL_ON.DAL.Mqtt { @@ -285,6 +286,161 @@ else { //A协议数据处理 var revString = System.Text.Encoding.UTF8.GetString(e.ApplicationMessage.Payload); var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<GatewayAlinkControlObj>(revString); if (temp != null) { var allLocalFuntion = FunctionList.List.GetAllDeviceFunctionList(); foreach (var updateTemp in temp.objects) { bool hadChange = false;//状态有变化再更新界面 var updataObj = allLocalFuntion.Find((obj) => obj.sid == updateTemp.sid); if (updataObj != null) { foreach (var attr in updateTemp.status) { foreach (var locatAttr in updataObj.attributes) { if (attr.key == locatAttr.key) { if (locatAttr.curValue.ToString() == attr.value) { continue; } locatAttr.curValue = attr.value; hadChange = true; } } } if(!hadChange)//状态有变化再更新界面 { continue; } //更新界面状态 switch (updataObj.spk) { case SPK.LightSwitch: RelayPage.UpdataState(updataObj as Light); break; case SPK.LightDimming: var dimming = updataObj as Light; dimming.lastState = Language.StringByID(StringId.Brightness) + " : " + dimming.brightness + "%"; DimmerPage.UpdataStates(dimming); break; case SPK.ElectricFan: var fan = updataObj as Fan; fan.lastState = Language.StringByID(StringId.Level) + " : " + fan.openLevel; FanPage.UpdataState(fan); break; case SPK.LightRGB: var rgb = updataObj as Light; rgb.lastState = Language.StringByID(StringId.Brightness) + " : " + rgb.brightness + "%"; RGBPage.UpdataStates(rgb); break; case SPK.LightRGBW: case SPK.LightCCT: break; case SPK.CurtainSwitch: var curtain = updataObj as Curtain; curtain.lastState = curtain.trait_on_off.curValue.ToString() == "on" ? Language.StringByID(StringId.Open) : Language.StringByID(StringId.Close); CurtainModulePage.UpdataState(curtain); break; case SPK.CurtainTrietex: var trietex = updataObj as Curtain; trietex.lastState = Language.StringByID(StringId.Open) + trietex.percent + "%"; MotorCurtainPage.UpdataState(trietex); break; case SPK.CurtainRoller: var roller = updataObj as Curtain; roller.lastState = Language.StringByID(StringId.Open) + roller.percent + "%"; RollingShutterPage.UpdataState(roller); break; case SPK.CurtainShades: break; case SPK.AcStandard: var ac = updataObj as AC; ac.lastState = ""; switch (ac.trait_mode.curValue.ToString()) { case "cool": ac.lastState = Language.StringByID(StringId.Cool); break; case "heat": ac.lastState = Language.StringByID(StringId.Heat); break; case "dry": ac.lastState = Language.StringByID(StringId.Dry); break; case "auto": ac.lastState = Language.StringByID(StringId.Auto); break; case "fan": ac.lastState = Language.StringByID(StringId.AirSupply); break; } switch (ac.trait_fan.curValue.ToString()) { case "high": ac.lastState += " " + Language.StringByID(StringId.HighWindSpeed); break; case "medium": ac.lastState += " " + Language.StringByID(StringId.MiddleWindSpeed); break; case "low": ac.lastState += " " + Language.StringByID(StringId.LowWindSpeed); break; case "auto": ac.lastState += " " + Language.StringByID(StringId.Auto); break; } ac.lastState += " " + ac.trait_temp.curValue + ac.tempUnitString; ACPage.UpdataStates(ac); break; case SPK.FloorHeatStandard: var fh = updataObj as FloorHeating; switch (fh.trait_mode.curValue) { case "normal": fh.lastState = Language.StringByID(StringId.Normal); break; case "day": fh.lastState = Language.StringByID(StringId.Day); break; case "night": fh.lastState = Language.StringByID(StringId.Night); break; case "timer": fh.lastState = Language.StringByID(StringId.Auto); break; case "away": fh.lastState = Language.StringByID(StringId.Away); break; } fh.lastState += " " + fh.trait_temp.curValue + fh.tempUnitString; FloorHeatingPage.UpdataStates(fh); break; case SPK.SensorPm25: case SPK.SensorCO2: case SPK.SensorTVOC: case SPK.SensorTemperature: case SPK.SensorHumidity: var sensor = updataObj as Sensor; EnvironmentalSciencePage.LoadEvent_UpdataStatus(sensor); break; case SPK.ElectricSocket: break; case SPK.ElectricTV: break; default: break; } HomePage.UpdataFunctionStates(updataObj); RoomPage.UpdataStates(updataObj); FunctionPage.UpdataStates(updataObj); ClassificationPage.UpdataInfo(updataObj); } } } } } } @@ -308,11 +464,7 @@ IfNeedReadAllDeviceStatus = true; Utlis.WriteLine($"============>Mqtt远程连接成功"); SendPushSignOut(); //if (Control.Ins.IsRemote) { // //Utlis.ShowAppLinkStatus (AppLinkStatus.CloudLink); // MainPage.AddTip (Language.StringByID (SimpleControl.R.MyInternationalizationString.LinkSuccess)); //} FunctionList.List.ReadAllFunctionStatus(); }); } #endregion HDL_ON/Entity/DB_ResidenceData.cs
@@ -289,42 +289,6 @@ #region 功能数据 public static FunctionList functionList = FunctionList.List; /// <summary> /// 刷新住宅里面的搜索设备状态 /// </summary> public void RefreshResidenceFunctionStatus() { new Thread(() => { try { foreach (var function in functionList.GetAllDeviceFunctionList()) { Thread.Sleep(100); switch (function.functionCategory) { case FunctionCategory.Light: case FunctionCategory.Electrical: case FunctionCategory.SwitchDevice: case FunctionCategory.Curtain: case FunctionCategory.Thermostat: if (DB_ResidenceData.residenceData.GatewayType == 0) { DriverLayer.Control.Ins.SendReadCommand(function); } break; } } } catch (Exception ex) { MainPage.Log($"Refresh Residence Function Status Error : {ex.Message}"); } }) { IsBackground = true }.Start(); } #endregion #region oid列表 a协议转bus协议控制使用 HDL_ON/Entity/Function/Function.cs
@@ -30,7 +30,7 @@ public Function() { } #region base info /// <summary> @@ -43,10 +43,10 @@ /// 产品时间戳:4bytes 以2020年1月1日算出的时间戳0.1s为单位 /// 产品类别:01 调光器、02 继电器、03 干接点模块、04 传感器、05 面板 /// 物模型类型: /// 01 开关类:01 开关、02 插座、03 /// 02 照明: 01 开关、02 调光、03 色温、04 LED /// 01 开关类:01 开关、02 插座、03 /// 02 照明: 01 开关、02 调光、03 色温、04 LED /// 03 遮阳: 01 窗帘电机、02 百叶窗、03 开合帘、04 卷帘 /// 04 恒温器:01 空调、02 地暖、03 毛细空调 /// 04 恒温器:01 空调、02 地暖、03 毛细空调 /// 05 新风 /// 06 影音 /// 07 音乐 @@ -234,7 +234,7 @@ /// </summary> public int fixedSerialNumber = int.MaxValue; public string GetBusId () public string GetBusId() { string busId = ""; if (bus_Data != null) @@ -251,7 +251,7 @@ public string GetRoomListName() { string roomNameList = ""; foreach(var roomId in roomIds) foreach (var roomId in roomIds) { var findRoom = DB_ResidenceData.residenceData.Rooms.Find(obj => obj.uid == roomId); if (findRoom == null) @@ -287,7 +287,7 @@ public void SaveFunctionData() { var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this)); FileUtils.WriteFileByBytes( savePath, ssd); FileUtils.WriteFileByBytes(savePath, ssd); MainPage.Log($"Save FunctionData {this.functionType} : {this.sid}"); } @@ -323,7 +323,7 @@ var acd = new AlinkControlData(); acd.sid = sid; var aca = new AlinkControlAttributes(); foreach(var dic in commandDictionary) foreach (var dic in commandDictionary) { aca.key = dic.Key; aca.value = dic.Value; @@ -338,7 +338,7 @@ /// 获取Api控制数据 /// </summary> /// <returns></returns> public ApiAlinkControlActionObj GetApiControlData(Dictionary<string,string> keyValues) public ApiAlinkControlActionObj GetApiControlData(Dictionary<string, string> keyValues) { ApiAlinkControlActionObj aaao = new ApiAlinkControlActionObj(); aaao.deviceId = this.deviceId; @@ -388,6 +388,16 @@ public string id = ""; } /// <summary> /// 本地状态读取 /// A协议状态读取格式对象 /// </summary> public class GatewayAlinkReadObj { public string id = "0"; public List<Dictionary<string, string>> objects = new List<Dictionary<string, string>>(); public string time_stamp = ""; } /// <summary> /// A协议控制数据 /// </summary> public class AlinkControlData HDL_ON/Entity/FunctionList.cs
@@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Threading; using HDL_ON.DAL; using HDL_ON.DAL.Server; @@ -503,6 +504,53 @@ FileUtils.DeleteFile(delTemp.savePath); } /// <summary> /// 读取全部功能的状态 /// </summary> public void ReadAllFunctionStatus() { new Thread(() => { try { if (DB_ResidenceData.residenceData.GatewayType == 0) { foreach (var function in GetAllDeviceFunctionList()) { switch (function.functionCategory) { case FunctionCategory.Light: case FunctionCategory.Electrical: case FunctionCategory.SwitchDevice: case FunctionCategory.Curtain: case FunctionCategory.Thermostat: DriverLayer.Control.Ins.SendReadCommand(function); break; } } } else { List<Dictionary<string, string>> keyValuePairs = new List<Dictionary<string, string>>(); foreach (var function in GetAllDeviceFunctionList()) { var kv = new Dictionary<string, string>(); kv.Add("sid", function.sid); keyValuePairs.Add(kv); } DriverLayer.Control.Ins.SendReadCommand(keyValuePairs); } } catch (Exception ex) { MainPage.Log($"Refresh Residence Function Status Error : {ex.Message}"); } }) { IsBackground = true }.Start(); } } } HDL_ON/UI/UI2/1-HomePage/HomePage.cs
@@ -144,7 +144,8 @@ System.Threading.Tasks.Task.Run(() => { //DriverLayer.Control.Ins.SearchLoaclGateway(); MainPage.InitializationData(); //MainPage.InitializationData(); DriverLayer.Control.Ins.IsRemote = true; }); }; #endif HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPageBLL.cs
@@ -47,7 +47,6 @@ try { var backuplist = FileUtils.ReadFiles(); FileUtils.DeleteRegionFiles(oldRegionRootPath); //移动文件 foreach (var fileName in backuplist) { @@ -58,6 +57,7 @@ MainPage.Log("move file : " + fileName); } } FileUtils.DeleteRegionFiles(oldRegionRootPath); } catch (Exception ex) { HDL_ON/UI/UI2/UserPage.cs
@@ -129,8 +129,6 @@ ContextView.AddChidren(homePage); homePage.LoadPage(); //刷新功能状态 DB_ResidenceData.residenceData.RefreshResidenceFunctionStatus(); //注册推送ID RegisteredPush();