diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Occupancy/CenOdtOccupancySensorBaseController.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Occupancy/CenOdtOccupancySensorBaseController.cs
index 6606c1e6..1944d880 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Occupancy/CenOdtOccupancySensorBaseController.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Occupancy/CenOdtOccupancySensorBaseController.cs
@@ -18,6 +18,8 @@ namespace PepperDash.Essentials.Core
{
public CenOdtCPoe OccSensor { get; private set; }
+ public GlsOccupancySensorPropertiesConfig PropertiesConfig { get; private set; }
+
public BoolFeedback RoomIsOccupiedFeedback { get; private set; }
public BoolFeedback GraceOccupancyDetectedFeedback { get; private set; }
@@ -71,9 +73,11 @@ namespace PepperDash.Essentials.Core
}
}
- public CenOdtOccupancySensorBaseController(string key, string name, CenOdtCPoe sensor)
+ public CenOdtOccupancySensorBaseController(string key, string name, CenOdtCPoe sensor, GlsOccupancySensorPropertiesConfig config)
: base(key, name, sensor)
{
+ PropertiesConfig = config;
+
OccSensor = sensor;
RoomIsOccupiedFeedback = new BoolFeedback(RoomIsOccupiedFeedbackFunc);
@@ -119,8 +123,64 @@ namespace PepperDash.Essentials.Core
OccSensor.BaseEvent += new Crestron.SimplSharpPro.BaseEventHandler(OccSensor_BaseEvent);
OccSensor.CenOccupancySensorChange += new GenericEventHandler(OccSensor_CenOccupancySensorChange);
+
+ AddPostActivationAction(() =>
+ {
+ ApplySettingsToSensorFromConfig();
+ });
}
+ ///
+ /// Applies any sensor settings defined in config
+ ///
+ protected virtual void ApplySettingsToSensorFromConfig()
+ {
+ if (PropertiesConfig.EnablePir != null)
+ {
+ SetPirEnable((bool)PropertiesConfig.EnablePir);
+ }
+
+ if (PropertiesConfig.EnableLedFlash != null)
+ {
+ SetLedFlashEnable((bool)PropertiesConfig.EnableLedFlash);
+ }
+
+ if (PropertiesConfig.ShortTimeoutState != null)
+ {
+ SetShortTimeoutState((bool)PropertiesConfig.ShortTimeoutState);
+ }
+
+ if (PropertiesConfig.EnableRawStates != null)
+ {
+ EnableRawStates((bool)PropertiesConfig.EnableRawStates);
+ }
+
+ if (PropertiesConfig.InternalPhotoSensorMinChange != null)
+ {
+ SetInternalPhotoSensorMinChange((ushort)PropertiesConfig.InternalPhotoSensorMinChange);
+ }
+
+ if (PropertiesConfig.EnableUsA != null)
+ {
+ SetUsAEnable((bool)PropertiesConfig.EnableUsA);
+ }
+
+ if (PropertiesConfig.EnableUsB != null)
+ {
+ SetUsBEnable((bool)PropertiesConfig.EnableUsB);
+ }
+
+ if (PropertiesConfig.OrWhenVacatedState != null)
+ {
+ SetOrWhenVacatedState((bool)PropertiesConfig.OrWhenVacatedState);
+ }
+
+ if (PropertiesConfig.AndWhenVacatedState != null)
+ {
+ SetAndWhenVacatedState((bool)PropertiesConfig.AndWhenVacatedState);
+ }
+ }
+
///
/// Catches events for feedbacks on the base class. Any extending wrapper class should call this delegate after it checks for it's own event IDs.
///
@@ -584,6 +644,8 @@ namespace PepperDash.Essentials.Core
var name = dc.Name;
var comm = CommFactory.GetControlPropertiesConfig(dc);
+ var props = dc.Properties.ToObject();
+
var occSensor = new CenOdtCPoe(comm.IpIdInt, Global.ControlSystem);
if (occSensor == null)
@@ -592,7 +654,7 @@ namespace PepperDash.Essentials.Core
return null;
}
- return new CenOdtOccupancySensorBaseController(key, name, occSensor);
+ return new CenOdtOccupancySensorBaseController(key, name, occSensor, props);
}
}
}
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Occupancy/GlsOccupancySensorBaseController.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Occupancy/GlsOccupancySensorBaseController.cs
index de51527c..92223249 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Occupancy/GlsOccupancySensorBaseController.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Occupancy/GlsOccupancySensorBaseController.cs
@@ -16,6 +16,8 @@ namespace PepperDash.Essentials.Core
[Description("Wrapper class for Single Technology GLS Occupancy Sensors")]
public class GlsOccupancySensorBaseController : CrestronGenericBridgeableBaseDevice, IOccupancyStatusProvider
{
+ public GlsOccupancySensorPropertiesConfig PropertiesConfig { get; private set; }
+
public GlsOccupancySensorBase OccSensor { get; private set; }
public BoolFeedback RoomIsOccupiedFeedback { get; private set; }
@@ -60,6 +62,7 @@ namespace PepperDash.Essentials.Core
: base(key, config.Name)
{
+ PropertiesConfig = config.Properties.ToObject();
AddPreActivationAction(() =>
{
@@ -70,10 +73,53 @@ namespace PepperDash.Essentials.Core
RegisterGlsOdtSensorBaseController(OccSensor);
});
+
+ AddPostActivationAction(() =>
+ {
+ ApplySettingsToSensorFromConfig();
+ });
+
}
public GlsOccupancySensorBaseController(string key, string name) : base(key, name) { }
+
+ ///
+ /// Applies any sensor settings defined in config
+ ///
+ protected virtual void ApplySettingsToSensorFromConfig()
+ {
+ if (PropertiesConfig.EnablePir != null)
+ {
+ SetPirEnable((bool)PropertiesConfig.EnablePir);
+ }
+
+ if (PropertiesConfig.EnableLedFlash != null)
+ {
+ SetLedFlashEnable((bool)PropertiesConfig.EnableLedFlash);
+ }
+
+ if (PropertiesConfig.ShortTimeoutState != null)
+ {
+ SetShortTimeoutState((bool)PropertiesConfig.ShortTimeoutState);
+ }
+
+ if (PropertiesConfig.EnableRawStates != null)
+ {
+ EnableRawStates((bool)PropertiesConfig.EnableRawStates);
+ }
+
+ if (PropertiesConfig.InternalPhotoSensorMinChange != null)
+ {
+ SetInternalPhotoSensorMinChange((ushort)PropertiesConfig.InternalPhotoSensorMinChange);
+ }
+
+ if (PropertiesConfig.ExternalPhotoSensorMinChange != null)
+ {
+ SetExternalPhotoSensorMinChange((ushort)PropertiesConfig.ExternalPhotoSensorMinChange);
+ }
+ }
+
protected void RegisterGlsOdtSensorBaseController(GlsOccupancySensorBase occSensor)
{
OccSensor = occSensor;
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Occupancy/GlsOccupancySensorPropertiesConfig.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Occupancy/GlsOccupancySensorPropertiesConfig.cs
new file mode 100644
index 00000000..1f21b2a8
--- /dev/null
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Occupancy/GlsOccupancySensorPropertiesConfig.cs
@@ -0,0 +1,51 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Crestron.SimplSharp;
+
+using Newtonsoft.Json;
+
+namespace PepperDash.Essentials.Core
+{
+ ///
+ /// Defines configuration properties for Crestron GLS series occupancy sensors
+ ///
+ public class GlsOccupancySensorPropertiesConfig
+ {
+ // Single Technology Sensors (PIR): GlsOccupancySensorBase
+ [JsonProperty("enablePir")]
+ public bool? EnablePir { get; set; }
+
+ [JsonProperty("enableLedFlash")]
+ public bool? EnableLedFlash { get; set; }
+
+ [JsonProperty("shortTimeoutState")]
+ public bool? ShortTimeoutState { get; set; }
+
+ [JsonProperty("enableRawStates")]
+ public bool? EnableRawStates { get; set; }
+
+ [JsonProperty("remoteTimeout")]
+ public ushort? RemoteTimeout { get; set; }
+
+ [JsonProperty("internalPhotoSensorMinChange")]
+ public ushort? InternalPhotoSensorMinChange { get; set; }
+
+ [JsonProperty("externalPhotoSensorMinChange")]
+ public ushort? ExternalPhotoSensorMinChange { get; set; }
+
+ // Dual Technology Sensors: GlsOdtCCn
+ [JsonProperty("enableUsA")]
+ public bool? EnableUsA { get; set; }
+
+ [JsonProperty("enableUsB")]
+ public bool? EnableUsB { get; set; }
+
+ [JsonProperty("orWhenVacatedState")]
+ public bool? OrWhenVacatedState { get; set; }
+
+ [JsonProperty("andWhenVacatedState")]
+ public bool? AndWhenVacatedState { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Occupancy/GlsOdtOccupancySensorController.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Occupancy/GlsOdtOccupancySensorController.cs
index 68d4dcb0..03ddb1db 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Occupancy/GlsOdtOccupancySensorController.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Occupancy/GlsOdtOccupancySensorController.cs
@@ -66,6 +66,31 @@ namespace PepperDash.Essentials.Core
});
}
+ protected override void ApplySettingsToSensorFromConfig()
+ {
+ base.ApplySettingsToSensorFromConfig();
+
+ if (PropertiesConfig.EnableUsA != null)
+ {
+ SetUsAEnable((bool)PropertiesConfig.EnableUsA);
+ }
+
+ if (PropertiesConfig.EnableUsB != null)
+ {
+ SetUsBEnable((bool)PropertiesConfig.EnableUsB);
+ }
+
+ if (PropertiesConfig.OrWhenVacatedState != null)
+ {
+ SetOrWhenVacatedState((bool)PropertiesConfig.OrWhenVacatedState);
+ }
+
+ if (PropertiesConfig.AndWhenVacatedState != null)
+ {
+ SetAndWhenVacatedState((bool)PropertiesConfig.AndWhenVacatedState);
+ }
+ }
+
///
/// Overrides the base class event delegate to fire feedbacks for event IDs that pertain to this extended class.
/// Then calls the base delegate method to ensure any common event IDs are captured.
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj b/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj
index 6a15ce84..8e688858 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj
@@ -227,6 +227,7 @@
+