예제 #1
0
        private static void SetMode(int mode)
        {
            var dev = DreamData.GetDeviceData();

            DreamSender.SendUdpWrite(0x03, 0x01, new[] { (byte)mode }, 0x21, (byte)dev.GroupNumber,
                                     new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888));
        }
예제 #2
0
        public IActionResult PostColor([FromBody] JObject myDevice)
        {
            if (myDevice == null)
            {
                throw new ArgumentException("Invalid argument.");
            }
            LogUtil.Write(@"Did it work (ambient Color)? " + JsonConvert.SerializeObject(myDevice));
            var id    = (string)myDevice.GetValue("device", StringComparison.InvariantCulture);
            var value = myDevice.GetValue("color", StringComparison.InvariantCulture);
            var group = (int)myDevice.GetValue("group", StringComparison.InvariantCulture);
            var color = ColorTranslator.FromHtml("#" + value);

            // If setting this from a group, set it for all devices in that group
            if (int.TryParse(id, out var idNum))
            {
                var devs = DataUtil.GetDreamDevices();
                foreach (var dev in devs.Where(dev => dev.GroupNumber == idNum))
                {
                    DreamSender.SetAmbientColor(color, dev.IpAddress, idNum);
                }
            }
            else     // Otherwise, just target the specified device.
            {
                DreamSender.SetAmbientColor(color, id, group);
            }
            //NotifyClients();
            return(Ok("Ok"));
        }
예제 #3
0
        public IActionResult PostShow([FromBody] JObject myDevice)
        {
            LogUtil.Write(@"Did it work (ambient Show)? " + JsonConvert.SerializeObject(myDevice));
            DreamSender.SendMessage("ambientScene", myDevice.GetValue("scene"), (string)myDevice.GetValue("id"));

            //NotifyClients();
            return(Ok(myDevice));
        }
예제 #4
0
        public IActionResult PostAmbientMode([FromBody] JObject myDevice)
        {
            LogUtil.Write(@"Did it work (ambient Mode)? " + JsonConvert.SerializeObject(myDevice));
            DreamSender.SendMessage("ambientModeType", (int)myDevice.GetValue("mode"), (string)myDevice.GetValue("id"));

            //NotifyClients();
            return(Ok("Ok"));
        }
예제 #5
0
        private static void SetMode(JObject modeObj)
        {
            var  myDev       = DataUtil.GetDeviceData();
            var  ipAddress   = myDev.IpAddress;
            var  groupNumber = (byte)myDev.GroupNumber;
            var  newMode     = (byte)(modeObj["mode"] ?? "").Value <int>();
            var  id          = (modeObj["id"] ?? "").Value <string>();
            var  tag         = (modeObj["tag"] ?? "").Value <string>();
            var  groupSend   = false;
            byte mFlag       = 0x21;

            LogUtil.Write("Setting mode for: " + JsonConvert.SerializeObject(modeObj));
            switch (tag)
            {
            case "HueBridge":
            case "Lifx":
            case "WLed":
            case "NanoLeaf":
                if (myDev.Mode == newMode)
                {
                    return;
                }
                myDev.Mode = newMode;
                DataUtil.SetItem("MyDevice", myDev);
                ipAddress = "127.0.0.1";
                mFlag     = 0x11;
                groupSend = true;
                break;

            case "Group":
                groupNumber = (byte)int.Parse(id, CultureInfo.InvariantCulture);
                ipAddress   = "255.255.255.0";
                groupSend   = true;
                mFlag       = 0x11;
                break;

            default:
                var dev = DataUtil.GetDreamDevices().Find(e => e.Id == id);
                if (dev != null)
                {
                    ipAddress = dev.IpAddress;
                    if (dev.Mode == newMode)
                    {
                        return;
                    }
                    dev.Mode = newMode;
                    SetMode(newMode);
                    DataUtil.InsertCollection("devices", dev);
                }

                break;
            }

            DreamSender.SendUdpWrite(0x03, 0x01, new[] { newMode }, mFlag, groupNumber,
                                     new IPEndPoint(IPAddress.Parse(ipAddress), 8888), groupSend);
        }
