public void Main() { UnifiSource = Supervisor.Instance.Devices .OfType <IPresenceSource>() .First(); RoomLiving = new Room( Supervisor.Instance.Devices.Where(d => d.Location == "livingroom").ToList() ); WebSource = Supervisor.Instance.Devices .OfType <ICommandSource>() .First(); RemoteSource = Supervisor.Instance.Devices .OfType <IRemote>() .First(); // Set alarms WakeUpAt(new TimeSpan(07, 00, 00)); SetAlarm(TimeEvening, true, () => { var duration = (int)(TimeNight - TimeEvening).TotalSeconds; RoomLiving.Sunset(duration); }).Start(); // Set presence detector // TODO: Tied to one specific device. Should load multiple from config and detect presence from any present. // (fix this before I start dating anyone seriously or let friends stay over or they will get annoyed) UnifiSource.OnLeave += (string id, string[] all) => { if (id == "58:f1:02:0f:46:3c") { RoomLiving.Lock(0, 0, 0, 0, 255, 0); } }; UnifiSource.OnEnter += (string id, string[] all) => { if (id == "58:f1:02:0f:46:3c") { RoomLiving.Unlock(); } }; // Register for command listeners WebSource.RegisterCommandListener("on", (command, argv) => { RoomLiving.LightsOn(); }); RemoteSource.RegisterButtonPressHandler(1, (button) => { RoomLiving.LightsOn(); }); WebSource.RegisterCommandListener("off", (command, argv) => { RoomLiving.LightsOff(); }); RemoteSource.RegisterButtonPressHandler(2, (button) => { RoomLiving.LightsOff(); }); WebSource.RegisterCommandListener("theater", (command, argv) => { RoomLiving.Theater(); }); RemoteSource.RegisterButtonPressHandler(3, (button) => { RoomLiving.Theater(); }); RemoteSource.RegisterButtonPressHandler(4, (button) => { RoomLiving.Evening(); }); WebSource.RegisterCommandListener("sun", (command, argv) => { RoomLiving.StopRunningScene(); if (argv.Length < 1) { return; } var isSetting = argv[0] == "set"; var duration = argv.Length > 2 ? int.Parse(argv[1]) : 600; if (isSetting) { RoomLiving.Sunset(duration); } else { RoomLiving.Sunrise(duration); } }); RemoteSource.RegisterButtonPressHandler(5, (button) => { RoomLiving.Sunrise(600); }); RemoteSource.RegisterButtonPressHandler(6, (button) => { RoomLiving.Sunset(600); }); RemoteSource.RegisterButtonPressHandler(7, (button) => { RoomLiving.Unlock(); }); RemoteSource.RegisterButtonPressHandler(8, (button) => { RoomLiving.Lock(0, 0, 0, 0, 255, 0); }); }