public static void Main(string[] args) { // init and start var config = new HomeConfiguration(); var app = new HomeApplication(); app.StartServices(config); // finalize void Shutdown() { System.Console.WriteLine("\nApplication is shutting down..."); app.StopServices(); System.Console.WriteLine("Done"); } AssemblyLoadContext.Default.Unloading += context => { Shutdown(); }; System.Console.CancelKeyPress += (sender, eventArgs) => { Shutdown(); }; // wait System.Console.WriteLine("Service is available. Press Ctrl+C to exit."); var done = new AutoResetEvent(false); done.WaitOne(); }
public async Task <IActionResult> Get() { var openhabItems = await _itemsApi.GetItemsAsync(metadata : "dialogflow", tags : Token, recursive : true); var zones = openhabItems.Where(ohi => ohi.GroupNames.Count == 1 && ohi.Type == "Group" && ((dynamic)ohi.Metadata?["dialogflow"])?.config.zone != "Internal" && ((dynamic)ohi.Metadata?["dialogflow"])?.config.room == null).ToList(); var rooms = openhabItems.Where(ohi => ohi.GroupNames.Count == 2 && ohi.Type == "Group" && ((dynamic)ohi.Metadata?["dialogflow"])?.config.zone != "Internal" && ((dynamic)ohi.Metadata?["dialogflow"])?.config.type == null).ToList(); var devices = openhabItems.Where(i => ((dynamic)i.Metadata?["dialogflow"])?.config.zone != null && ((dynamic)i.Metadata?["dialogflow"])?.config.zone != "Internal").ToList(); var configuration = new HomeConfiguration { Id = Group, Uuid = Uuid, Token = Token, Zones = zones.Select(z => new Zone { Id = z.Name, Name = ((dynamic)z.Metadata?["dialogflow"])?.config.zone, Description = z.Label, Rooms = rooms.Where(r => r.GroupNames.Contains(z.Name)).Select(r => new Room { Id = r.Name, Name = ((dynamic)r.Metadata?["dialogflow"])?.config.room, Description = r.Label, Devices = devices.Where(d => d.GroupNames.Contains(r.Name)).Select(d => new Device { Id = d.Name, Description = d.Label, Room = ((dynamic)d.Metadata?["dialogflow"])?.config.room, Zone = ((dynamic)d.Metadata?["dialogflow"])?.config.zone, Type = ((dynamic)d.Metadata?["dialogflow"])?.config.type, OpenhabType = d.Type }) }) }) }; return(Ok(configuration)); }