mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-13 11:44:54 +00:00
add schedule config and schedule stuff
This commit is contained in:
@@ -10,11 +10,13 @@ namespace PepperDash.Essentials.Room.Config
|
||||
public string UserPin;
|
||||
public string TechPin;
|
||||
public string PresetsFileName;
|
||||
public EssentialsRoomScheduledEventsConfig RoomScheduledEvents;
|
||||
|
||||
public EssentialsTechRoomConfig()
|
||||
{
|
||||
Displays = new List<string>();
|
||||
Tuners = new List<string>();
|
||||
RoomScheduledEvents = new EssentialsRoomScheduledEventsConfig();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Crestron.SimplSharp;
|
||||
using Crestron.SimplSharp.Scheduler;
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
using PepperDash.Essentials.Core.Config;
|
||||
@@ -19,6 +21,8 @@ namespace PepperDash.Essentials
|
||||
|
||||
private readonly EssentialsTechRoomConfig _config;
|
||||
|
||||
private ScheduledEventGroup _roomScheduledEventGroup;
|
||||
|
||||
public DevicePresetsModel TunerPresets
|
||||
{
|
||||
get
|
||||
@@ -56,6 +60,10 @@ namespace PepperDash.Essentials
|
||||
_displays = GetDevices<TwoWayDisplayBase>(_config.Displays);
|
||||
|
||||
RoomPowerIsOnFeedback = new BoolFeedback(() => RoomPowerIsOn);
|
||||
|
||||
SubscribeToDisplayFeedbacks();
|
||||
|
||||
CreateScheduledEvents();
|
||||
}
|
||||
|
||||
private void SubscribeToDisplayFeedbacks()
|
||||
@@ -66,6 +74,66 @@ namespace PepperDash.Essentials
|
||||
}
|
||||
}
|
||||
|
||||
private void CreateScheduledEvents()
|
||||
{
|
||||
var eventsConfig = _config.RoomScheduledEvents;
|
||||
|
||||
_roomScheduledEventGroup = new ScheduledEventGroup(Key);
|
||||
|
||||
_roomScheduledEventGroup.RetrieveAllEvents();
|
||||
|
||||
Scheduler.AddEventGroup(_roomScheduledEventGroup);
|
||||
|
||||
foreach (var eventConfig in eventsConfig.ScheduledEvents)
|
||||
{
|
||||
if (!_roomScheduledEventGroup.ScheduledEvents.ContainsKey(eventConfig.Name))
|
||||
{
|
||||
SchedulerUtilities.CreateEventFromConfig(eventConfig, _roomScheduledEventGroup);
|
||||
continue;
|
||||
}
|
||||
|
||||
var roomEvent = _roomScheduledEventGroup.ScheduledEvents[eventConfig.Key];
|
||||
|
||||
if (!SchedulerUtilities.CheckEventTimeForMatch(roomEvent, DateTime.Parse(eventConfig.Time)) &&
|
||||
!SchedulerUtilities.CheckEventRecurrenceForMatch(roomEvent, eventConfig.Days))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
Debug.Console(1, this, "Existing event does not match new config properties. Deleting exisiting event: '{0}'", roomEvent.Name);
|
||||
|
||||
_roomScheduledEventGroup.DeleteEvent(roomEvent);
|
||||
|
||||
SchedulerUtilities.CreateEventFromConfig(eventConfig, _roomScheduledEventGroup);
|
||||
}
|
||||
|
||||
_roomScheduledEventGroup.UserGroupCallBack += HandleScheduledEvent;
|
||||
}
|
||||
|
||||
private void HandleScheduledEvent(ScheduledEvent schevent, ScheduledEventCommon.eCallbackReason type)
|
||||
{
|
||||
var eventConfig = _config.RoomScheduledEvents.ScheduledEvents.FirstOrDefault(e => e.Key == schevent.Name);
|
||||
|
||||
if (eventConfig == null)
|
||||
{
|
||||
Debug.Console(1, this, "Event with name {0} not found", schevent.Name);
|
||||
return;
|
||||
}
|
||||
|
||||
if (eventConfig.Acknowledgeable)
|
||||
{
|
||||
schevent.Acknowledge();
|
||||
}
|
||||
|
||||
CrestronInvoke.BeginInvoke((o) =>
|
||||
{
|
||||
foreach (var a in eventConfig.Actions)
|
||||
{
|
||||
DeviceJsonApi.DoDeviceAction(a.Value);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
public void RoomPowerOn()
|
||||
{
|
||||
foreach (var display in _displays)
|
||||
|
||||
Reference in New Issue
Block a user