| | |
| | | List<string> listFile = this.GetAllDeviceFile(); |
| | | foreach (string file in listFile)
|
| | | {
|
| | | CommonDevice device = null;
|
| | | //反序列化为指定的类,不然数据会丢失而导致无法强转
|
| | | var device = ZigBee.Device.CommonDevice.CommonDeviceByFilePath(file);
|
| | | try |
| | | {
|
| | | device = CommonDevice.CommonDeviceByFilePath(file);
|
| | | }
|
| | | catch (Exception ex) { HdlLogLogic.Current.WriteLog(ex); }
|
| | |
|
| | | if (device == null || device.CurrentGateWayId == null)
|
| | | {
|
| | | #if DEBUG
|
| | |
| | | }
|
| | | //备份数据
|
| | | await HdlGatewayLogic.Current.UpLoadDeviceBackupDataToGateway(device, GatewayBackupEnum.AMac名称, newMacName);
|
| | | //如果它只有一个回路,则更改端点名字
|
| | | if (this.dicDeviceEpoint.ContainsKey(device.DeviceAddr) == true && this.dicDeviceEpoint[device.DeviceAddr].Count == 1)
|
| | | {
|
| | | return await this.ReName(device, newMacName);
|
| | | }
|
| | | }
|
| | | return true;
|
| | | }
|
| | |
| | | return -1;
|
| | | });
|
| | | return list;
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 根据MAC地址,获取全部回路的数量
|
| | | /// </summary>
|
| | | /// <param name="DeviceAddr">Mac地址</param>
|
| | | /// <returns></returns>
|
| | | public int GetDevicesCountByMac(string DeviceAddr)
|
| | | {
|
| | | if (dicDeviceEpoint.ContainsKey(DeviceAddr) == false)
|
| | | {
|
| | | return 0;
|
| | | }
|
| | | return dicDeviceEpoint[DeviceAddr].Count;
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | |
| | | temperatrue = true;
|
| | | }
|
| | | //湿度传感器
|
| | | else if(((TemperatureSensor)device).SensorDiv == 2)
|
| | | else if (((TemperatureSensor)device).SensorDiv == 2)
|
| | | {
|
| | | humidity = true;
|
| | | }
|
| | |
| | | /// </summary>
|
| | | /// <param name="listDevice">需要保存的设备对象</param>
|
| | | /// <param name="roomId">需要保存的哪个设备的房间ID</param>
|
| | | public void SaveRealDeviceRoomId(List<CommonDevice> listDevice, string roomId)
|
| | | /// <param name="saveRoadDevice">如果只有一个回路,是否把回路的房间一起修改</param>
|
| | | public void SaveRealDeviceRoomId(List<CommonDevice> listDevice, string roomId, bool saveRoadDevice = true)
|
| | | {
|
| | | this.dicDeviceRoomId[listDevice[0].DeviceAddr] = roomId;
|
| | | if (listDevice != null)
|
| | | {
|
| | | this.dicDeviceRoomId[listDevice[0].DeviceAddr] = roomId;
|
| | | }
|
| | |
|
| | | //保存记录
|
| | | string fullName = UserCenterLogic.CombinePath(DirNameResourse.DeviceRoomIdFile);
|
| | | UserCenterLogic.SaveFileContent(fullName, this.dicDeviceRoomId);
|
| | |
|
| | | //添加自动备份
|
| | | HdlAutoBackupLogic.AddOrEditorFile(DirNameResourse.DeviceRoomIdFile);
|
| | |
|
| | | //如果设备只有一个回路,如果改变了真实设备区域,则它的回路的区域也一起改了
|
| | | if (listDevice.Count == 1)
|
| | | if (saveRoadDevice == true && listDevice != null && listDevice.Count == 1)
|
| | | {
|
| | | Common.Room.CurrentRoom.ChangedRoom(listDevice[0], roomId);
|
| | | Common.Room.CurrentRoom.ChangedRoom(listDevice[0], roomId, false);
|
| | | }
|
| | | }
|
| | |
|
| | |
| | | /// <returns></returns>
|
| | | public string AppendVersion(int versionValue)
|
| | | {
|
| | | //转为16进制
|
| | | string txt64 = Convert.ToString(versionValue, 16).PadLeft(4, '0');
|
| | | //直接是10进制
|
| | | string txt10 = Convert.ToString(versionValue).PadLeft(4, '0');
|
| | | //这个是小数点前面的值
|
| | | int value1 = Convert.ToInt32(txt64.Substring(0, 2), 16);
|
| | | int value1 = Convert.ToInt32(txt10.Substring(0, txt10.Length - 2));
|
| | | //这个是小数点后面的值
|
| | | int value2 = Convert.ToInt32(txt64.Substring(2, 2), 16);
|
| | | int value2 = Convert.ToInt32(txt10.Substring(txt10.Length - 2, 2));
|
| | |
|
| | | //Ver.
|
| | | string ver = Language.StringByID(R.MyInternationalizationString.uVersionAbbreviation);
|
| | | return ver + value1 + "." + value2.ToString().PadLeft(3, '0');
|
| | | return ver + value1 + "." + value2.ToString().PadLeft(2, '0');
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | |
| | | int receiveCount = 0;
|
| | | //设备列表
|
| | | var listDevice = new List<CommonDevice>();
|
| | |
|
| | | //网关里面有可能会有重复的回路
|
| | | var listCheck = new HashSet<string>();
|
| | | Action<string, string> getDeviceAction = (topic, message) =>
|
| | | {
|
| | | try
|
| | | if (topic == gatewayID + "/" + "DeviceInfoRespon")
|
| | | {
|
| | | if (topic == gatewayID + "/" + "DeviceInfoRespon")
|
| | | try
|
| | | {
|
| | | TimeOut = 0;
|
| | | var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
|
| | | var totalNum = Newtonsoft.Json.JsonConvert.DeserializeObject<int>(jobject["Data"]["TotalNum"].ToString());
|
| | | if (totalNum == 0)
|
| | | lock (listDevice)
|
| | | {
|
| | | //这个网关没有设备
|
| | | canBreak = true;
|
| | | return;
|
| | | }
|
| | | if (deviceCount == -1)
|
| | | {
|
| | | //设置需要接收多少个设备
|
| | | deviceCount = totalNum;
|
| | | }
|
| | | //设备接收数
|
| | | receiveCount++;
|
| | | //设备接收数
|
| | | receiveCount++;
|
| | |
|
| | | var deviceID = (DeviceType)jobject.Value<int>("Device_ID");
|
| | | //根据设备类型创建设备对象的实例
|
| | | var device = this.NewDeviceObjectByDeviceId(deviceID, jobject, zbGateway);
|
| | | if (device != null)
|
| | | {
|
| | | try
|
| | | TimeOut = 0;
|
| | | var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
|
| | | var totalNum = Newtonsoft.Json.JsonConvert.DeserializeObject<int>(jobject["Data"]["TotalNum"].ToString());
|
| | | if (totalNum == 0)
|
| | | {
|
| | | //回调函数
|
| | | deviceComingAction?.Invoke(device);
|
| | | //这个网关没有设备
|
| | | canBreak = true;
|
| | | return;
|
| | | }
|
| | | //Log出力
|
| | | catch (Exception ex) { HdlLogLogic.Current.WriteLog(ex); }
|
| | | if (deviceCount == -1)
|
| | | {
|
| | | //设置需要接收多少个设备
|
| | | deviceCount = totalNum;
|
| | | }
|
| | |
|
| | | listDevice.Add(device);
|
| | | }
|
| | | if (deviceCount == receiveCount)
|
| | | {
|
| | | //设备全部接收完成
|
| | | canBreak = true;
|
| | | var deviceID = (DeviceType)jobject.Value<int>("Device_ID");
|
| | | //根据设备类型创建设备对象的实例
|
| | | var device = this.NewDeviceObjectByDeviceId(deviceID, jobject, zbGateway);
|
| | | if (device != null)
|
| | | {
|
| | | string mainkeys = this.GetDeviceMainKeys(device);
|
| | | //网关里面有可能会有重复的回路
|
| | | if (listCheck.Contains(mainkeys) == false)
|
| | | {
|
| | | //回调函数
|
| | | deviceComingAction?.Invoke(device);
|
| | | listDevice.Add(device);
|
| | |
|
| | | listCheck.Add(mainkeys);
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | //Log出力
|
| | | catch (Exception ex) { HdlLogLogic.Current.WriteLog(ex); }
|
| | |
|
| | | if (receiveCount == deviceCount && deviceCount != -1)
|
| | | {
|
| | | //设备全部接收完成
|
| | | canBreak = true;
|
| | | }
|
| | | }
|
| | | catch { }
|
| | | };
|
| | |
|
| | | realWay.Actions += getDeviceAction;
|
| | |
| | | }
|
| | | }
|
| | | //如果是调光器
|
| | | else if (mainDevice.Type == DeviceType.DimmableLight )
|
| | | else if (mainDevice.Type == DeviceType.DimmableLight)
|
| | | {
|
| | | mainDevice.DfunctionType = DeviceFunctionType.A灯光;
|
| | | if (mainDevice.IsCustomizeImage == false)
|
| | |
| | | }
|
| | | }
|
| | | //如果是彩灯的话
|
| | | else if ( mainDevice.Type == DeviceType.ColorDimmableLight)
|
| | | else if (mainDevice.Type == DeviceType.ColorDimmableLight)
|
| | | {
|
| | | mainDevice.DfunctionType = DeviceFunctionType.A灯光;
|
| | | if (mainDevice.IsCustomizeImage == false)
|
| | |
| | | /// </summary>
|
| | | AirSwitch = -4100,
|
| | | /// <summary>
|
| | | /// 微断云控制器 镜像id:4100
|
| | | /// 智能空开 镜像id:4100
|
| | | /// </summary>
|
| | | AirSwitch_CloudContr = 4100,
|
| | |
|