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); }
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; }
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))); } }
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); }
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; }
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; }
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); } }
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; } }
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; } }