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

        private bool eventValid(oadrDistributeEventTypeOadrEvent evt, VEN2b ven, string requestID, CreatedEventHelper createdEventHelper)
        {
            // TODO: log event message when these checks fail

            if (!targetMatches(evt, ven))
            {
                m_callbacks.logSystemMessage("Invalid target in event " + evt.eiEvent.eventDescriptor.eventID, UserControls.Log.WebLogView.eWebLogMessageStatus.WARNING);
                createdEventHelper.addEvent(evt, requestID, OptTypeType.optOut, 452, "Invalid ID");
                return(false);
            }

            if (!m_marketContexts.Contains(evt.eiEvent.eventDescriptor.eiMarketContext.marketContext))
            {
                m_callbacks.logSystemMessage("Invalid Market Context in event " + evt.eiEvent.eventDescriptor.eventID + ", " + evt.eiEvent.eventDescriptor.eiMarketContext.marketContext, UserControls.Log.WebLogView.eWebLogMessageStatus.WARNING);
                createdEventHelper.addEvent(evt, requestID, OptTypeType.optOut, 453, "Not Recognized");
                return(false);
            }

            if (!signalsValid(evt))
            {
                createdEventHelper.addEvent(evt, requestID, OptTypeType.optOut, 460, "");
                return(false);
            }

            return(true);
        }
예제 #2
0
        public frmMain()
        {
            InitializeComponent();
            //   string[] args = Environment.GetCommandLineArgs();
            //if (args.Length==4)
            //   {
            //       try
            //       {
            //           VenAccount = args[3];
            //           NumberOfLoad = int.Parse(args[2]);
            //           VenNum = int.Parse(args[1]);


            //       } catch
            //       {
            //           Application.Exit();

            //       }


            //   }

            //  frmSplash splash = new frmSplash();

            this.FormClosing += new FormClosingEventHandler(frmMain_FormClosing);

            ucEvents1.setCallbackHandler(this);

            m_clearLog = new ClearLog(this);

            tsVersion.Text = "Version: " + Assembly.GetExecutingAssembly().GetName().Version.ToString();

            ucQueryRegistration1.setCallbackHandler(this);

            ucManageOptSchedulesView1.setCreateOptScheduleCallback(this);
            oadrucManageOptSchedulesView1.setCreateOptScheduleCallback(this);

            ucResources1.setCallback(this);

            ucReportRequests.setCallback(this);

            VEN2b ven = new VEN2b(new HttpWebRequestWrapper(false, System.Net.SecurityProtocolType.Tls12), tbURL.TextBoxText, tbVENName.TextBoxText,
                                  "", tbVENID.TextBoxText, new HttpSecuritySettings());

            m_venWrapper = new VenWrapper(ven, this);
            setVENParameters();

            //  ucResources1.addResource("resource1", "Load");

            ucMarketContexts.OnAddItem     += new EventHandler(ucMarketContext_addItem);
            ucMarketContexts.OnRemoveItems += new EventHandler(ucMarketContext_removeItems);

            ucCustomSignals.OnAddItem     += new EventHandler(ucCustomSignal_addItem);
            ucCustomSignals.OnRemoveItems += new EventHandler(ucCustomSignal_removeItems);

            ucMarketContexts.addItem("http://MarketContext1");
        }
예제 #3
0
        public void A_EI_0020_TH_VTN_1()
        {
            VEN2b ven = new VEN2b(new HttpWebRequestWrapper(false, System.Net.SecurityProtocolType.Tls12), TestProperties.vtnURL, TestProperties.venName, TestProperties.venID, TestProperties.venPassword);

            RequestEvent requestEvent = ven.requestEvent();

            Assert.IsTrue(requestEvent.response.eiResponse.responseCode == "200");

            // on events returned so don't send createdEvent
            Assert.IsTrue(requestEvent.response.oadrEvent == null);
        }
        public void N1_0010_TH_VTN_1()
        {
            VEN2b ven = new VEN2b(new HttpWebRequestWrapper(false, System.Net.SecurityProtocolType.Tls12), TestProperties.vtnURL, TestProperties.venName, TestProperties.venID, TestProperties.venPassword);

            QueryRegistration queryRegistration = ven.queryRegistration();

            Assert.IsTrue(queryRegistration.response != null);

            CreatePartyRegistration createPartyRegistration = ven.createPartyRegistration(RandomHex.instance().generateRandomHex(10), oadrProfileType.Item20b, oadrTransportType.simpleHttp, "", false, false, true);

            Assert.IsTrue(createPartyRegistration.response != null);
        }
        /**********************************************************************************/

        public VenWrapper(VEN2b ven, IVenWrapper callbacks)
        {
            m_ven = ven;

            m_callbacks = callbacks;

            m_resources.setCallback(this);

            m_processEvents = new ProcessEvents(callbacks);

            m_resources.startThread();
        }
