Beispiel #1
0
 public override bool UpdateValue(object newValue)
 {
     Panel.RGBW rgbw = new Panel.RGBW();
     if (newValue is Color)
     {
         var color = (Color)newValue;
         rgbw = new Panel.RGBW(color.R, color.G, color.B);
     }
     else if (newValue is LumosColor)
     {
         var lumosColor = (LumosColor)newValue;
         rgbw = new Panel.RGBW((byte)(lumosColor.Red * 255), (byte)(lumosColor.Green * 255), (byte)(lumosColor.Blue * 255));
     }
     else if (newValue is Panel.RGBW)
     {
         rgbw = (Panel.RGBW)newValue;
     }
     else
     {
         return(false);
     }
     try
     {
         var Controler = NanoleafPlugin.getClient(SerialNumber);
         return(Controler.SetPanelColor(Panel.ID, rgbw));
     }
     catch (Exception e)
     {
         NanoleafPlugin.Log.Error(string.Empty, e);
     }
     return(false);
 }
Beispiel #2
0
 public CurrentPowerstateSource(string serialNumber) :
     base(getID(serialNumber), getDisplayName(), getCategory(serialNumber))
 {
     Communication.StaticOnStateEvent += ExternalControlEndpoint_StaticOnStateEvent;
     SerialNumber = serialNumber;
     CurrentValue = NanoleafPlugin.getClient(SerialNumber).PowerOn;
 }
 public CurrentEffectSource(string serialNumber) :
     base(getID(serialNumber), getDisplayName(), getCategory(serialNumber))
 {
     Communication.StaticOnEffectEvent += ExternalControlEndpoint_StaticOnEffectEvent;
     SerialNumber = serialNumber;
     CurrentValue = NanoleafPlugin.getClient(SerialNumber).SelectedEffect;
 }
Beispiel #4
0
 private void sendValueToPanel()
 {
     if (this._instance != null)
     {
         NanoleafPlugin.getControllerFromPanel(this._instance.ID)?.SetPanelColor(this._instance.ID, new Panel.RGBW((byte)(this.colorValue.R * this.DimmerValue), (byte)(this.colorValue.G * this.DimmerValue), (byte)(this.colorValue.B * this.DimmerValue)));
     }
 }
Beispiel #5
0
 protected override void DisposeHook()
 {
     NanoleafPlugin.getControllers().ForEach(c => c.PanelAdded   -= PanelAdded);
     NanoleafPlugin.getControllers().ForEach(c => c.PanelRemoved -= PanelRemoved);
     NanoleafPlugin.ControllerAdded -= NanoleafPlugin_ControllerAdded;
     base.DisposeHook();
 }
        public override IDevice createNewInstance(DeviceMetadata m, IDevice parent)
        {
            if (m.Type == NanoleafDevice.NANOLEAF_DEVICE_TYPE_NAME)
            {
                NanoleafDevice d = new NanoleafDevice(Guid.NewGuid().ToString());
                d.Name       = "new Nanoleaf Panel";
                d.DeviceType = (EDeviceType)Enum.Parse(typeof(EDeviceType), m.Model);

                //Find the next ID if possible
                var lamps = org.dmxc.lumos.Kernel.Project.DeviceManager.getInstance()
                            .Devices.OfType <NanoleafDevice>().Where(c => c.DeviceType.Equals(d.DeviceType)).Select(c => c.PanelID);
                var firstid = NanoleafPlugin.getAllPanels(d.DeviceType).Select(p => p.ID)
                              .Except(lamps)
                              .FirstOrDefault();

                if (firstid != 0)
                {
                    d.PanelID = firstid;
                    return(d);
                }

                return(d);
            }
            throw new NotSupportedException("Unable to create a Device for Type: " + m.Type);
        }
Beispiel #7
0
        public CurrentSaturationSource(string serialNumber) :
            base(getID(serialNumber), getDisplayName(), getCategory(serialNumber))
        {
            Communication.StaticOnStateEvent += ExternalControlEndpoint_StaticOnStateEvent;
            SerialNumber = serialNumber;
            var controller = NanoleafPlugin.getClient(SerialNumber);

            min          = controller.SaturationMin;
            max          = controller.SaturationMax;
            CurrentValue = controller.Saturation;
        }
