コード例 #1
0
        private void OK_Click(object sender, EventArgs e)
        {
            try
            {
                BacnetObjectId?device   = null;
                uint           ArrayIdx = ASN1.BACNET_ARRAY_ALL;

                if (Reference_Device.Text != "")
                {
                    device = new BacnetObjectId(BacnetObjectTypes.OBJECT_DEVICE, Convert.ToUInt16(Reference_Device.Text));
                }
                if (Reference_Array.Text != "")
                {
                    ArrayIdx = Convert.ToUInt16(Reference_Array.Text);
                }


                BacnetDeviceObjectPropertyReference newref = new BacnetDeviceObjectPropertyReference(
                    new BacnetObjectId((BacnetObjectTypes)(Reference_ObjType.SelectedItem as Enumcombo).enumValue, Convert.ToUInt32(Reference_ObjId.Text) & 0x3FFFFF),
                    (BacnetPropertyIds)(Reference_Prop.SelectedItem as Enumcombo).enumValue, device, ArrayIdx);

                if (!ObjRef.Equals(newref))
                {
                    ObjRef      = newref;
                    RefModified = true;
                }
                OutOK = true;
                Close();
            }
            catch
            {
                Close();
            }
        }
コード例 #2
0
        private void AddPropertyRefentry(BacnetDeviceObjectPropertyReference bopr, int IdxRemove)
        {
            String newText;

            if (bopr.deviceIndentifier.type != BacnetObjectTypes.OBJECT_DEVICE)
            {
                newText = bopr.objectIdentifier.ToString().Substring(7) + " - " + ((BacnetPropertyIds)bopr.propertyIdentifier).ToString().Substring(5) + " on localDevice";
            }
            else
            {
                newText = bopr.objectIdentifier.ToString().Substring(7) + " - " + ((BacnetPropertyIds)bopr.propertyIdentifier).ToString().Substring(5) + " on DEVICE:" + bopr.deviceIndentifier.instance.ToString();
            }

            if (IdxRemove != -1)
            {
                listReferences.Items.RemoveAt(IdxRemove); // remove an old entry
            }
            ListViewItem lvi = new ListViewItem();

            // add a new one
            lvi.Text       = newText;
            lvi.Tag        = bopr;
            lvi.ImageIndex = MainDialog.GetIconNum(bopr.objectIdentifier.type);
            listReferences.Items.Add(lvi);
        }
コード例 #3
0
        /*****************************************************************************************************/
        /* This is the objective of this sample !                                                            */
        /*****************************************************************************************************/
        static void handler_OnEventNotify(BacnetClient sender, BacnetAddress adr, byte invoke_id, BacnetEventNotificationData EventData, bool need_confirm)
        {
            string val;

            // if event enrollment dispaly which datapoint is being watched
            if (EventData.eventObjectIdentifier.type == BacnetObjectTypes.OBJECT_EVENT_ENROLLMENT)
            {
                IList <BacnetValue> values;
                sender.ReadPropertyRequest(adr, EventData.eventObjectIdentifier, BacnetPropertyIds.PROP_OBJECT_PROPERTY_REFERENCE, out values);

                BacnetDeviceObjectPropertyReference obj = (BacnetDeviceObjectPropertyReference)values[0].Value;
                val = adr.ToString() + ":" + EventData.initiatingObjectIdentifier.type + ":" + EventData.initiatingObjectIdentifier.instance + ":" + EventData.eventObjectIdentifier.type + ":" + EventData.eventObjectIdentifier.instance + " object Type : " + obj.objectIdentifier.type + " object Instance :" + obj.objectIdentifier.instance + " object Property :" + obj.propertyIdentifier;
            }
            else
            {
                val = adr.ToString() + ":" + EventData.initiatingObjectIdentifier.type + ":" + EventData.initiatingObjectIdentifier.instance + ":" + EventData.eventObjectIdentifier.type + ":" + EventData.eventObjectIdentifier.instance;
            }

            if (need_confirm)
            {
                sender.SimpleAckResponse(adr, BacnetConfirmedServices.SERVICE_CONFIRMED_EVENT_NOTIFICATION, invoke_id);
            }

            // Just to show how Acknowledgement can be programmed. Never Ack an alarm like this without tested the source, the reason, ... and normally with a human action
            if (EventData.ackRequired)
            {
                sender.AlarmAcknowledgement(adr, EventData.eventObjectIdentifier, EventData.toState, "Alarmlistener", EventData.timeStamp, new BacnetGenericTime(DateTime.Now, BacnetTimestampTags.TIME_STAMP_DATETIME));
            }


            Console.WriteLine(val + " " + EventData.fromState + " to " + EventData.toState + " " + EventData.notifyType.ToString());
        }