예제 #6
0
        /**********************************************************/

        public CreatedEvent processOptUpdate(VEN2b ven, string requestID)
        {
            lock (m_qOptUpdate)
            {
                if (m_qOptUpdate.Count == 0)
                {
                    return(null);
                }

                OptUpdate optUpdate = m_qOptUpdate.Dequeue();

                return(ven.createdEvent(requestID, optUpdate.Evts, optUpdate.OptType));
            }
        }
예제 #7
0
        /**********************************************************/

        public CreateOpt processOptSchedule(VEN2b ven)
        {
            OptSchedule optSchedule;

            lock (m_qOptSchedule)
            {
                if (m_qOptSchedule.Count == 0)
                {
                    return(null);
                }

                optSchedule = m_qOptSchedule.Dequeue();
            }

            return(ven.createOptSchedule(RandomHex.instance().generateRandomHex(10), optSchedule));
        }
예제 #8
0
        /**********************************************************/

        private bool targetMatches(oadrDistributeEventTypeOadrEvent evt, VEN2b ven)
        {
            try
            {
                if (evt.eiEvent.eiTarget.venID != null)
                {
                    if (evt.eiEvent.eiTarget.venID[0] != ven.VENID)
                    {
                        return(false);
                    }
                }
            }
            catch (Exception ex)
            {
                oadrlib.lib.helper.Logger.logException(ex);
                return(false);
            }

            return(true);
        }
예제 #9
0
        public void P1_2015_VTN_1()
        {
            VEN2b ven = new VEN2b(new HttpWebRequestWrapper(false, System.Net.SecurityProtocolType.Tls12), TestProperties.vtnURL, TestProperties.venID, TestProperties.venPassword);

            OptSchedule optSchedule = new OptSchedule();

            optSchedule.addOptSchedule(DateTime.UtcNow.AddDays(1), 0);

            optSchedule.OptType       = OptTypeType.optIn;
            optSchedule.OptReason     = OptReasonEnumeratedType.notParticipating;
            optSchedule.MarketContext = "http://marketcontext1";
            optSchedule.ResourceID    = "resource1";

            CreateOpt createOpt = ven.createOptSchedule(RandomHex.instance().generateRandomHex(10), optSchedule);

            Console.Out.WriteLine(createOpt.responseBody);

            Assert.IsNotNull(createOpt.response);

            Assert.AreEqual(createOpt.request.optID, createOpt.response.optID);
        }
