예제 #1
0
        /**********************************************************/

        public void addIntervalResourceStatus(DateTime startUTC, string rID, uint confidence, float accuracy, DataQuality dataQuality, bool online, bool manualOverride,
                                              float capacityMin, float capacityMax, float capacityCurrent, float capacityNormal,
                                              float levelOffsetMin, float levelOffsetMax, float levelOffsetCurrent, float levelOffsetNormal,
                                              float percentOffsetMin, float percentOffsetMax, float percentOffsetCurrent, float percentOffsetNormal,
                                              float setPointMin, float setPointMax, float setPointCurrent, float setPointNormal, int duration = -1, DurationModifier durationModifier = null)
        {
            oadrReportPayloadType reportPayload = new oadrReportPayloadType();

            reportPayload.rID        = rID;
            reportPayload.confidence = confidence;
            reportPayload.accuracy   = accuracy;

            reportPayload.oadrDataQuality = dataQuality.QualityType;

            oadrPayloadResourceStatusType resourceStatus = new oadrPayloadResourceStatusType();

            resourceStatus.oadrOnline         = online;
            resourceStatus.oadrManualOverride = manualOverride;

            resourceStatus.oadrLoadControlState = new oadrLoadControlStateType();
            resourceStatus.oadrLoadControlState.oadrCapacity      = helper.OadrObjectFactory.createLoadControlStateType(capacityMin, capacityMax, capacityCurrent, capacityNormal);
            resourceStatus.oadrLoadControlState.oadrLevelOffset   = helper.OadrObjectFactory.createLoadControlStateType(levelOffsetMin, levelOffsetMax, levelOffsetCurrent, levelOffsetNormal);
            resourceStatus.oadrLoadControlState.oadrPercentOffset = helper.OadrObjectFactory.createLoadControlStateType(percentOffsetMin, percentOffsetMax, percentOffsetCurrent, percentOffsetNormal);
            resourceStatus.oadrLoadControlState.oadrSetPoint      = helper.OadrObjectFactory.createLoadControlStateType(setPointMin, setPointMax, setPointCurrent, setPointNormal);

            reportPayload.Item = resourceStatus;

            addIntervalPayload(startUTC, rID, reportPayload, duration, durationModifier);
        }
예제 #2
0
        /**********************************************************/

        /// <summary>
        /// add an interval to the report, return the UID of the interval
        /// after adding an interval, ReportPayloads can be added to the interval through
        /// the returned uid
        /// </summary>
        /// <param name="reportSpecifierID"></param>
        /// <param name="startUTC"></param>
        /// <param name="durationMinutes"></param>
        /// <returns></returns>

        /*public void addInterval(string rid, DateTime startUTC, int duration, DurationModifier durationModifier)
         * {
         *  IntervalType intervalType = new IntervalType();
         *
         *  intervalType.dtstart = new dtstart();
         *  intervalType.dtstart.datetime = startUTC;
         *
         *  intervalType.duration = new DurationPropType();
         *  intervalType.duration.duration = "PT" + duration.ToString() + durationModifier.Value;
         *
         *  IntervalTypeWrapper wrapper = new IntervalTypeWrapper();
         *  // wrapper.interval = intervalType;
         *  wrapper.rid = rid;
         *
         *  m_reportIntervals.Add(wrapper);
         * }*/

        /**********************************************************/

        private void addIntervalPayload(DateTime startUTC, string rid, oadrReportPayloadType reportPayload, int duration = -1, DurationModifier durationModifier = null)
        {
            List <StreamPayloadBaseType> intervalPayloads;

            string key = startUTC.ToString();

            IntervalType interval;

            if (!m_reportIntervals.ContainsKey(key))
            {
                interval = helper.OadrObjectFactory.createIntervalType(startUTC, duration, durationModifier);

                m_reportIntervals.Add(key, interval);

                m_reportIntervalPayloads.Add(key, new List <StreamPayloadBaseType>());
            }

            // if an interval contains an 'interval' and 'point data', duration must be present
            // conformance rule 342 provides rules for when dtstart and duration must be present, but fails
            // to specify what should be done when both 'interval' and 'point data' are present
            // the OADR alliance said dtstart and duration should be present if both types of data are present
            interval = m_reportIntervals[key];

            if (interval.duration == null && duration != -1)
            {
                m_reportIntervals[key] = helper.OadrObjectFactory.createIntervalType(startUTC, duration, durationModifier);
            }
            ;

            intervalPayloads = m_reportIntervalPayloads[key];
            intervalPayloads.Add(reportPayload);
        }
예제 #3
0
        public void properOrder()
        {
            ReportWrapper reportWrapper = new ReportWrapper("specifier1", ReportName.TELEMETRY_USAGE, 5, DurationModifier.HOURS);

            DateTime start = DateTime.Now.ToUniversalTime();

            start = start.AddMilliseconds(-start.Millisecond);
            start = start.AddSeconds(-start.Second);

            addIntervalResourceStatus(reportWrapper, "rid1", start, (float)3.0);
            addIntervalResourceStatus(reportWrapper, "rid2", start.AddSeconds(30), (float)2.0);
            addIntervalResourceStatus(reportWrapper, "rid3", start.AddSeconds(60), (float)1.0);
            addIntervalResourceStatus(reportWrapper, "rid4", start.AddSeconds(-30), (float)4.0);
            addIntervalResourceStatus(reportWrapper, "rid5", start.AddSeconds(-50), (float)5.0);
            addIntervalResourceStatus(reportWrapper, "rid6", start.AddSeconds(90), (float)0.0);

            oadrReportType report = reportWrapper.generateReport("requestID");

            Assert.IsTrue(report.dtstart.datetime == report.intervals[0].dtstart.datetime);

            for (int index = 0; index < report.intervals.Length - 1; index++)
            {
                oadrReportPayloadType         reportPayload = (oadrReportPayloadType)report.intervals[index].streamPayloadBase[0];
                oadrPayloadResourceStatusType status        = (oadrPayloadResourceStatusType)reportPayload.Item;

                Assert.IsTrue(report.intervals[index].dtstart.datetime > report.intervals[index + 1].dtstart.datetime);
                Assert.AreEqual(index, (int)status.oadrLoadControlState.oadrCapacity.oadrMin);
            }

            string xml = SerializeOadrObject.serializeOjbect(report, report.GetType());

            Console.Out.WriteLine(xml);
        }