Beispiel #8
0
        public CurrentNumberOfPanelsSource(string serialNumber) :
            base(getID(serialNumber), getDisplayName(), getCategory(serialNumber))
        {
            Communication.StaticOnLayoutEvent += ExternalControlEndpoint_StaticOnLayoutEvent;
            SerialNumber = serialNumber;
            var numberOfPanels = NanoleafPlugin.getClient(SerialNumber).NumberOfPanels;

            min          = 0;
            max          = int.MaxValue;
            CurrentValue = numberOfPanels;
        }
        private void ExternalControlEndpoint_StaticOnTouchEvent(object sender, TouchEventArgs e)
        {
            if (!NanoleafPlugin.getClient(this.SerialNumber).IP.Equals(e.IP))
            {
                return;
            }

            TouchEvent events = e.TouchEvent;

            if (events == null)
            {
                return;
            }
            CurrentValue = events.TouchedPanelsNumber;
        }
        private void ExternalControlEndpoint_StaticOnEffectEvent(object sender, EffectEventArgs e)
        {
            if (!NanoleafPlugin.getClient(this.SerialNumber).IP.Equals(e.IP))
            {
                return;
            }

            EffectEvents events = e.EffectEvents;

            if (events == null)
            {
                return;
            }

            this.CurrentValue = events.Events.First().Value;
        }
Beispiel #11
0
        private void setInstance()
        {
            this._instance = NanoleafPlugin.getAllPanels(this.deviceType).FirstOrDefault(p => p.ID.Equals(this.panelId));

            NanoleafPlugin.getControllers().ForEach(c => c.PanelAdded   -= PanelAdded);
            NanoleafPlugin.getControllers().ForEach(c => c.PanelRemoved -= PanelRemoved);

            if (this._instance == null)
            {
                NanoleafPlugin.getControllers().ForEach(c => c.PanelAdded += PanelAdded);
            }
            else
            {
                NanoleafPlugin.getControllers().ForEach(c => c.PanelRemoved += PanelRemoved);
            }
        }
Beispiel #12
0
        private void ExternalControlEndpoint_StaticOnStateEvent(object sender, StateEventArgs e)
        {
            if (!NanoleafPlugin.getClient(this.SerialNumber).IP.Equals(e.IP))
            {
                return;
            }
            StateEvents events = e.StateEvents;

            if (events == null)
            {
                return;
            }

            var value = events.Events.FirstOrDefault(v => v.Attribute == StateEvent.EAttribute.Saturation);

            if (value != null)
            {
                this.CurrentValue = value.Value;
            }
        }
        private void ExternalControlEndpoint_StaticOnGestureEvent(object sender, GestureEventArgs e)
        {
            if (!NanoleafPlugin.getClient(this.SerialNumber).IP.Equals(e.IP))
            {
                return;
            }

            GestureEvents events = e.GestureEvents;

            if (events == null)
            {
                return;
            }
            var val = events.Events.FirstOrDefault(g => g.Gesture == GestureType);

            if (val != null)
            {
                beatValue++;
                CurrentValue = beatValue;
            }
        }
Beispiel #14
0
        private void ExternalControlEndpoint_StaticOnLayoutEvent(object sender, LayoutEventArgs e)
        {
            if (!NanoleafPlugin.getClient(this.SerialNumber).IP.Equals(e.IP))
            {
                return;
            }

            LayoutEvent events = e.LayoutEvent;

            if (events == null)
            {
                return;
            }

            var value = events.Layout?.NumberOfPanels;

            if (value.HasValue)
            {
                this.CurrentValue = value.Value;
            }
        }
        private CanvasPositionSource(string serialNumber, int panelID, EPositionPart part) :
            base(getID(serialNumber, panelID, part), getDisplayName(part), getCategory(serialNumber, panelID))
        {
            Communication.StaticOnLayoutEvent += ExternalControlEndpoint_StaticOnLayoutEvent;
            SerialNumber = serialNumber;
            PanelID      = panelID;
            Part         = part;
            var position = NanoleafPlugin.getClient(SerialNumber).Panels.First(p => p.ID.Equals(panelID));

            switch (part)
            {
            case EPositionPart.X:
                CurrentValue = position.X;
                break;

            case EPositionPart.Y:
                CurrentValue = position.Y;
                break;

            case EPositionPart.Orientation:
                CurrentValue = position.Orientation;
                break;
            }
        }