예제 #10
0
        /**********************************************************/

        public frmMain()
        {
            InitializeComponent();

            frmSplash splash = new frmSplash();

            this.FormClosing += new FormClosingEventHandler(frmMain_FormClosing);

            ucEvents1.setCallbackHandler(this);

            m_clearLog = new ClearLog(this);

            tsVersion.Text = "Version: " + Assembly.GetExecutingAssembly().GetName().Version.ToString();

            ucQueryRegistration1.setCallbackHandler(this);

            ucManageOptSchedulesView1.setCreateOptScheduleCallback(this);
            oadrucManageOptSchedulesView1.setCreateOptScheduleCallback(this);

            ucResources1.setCallback(this);

            ucReportRequests.setCallback(this);

            VEN2b ven = new VEN2b(new HttpWebRequestWrapper(false, System.Net.SecurityProtocolType.Tls12), tbURL.TextBoxText, tbVENName.TextBoxText,
                                  "", tbVENID.TextBoxText, new HttpSecuritySettings());

            m_venWrapper = new VenWrapper(ven, this);
            setVENParameters();

            ucResources1.addResource("resource1", "Load");

            ucMarketContexts.OnAddItem     += new EventHandler(ucMarketContext_addItem);
            ucMarketContexts.OnRemoveItems += new EventHandler(ucMarketContext_removeItems);

            ucCustomSignals.OnAddItem     += new EventHandler(ucCustomSignal_addItem);
            ucCustomSignals.OnRemoveItems += new EventHandler(ucCustomSignal_removeItems);

            ucMarketContexts.addItem("http://MarketContext1");
        }
        public void N1_0020_TH_VTN_1()
        {
            VEN2b ven = new VEN2b(new HttpWebRequestWrapper(false, System.Net.SecurityProtocolType.Tls12), TestProperties.vtnURL, TestProperties.venName, TestProperties.venID, TestProperties.venPassword);

            // register
            CreatePartyRegistration createPartyRegistration = ven.createPartyRegistration(RandomHex.instance().generateRandomHex(10), oadrProfileType.Item20b, oadrTransportType.simpleHttp, "", false, false, true);

            Assert.IsTrue(createPartyRegistration.response != null);

            Console.Out.WriteLine(createPartyRegistration.responseBody);

            // POLL
            OadrPoll oadrPoll = ven.poll();

            Assert.IsNotNull(oadrPoll.response);

            Console.Out.WriteLine(oadrPoll.responseBody);

            // First request is registerReport
            Assert.IsTrue(oadrPoll.responseTypeIs(typeof(oadrRegisterReportType)));

            oadrRegisterReportType registerReportType = oadrPoll.getRegisterReportResponse();

            RegisteredReport registeredReport = ven.registeredReport(registerReportType.requestID, "200", "OK");

            Assert.IsNotNull(registeredReport.response);
            Assert.AreEqual(registeredReport.response.eiResponse.responseCode, "200");

            // register our own report
            ReportDescription reportDescription = ReportHelper.generateReportDescription();

            RegisterReport registerReport = ven.registerReport(RandomHex.instance().generateRandomHex(10), reportDescription);

            Assert.IsNotNull(registerReport.response);

            Assert.AreEqual("200", registerReport.response.eiResponse.responseCode);

            Assert.AreEqual(registerReport.request.requestID, registerReport.response.eiResponse.requestID);
        }
예제 #12
0
        public void R1_3010_TH_VTN_1()
        {
            VEN2b ven = new VEN2b(new HttpWebRequestWrapper(false, System.Net.SecurityProtocolType.Tls12), TestProperties.vtnURL, TestProperties.venName, "", TestProperties.venPassword);

            QueryRegistration queryRegistration = ven.queryRegistration();

            OadrPoll poll = ven.poll();

            poll.responseTypeIs(typeof(oadrCreateReportType));

            oadrCreateReportType createReport = poll.getCreateReportResponse();

            Console.Out.WriteLine(poll.responseBody);

            ReportDescription reportDescription = new ReportDescription();

            reportDescription.addReport(createReport.oadrReportRequest[0].reportSpecifier.reportSpecifierID, ReportName.TELEMETRY_STATUS, 0, DurationModifier.MINUTES);

            DateTime dtstart = DateTime.UtcNow;

            reportDescription.addIntervalResourceStatus(createReport.oadrReportRequest[0].reportSpecifier.reportSpecifierID, dtstart,
                                                        0, DurationModifier.SECONDS, "rid", 1, (float)1.0, DataQuality.qualityGoodNonSpecific, true, false, (float)1.0, (float)1.0, (float)1.0, (float)1.0,
                                                        (float)1.0, (float)1.0, (float)1.0, (float)1.0, (float)1.0, (float)1.0, (float)1.0, (float)1.0, (float)1.0, (float)1.0,
                                                        (float)1.0, (float)1.0);

            CreatedReport createdReport = ven.createdReport(createReport.requestID, 200, "OK");

            Assert.IsNotNull(createdReport.response);

            List <string> reportSpecifierIDs = new List <string>();

            reportSpecifierIDs.Add(createReport.oadrReportRequest[0].reportSpecifier.reportSpecifierID);

            UpdateReport updateReport = ven.updateReport(createReport.requestID, reportDescription, reportSpecifierIDs, dtstart);

            Assert.IsNotNull(updateReport.response);
        }
