mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-15 12:44:58 +00:00
v1.0.33.* -Fixed issues with versiport configuration for pull up resistor based on feedback from Alex onsite. Corrected issue with RoomIsOccupiedFeedback_OutputChange method in EssentialsRoomBase. Updated Fusion Remote Occ sensor logic.
This commit is contained in:
@@ -26,19 +26,25 @@ namespace PepperDash.Essentials.Core.CrestronIO
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public GenericVersiportDigitalInputDevice(string key, Versiport inputPort):
|
public GenericVersiportDigitalInputDevice(string key, Versiport inputPort, IOPortConfig props):
|
||||||
base(key)
|
base(key)
|
||||||
{
|
{
|
||||||
InputStateFeedback = new BoolFeedback(InputStateFeedbackFunc);
|
InputStateFeedback = new BoolFeedback(InputStateFeedbackFunc);
|
||||||
InputPort = inputPort;
|
InputPort = inputPort;
|
||||||
InputPort.SetVersiportConfiguration(eVersiportConfiguration.DigitalInput);
|
InputPort.SetVersiportConfiguration(eVersiportConfiguration.DigitalInput);
|
||||||
|
if (props.DisablePullUpResistor)
|
||||||
|
InputPort.DisablePullUpResistor = true;
|
||||||
InputPort.VersiportChange += new VersiportEventHandler(InputPort_VersiportChange);
|
InputPort.VersiportChange += new VersiportEventHandler(InputPort_VersiportChange);
|
||||||
|
|
||||||
|
Debug.Console(1, this, "Created GenericVersiportDigitalInputDevice on port '{0}'. DisablePullUpResistor: '{1}'", props.PortNumber, InputPort.DisablePullUpResistor);
|
||||||
}
|
}
|
||||||
|
|
||||||
void InputPort_VersiportChange(Versiport port, VersiportEventArgs args)
|
void InputPort_VersiportChange(Versiport port, VersiportEventArgs args)
|
||||||
{
|
{
|
||||||
Debug.Console(1, this, "Versiport change: {0}", args.Event);
|
Debug.Console(1, this, "Versiport change: {0}", args.Event);
|
||||||
InputStateFeedback.FireUpdate();
|
|
||||||
|
if(args.Event == eVersiportEvent.DigitalInChange)
|
||||||
|
InputStateFeedback.FireUpdate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -40,11 +40,13 @@ namespace PepperDash.Essentials.Core
|
|||||||
{
|
{
|
||||||
Debug.Console(0, this, "Activating");
|
Debug.Console(0, this, "Activating");
|
||||||
var response = Hardware.RegisterWithLogging(Key);
|
var response = Hardware.RegisterWithLogging(Key);
|
||||||
if (response == eDeviceRegistrationUnRegistrationResponse.Success)
|
if (response != eDeviceRegistrationUnRegistrationResponse.Success)
|
||||||
{
|
{
|
||||||
Hardware.OnlineStatusChange += new OnlineStatusChangeEventHandler(Hardware_OnlineStatusChange);
|
Debug.Console(0, this, "ERROR: Cannot register Crestron device: {0}", response);
|
||||||
CommunicationMonitor.Start();
|
return false;
|
||||||
}
|
}
|
||||||
|
Hardware.OnlineStatusChange += new OnlineStatusChangeEventHandler(Hardware_OnlineStatusChange);
|
||||||
|
CommunicationMonitor.Start();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,10 +63,17 @@ namespace PepperDash.Essentials.Core
|
|||||||
public static void ActivateAll()
|
public static void ActivateAll()
|
||||||
{
|
{
|
||||||
foreach (var d in Devices.Values)
|
foreach (var d in Devices.Values)
|
||||||
{
|
{
|
||||||
if (d is Device)
|
try
|
||||||
(d as Device).Activate();
|
{
|
||||||
}
|
if (d is Device)
|
||||||
|
(d as Device).Activate();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Debug.Console(0, d, "ERROR: Device activation failure:\r{0}", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -177,28 +177,10 @@ namespace PepperDash.Essentials.Devices.Common
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cs.SupportsDigitalInput)
|
if (cs.SupportsVersiport)
|
||||||
{
|
{
|
||||||
if (props.PortNumber > cs.NumberOfDigitalInputPorts)
|
Debug.Console(1, "Attempting to add Digital Input device to Versiport port '{0}'", props.PortNumber);
|
||||||
{
|
|
||||||
Debug.Console(0, "WARNING: Cannot register DIO port {0} on {1}. Out of range",
|
|
||||||
props.PortNumber, props.PortDeviceKey);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
DigitalInput digitalInput = cs.DigitalInputPorts[props.PortNumber];
|
|
||||||
|
|
||||||
if (!digitalInput.Registered)
|
|
||||||
{
|
|
||||||
if (digitalInput.Register() == eDeviceRegistrationUnRegistrationResponse.Success)
|
|
||||||
return new GenericDigitalInputDevice(key, digitalInput);
|
|
||||||
else
|
|
||||||
Debug.Console(0, "WARNING: Attempt to register digital input {0} on device with key '{1}' failed.",
|
|
||||||
props.PortNumber, props.PortDeviceKey);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (cs.SupportsVersiport)
|
|
||||||
{
|
|
||||||
if (props.PortNumber > cs.NumberOfVersiPorts)
|
if (props.PortNumber > cs.NumberOfVersiPorts)
|
||||||
{
|
{
|
||||||
Debug.Console(0, "WARNING: Cannot add Vesiport {0} on {1}. Out of range",
|
Debug.Console(0, "WARNING: Cannot add Vesiport {0} on {1}. Out of range",
|
||||||
@@ -212,10 +194,9 @@ namespace PepperDash.Essentials.Devices.Common
|
|||||||
{
|
{
|
||||||
var regSuccess = vp.Register();
|
var regSuccess = vp.Register();
|
||||||
if (regSuccess == eDeviceRegistrationUnRegistrationResponse.Success)
|
if (regSuccess == eDeviceRegistrationUnRegistrationResponse.Success)
|
||||||
{
|
{
|
||||||
if (props.DisablePullUpResistor)
|
Debug.Console(1, "Successfully Created Digital Input Device on Versiport");
|
||||||
vp.DisablePullUpResistor = true;
|
return new GenericVersiportDigitalInputDevice(key, vp, props);
|
||||||
return new GenericVersiportDigitalInputDevice(key, vp);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -225,6 +206,31 @@ namespace PepperDash.Essentials.Devices.Common
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (cs.SupportsDigitalInput)
|
||||||
|
{
|
||||||
|
Debug.Console(1, "Attempting to add Digital Input device to Digital Input port '{0}'", props.PortNumber);
|
||||||
|
|
||||||
|
if (props.PortNumber > cs.NumberOfDigitalInputPorts)
|
||||||
|
{
|
||||||
|
Debug.Console(0, "WARNING: Cannot register DIO port {0} on {1}. Out of range",
|
||||||
|
props.PortNumber, props.PortDeviceKey);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
DigitalInput digitalInput = cs.DigitalInputPorts[props.PortNumber];
|
||||||
|
|
||||||
|
if (!digitalInput.Registered)
|
||||||
|
{
|
||||||
|
if (digitalInput.Register() == eDeviceRegistrationUnRegistrationResponse.Success)
|
||||||
|
{
|
||||||
|
Debug.Console(1, "Successfully Created Digital Input Device on Digital Input");
|
||||||
|
return new GenericDigitalInputDevice(key, digitalInput);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Debug.Console(0, "WARNING: Attempt to register digital input {0} on device with key '{1}' failed.",
|
||||||
|
props.PortNumber, props.PortDeviceKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ namespace PepperDash.Essentials.Devices.Common.Occupancy
|
|||||||
Debug.Console(1, this, "In Mock Mode: '{0}'", InTestMode);
|
Debug.Console(1, this, "In Mock Mode: '{0}'", InTestMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetTestState(bool state)
|
public void SetTestOccupiedState(bool state)
|
||||||
{
|
{
|
||||||
if (!InTestMode)
|
if (!InTestMode)
|
||||||
Debug.Console(1, "Mock mode not enabled");
|
Debug.Console(1, "Mock mode not enabled");
|
||||||
|
|||||||
@@ -68,7 +68,6 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
Load();
|
Load();
|
||||||
|
|
||||||
DeviceManager.ActivateAll();
|
|
||||||
Debug.Console(0, "Essentials load complete\r" +
|
Debug.Console(0, "Essentials load complete\r" +
|
||||||
"-------------------------------------------------------------");
|
"-------------------------------------------------------------");
|
||||||
}
|
}
|
||||||
@@ -147,6 +146,8 @@ namespace PepperDash.Essentials
|
|||||||
LoadTieLines();
|
LoadTieLines();
|
||||||
LoadRooms();
|
LoadRooms();
|
||||||
LoadLogoServer();
|
LoadLogoServer();
|
||||||
|
|
||||||
|
DeviceManager.ActivateAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1208,14 +1208,23 @@ namespace PepperDash.Essentials.Fusion
|
|||||||
{
|
{
|
||||||
RoomIsOccupiedFeedback = new BoolFeedback(RoomIsOccupiedFeedbackFunc);
|
RoomIsOccupiedFeedback = new BoolFeedback(RoomIsOccupiedFeedbackFunc);
|
||||||
|
|
||||||
|
FusionRoom.FusionAssetStateChange += new FusionAssetStateEventHandler(FusionRoom_FusionAssetStateChange);
|
||||||
|
|
||||||
// Build Occupancy Asset?
|
// Build Occupancy Asset?
|
||||||
// Link sigs?
|
// Link sigs?
|
||||||
|
|
||||||
Room.SetRoomOccupancy(this);
|
//Room.SetRoomOccupancy(this as IOccupancyStatusProvider, 0);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FusionRoom_FusionAssetStateChange(FusionBase device, FusionAssetStateEventArgs args)
|
||||||
|
{
|
||||||
|
if (args.EventId == FusionAssetEventId.RoomOccupiedReceivedEventId || args.EventId == FusionAssetEventId.RoomUnoccupiedReceivedEventId)
|
||||||
|
RoomIsOccupiedFeedback.FireUpdate();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sets up remote occupancy that will relay the occupancy status determined by local system devices to Fusion
|
/// Sets up remote occupancy that will relay the occupancy status determined by local system devices to Fusion
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -4,5 +4,5 @@
|
|||||||
[assembly: AssemblyCompany("PepperDash Technology Corp")]
|
[assembly: AssemblyCompany("PepperDash Technology Corp")]
|
||||||
[assembly: AssemblyProduct("PepperDashEssentials")]
|
[assembly: AssemblyProduct("PepperDashEssentials")]
|
||||||
[assembly: AssemblyCopyright("Copyright © PepperDash Technology Corp 2017")]
|
[assembly: AssemblyCopyright("Copyright © PepperDash Technology Corp 2017")]
|
||||||
[assembly: AssemblyVersion("1.0.30.*")]
|
[assembly: AssemblyVersion("1.0.33.*")]
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,10 @@ namespace PepperDash.Essentials.Room.Config
|
|||||||
var disp = DeviceManager.GetDeviceForKey(props.DefaultDisplayKey) as IRoutingSinkWithSwitching;
|
var disp = DeviceManager.GetDeviceForKey(props.DefaultDisplayKey) as IRoutingSinkWithSwitching;
|
||||||
var audio = DeviceManager.GetDeviceForKey(props.DefaultAudioKey) as IRoutingSinkNoSwitching;
|
var audio = DeviceManager.GetDeviceForKey(props.DefaultAudioKey) as IRoutingSinkNoSwitching;
|
||||||
var huddle = new EssentialsHuddleSpaceRoom(Key, Name, disp, audio, props);
|
var huddle = new EssentialsHuddleSpaceRoom(Key, Name, disp, audio, props);
|
||||||
|
|
||||||
|
if (props.Occupancy != null)
|
||||||
|
huddle.SetRoomOccupancy(DeviceManager.GetDeviceForKey(props.Occupancy.DeviceKey) as
|
||||||
|
PepperDash.Essentials.Devices.Common.Occupancy.IOccupancyStatusProvider, props.Occupancy.TimoutMinutes);
|
||||||
huddle.LogoUrl = props.Logo.GetUrl();
|
huddle.LogoUrl = props.Logo.GetUrl();
|
||||||
huddle.SourceListKey = props.SourceListKey;
|
huddle.SourceListKey = props.SourceListKey;
|
||||||
huddle.DefaultSourceItem = props.DefaultSourceItem;
|
huddle.DefaultSourceItem = props.DefaultSourceItem;
|
||||||
@@ -67,8 +71,8 @@ namespace PepperDash.Essentials.Room.Config
|
|||||||
// Add Occupancy object from config
|
// Add Occupancy object from config
|
||||||
|
|
||||||
if (props.Occupancy != null)
|
if (props.Occupancy != null)
|
||||||
rm.SetRoomOccupancy(DeviceManager.GetDeviceForKey(props.Occupancy.DeviceKey) as
|
rm.SetRoomOccupancy(DeviceManager.GetDeviceForKey(props.Occupancy.DeviceKey) as
|
||||||
PepperDash.Essentials.Devices.Common.Occupancy.IOccupancyStatusProvider);
|
PepperDash.Essentials.Devices.Common.Occupancy.IOccupancyStatusProvider, props.Occupancy.TimoutMinutes);
|
||||||
rm.LogoUrl = props.Logo.GetUrl();
|
rm.LogoUrl = props.Logo.GetUrl();
|
||||||
rm.SourceListKey = props.SourceListKey;
|
rm.SourceListKey = props.SourceListKey;
|
||||||
rm.DefaultSourceItem = props.DefaultSourceItem;
|
rm.DefaultSourceItem = props.DefaultSourceItem;
|
||||||
@@ -252,7 +256,7 @@ namespace PepperDash.Essentials.Room.Config
|
|||||||
public class EssentialsRoomOccSensorConfig
|
public class EssentialsRoomOccSensorConfig
|
||||||
{
|
{
|
||||||
public string DeviceKey { get; set; }
|
public string DeviceKey { get; set; }
|
||||||
public string TimoutMinutes { get; set; }
|
public int TimoutMinutes { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class EssentialsRoomTechConfig
|
public class EssentialsRoomTechConfig
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ namespace PepperDash.Essentials
|
|||||||
/// Sets the object to be used as the IOccupancyStatusProvider for the room. Can be an Occupancy Aggregator or a specific device
|
/// Sets the object to be used as the IOccupancyStatusProvider for the room. Can be an Occupancy Aggregator or a specific device
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="statusProvider"></param>
|
/// <param name="statusProvider"></param>
|
||||||
public void SetRoomOccupancy(IOccupancyStatusProvider statusProvider)
|
public void SetRoomOccupancy(IOccupancyStatusProvider statusProvider, int timeoutMinutes)
|
||||||
{
|
{
|
||||||
if (statusProvider == null)
|
if (statusProvider == null)
|
||||||
{
|
{
|
||||||
@@ -198,6 +198,9 @@ namespace PepperDash.Essentials
|
|||||||
if (statusProvider is PepperDash.Essentials.Fusion.EssentialsHuddleSpaceFusionSystemControllerBase)
|
if (statusProvider is PepperDash.Essentials.Fusion.EssentialsHuddleSpaceFusionSystemControllerBase)
|
||||||
OccupancyStatusProviderIsRemote = true;
|
OccupancyStatusProviderIsRemote = true;
|
||||||
|
|
||||||
|
if(timeoutMinutes > 0)
|
||||||
|
RoomVacancyShutdownSeconds = timeoutMinutes * 60;
|
||||||
|
|
||||||
RoomOccupancy = statusProvider;
|
RoomOccupancy = statusProvider;
|
||||||
|
|
||||||
RoomOccupancy.RoomIsOccupiedFeedback.OutputChange += new EventHandler<EventArgs>(RoomIsOccupiedFeedback_OutputChange);
|
RoomOccupancy.RoomIsOccupiedFeedback.OutputChange += new EventHandler<EventArgs>(RoomIsOccupiedFeedback_OutputChange);
|
||||||
@@ -205,7 +208,7 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
void RoomIsOccupiedFeedback_OutputChange(object sender, EventArgs e)
|
void RoomIsOccupiedFeedback_OutputChange(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if ((sender as IOccupancyStatusProvider).RoomIsOccupiedFeedback.BoolValue == false)
|
if (RoomOccupancy.RoomIsOccupiedFeedback.BoolValue == false)
|
||||||
{
|
{
|
||||||
Debug.Console(1, this, "Notice: Vacancy Detected");
|
Debug.Console(1, this, "Notice: Vacancy Detected");
|
||||||
// Trigger the timer when the room is vacant
|
// Trigger the timer when the room is vacant
|
||||||
|
|||||||
Reference in New Issue
Block a user