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; }
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); }
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; }); }
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() } ) ) }; }
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; }
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); }
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; }
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(); } }
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(); } }
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; }
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(); } }
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; }
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; }
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); }
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(); } }
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(); } }
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(); } }
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; }
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); } }