예제 #13
0
 static void startConsole(VEN2b ven2b)
 {
     consoleMain console = new consoleMain(ven2b);
 }
예제 #14
0
        /**********************************************************/

        public void processEvents(oadrDistributeEventType distributeEvent, string requestID, eOptType optType, VEN2b ven)
        {
            List <string> eventIDs = new List <string>();     // track list of valid events from distributeEvent object

            // will use to match against our list of active events

            // validate the VTN id
            if (distributeEvent.vtnID != ven.VTNID)
            {
                // the VTN ID was invalid; remove all events and send an error message
                checkForRemovedEvents(eventIDs);

                m_callbacks.logSystemMessage("Invalid VTN ID: " + distributeEvent.vtnID, UserControls.Log.WebLogView.eWebLogMessageStatus.WARNING);

                CreatedEvent createdEvent = ven.createdEvent(requestID, 452, "Invalid ID");

                m_callbacks.processCreatedEvent(createdEvent, m_idToEvent, requestID);

                return;
            }

            // the VTN didn't send any events; clear all events we have stored
            if (distributeEvent.oadrEvent == null)
            {
                checkForRemovedEvents(eventIDs);
                m_callbacks.processCreatedEvent(null, m_idToEvent, requestID);
                return;
            }

            OptTypeType oadrOptType = (optType == eOptType.OptIn ? OptTypeType.optIn : OptTypeType.optOut);

            // send a createdEvent with an opt type of the incoming optType for all new events
            // that aren't canceled or completed.  optIn/out of cancelled and completed events as appropriate
            CreatedEventHelper createdEventHelper = new CreatedEventHelper();

            foreach (oadrDistributeEventTypeOadrEvent evt in distributeEvent.oadrEvent)
            {
                string eventID = evt.eiEvent.eventDescriptor.eventID;

                // validate that the event is for this VEN and MarketContext
                if (!eventValid(evt, ven, requestID, createdEventHelper))
                {
                    continue;
                }

                eventIDs.Add(eventID);

                if (!m_idToEvent.ContainsKey(eventID))
                {
                    processNewEvent(requestID, oadrOptType, createdEventHelper, evt);
                }
                else
                {
                    processExistingEvent(requestID, createdEventHelper, evt);
                }

                OadrEventWrapper eventWrapper = m_idToEvent[eventID];

                if (eventWrapper.RandomizedMinutes != 0)
                {
                    m_callbacks.logSystemMessage(string.Format("Event start time delayed due to start after parameter: event ID={0}, start after={1}, randomized minutes={2}",
                                                               eventWrapper.OadrEvent.eiEvent.eventDescriptor.eventID, eventWrapper.OadrEvent.eiEvent.eiActivePeriod.properties.tolerance.tolerate.startafter,
                                                               eventWrapper.RandomizedMinutes), UserControls.Log.WebLogView.eWebLogMessageStatus.INFO);
                }
            }

            // events in m_idToEvent but not in the incoming distributeEvent message must be
            // implicitly canceled
            checkForRemovedEvents(eventIDs);

            if (createdEventHelper.EventResponses.Count > 0)
            {
                CreatedEvent createdEvent = ven.createdEvent(createdEventHelper);

                m_callbacks.processCreatedEvent(createdEvent, m_idToEvent, requestID);
            }
            else
            {
                // still need to call this function to ensure the UI is updated with any event status changes
                m_callbacks.processCreatedEvent(null, m_idToEvent, requestID);
            }
        }
