using System; using System.Collections.Generic; using System.Linq; using System.Text; using Domain; using RCUHost; using RCUHost.Protocols; namespace Service.Implement { public class LightControlManager : ILightControlManager { public IRoomTypeSceneModalManager RoomTypeSceneModalManager { get; set; } public IDeviceControlReceiver DeviceControlReceiver { get; set; } /// /// 下发场景 /// /// 主机 /// 场景 /// 是否取反 public void ApplyScene(Host host, RoomTypeScene scene, bool takeInverse = false) { if (scene.Type == SceneType.Custom) { var sceneModals = RoomTypeSceneModalManager.LoadAll(scene); if (sceneModals.Count > 0) { var devices = new List(); foreach (var sceneModal in sceneModals) { Device device = new Device(); device.Address = sceneModal.Modal.ModalAddress; device.AddressType = AddressType.DeviceAddress; device.Type = sceneModal.Modal.Type; if (takeInverse) { switch (sceneModal.Modal.Type) { case DeviceType.Curtain: if (sceneModal.Status == 1 || sceneModal.Status == 2) { device.Status = 0x06; device.Brightness = 0x00; } else { device.Status = (byte)sceneModal.Status; device.Brightness = (byte)sceneModal.Brightness; } break; default: if (sceneModal.Status == 1) { device.Status = 0x02; device.Brightness = 0x00; } else { device.Status = (byte)sceneModal.Status; device.Brightness = (byte)sceneModal.Brightness; } break; } } else { device.Status = (byte)sceneModal.Status; device.Brightness = (byte)sceneModal.Brightness; device.Temperature = (byte)sceneModal.CurrentTemp; device.FanSpeed = (byte)sceneModal.FanSpeed; device.Mode = (byte)sceneModal.Mode; device.Valve = (byte)sceneModal.Valve; device.AirExecMode = (sceneModal.Status << 14) + (sceneModal.Mode << 12) + (sceneModal.FanSpeed << 10) + (sceneModal.Valve << 8) + sceneModal.CurrentTemp;//空调执行方式和内容 device.FloorHotExecMode = (sceneModal.Status << 12) + (sceneModal.Mode << 8) + (sceneModal.Valve << 6) + sceneModal.CurrentTemp;//地暖执行方式和内容 device.MusicExecMode = sceneModal.Status + (sceneModal.Brightness << 12) + (sceneModal.Mode << 8);//背景音乐执行方式和内容 } devices.Add(device); } DeviceControlReceiver.Send(host, devices); } } else if (scene.Type == SceneType.Command) { Device device = new Device(); device.Address = scene.GroupAddress; device.AddressType = AddressType.GroupAddress; device.Status = (byte)(takeInverse ? 0x02 : 0x01); DeviceControlReceiver.Send(host, device); } } /// /// 控制所有灯开关和亮度 /// /// public void AllDeviceControl(Host host, List devices) { if (devices.Count > 0) { DeviceControlReceiver.Send(host, devices); } } /// /// 下发场景 /// /// 主机 /// 场景 /// 是否取反 public void ApplyScene_Repeat(string Key,Host host, RoomTypeScene scene, bool takeInverse = false) { if (scene.Type == SceneType.Custom) { var sceneModals = RoomTypeSceneModalManager.LoadAll(scene); if (sceneModals.Count > 0) { var devices = new List(); foreach (var sceneModal in sceneModals) { Device device = new Device(); device.Address = sceneModal.Modal.ModalAddress; device.AddressType = AddressType.DeviceAddress; device.Type = sceneModal.Modal.Type; if (takeInverse) { switch (sceneModal.Modal.Type) { case DeviceType.Curtain: if (sceneModal.Status == 1 || sceneModal.Status == 2) { device.Status = 0x06; device.Brightness = 0x00; } else { device.Status = (byte)sceneModal.Status; device.Brightness = (byte)sceneModal.Brightness; } break; default: if (sceneModal.Status == 1) { device.Status = 0x02; device.Brightness = 0x00; } else { device.Status = (byte)sceneModal.Status; device.Brightness = (byte)sceneModal.Brightness; } break; } } else { device.Status = (byte)sceneModal.Status; device.Brightness = (byte)sceneModal.Brightness; device.Temperature = (byte)sceneModal.CurrentTemp; device.FanSpeed = (byte)sceneModal.FanSpeed; device.Mode = (byte)sceneModal.Mode; device.Valve = (byte)sceneModal.Valve; device.AirExecMode = (sceneModal.Status << 14) + (sceneModal.Mode << 12) + (sceneModal.FanSpeed << 10) + (sceneModal.Valve << 8) + sceneModal.CurrentTemp;//空调执行方式和内容 device.FloorHotExecMode = (sceneModal.Status << 12) + (sceneModal.Mode << 8) + (sceneModal.Valve << 6) + sceneModal.CurrentTemp;//地暖执行方式和内容 device.MusicExecMode = sceneModal.Status + (sceneModal.Brightness << 12) + (sceneModal.Mode << 8);//背景音乐执行方式和内容 } devices.Add(device); } DeviceControlReceiver.Send_Repeat(Key,host, devices); } } else if (scene.Type == SceneType.Command) { Device device = new Device(); device.Address = scene.GroupAddress; device.AddressType = AddressType.GroupAddress; device.Status = (byte)(takeInverse ? 0x02 : 0x01); DeviceControlReceiver.Send_Repeat(Key, host, device); } } /// /// 重复发送 /// /// /// /// public void AllDeviceControl_Repeat(string Key,Host host, List devices) { if (devices.Count > 0) { DeviceControlReceiver.Send_Repeat(Key,host, devices); } } } }