mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-15 12:44:58 +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 UserPin;
|
||||||
public string TechPin;
|
public string TechPin;
|
||||||
public string PresetsFileName;
|
public string PresetsFileName;
|
||||||
|
public EssentialsRoomScheduledEventsConfig RoomScheduledEvents;
|
||||||
|
|
||||||
public EssentialsTechRoomConfig()
|
public EssentialsTechRoomConfig()
|
||||||
{
|
{
|
||||||
Displays = new List<string>();
|
Displays = new List<string>();
|
||||||
Tuners = new List<string>();
|
Tuners = new List<string>();
|
||||||
|
RoomScheduledEvents = new EssentialsRoomScheduledEventsConfig();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using Crestron.SimplSharp;
|
||||||
|
using Crestron.SimplSharp.Scheduler;
|
||||||
using PepperDash.Core;
|
using PepperDash.Core;
|
||||||
using PepperDash.Essentials.Core;
|
using PepperDash.Essentials.Core;
|
||||||
using PepperDash.Essentials.Core.Config;
|
using PepperDash.Essentials.Core.Config;
|
||||||
@@ -19,6 +21,8 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
private readonly EssentialsTechRoomConfig _config;
|
private readonly EssentialsTechRoomConfig _config;
|
||||||
|
|
||||||
|
private ScheduledEventGroup _roomScheduledEventGroup;
|
||||||
|
|
||||||
public DevicePresetsModel TunerPresets
|
public DevicePresetsModel TunerPresets
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
@@ -56,6 +60,10 @@ namespace PepperDash.Essentials
|
|||||||
_displays = GetDevices<TwoWayDisplayBase>(_config.Displays);
|
_displays = GetDevices<TwoWayDisplayBase>(_config.Displays);
|
||||||
|
|
||||||
RoomPowerIsOnFeedback = new BoolFeedback(() => RoomPowerIsOn);
|
RoomPowerIsOnFeedback = new BoolFeedback(() => RoomPowerIsOn);
|
||||||
|
|
||||||
|
SubscribeToDisplayFeedbacks();
|
||||||
|
|
||||||
|
CreateScheduledEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SubscribeToDisplayFeedbacks()
|
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()
|
public void RoomPowerOn()
|
||||||
{
|
{
|
||||||
foreach (var display in _displays)
|
foreach (var display in _displays)
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ using Crestron.SimplSharp;
|
|||||||
using Crestron.SimplSharp.Scheduler;
|
using Crestron.SimplSharp.Scheduler;
|
||||||
|
|
||||||
using PepperDash.Core;
|
using PepperDash.Core;
|
||||||
|
using PepperDash.Essentials.Core.Fusion;
|
||||||
|
using PepperDash.Essentials.Room.Config;
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
namespace PepperDash.Essentials.Core
|
||||||
{
|
{
|
||||||
@@ -135,5 +137,39 @@ namespace PepperDash.Essentials.Core
|
|||||||
|
|
||||||
return isMatch;
|
return isMatch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static bool CheckEventTimeForMatch(ScheduledEvent evnt, DateTime time)
|
||||||
|
{
|
||||||
|
return evnt.DateAndTime.Hour == time.Hour && evnt.DateAndTime.Minute == time.Minute;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool CheckEventRecurrenceForMatch(ScheduledEvent evnt, ScheduledEventCommon.eWeekDays days)
|
||||||
|
{
|
||||||
|
return evnt.Recurrence.RecurrenceDays == days;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void CreateEventFromConfig(ScheduledEventConfig config, ScheduledEventGroup group)
|
||||||
|
{
|
||||||
|
if (group == null)
|
||||||
|
{
|
||||||
|
Debug.Console(0, "Unable to create event. Group is null");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var scheduledEvent = new ScheduledEvent(config.Key, group)
|
||||||
|
{
|
||||||
|
Acknowledgeable = config.Acknowledgeable,
|
||||||
|
Persistent = config.Persistent
|
||||||
|
};
|
||||||
|
|
||||||
|
scheduledEvent.DateAndTime.SetFirstDayOfWeek(ScheduledEventCommon.eFirstDayOfWeek.Sunday);
|
||||||
|
|
||||||
|
scheduledEvent.Recurrence.Weekly(config.Days);
|
||||||
|
|
||||||
|
var eventTime = DateTime.Parse(config.Time);
|
||||||
|
|
||||||
|
if (DateTime.Now < eventTime) eventTime.AddDays(1);
|
||||||
|
|
||||||
|
scheduledEvent.DateAndTime.SetAbsoluteEventTime(eventTime);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using Crestron.SimplSharp.Scheduler;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using PepperDash.Essentials.Core;
|
||||||
|
|
||||||
|
namespace PepperDash.Essentials.Room.Config
|
||||||
|
{
|
||||||
|
public class EssentialsRoomScheduledEventsConfig
|
||||||
|
{
|
||||||
|
[JsonProperty("scheduledEvents")]
|
||||||
|
public List<ScheduledEventConfig> ScheduledEvents;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ScheduledEventConfig
|
||||||
|
{
|
||||||
|
[JsonProperty("key")]
|
||||||
|
public string Key;
|
||||||
|
|
||||||
|
[JsonProperty("name")]
|
||||||
|
public string Name;
|
||||||
|
|
||||||
|
[JsonProperty("days")]
|
||||||
|
public ScheduledEventCommon.eWeekDays Days;
|
||||||
|
|
||||||
|
[JsonProperty("time")]
|
||||||
|
public string Time;
|
||||||
|
|
||||||
|
[JsonProperty("actions")]
|
||||||
|
public Dictionary<string, DeviceActionWrapper> Actions;
|
||||||
|
|
||||||
|
[JsonProperty("persistent")]
|
||||||
|
public bool Persistent;
|
||||||
|
|
||||||
|
[JsonProperty("acknowledgeable")]
|
||||||
|
public bool Acknowledgeable;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user