コード例 #4
0
 public void AddPropertyReference(BacnetDeviceObjectPropertyReference reference)
 {
     lock (lockObj)
     {
         if (m_PROP_LIST_OF_OBJECT_PROPERTY_REFERENCES.references == null)
         {
             m_PROP_LIST_OF_OBJECT_PROPERTY_REFERENCES.references = new List <BacnetDeviceObjectPropertyReference>();
         }
         m_PROP_LIST_OF_OBJECT_PROPERTY_REFERENCES.references.Add(reference);
     }
 }
コード例 #5
0
        private void WriteObjectsPropertiesReferences()
        {
            List <BacnetValue> values = new List <BacnetValue>();

            if (listReferences.Items.Count != 0)
            {
                values = new List <BacnetValue>();

                foreach (ListViewItem lvi in listReferences.Items)
                {
                    BacnetDeviceObjectPropertyReference b = (BacnetDeviceObjectPropertyReference)lvi.Tag;
                    values.Add(new BacnetValue(b));
                }
            }

            comm.WritePropertyRequest(adr, schedule_id, BacnetPropertyIds.PROP_LIST_OF_OBJECT_PROPERTY_REFERENCES, values);
        }
コード例 #6
0
        public override object ConvertTo(ITypeDescriptorContext context,
                                         CultureInfo culture,
                                         object value,
                                         System.Type destinationType)
        {
            if (destinationType == typeof(System.String) &&
                value is BacnetDeviceObjectPropertyReference)
            {
                BacnetDeviceObjectPropertyReference pr = (BacnetDeviceObjectPropertyReference)value;

                return("Reference to " + pr.objectIdentifier.ToString());
            }
            else
            {
                return(base.ConvertTo(context, culture, value, destinationType));
            }
        }
コード例 #7
0
        public EditPropertyObjectReference(BacnetDeviceObjectPropertyReference ObjRef)
        {
            this.ObjRef = ObjRef;
            InitializeComponent();

            foreach (BacnetObjectTypes bot in Enum.GetValues(typeof(BacnetObjectTypes)))
            {
                Reference_ObjType.Items.Add(new Enumcombo(bot.ToString().Substring(7), (uint)bot));
            }

            for (int i = 0; i < Reference_ObjType.Items.Count; i++)
            {
                if ((Reference_ObjType.Items[i] as Enumcombo).enumValue == (uint)ObjRef.objectIdentifier.type)
                {
                    Reference_ObjType.SelectedIndex = i;
                    break;
                }
            }

            foreach (BacnetPropertyIds bpi in Enum.GetValues(typeof(BacnetPropertyIds)))
            {
                Reference_Prop.Items.Add(new Enumcombo(bpi.ToString().Substring(5), (uint)bpi));
            }

            for (int i = 0; i < Reference_Prop.Items.Count; i++)
            {
                if ((Reference_Prop.Items[i] as Enumcombo).enumValue == (uint)ObjRef.propertyIdentifier)
                {
                    Reference_Prop.SelectedIndex = i;
                    break;
                }
            }

            Reference_ObjId.Text = ObjRef.objectIdentifier.instance.ToString();

            if (ObjRef.deviceIndentifier.type == BacnetObjectTypes.OBJECT_DEVICE)
            {
                Reference_Device.Text = ObjRef.deviceIndentifier.instance.ToString();
            }
            if (ObjRef.arrayIndex != ASN1.BACNET_ARRAY_ALL)
            {
                Reference_Array.Text = ObjRef.arrayIndex.ToString();
            }
        }