예제 #15
0
        public void R1_3020_TH_VTN_1()
        {
            VEN2b ven = new VEN2b(new HttpWebRequestWrapper(false, System.Net.SecurityProtocolType.Tls12), TestProperties.vtnURL, TestProperties.venName, TestProperties.venID, TestProperties.venPassword);

            OadrPoll poll = ven.poll();

            poll.responseTypeIs(typeof(oadrCreateReportType));

            oadrCreateReportType createReport = poll.getCreateReportResponse();

            Console.Out.WriteLine(poll.responseBody);

            ReportDescription reportDescription = new ReportDescription();

            reportDescription.addReport(createReport.oadrReportRequest[0].reportSpecifier.reportSpecifierID, ReportName.TELEMETRY_STATUS, 0, DurationModifier.MINUTES);


            CreatedReport createdReport = ven.createdReport(createReport.requestID, 200, "OK");

            Assert.IsNotNull(createdReport.response);

            List <string> reportSpecifierIDs = new List <string>();

            int sleepTime = (int)(createReport.oadrReportRequest[0].reportSpecifier.reportInterval.properties.dtstart.datetime - DateTime.UtcNow).TotalSeconds;

            if (sleepTime > 0)
            {
                System.Threading.Thread.Sleep(sleepTime * 1000);
            }

            reportSpecifierIDs.Add(createReport.oadrReportRequest[0].reportSpecifier.reportSpecifierID);

            DateTime endTime = createReport.oadrReportRequest[0].reportSpecifier.reportInterval.properties.dtstart.datetime +
                               System.Xml.XmlConvert.ToTimeSpan(createReport.oadrReportRequest[0].reportSpecifier.reportInterval.properties.duration.duration);

            // convert ISO8601 duration to timespan
            // http://stackoverflow.com/questions/62804/how-to-convert-iso-8601-duration-to-timespan-in-vb-net
            // http://msdn.microsoft.com/en-us/library/system.xml.xmlconvert.totimespan.aspx
            int sleepDelay = (int)System.Xml.XmlConvert.ToTimeSpan(createReport.oadrReportRequest[0].reportSpecifier.reportBackDuration.duration).TotalSeconds;

            // the test should continue until the end time has passed, but the test set exits after it receives 2 updates
            // while (DateTime.Now < endTime)
            for (int count = 0; count < 2; count++)
            {
                DateTime dtstart = DateTime.UtcNow;

                reportDescription.addIntervalResourceStatus(createReport.oadrReportRequest[0].reportSpecifier.reportSpecifierID, dtstart,
                                                            0, DurationModifier.SECONDS, "rid", 1, (float)1.0, DataQuality.qualityGoodNonSpecific, true, false, (float)1.0, (float)1.0, (float)1.0, (float)1.0,
                                                            (float)1.0, (float)1.0, (float)1.0, (float)1.0, (float)1.0, (float)1.0, (float)1.0, (float)1.0, (float)1.0, (float)1.0,
                                                            (float)1.0, (float)1.0);

                UpdateReport updateReport = ven.updateReport(createReport.requestID, reportDescription, reportSpecifierIDs, dtstart);

                Assert.IsNotNull(updateReport.response);

                if (count == 0)
                {
                    System.Threading.Thread.Sleep(sleepDelay * 1000);
                }
            }
        }
예제 #16
0
 public abstract void executeCommand(VEN2b ven);
        /**********************************************************/

        public override void executeCommand(VEN2b ven)
        {
        }