예제 #6
0
        private void TriggerRefresh()
        {
            var myDev       = DataUtil.GetDeviceData();
            var ipAddress   = myDev.IpAddress;
            var groupNumber = (byte)myDev.GroupNumber;
            var me          = new IPEndPoint(IPAddress.Parse(ipAddress), 8888);

            DreamSender.SendUdpWrite(0x01, 0x11, new byte[] { 0 }, 0, groupNumber, me);
            Thread.Sleep(TimeSpan.FromSeconds(5));
            NotifyClients();
        }
예제 #7
0
        public IActionResult UpdateDs([FromBody] JObject dsSetting)
        {
            if (dsSetting == null)
            {
                throw new ArgumentException("Invalid Jobject.");
            }
            var id       = (dsSetting["Id"] ?? "").Value <string>();
            var property = (dsSetting["Property"] ?? "").Value <string>();
            var value    = (dsSetting["Value"] ?? "").Value <string>();

            LogUtil.Write($"We got our stuff: {id}, {property}, {value}");
            DreamSender.SendMessage(property, value, id);
            NotifyClients();
            return(Ok());
        }
예제 #8
0
        private static void SetMode(int mode)
        {
            var newMode = ByteUtils.IntByte(mode);
            var myDev   = DataUtil.GetDeviceData();
            var curMode = myDev.Mode;

            if (curMode == newMode)
            {
                LogUtil.Write("Old mode is same as new, nothing to do.");
                return;
            }

            myDev.Mode = mode;
            DataUtil.SetItem("MyDevice", myDev);
            var payload = new List <byte>();

            payload.Add((byte)mode);
            DreamSender.SendUdpWrite(0x01, 0x10, payload.ToArray(), 0x21, (byte)myDev.GroupNumber,
                                     new IPEndPoint(IPAddress.Parse(myDev.IpAddress), 8888));
        }
예제 #9
0
        private static void SetBrightness(JObject dData)
        {
            if (dData == null)
            {
                throw new ArgumentException("invalid jobject");
            }
            var tag        = (dData["tag"] ?? "INVALID").Value <string>();
            var id         = (dData["id"] ?? "INVALID").Value <string>();
            var brightness = (dData["brightness"] ?? -1).Value <int>();

            LogUtil.Write($"Setting brightness for {tag} {id} to {brightness}.");
            var myDev       = DataUtil.GetDeviceData();
            var ipAddress   = myDev.IpAddress;
            var groupNumber = (byte)myDev.GroupNumber;
            var sendRemote  = false;
            var remoteId    = "";

            switch (tag)
            {
            case "Hue":
                var bridge = DataUtil.GetCollectionItem <BridgeData>("Dev_Hue", id);
                bridge.MaxBrightness = brightness;
                DataUtil.InsertCollection <BridgeData>("Dev_Hue", bridge);
                sendRemote = true;
                remoteId   = bridge.Id;
                break;

            case "Lifx":
                var bulb = DataUtil.GetCollectionItem <LifxData>("Dev_Lifx", id);
                bulb.MaxBrightness = brightness;
                DataUtil.InsertCollection <LifxData>("Dev_Lifx", bulb);
                sendRemote = true;
                remoteId   = bulb.Id;
                break;

            case "NanoLeaf":
                var panel = DataUtil.GetCollectionItem <NanoData>("Dev_NanoLeaf", id);
                panel.MaxBrightness = brightness;
                DataUtil.InsertCollection <NanoData>("Dev_Nanoleaf", panel);
                sendRemote = true;
                remoteId   = panel.Id;
                break;

            default:
                var  groupSend = false;
                byte mFlag     = 0x11;
                if (ipAddress == "255.255.255.0")
                {
                    groupSend = true;
                }
                else
                {
                    mFlag = 0x21;
                }

                DreamSender.SendUdpWrite(0x03, 0x02, new[] { ByteUtils.IntByte(brightness) }, mFlag, groupNumber,
                                         new IPEndPoint(IPAddress.Parse(ipAddress), 8888), groupSend);
                break;
            }

            if (!sendRemote)
            {
                return;
            }
            var payload = new List <byte> {
                ByteUtils.IntByte(brightness)
            };
            var utf8 = new UTF8Encoding();

            payload.AddRange(utf8.GetBytes(remoteId));
            DreamSender.SendUdpWrite(0x01, 0x10, payload.ToArray(), 0x21, groupNumber,
                                     new IPEndPoint(IPAddress.Parse(ipAddress), 8888));
        }