コード例 #8
0
        // Add a new entry at the right place
        private void addToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (this.ActiveControl == Schedule)   // In the Schedule List
            {
                AddScheduleNode(new String[] { "00:00:00 = 0" });
            }
            else
            {
                BacnetDeviceObjectPropertyReference newobj = new BacnetDeviceObjectPropertyReference(new BacnetObjectId(), BacnetPropertyIds.PROP_PRESENT_VALUE);

                EditPropertyObjectReference form = new EditPropertyObjectReference(newobj);
                form.ShowDialog();

                if (form.OutOK == true)
                {
                    AddPropertyRefentry(form.ObjRef, -1);
                }
            }
        }
コード例 #9
0
 private void ReadObjectsPropertiesReferences()
 {
     listReferences.BeginUpdate();
     listReferences.Items.Clear();
     try
     {
         IList <BacnetValue> value;
         if (comm.ReadPropertyRequest(adr, schedule_id, BacnetPropertyIds.PROP_LIST_OF_OBJECT_PROPERTY_REFERENCES, out value))
         {
             foreach (BacnetValue bv in value)
             {
                 BacnetDeviceObjectPropertyReference bopr = (BacnetDeviceObjectPropertyReference)bv.Value;
                 AddPropertyRefentry(bopr, -1);
             }
         }
     }
     catch
     {
     }
     listReferences.EndUpdate();
 }
コード例 #10
0
        // Add a new entry at the right place
        private void addToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (this.ActiveControl == Schedule)   // In the Schedule List
            {
                if (mySelectedScheduleNode != null)
                {
                    TreeNode T = new TreeNode("00:00:00 = 0", 1, 1);

                    if (mySelectedScheduleNode.Parent == null)
                    {
                        mySelectedScheduleNode.Nodes.Add(T);
                        mySelectedScheduleNode.Expand();    // sometimes neeeded
                    }
                    else
                    {
                        mySelectedScheduleNode.Parent.Nodes.Add(T);
                    }

                    // Modify mode
                    mySelectedScheduleNode = T;
                    modifyToolStripMenuItem_Click(null, null);
                }
            }
            else
            {
                BacnetDeviceObjectPropertyReference newobj = new BacnetDeviceObjectPropertyReference(new BacnetObjectId(), BacnetPropertyIds.PROP_PRESENT_VALUE);

                EditPropertyObjectReference form = new EditPropertyObjectReference(newobj);
                form.ShowDialog();


                if (form.OutOK == true)
                {
                    AddPropertyRefentry(form.ObjRef, -1);
                }
            }
        }
コード例 #11
0
        // Copy the Present value into each reference properties value
        protected virtual void DoDispatchValue()
        {
            if ((m_PROP_LIST_OF_OBJECT_PROPERTY_REFERENCES.references == null) || (Mydevice == null))
            {
                return;
            }

            foreach (object obj in m_PROP_LIST_OF_OBJECT_PROPERTY_REFERENCES.references)
            {
                BacnetDeviceObjectPropertyReference reference = (BacnetDeviceObjectPropertyReference)obj;

                // reference.deviceIndentifier.type is not set to OBJECT_DEVICE for local object reference
                if (reference.deviceIndentifier.type != BacnetObjectTypes.OBJECT_DEVICE) // local object
                {
                    BaCSharpObject bcs = Mydevice.FindBacnetObject(reference.objectIdentifier);
                    if (bcs != null)
                    {
                        BacnetPropertyValue value = new BacnetPropertyValue();

                        if (m_PROP_PRIORITY == 0)
                        {
                            value.priority = (byte)16;
                        }
                        else
                        {
                            value.priority = (byte)m_PROP_PRIORITY;
                        }

                        value.property = new BacnetPropertyReference((uint)reference.propertyIdentifier, reference.arrayIndex);

                        value.value = new BacnetValue[] { new BacnetValue(m_PROP_PRESENT_VALUE) };

                        bcs.WritePropertyValue(value, false);
                    }
                }
                else
                {
                    KeyValuePair <BacnetClient, BacnetAddress>?recipient = null;

                    try
                    {
                        // SuroundingDevices is updated with Iam messages
                        recipient = Mydevice.SuroundingDevices[reference.deviceIndentifier.instance];
                    }
                    catch { }
                    if (recipient == null)
                    {
                        return;
                    }

                    BacnetValue[] value = new BacnetValue[] { new BacnetValue(m_PROP_PRESENT_VALUE) };
                    uint          wp    = m_PROP_PRIORITY;
                    System.Threading.ThreadPool.QueueUserWorkItem((o) =>
                    {
                        recipient.Value.Key.WritePriority = wp;
                        recipient.Value.Key.BeginWritePropertyRequest(recipient.Value.Value, reference.objectIdentifier, (BacnetPropertyIds)reference.propertyIdentifier, value, false);
                    }
                                                                  , null);
                }
            }
        }