예제 #4
0
        public void createRegisterReport()
        {
            oadrPayload payload = new oadrPayload();

            oadrSignedObject signedObject = new oadrSignedObject();

            payload.oadrSignedObject = signedObject;

            oadrRegisterReportType registerReport = new oadrRegisterReportType();

            signedObject.Item = registerReport;

            registerReport.reportRequestID = "ReportRequestID_123";
            registerReport.requestID       = "RequestID_123";
            registerReport.schemaVersion   = "2.0b";
            registerReport.venID           = "TH_VEN";

            registerReport.oadrReport = new oadrReportType[1];

            registerReport.oadrReport[0] = new oadrReportType();

            registerReport.oadrReport[0].reportName = "ReportName_123";

            registerReport.oadrReport[0].intervals    = new IntervalType[1];
            registerReport.oadrReport[0].intervals[0] = new IntervalType();

            // refID ???
            IntervalTypeUidUid uid = new IntervalTypeUidUid();

            uid.text = "UID";
            registerReport.oadrReport[0].intervals[0].Item = uid;

            oadrReportPayloadType reportPayload = new oadrReportPayloadType();

            reportPayload.rID               = "rID";
            reportPayload.accuracy          = 1.0F;
            reportPayload.accuracySpecified = true;

            registerReport.oadrReport[0].intervals[0].streamPayloadBase = new StreamPayloadBaseType[1];

            registerReport.oadrReport[0].intervals[0].streamPayloadBase[0] = reportPayload;

            Assert.IsTrue(registerReport.oadrReport[0].intervals[0].streamPayloadBase[0].GetType() == typeof(oadrReportPayloadType));

            XmlSerializer serializer = new XmlSerializer(typeof(oadrPayload));

            serializer.Serialize(Console.Out, payload);
        }
예제 #5
0
        /**********************************************************/

        public void addIntervalReportPayload(DateTime startUTC, string rID, uint confidence, float accuracy, float payload, DataQuality dataQuality, int duration = -1, DurationModifier durationModifier = null)
        {
            oadrReportPayloadType reportPayload = new oadrReportPayloadType();

            reportPayload.rID        = rID;
            reportPayload.confidence = confidence;
            reportPayload.accuracy   = accuracy;

            reportPayload.oadrDataQuality = dataQuality.QualityType;

            PayloadFloatType payloadFloat = new PayloadFloatType();

            payloadFloat.value = payload;

            reportPayload.Item = payloadFloat;

            addIntervalPayload(startUTC, rID, reportPayload, duration, durationModifier);
        }
예제 #6
0
        /**********************************************************/

        public void addIntervalReportPayload(string reportSpecifierID, int uid, string rID, uint confidence, float accuracy, float payload, DataQuality dataQuality)
        {
            oadrReportPayloadType reportPayload = new oadrReportPayloadType();

            reportPayload.rID        = rID;
            reportPayload.confidence = confidence;
            reportPayload.accuracy   = accuracy;

            reportPayload.oadrDataQuality = dataQuality.QualityType;

            PayloadFloatType payloadFloat = new PayloadFloatType();

            payloadFloat.value = payload;

            reportPayload.Item = payloadFloat;

            addIntervalPayload(reportSpecifierID, uid, reportPayload);
        }
예제 #7
0
        /**********************************************************/

        public static IntervalType createIntervalType(DateTime startUTC, oadrReportPayloadType reportPayload, int duration = -1, DurationModifier durationModifier = null)
        {
            IntervalType interval = new IntervalType();

            interval.dtstart          = new dtstart();
            interval.dtstart.datetime = startUTC;

            if (duration != -1)
            {
                interval.duration          = new DurationPropType();
                interval.duration.duration = "PT" + duration.ToString() + durationModifier.Value;
            }

            interval.streamPayloadBase    = new StreamPayloadBaseType[1];
            interval.streamPayloadBase[0] = reportPayload;

            return(interval);
        }
예제 #8
0
        /**********************************************************/

        private void addIntervalPayload(string reportSpecifierID, int uid, oadrReportPayloadType reportPayload)
        {
            Dictionary <int, List <oadrReportPayloadType> > reportIntervalPayloads = (_reportIntervalPayloads.ContainsKey(reportSpecifierID) ? _reportIntervalPayloads[reportSpecifierID] : null);

            if (reportIntervalPayloads == null)
            {
                reportIntervalPayloads = new Dictionary <int, List <oadrReportPayloadType> >();
                _reportIntervalPayloads.Add(reportSpecifierID, reportIntervalPayloads);
            }

            List <oadrReportPayloadType> payloads = (reportIntervalPayloads.ContainsKey(uid) ? reportIntervalPayloads[uid] : null);

            if (payloads == null)
            {
                payloads = new List <oadrReportPayloadType>();
                reportIntervalPayloads.Add(uid, payloads);
            }

            payloads.Add(reportPayload);
        }