예제 #10
0
        private bool TriggerReload(JObject dData)
        {
            if (dData == null)
            {
                throw new ArgumentException("invalid jobject");
            }
            var tag = (dData["tag"] ?? "INVALID").Value <string>();
            var id  = (dData["id"] ?? "INVALID").Value <string>();

            if (tag == "INVALID" || id == "INVALID")
            {
                return(false);
            }
            var myDev     = DataUtil.GetDeviceData();
            var ipAddress = myDev.IpAddress;

            if (ipAddress == (dData["ipAddress"] ?? "INVALID").Value <string>())
            {
                DataUtil.SetItem("MyDevice", dData);
            }
            var groupNumber = (byte)myDev.GroupNumber;

            switch (tag)
            {
            case "WLed":
                LogUtil.Write("Updating wled");
                var wData = dData.ToObject <WLedData>();
                DataUtil.InsertCollection <WLedData>("Dev_Wled", wData);
                _hubContext.Clients.All.SendAsync("wledData", wData);
                break;

            case "HueBridge":
                LogUtil.Write("Updating bridge");
                var bData = dData.ToObject <BridgeData>();
                DataUtil.InsertCollection <BridgeData>("Dev_Hue", bData);
                _hubContext.Clients.All.SendAsync("hueData", bData);
                break;

            case "Lifx":
                LogUtil.Write("Updating lifx bulb");
                var lData = dData.ToObject <LifxData>();
                DataUtil.InsertCollection <LifxData>("Dev_Lifx", lData);
                _hubContext.Clients.All.SendAsync("lifxData", lData);
                break;

            case "NanoLeaf":
                LogUtil.Write("Updating nanoleaf");
                var nData = dData.ToObject <NanoData>();
                DataUtil.InsertCollection <NanoData>("Dev_NanoLeaf", nData);
                _hubContext.Clients.All.SendAsync("nanoData", nData);
                break;

            case "SideKick":
                var dsData = dData.ToObject <SideKick>();
                DataUtil.InsertDsDevice(dsData);
                break;

            case "Connect":
                var dcData = dData.ToObject <Connect>();
                DataUtil.InsertDsDevice(dcData);
                break;

            case "DreamScreenHd":
                var dshdData = dData.ToObject <DreamScreenHd>();
                DataUtil.InsertDsDevice(dshdData);
                break;

            case "DreamScreen4K":
                var ds4KData = dData.ToObject <DreamScreen4K>();
                DataUtil.InsertDsDevice(ds4KData);
                break;

            case "DreamScreenSolo":
                var dsSoloData = dData.ToObject <DreamScreenSolo>();
                DataUtil.InsertDsDevice(dsSoloData);
                break;
            }

            var payload = new List <byte>();
            var utf8    = new UTF8Encoding();

            payload.AddRange(utf8.GetBytes(id));
            DreamSender.SendUdpWrite(0x01, 0x10, payload.ToArray(), 0x21, groupNumber,
                                     new IPEndPoint(IPAddress.Parse(ipAddress), 8888));
            return(true);
        }