コード例 #12
0
        public static BacnetValue DeserializeValue(string value, BacnetApplicationTags type)
        {
            switch (type)
            {
            case BacnetApplicationTags.BACNET_APPLICATION_TAG_NULL:
                return(value == ""
                                                ? new BacnetValue(type, null)
                                                : new BacnetValue(value));

            case BacnetApplicationTags.BACNET_APPLICATION_TAG_BOOLEAN:
                return(new BacnetValue(type, bool.Parse(value)));

            case BacnetApplicationTags.BACNET_APPLICATION_TAG_UNSIGNED_INT:
                return(new BacnetValue(type, uint.Parse(value)));

            case BacnetApplicationTags.BACNET_APPLICATION_TAG_SIGNED_INT:
                return(new BacnetValue(type, int.Parse(value)));

            case BacnetApplicationTags.BACNET_APPLICATION_TAG_REAL:
                return(new BacnetValue(type, float.Parse(value, CultureInfo.InvariantCulture)));

            case BacnetApplicationTags.BACNET_APPLICATION_TAG_DOUBLE:
                return(new BacnetValue(type, double.Parse(value, CultureInfo.InvariantCulture)));

            case BacnetApplicationTags.BACNET_APPLICATION_TAG_OCTET_STRING:
                try
                {
                    return(new BacnetValue(type, Convert.FromBase64String(value)));
                }
                catch
                {
                    return(new BacnetValue(type, value));
                }

            case BacnetApplicationTags.BACNET_APPLICATION_TAG_CONTEXT_SPECIFIC_DECODED:
                try
                {
                    return(new BacnetValue(type, Convert.FromBase64String(value)));
                }
                catch
                {
                    return(new BacnetValue(type, value));
                }

            case BacnetApplicationTags.BACNET_APPLICATION_TAG_CHARACTER_STRING:
                return(new BacnetValue(type, value));

            case BacnetApplicationTags.BACNET_APPLICATION_TAG_BIT_STRING:
                return(new BacnetValue(type, BacnetBitString.Parse(value)));

            case BacnetApplicationTags.BACNET_APPLICATION_TAG_ENUMERATED:
                return(new BacnetValue(type, uint.Parse(value)));

            case BacnetApplicationTags.BACNET_APPLICATION_TAG_DATE:
                return(new BacnetValue(type, DateTime.Parse(value)));

            case BacnetApplicationTags.BACNET_APPLICATION_TAG_TIME:
                return(new BacnetValue(type, DateTime.Parse(value)));

            case BacnetApplicationTags.BACNET_APPLICATION_TAG_OBJECT_ID:
                return(new BacnetValue(type, BacnetObjectId.Parse(value)));

            case BacnetApplicationTags.BACNET_APPLICATION_TAG_READ_ACCESS_SPECIFICATION:
                return(new BacnetValue(type, BacnetReadAccessSpecification.Parse(value)));

            case BacnetApplicationTags.BACNET_APPLICATION_TAG_OBJECT_PROPERTY_REFERENCE:
                return(new BacnetValue(type, BacnetDeviceObjectPropertyReference.Parse(value)));

            default:
                return(new BacnetValue(type, null));
            }
        }
