Esempio n. 1
0
        public ScheduleClass ReadSchedule(uint deviceInstance, int objectAddress)
        {
            var res = new ScheduleClass { Days = new List<ValueTimeRange>[7] };

            res.Id = objectAddress;

            var resName = BacNetServer.Network[deviceInstance].Objects["SCH" + objectAddress].Get(BacnetPropertyId.ObjectName);
            if (resName != null)
                res.Name = resName.ToString();

            var schedule = BacNetServer.Network[deviceInstance].Objects["SCH" + objectAddress].Get(BacnetPropertyId.WeeklySchedule) as List<BACnetDataType>;
            if (schedule == null) return null;

            var dayNumber = 0;
            foreach (var dailySchedule in schedule)
            {
                var daySchedule = new List<ValueTimeRange>();
                var day = dailySchedule as BACnetDailySchedule;
                if (day != null)
                    foreach (var timeValue in day.Values)
                    {
                        var startTime = timeValue.Time.Value;
                        double val;
                        daySchedule.Add(double.TryParse(timeValue.Value.ToString(), out val)
                                            ? new ValueTimeRange(startTime, val)
                                            : new ValueTimeRange(startTime, null));
                    }

                res.Days[dayNumber] = daySchedule;
                dayNumber++;
            }
            res.ControlledObjects = GetControlledObjects(objectAddress);
            return res;
        }
Esempio n. 2
0
        public bool WriteSchedule(uint instance, ScheduleClass schedule)
        {
            var BACnetSchedule = GetBacNetWeeklySchedule(schedule);

            var values = new Dictionary<string, Dictionary<BacnetPropertyId, object>>();
            var val = new Dictionary<BacnetPropertyId, object>();
            val.Add(BacnetPropertyId.WeeklySchedule, BACnetSchedule);
            val.Add(BacnetPropertyId.ObjectName, schedule.Name);
            if (schedule.ControlledObjects != null && schedule.ControlledObjects.Count > 0)
            {
                var controlledObjects = schedule.ControlledObjects.Select(GetPropertyReferensFromString).ToList();
                val.Add(BacnetPropertyId.ListOfObjectPropertyReferences, controlledObjects);
            }
            values.Add("SCH" + schedule.Id, val);

            return BacNetServer.Network[instance].WritePropertyMultiple(values);
        }
Esempio n. 3
0
		public async Task<ScheduleClass> SaveSchedule(ScheduleClass schedule, bool create = false)
		{
			return await Task.Run(() =>
									  {
										  const string saveScheduleUrl = @"/Schedules/";
										  ScheduleClass savedSchedule = null;
										  try
										  {
											  savedSchedule = _dataTransport.PostRequest<ScheduleClass>(schedule,
																										saveScheduleUrl +
																										(schedule.Id == 0 || create
																											 ? ""
																											 : schedule.Id.ToString()), true);
										  }
										  catch (Exception)
										  {
											  return savedSchedule;
										  }
										  return savedSchedule;
									  });
		}
Esempio n. 4
0
		internal static Schedule FromScheduleClass(ScheduleClass value)
		{
			return value == null ? null : new Schedule()
			{
				Id = value.Id,
				Name = value.Name,
				Type = value.Type,
				DaySchedules = new ObservableCollection<DaySchedule>(
					value.Days.Select(n =>
						new DaySchedule()
						{
							Day = (byte)value.Days.ToList().IndexOf(n),
							Spans = new ObservableCollection<ValueTimeRange>(n.Select(m => new ValueTimeRange { Start = m.Start, Length = m.Length, Value = m.Value ?? value.Type.DefaultValue()}).ToList()),
							Time = TimeSpan.Zero,
							TooltipVisibility = Visibility.Collapsed,
							Value = value.Type.DefaultValue()
						}
					)
				)
			};
		}
Esempio n. 5
0
	    private static bool IsScheduleChanged(ScheduleClass masterControllerSchedule, ScheduleClass dataBaseSchedule)
	    {
		    bool scheduleChanged = dataBaseSchedule.Name != masterControllerSchedule.Name;

		    if (dataBaseSchedule.Days.Length != masterControllerSchedule.Days.Length)
			    return true;

		    for (int i = 0; i < dataBaseSchedule.Days.Length; i++)
		    {
			    if (dataBaseSchedule.Days[i].Count != masterControllerSchedule.Days[i].Count)
				    return true;

			    for (int j = 0; j < dataBaseSchedule.Days[i].Count; j++)
			    {
				    if (dataBaseSchedule.Days[i][j].Start != masterControllerSchedule.Days[i][j].Start ||
				        dataBaseSchedule.Days[i][j].Value != masterControllerSchedule.Days[i][j].Value)
					    scheduleChanged = true;
			    }
		    }
		    return scheduleChanged;
	    }