예제 #18
0
        //VEN2b ven2b;

        static void Main(string[] args)
        {
            // specify where appsettings comes from as input parameter?


            //List Args
            Console.WriteLine("Begin Main...\n");
            Logger.logMessage("Begin Main...\n", "main.log");

            int i = 0;

            if (args.Length == 0)
            {
                Console.WriteLine($"No Command Args\n");
                Logger.logMessage($"No Command Args\n", "main.log");
            }
            while (args.Length != 0)
            {
                Console.WriteLine($"args[{i}] = {args[i]}\n");
                Logger.logMessage($"args[{i}] = {args[i]}\n", "main.log");
                i = i + 1;
            }


            // initialize components for http connections
            // from app.config

            string url      = ConfigurationManager.AppSettings["url"];      // "http://172.16.25.51:8080/OpenADR2/Simple/2.0b";
            string venName  = ConfigurationManager.AppSettings["venName"];  // "Test_VEN_Name";
            string venID    = ConfigurationManager.AppSettings["venID"];    //  "6f130342def6d658567c";
            string password = ConfigurationManager.AppSettings["password"]; //  "";

            string connectionString = $"{url}::{venName}::{venID}::{password}";

            Console.WriteLine($"Using {connectionString}");
            Logger.logMessage($"Connection String = [{connectionString}]\n", "main.log");


            VEN2b ven2b = new VEN2b(new HttpWebRequestWrapper(false, System.Net.SecurityProtocolType.Tls12), url, venName, venID, password);

            //this.ven2b = ven2b;



            startConsole(ven2b);


            //            //string url = "http://172.16.25.51:8080/OpenADR2/Simple/2.0b";
            //            //string venName = "Test_VEN_Name";
            //            //string venID = "6f130342def6d658567c";
            //            //string password = "";


            //            /// VEN = new VEN(http, url, venName, venID, password);
            //            /// VEN2A = new VEN2a();
            //            /// VEN2B = new VEN2b();
            //            ///
            //            //Logger.logMessage($"Create new VEN with params {url} {venName}\n");
            //            //Console.WriteLine($"Create new VEN with params {url} {venName}\n");
            //            //Logger.logMessage($"Create new VEN with params {url} {venName}\n", "ven.log");

            //            //VEN ven = new VEN(http, url, venName, venID, password);
            //            string str = "Create new VEN2A\n";
            //            Logger.logMessage(str);
            //            Logger.logMessage(str, "ven.log");

            ////            oadrlib.lib.oadr2a.VEN2a ven2a = new VEN2a(new HttpWebRequestWrapper(false, System.Net.SecurityProtocolType.Tls12), url, venID, password);
            //            VEN2b ven2b = new VEN2b(new HttpWebRequestWrapper(false, System.Net.SecurityProtocolType.Tls12), url, venName, venID, password);

            //            str = "Create new RequestEvent\n";
            //            Logger.logMessage(str);
            //            Console.WriteLine(str);
            //            //Console.WriteLine($"Press Enter (or any key) to continue:\n");
            //            //string x = Console.ReadLine();


            ////            oadrlib.lib.oadr2a.RequestEvent requestEvent = ven2a.requestEvent();
            //            oadrlib.lib.oadr2b.RequestEvent requestEvent = ven2b.requestEvent();

            //            str = "Read new RequestEvent\n";

            //            Console.WriteLine(str);
            //            Console.WriteLine(requestEvent.requestBody);

            //            Logger.logMessage(str);

            //            Logger.logMessage("\nRequest Event Request Body:: \n", "requestEvent.log");
            //            Logger.logMessage(requestEvent.requestBody, "requestEvent.log");
            //            Logger.logMessage("\nRequest Event Response Body:: \n", "requestEvent.log");
            //            Logger.logMessage(requestEvent.responseBody, "requestEvent.log");
            //            Logger.logMessage("\n\n", "requestEvent.log");


            //            Logger.logMessage(distributeEvent.requestBody, "requestEvent.log");

            ////Logger.logMessage(requestEvent);
            //Logger.logMessage(requestEvent.requestBody.ToString());


            //Console.WriteLine($"Press Enter (or any key) to continue:\n");
            //string x = Console.ReadLine();


            /// VEN( new HttpWebRequestWrapper(false, System.Net.SecurityProtocolType.Tls12) , string url = "http://172.16.25.51:8080/OpenADR2/Simple/2.0b", string venName  = "Test_VEN_Name", string venID = "6f130342def6d658567c", string password = "")
            /// http://172.16.25.51:8080/OPENADR2/Simple/2.0b/oadrPoll
            ///


            //Console.WriteLine($"Press Enter (or any key) to continue:\n");
            //string y = Console.ReadLine();


            //Console.WriteLine($"\nStart New Command: {y}\n");
            //Logger.logMessage($"\nStart New Command: {y}\n");

            ////            chooseCommand(y);


            //Console.WriteLine($"\nStart New main console thread:\n");
            //Logger.logMessage($"\nStart New main console thread:\n");


            //            consoleMain console = new consoleMain();



            return;

            ///            Application.EnableVisualStyles();
            ///            Application.SetCompatibleTextRenderingDefault(false);

            ///#if (!DEBUG)
            ///           frmSplash splash = new frmSplash();

            ///            DialogResult result = splash.ShowDialog();

            ///           if (result != System.Windows.Forms.DialogResult.OK)
            ///               return;
            ///#endif
            ///           Application.Run(new frmMain());
        }