コード例 #13
0
        private void btnSchedule_Click(object sender, EventArgs e)
        {
            Int32  liDeviceID        = Convert.ToInt32(ddlScheduleDevice.SelectedValue);
            Int32  liObjectID        = Convert.ToInt32(Convert.ToString(ddlScheduleObject.SelectedValue).Split('|')[1]);
            string lsNewPresentvalue = Convert.ToString(txtScheduleValue.Text);
            Int32  liDaySelected     = Convert.ToInt32(ddlScheduleDay.SelectedValue);

            if (liDeviceID > -1 && liObjectID > -1 && !string.IsNullOrEmpty(lsNewPresentvalue) &&
                !string.IsNullOrEmpty(txtScheduleHours.Text) &&
                !string.IsNullOrEmpty(txtScheduleMinutes.Text) &&
                !string.IsNullOrEmpty(txtScheduleSeconds.Text))
            {
                using (var loESDLutronEntities = new ESDLutronEntities())
                {
                    var loBACnetDeviceDetail = loESDLutronEntities.BACnetDevices
                                               .Where(x => x.device_id == liDeviceID &&
                                                      x.object_type.ToUpper() == LutronFloorObjectType.Device)
                                               .Select(x => x).FirstOrDefault();


                    int?liTopInstanceID = loESDLutronEntities.BACnetDevices
                                          .Where(x => x.device_id == liDeviceID &&
                                                 x.object_type.ToUpper() == LutronFloorObjectType.SCHEDULE)
                                          .Select(x => x.object_instance).OrderByDescending(x => x.Value).FirstOrDefault();


                    BacnetAddress loBacnetAddress;
                    loBacnetAddress = new BacnetAddress(BacnetAddressTypes.IP, loBACnetDeviceDetail.network_id);
                    loBacnetAddress.RoutedSource = new BacnetAddress(BacnetAddressTypes.IP, loBACnetDeviceDetail.routed_source, (ushort)loBACnetDeviceDetail.routed_net);

                    //var deviceObjId = new BacnetObjectId(BacnetObjectTypes.OBJECT_DEVICE, (uint)liDeviceID);
                    //var objectIdList = await moBacnetClient.ReadPropertyAsync(loBacnetAddress, deviceObjId, BacnetPropertyIds.PROP_OBJECT_LIST);

                    //IList<BacnetValue> loDeviceObject;
                    //moBacnetClient.ReadPropertyRequest(loBacnetAddress, new BacnetObjectId(BacnetObjectTypes.OBJECT_DEVICE, (uint)liDeviceID), BacnetPropertyIds.PROP_OBJECT_LIST, out loDeviceObject);

                    //IList<BacnetValue> loScheduleValues;
                    //moBacnetClient.ReadPropertyRequest(loBacnetAddress, new BacnetObjectId(BacnetObjectTypes.OBJECT_SCHEDULE, (uint)11), BacnetPropertyIds.PROP_LIST_OF_OBJECT_PROPERTY_REFERENCES, out loScheduleValues);


                    //IList<BacnetValue> loWeekValues;
                    //moBacnetClient.ReadPropertyRequest(loBacnetAddress, new BacnetObjectId(BacnetObjectTypes.OBJECT_SCHEDULE, (uint)11), BacnetPropertyIds.PROP_WEEKLY_SCHEDULE, out loWeekValues);



                    //IList<BacnetValue> loObjectName;
                    //moBacnetClient.ReadPropertyRequest(loBacnetAddress, new BacnetObjectId(BacnetObjectTypes.OBJECT_SCHEDULE, (uint)11), BacnetPropertyIds.PROP_OBJECT_NAME, out loObjectName);


                    //var loData = values
                    //              .Where(x => ((BacnetObjectId)values[0].Value).Type == BacnetObjectTypes.OBJECT_SCHEDULE)
                    //              .Select(x => x.Value.GetType().GetProperty("Instance"))


                    IList <BacnetValue> loScheduleValues;
                    moBacnetClient.ReadPropertyRequest(loBacnetAddress, new BacnetObjectId(BacnetObjectTypes.OBJECT_SCHEDULE, (uint)2), BacnetPropertyIds.PROP_EXCEPTION_SCHEDULE, out loScheduleValues);



                    ICollection <BacnetPropertyValue> loBacnetPropertyValueList = new List <BacnetPropertyValue>();

                    BacnetPropertyValue loNewPropertyValue = new BacnetPropertyValue();
                    List <BacnetValue>  loBacnetValue      = new List <BacnetValue>();


                    #region set schedule

                    ////    Create new instance id based on largest available
                    //if(liTopInstanceID)
                    liTopInstanceID = liTopInstanceID != null ? liTopInstanceID + 1 : 1;

                    //// Set schedule object name
                    loBacnetValue      = new List <BacnetValue>();
                    loNewPropertyValue = new BacnetPropertyValue();
                    loBacnetValue.Add(new BacnetValue(BacnetApplicationTags.BACNET_APPLICATION_TAG_CHARACTER_STRING, "Schedule" + " " + liTopInstanceID));

                    loNewPropertyValue.value    = loBacnetValue;
                    loNewPropertyValue.property = new BacnetPropertyReference((uint)BacnetPropertyIds.PROP_OBJECT_NAME, ASN1.BACNET_ARRAY_ALL);

                    loBacnetPropertyValueList.Add(loNewPropertyValue);


                    //// Set effective period for schedule object
                    loBacnetValue      = new List <BacnetValue>();
                    loNewPropertyValue = new BacnetPropertyValue();
                    loBacnetValue.Add(new BacnetValue(BacnetApplicationTags.BACNET_APPLICATION_TAG_DATE, DateTime.Today.AddDays(-1)));
                    loBacnetValue.Add(new BacnetValue(BacnetApplicationTags.BACNET_APPLICATION_TAG_DATE, DateTime.Today.AddMonths(1)));

                    loNewPropertyValue.value    = loBacnetValue;
                    loNewPropertyValue.property = new BacnetPropertyReference((uint)BacnetPropertyIds.PROP_EFFECTIVE_PERIOD, ASN1.BACNET_ARRAY_ALL);

                    loBacnetPropertyValueList.Add(loNewPropertyValue);
                    #endregion


                    //// Set object reference to update it's value with schedule object
                    loBacnetValue      = new List <BacnetValue>();
                    loNewPropertyValue = new BacnetPropertyValue();

                    BacnetDeviceObjectPropertyReference loPropertyReference = new BacnetDeviceObjectPropertyReference();


                    //BACnetCalendarEntry loBACnetCalendarEntry = new BACnetCalendarEntry();


                    //// Add AV 1 present value change
                    loPropertyReference.ArrayIndex = -1;
                    loPropertyReference.DeviceId   = new BacnetObjectId(BacnetObjectTypes.OBJECT_DEVICE, (uint)liDeviceID);
                    loPropertyReference.ObjectId   = new BacnetObjectId(BacnetObjectTypes.OBJECT_ANALOG_VALUE, (uint)liObjectID);
                    loPropertyReference.PropertyId = BacnetPropertyIds.PROP_PRESENT_VALUE;

                    loBacnetValue.Add(new BacnetValue(BacnetApplicationTags.BACNET_APPLICATION_TAG_OBJECT_PROPERTY_REFERENCE,
                                                      loPropertyReference));

                    // Add AV 2 present value change
                    loPropertyReference            = new BacnetDeviceObjectPropertyReference();
                    loPropertyReference.ArrayIndex = -1;
                    loPropertyReference.DeviceId   = new BacnetObjectId(BacnetObjectTypes.OBJECT_DEVICE, (uint)liDeviceID);
                    loPropertyReference.ObjectId   = new BacnetObjectId(BacnetObjectTypes.OBJECT_ANALOG_VALUE, (uint)2);
                    loPropertyReference.PropertyId = BacnetPropertyIds.PROP_PRESENT_VALUE;

                    loBacnetValue.Add(new BacnetValue(BacnetApplicationTags.BACNET_APPLICATION_TAG_OBJECT_PROPERTY_REFERENCE,
                                                      loPropertyReference));

                    loNewPropertyValue.value    = loBacnetValue;
                    loNewPropertyValue.property = new BacnetPropertyReference((uint)BacnetPropertyIds.PROP_LIST_OF_OBJECT_PROPERTY_REFERENCES, ASN1.BACNET_ARRAY_ALL);

                    loBacnetPropertyValueList.Add(loNewPropertyValue);



                    //// Add weekly schedule for object
                    loBacnetValue      = new List <BacnetValue>();
                    loNewPropertyValue = new BacnetPropertyValue();

                    //// setup weekday to add schedule (0 = Monday, 1 = Tuesday ....., 6 = Sunday)
                    BacnetWeeklySchedule loBacnetWeeklySchedule = new BacnetWeeklySchedule();
                    loBacnetWeeklySchedule.days[liDaySelected] = new List <DaySchedule>();

                    //// Schedule to update AV 1,2 at specified time
                    loBacnetWeeklySchedule.days[liDaySelected].Add(
                        new DaySchedule(new DateTime(1, 1, 1, Convert.ToInt32(txtScheduleHours.Text),
                                                     Convert.ToInt32(txtScheduleMinutes.Text), Convert.ToInt32(txtScheduleSeconds.Text)),
                                        Convert.ToSingle((new Random()).Next(100, 999))));

                    //// Schedule to update AV 1,2 after 5 mins of schedule
                    loBacnetWeeklySchedule.days[liDaySelected].Add(new DaySchedule(DateTime.Now.AddMinutes(1), Convert.ToSingle(lsNewPresentvalue)));


                    loBacnetValue.Add(new BacnetValue(BacnetApplicationTags.BACNET_APPLICATION_TAG_WEEKLY_SCHEDULE, loBacnetWeeklySchedule));

                    loNewPropertyValue.value    = loBacnetValue;
                    loNewPropertyValue.property = new BacnetPropertyReference((uint)BacnetPropertyIds.PROP_WEEKLY_SCHEDULE, ASN1.BACNET_ARRAY_ALL);

                    loBacnetPropertyValueList.Add(loNewPropertyValue);



                    //// Add exception schedule
                    //loBacnetValue = new List<BacnetValue>();
                    //loNewPropertyValue = new BacnetPropertyValue();

                    //loBacnetValue.Add(new BacnetValue(BacnetApplicationTags.BACNET_APPLICATION_TAG_TIME, new DateTime(2017,9,11,15,10,0)));
                    //loBacnetValue.Add(new BacnetValue(BacnetApplicationTags.BACNET_APPLICATION_TAG_REAL, 333));
                    //loBacnetValue.Add(new BacnetValue(BacnetApplicationTags.BACNET_APPLICATION_TAG_DATE, DateTime.Today.Date));


                    //loNewPropertyValue.value = loBacnetValue;
                    //loNewPropertyValue.property = new BacnetPropertyReference((uint)BacnetPropertyIds.PROP_EXCEPTION_SCHEDULE, ASN1.BACNET_ARRAY_ALL);
                    //loBacnetPropertyValueList.Add(loNewPropertyValue);



                    loBacnetValue      = new List <BacnetValue>();
                    loNewPropertyValue = new BacnetPropertyValue();

                    BacnetWeeklyExceptionSchedule loBacnetWeeklyExceptionSchedule = new BacnetWeeklyExceptionSchedule();

                    List <ExceptionScheduleTimeValue>[] loExceptionSchedulTimeValue = new List <ExceptionScheduleTimeValue> [1];
                    loExceptionSchedulTimeValue[0] = new List <ExceptionScheduleTimeValue>();
                    loExceptionSchedulTimeValue[0].Add(new ExceptionScheduleTimeValue(DateTime.Now.AddMinutes(2), Convert.ToSingle(111)));


                    loBacnetWeeklyExceptionSchedule.loExceptionScheduleArray    = new List <ExceptionScheduleArray> [1];
                    loBacnetWeeklyExceptionSchedule.loExceptionScheduleArray[0] = new List <ExceptionScheduleArray>();
                    loBacnetWeeklyExceptionSchedule.loExceptionScheduleArray[0].Add(new ExceptionScheduleArray(new DateTime(1, 1, 1, 18, 30, 1), loExceptionSchedulTimeValue));

                    loBacnetValue.Add(new BacnetValue(BacnetApplicationTags.BACNET_APPLICATION_TAG_SPECIAL_EVENT, loBacnetWeeklyExceptionSchedule));

                    loNewPropertyValue.value    = loBacnetValue;
                    loNewPropertyValue.property = new BacnetPropertyReference((uint)BacnetPropertyIds.PROP_EXCEPTION_SCHEDULE, ASN1.BACNET_ARRAY_ALL);

                    loBacnetPropertyValueList.Add(loNewPropertyValue);

                    moBacnetClient.CreateObjectRequest(loBacnetAddress, new BacnetObjectId(BacnetObjectTypes.OBJECT_SCHEDULE, (uint)liTopInstanceID), loBacnetPropertyValueList);
                }
            }
            else
            {
                if (liDeviceID < 0)
                {
                    MessageBox.Show("Please select device");
                }
                else if (liObjectID < 0)
                {
                    MessageBox.Show("Please select object");
                }
                else
                {
                    MessageBox.Show("Schedule is not setup properly, please review.");
                }
            }
        }