public async Task <IActionResult> DialogflowZoneEntity() { 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 dialogflowEntityCsv = string.Empty; foreach (var zone in zones) { var zoneMetadata = (string)((dynamic)zone.Metadata?["dialogflow"])?.config.zone; var synonyms = $"{zoneMetadata}\""; if (zoneMetadata != zoneMetadata.Humanize(LetterCasing.Title)) { synonyms += $",\"{zoneMetadata.Humanize(LetterCasing.Title)}\""; } synonyms += $",\"{zone.Name}"; var entityRow = $"\"{zoneMetadata}\",\"{synonyms}\""; dialogflowEntityCsv += entityRow + Environment.NewLine; } return(new ContentResult { StatusCode = (int)HttpStatusCode.OK, Content = dialogflowEntityCsv, ContentType = "text/csv" }); }
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 Home { 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)); }
public async Task <IActionResult> Get(string type, string tags, string metadata, string fields, bool recursive = false) { var items = await _itemsApi.GetItemsAsync(type : type, tags : tags != null?string.Join(",", Token, tags) : Token, metadata : metadata != null?string.Join(",", "dialogflow", metadata) : "dialogflow", fields : fields, recursive : recursive); return(Ok(items)); }