void insteon_DeviceChanged(object sender, DeviceChangedEventArgs args) { DeviceId id = args.State.Device.Address; DeviceReference reference = new DeviceReference(id.ToString(), PluginName); BasicDevice device = callbacks.Devices.FindDevice(reference); if (device != null) { InsteonDeviceData deviceData = (InsteonDeviceData)device.AutomationData; if (args.State.Device is DimmingLight) { DimmingLight onOffDevice = (DimmingLight)args.State.Device; FroggyPlugin.Devices.PercentLevelDevice basicDevice = (FroggyPlugin.Devices.PercentLevelDevice)callbacks.Devices.FindDevice(reference); // Update the value, this will automatically propogate events everywhere (even back to this plugin). basicDevice.Level = onOffDevice.OnLevel * 100 / 255; } else if (args.State.Device is OnOffDevice) { OnOffDevice onOffDevice = (OnOffDevice)args.State.Device; FroggyPlugin.Devices.OnOffDevice basicDevice = (FroggyPlugin.Devices.OnOffDevice)callbacks.Devices.FindDevice(reference); basicDevice.On = onOffDevice.OnLevel != 0; } } }
/// <summary> /// Do any device updates based on this update. /// </summary> /// <param name="update">The update to apply</param> public void UpdateDevice(FroggyPlugin.Events.DeviceUpdate update) { DeviceId id = new DeviceId(update.Device.Address.Address); DeviceBase device; if (insteon.FindDevice(id, out device)) { switch (update.Type) { case FroggyPlugin.Events.DeviceUpdate.UpdateType.State: if (device is DimmingLight) { DimmingLight dimmer = (DimmingLight)device; DeviceState <int> percentLevel = (DeviceState <int>)update.State; dimmer.OnLevel = (percentLevel.Value * 255 / 100); } else if (device is OnOffDevice) { OnOffDevice onOffdevice = (OnOffDevice)device; DeviceState <bool> boolUpdate = (DeviceState <bool>)update.State; onOffdevice.OnLevel = boolUpdate.Value ? 255 : 0; } break; } } }
void insteon_DeviceAdded(object sender, DeviceAddedEventArgs args) { DeviceId id = args.Device.Address; DeviceReference reference = new DeviceReference(id.ToString(), PluginName); BasicDevice device = callbacks.Devices.FindDevice(reference); if (device != null) { InsteonDeviceData deviceData = (InsteonDeviceData)device.AutomationData; } else { InsteonDeviceData deviceData = new InsteonDeviceData(args.Device.Category, args.Device.Subcategory); if (args.Device is DimmingLight) { DimmingLight dimmer = (DimmingLight)args.Device; FroggyPlugin.Devices.PercentLevelDevice basic = new FroggyPlugin.Devices.PercentLevelDevice(); basic.Address = reference; basic.Name = args.Device.DeviceName; basic.Level = dimmer.OnLevel * 100 / 255; basic.AutomationData = deviceData; callbacks.Devices.AddDevice(basic); } else if (args.Device is OnOffDevice) { OnOffDevice onOffDevice = (OnOffDevice)args.Device; FroggyPlugin.Devices.OnOffDevice basic = new FroggyPlugin.Devices.OnOffDevice(); basic.Address = reference; basic.Name = args.Device.DeviceName; basic.On = onOffDevice.OnLevel != 0; basic.AutomationData = deviceData; callbacks.Devices.AddDevice(basic); } } }
static void Main(string[] args) { // remote -> invoker // light -> receiver // LightOn -> command // Example: pre-instanced commands Remote r = new Remote(); Light light = new Light(); r.SetCommand('A', new LightOn(light)); r.SetCommand('L', new LightOff(light)); r.Press('A'); Console.WriteLine(light.State); r.Press('L'); Console.WriteLine(light.State); // Example: pass value to command DimmingLight dimLight = new DimmingLight(); RemoteWithSlider rw = new RemoteWithSlider(); rw.SetCommand('A', new DimLight(dimLight)); rw.Press('A', 6f); Console.WriteLine(dimLight); // Ecample: create new instance per invocation OnDemandRemote onDemandRemote = new OnDemandRemote(); onDemandRemote.Press('A', new DimLight(dimLight, 10)); Console.WriteLine(dimLight); onDemandRemote.Press('A', new DimLight(dimLight, 0)); Console.WriteLine(dimLight); Console.ReadLine(); }
public DimLight(DimmingLight light, float power) : this(light) { this.power = power; }
public DimLight(DimmingLight light) { this.light = light; }