Пример #1
0
        public static void FindBuildingInfo(AFDatabase database, string templateName)
        {
            if (database == null)
            {
                throw new ArgumentNullException(nameof(database));
            }
            Console.WriteLine("Find Building Info: {0}", templateName);

            AFCategory buildingInfoCat = database.AttributeCategories["Building Info"];
            AFNamedCollectionList <AFAttribute> foundAttributes = new AFNamedCollectionList <AFAttribute>();

            using (AFElementSearch elementQuery = new AFElementSearch(database, "AttributeCattegorySearch", string.Format("template:\"{0}\"", templateName)))
            {
                elementQuery.CacheTimeout = TimeSpan.FromMinutes(5);
                foreach (AFElement element in elementQuery.FindObjects())
                {
                    foreach (AFAttribute attr in element.Attributes)
                    {
                        if (attr.Categories.Contains(buildingInfoCat))
                        {
                            foundAttributes.Add(attr);
                        }
                    }
                }
            }

            Console.WriteLine("Found {0} attributes.", foundAttributes.Count);
            Console.WriteLine();
        }
Пример #2
0
        private List <AFElement> LoadElements()
        {
            try
            {
                if (m_server is null || !m_server.ConnectionInfo.IsConnected)
                {
                    ConnectPI();
                }

                // Pull AF Data - This is New
                AFDatabase m_database = m_server.Databases[m_settings.InstanceName];

                List <AFElement> pmus = new List <AFElement>();

                using (AFElementSearch elementquery = new AFElementSearch(m_database, "ElementSearch", m_settings.Filter))
                {
                    elementquery.CacheInterval = TimeSpan.FromMinutes(10);
                    foreach (AFElement item in elementquery.FindObjects(fullLoad: true))
                    {
                        pmus.Add(item);
                    }
                }

                return(pmus);
            }
            catch (Exception ex)
            {
                return(new List <AFElement>());
            }
        }
        public static void CreateEventFrames(AFDatabase database, AFElementTemplate eventFrameTemplate)
        {
            if (database == null)
            {
                throw new ArgumentNullException(nameof(database));
            }
            if (eventFrameTemplate == null)
            {
                throw new ArgumentNullException(nameof(eventFrameTemplate));
            }
            string queryString = "Template:MeterBasic";

            {
                // This method returns the collection of AFBaseElement objects that were created with this template.
                using (AFElementSearch elementQuery = new AFElementSearch(database, "Meters", queryString))
                {
                    DateTime timeReference = DateTime.Today.AddDays(-7);
                    int      count         = 0;
                    foreach (AFElement meter in elementQuery.FindObjects())
                    {
                        foreach (int day in Enumerable.Range(1, 7))
                        {
                            AFTime       startTime = new AFTime(timeReference.AddDays(day - 1));
                            AFTime       endTime   = new AFTime(startTime.LocalTime.AddDays(1));
                            AFEventFrame ef        = new AFEventFrame(database, "*", eventFrameTemplate);
                            ef.SetStartTime(startTime);
                            ef.SetEndTime(endTime);
                            ef.PrimaryReferencedElement = meter;

                            // It is good practice to periodically check in the database
                            if (++count % 500 == 0)
                            {
                                database.CheckIn();
                            }
                        }
                    }
                }
            }

            if (database.IsDirty)
            {
                database.CheckIn();
            }
        }
Пример #4
0
        public static void FindMetersAboveUsage(AFDatabase database, double val)
        {
            Console.WriteLine("Find Meters above Usage: {0}", val);

            string templateName  = "MeterBasic";
            string attributeName = "Energy Usage";

            using (AFElementSearch elementQuery = new AFElementSearch(database, "AttributeValueGTSearch",
                                                                      string.Format("template:\"{0}\" \"|{1}\":>{2}", templateName, attributeName, val)))
            {
                elementQuery.CacheTimeout = TimeSpan.FromMinutes(5);
                int countNames = 0;
                foreach (AFElement element in elementQuery.FindObjects())
                {
                    Console.Write("{0}{1}", countNames++ == 0 ? string.Empty : ", ", element.Name);
                }

                Console.WriteLine(String.Empty);
            }
        }
Пример #5
0
        public static void FindMetersBySubstation(AFDatabase database, string substationLocation)
        {
            Console.WriteLine("Find Meters by Substation: {0}", substationLocation);

            string templateName  = "MeterBasic";
            string attributeName = "Substation";

            using (AFElementSearch elementQuery = new AFElementSearch(database, "AttributeValueEQSearch",
                                                                      string.Format("template:\"{0}\" \"|{1}\":\"{2}\"", templateName, attributeName, substationLocation)))
            {
                elementQuery.CacheTimeout = TimeSpan.FromMinutes(5);
                int countNames = 0;
                foreach (AFElement element in elementQuery.FindObjects())
                {
                    Console.Write("{0}{1}", countNames++ == 0 ? string.Empty : ", ", element.Name);
                }

                Console.WriteLine(String.Empty);
            }
        }
Пример #6
0
        public static void FindMetersByTemplate(AFDatabase database, string templateName)
        {
            Console.WriteLine("Find Meters by Template: {0}", templateName);

            using (AFElementSearch elementQuery = new AFElementSearch(database, "TemplateSearch", string.Format("template:\"{0}\"", templateName)))
            {
                elementQuery.CacheTimeout = TimeSpan.FromMinutes(5);
                int countDerived = 0;
                foreach (AFElement element in elementQuery.FindObjects())
                {
                    Console.WriteLine("Element: {0}, Template: {1}", element.Name, element.Template.Name);
                    if (element.Template.Name != templateName)
                    {
                        countDerived++;
                    }
                }

                Console.WriteLine("   Found {0} derived templates", countDerived);
                Console.WriteLine();
            }
        }
Пример #7
0
        public static void FindMetersByName(AFDatabase database, string elementNameFilter)
        {
            Console.WriteLine("Find Meters by Name: {0}", elementNameFilter);

            // Default search is as an element name string mask.
            var queryString = $"\"{elementNameFilter}\"";

            using (AFElementSearch elementQuery = new AFElementSearch(database, "ElementSearch", queryString))
            {
                elementQuery.CacheTimeout = TimeSpan.FromMinutes(5);
                foreach (AFElement element in elementQuery.FindObjects())
                {
                    Console.WriteLine("Element: {0}, Template: {1}, Categories: {2}",
                                      element.Name,
                                      element.Template.Name,
                                      element.CategoriesString);
                }
            }

            Console.WriteLine();
        }
Пример #8
0
        // Helper method used in PrintEnergyUsageAtTime() and PrintDailyAverageEnergyUseage
        // Note that this is an optional method, it is used in the solutions, but it is possible
        // to get a valid solution without using this method
        public static AFAttributeList GetAttributes(AFDatabase database, string templateName, string attributeName)
        {
            AFAttributeList attrList = new AFAttributeList();

            using (AFElementSearch elementQuery = new AFElementSearch(database, "AttributeSearch", string.Format("template:\"{0}\"", templateName)))
            {
                elementQuery.CacheTimeout = TimeSpan.FromMinutes(5);
                foreach (AFElement element in elementQuery.FindObjects())
                {
                    foreach (AFAttribute attr in element.Attributes)
                    {
                        if (attr.Name.Equals(attributeName))
                        {
                            attrList.Add(attr);
                        }
                    }
                }
            }

            return(attrList);
        }