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));
        }
示例#3
0
        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));
        }