Esempio n. 6
0
        private void EditScheduleOnControllers(ScheduleClass dbSchedule)
        {
			AddScheduleToControllers(dbSchedule);
            var schdeuleDevices = _network.SubscribedDevices.Where(d => d.ObjectList.Contains("SCH" + dbSchedule.Id));
            foreach (var deviceWithSchedule in schdeuleDevices)
            {
                if (!dbSchedule.Controllers.Contains(deviceWithSchedule.Id) && deviceWithSchedule.Id != _masterController)
                    _bacnetSchedule.DeleteSchedule(deviceWithSchedule.Id, dbSchedule.Id);
            }
	        dbSchedule.OverrideController = false;
			EditScheduleInDataBase(dbSchedule);
        }
Esempio n. 7
0
        private List<BACnetDataType> GetBacNetWeeklySchedule(ScheduleClass schedule)
        {
            var res = new List<BACnetDataType>();
            for (int i = 0; i < 7; i++)
                res.Add(new BACnetDailySchedule());

            for (int i = 0; i < 7; i++)
            {
                var day = schedule.Days[i];
                var hourly = new List<BACnetTimeValue>();
                for (int j = 0; j < day.Count; j++)
                {
                    if (j == 0 && day[j].Value == null) continue;
                    BACnetPrimitiveDataType value;
                    var startTime = day[j].Start;
                    if (day[j].Value != null)
                    {
                        if (schedule.Id > ScheduleClass.MaxScudTypeNumber || schedule.Id < ScheduleClass.MinScudTypeNumber)
                        {
                            float floatValue;
                            float.TryParse(day[j].Value.ToString(), out floatValue);
                            value = new BACnetReal(floatValue);
                        }
                        else
                        {
                            int intValue;
                            int.TryParse(day[j].Value.ToString(), out intValue);
                            value = new BACnetEnumerated(intValue);
                        }
                    }
                    else
                        value = new BACnetNull();

                    var start = new BACnetTimeValue { Time = new BACnetTime(startTime.Hour, startTime.Minute, startTime.Second, startTime.Millisecond / 10), Value = value };
                    hourly.Add(start);
                }
                var daily = new BACnetDailySchedule(hourly);
                res[i] = daily;
            }
            return res;
        }
Esempio n. 8
0
		private void EditScheduleInDataBase(ScheduleClass controllerSchedule)
		{
			Schedule newDbSchedule = ConvertScheduleClassToDbSchedule(controllerSchedule);
			using (var context = new PlansDc(ConfigurationManager.ConnectionStrings["Ester"].ConnectionString))
			{
				var dbSchedule = context.Schedules.Single(s => s.ObjectId == newDbSchedule.ObjectId);
				dbSchedule.Title = newDbSchedule.Title;
				dbSchedule.OverrideController = newDbSchedule.OverrideController;
				dbSchedule.DeleteOnSync = newDbSchedule.DeleteOnSync;
				dbSchedule.SchedulesContents = newDbSchedule.SchedulesContents;
				dbSchedule.SchedulesControlledProperties = newDbSchedule.SchedulesControlledProperties;
				context.SubmitChanges();
			}
		}
Esempio n. 9
0
		private void DeleteScheduleFromDb(ScheduleClass dataBaseSchedule)
		{
			using (var context = new PlansDc(ConfigurationManager.ConnectionStrings["Ester"].ConnectionString))
			{
				var dbSch = context.Schedules.Single(s => s.ObjectId == dataBaseSchedule.Id);
				context.Schedules.DeleteOnSubmit(dbSch);
				context.SubmitChanges();
			}
		}
Esempio n. 10
0
        private ScheduleClass GetCurrentScheduleToWrite(ScheduleClass sch, KeyValuePair<uint, List<string>> controlledObjects)
        {
            var tmpSchedule = new ScheduleClass
	                              {Id = sch.Id, Name = sch.Name, Days = sch.Days, ControlledObjects = new List<string>()};
	        foreach (var obj in controlledObjects.Value)
            {
                tmpSchedule.ControlledObjects.Add(controlledObjects.Key + "." + obj);
            }
            return tmpSchedule;
        }
Esempio n. 11
0
		private void AddScheduleToDataBase(ScheduleClass controllerSchedule)
		{
			//добавление расписания в бд
			Schedule sch = ConvertScheduleClassToDbSchedule(controllerSchedule);
			using (var context = new PlansDc(ConfigurationManager.ConnectionStrings["Ester"].ConnectionString))
			{
				var dbSch = context.Schedules.FirstOrDefault(s => s.ObjectId == sch.ObjectId);
				if (dbSch != null)
					context.Schedules.DeleteOnSubmit(dbSch);
				context.Schedules.InsertOnSubmit(sch);
				context.SubmitChanges();
			}
		}
Esempio n. 12
0
 private Dictionary<uint, List<string>> GenerateControlledObjectForEachController(ScheduleClass sch)
 {
     var controlledObjectsForEachController = new Dictionary<uint, List<string>>();
     foreach (var controlledObject in sch.ControlledObjects)
     {
         var tmp = controlledObject.Split('.')[0];
         uint controller;
         if (uint.TryParse(tmp, out controller))
         {
             var obj = controlledObject.Split('.')[1];
             if (controlledObjectsForEachController.ContainsKey(controller))
                 controlledObjectsForEachController[controller].Add(obj);
             else
                 controlledObjectsForEachController.Add(controller, new List<string> { obj });
         }
     }
     return controlledObjectsForEachController;
 }
Esempio n. 13
0
        private ScheduleClass ConvertDbScheduleToScheduleClass(Schedule dbSchedule)
        {
            var schedule = new ScheduleClass
            {
                Name = dbSchedule.Title,
                Id = dbSchedule.ObjectId,
                OverrideController = dbSchedule.OverrideController ?? false,
                DeleteOnSync = dbSchedule.DeleteOnSync ?? false,
                ControlledObjects = dbSchedule.SchedulesControlledProperties.Select(c => c.Property).ToList()
            };

            var days = new List<List<ValueTimeRange>>();
            for (var i = 0; i < 7; i++)
            {
                var daySchedule = dbSchedule.SchedulesContents.Where(sc => sc.Day == i).
                    Select(ds => new ValueTimeRange(ds.Time, ds.Value)).ToList();
                days.Add(daySchedule);
            }
            schedule.Days = days.ToArray();
            return schedule;
        }
Esempio n. 14
0
        private void AddScheduleToControllers(ScheduleClass sch)
        {
            var controlledObjectsForEachController = GenerateControlledObjectForEachController(sch);
			if (!controlledObjectsForEachController.ContainsKey(_masterController))
				controlledObjectsForEachController.Add(_masterController, new List<string>());

            foreach (var controller in controlledObjectsForEachController)
            {
                var tmpSchedule = GetCurrentScheduleToWrite(sch, controller);
                _bacnetSchedule.CreateSchedule(controller.Key, tmpSchedule.Id, tmpSchedule.Name);
                _bacnetSchedule.WriteSchedule(controller.Key, tmpSchedule);
            }
	        sch.OverrideController = false;
			EditScheduleInDataBase(sch);
        }
Esempio n. 15
0
        private void DeleteScheduleFromDb(ScheduleClass dataBaseSchedule)
        {
            using (var context = new EsterClassesDataContext())
            {
                var dbSch = context.Schedules.Single(s => s.ObjectId == dataBaseSchedule.Id);
	            context.Schedules.DeleteOnSubmit(dbSch);
                context.SubmitChanges();
            }
        }
Esempio n. 16
0
        private void EditScheduleInDataBase(ScheduleClass controllerSchedule)
        {
            Schedule newDbSchedule = ConvertScheduleClassToDbSchedule(controllerSchedule);
            using (var context = new EsterClassesDataContext())
            {
                var dbSchedule = context.Schedules.Single(s => s.ObjectId == newDbSchedule.ObjectId);
                dbSchedule.Title = newDbSchedule.Title;
	            dbSchedule.OverrideController = newDbSchedule.OverrideController;
	            dbSchedule.DeleteOnSync = newDbSchedule.DeleteOnSync;
	            dbSchedule.SchedulesContents = newDbSchedule.SchedulesContents;
	            dbSchedule.SchedulesControlledObjects = newDbSchedule.SchedulesControlledObjects;
                context.SubmitChanges();
            }
        }
Esempio n. 17
0
 private void AddScheduleToDataBase(ScheduleClass controllerSchedule)
 {
     //добавление расписания в бд
     Schedule sch = ConvertScheduleClassToDbSchedule(controllerSchedule);
     using (var context = new EsterClassesDataContext())
     {
         var dbSch = context.Schedules.FirstOrDefault(s => s.ObjectId == sch.ObjectId);
         if (dbSch != null)
             context.Schedules.DeleteOnSubmit(dbSch);
         context.Schedules.InsertOnSubmit(sch);
         context.SubmitChanges();
     }
 }
Esempio n. 18
0
        private Schedule ConvertScheduleClassToDbSchedule(ScheduleClass schedule)
        {
            var dbSchedule = new Schedule
            {
                Title = schedule.Name,
                ObjectId = schedule.Id,
                OverrideController = schedule.OverrideController,
                DeleteOnSync = schedule.DeleteOnSync
            };

            foreach (var controlledObject in schedule.ControlledObjects)
            {
                dbSchedule.SchedulesControlledProperties.Add(new SchedulesControlledProperty() { });
            }

            for (int index = 0; index < schedule.Days.Length; index++)
            {
                var day = schedule.Days[index];
                dbSchedule.SchedulesContents.AddRange(
                    day.Select(s => new SchedulesContent { Day = index, Time = s.Start, Value = s.Value }).ToList());
            }
            return dbSchedule;
        }
Esempio n. 19
0
        private void DeleteScheduleFromControllers(ScheduleClass schedule)
        {
			foreach (var controller in schedule.Controllers)
			{
				_bacnetSchedule.DeleteSchedule(controller, schedule.Id);
			}
            var controllersWithSchedule =
                _network.SubscribedDevices.Where(d => d.ObjectList.Contains("SCH" + schedule.Id));
            foreach (var controller in controllersWithSchedule)
            {
                _bacnetSchedule.DeleteSchedule(controller.Id, schedule.Id);
            }
        }