feat: Add post activation action for aggregator

This commit is contained in:
Andrew Welker
2021-07-19 15:09:37 -06:00
parent 9128e108f7
commit 10129b8178

View File

@@ -35,9 +35,38 @@ namespace PepperDash.Essentials.Core
}
public IOccupancyStatusProviderAggregator(string key, string name, OccupancyAggregatorConfig config)
: this(dc.Key, dc.Name)
: this(key, name)
{
AddPostActivationAction(() =>
{
if (config.DeviceKeys.Count == 0)
{
return;
}
foreach (var deviceKey in config.DeviceKeys)
{
var device = DeviceManager.GetDeviceForKey(deviceKey);
if (device == null)
{
Debug.Console(0, this, Debug.ErrorLogLevel.Notice,
"Unable to retrieve Occupancy provider with key {0}", deviceKey);
continue;
}
var provider = device as IOccupancyStatusProvider;
if (provider == null)
{
Debug.Console(0, this, Debug.ErrorLogLevel.Notice,
"Device with key {0} does NOT implement IOccupancyStatusProvider. Please check configuration.");
continue;
}
AddOccupancyStatusProvider(provider);
}
});
}
/// <summary>
@@ -52,6 +81,11 @@ namespace PepperDash.Essentials.Core
public void RemoveOccupancyStatusProvider(IOccupancyStatusProvider statusProvider)
{
_aggregatedOccupancyStatus.RemoveOutputIn(statusProvider.RoomIsOccupiedFeedback);
}
public void ClearOccupancyStatusProviders()
{
_aggregatedOccupancyStatus.ClearOutputs();
}
}
@@ -59,7 +93,7 @@ namespace PepperDash.Essentials.Core
{
public OccupancyAggregatorFactory()
{
TypeNames = new List<string> { "glsodtccn" };
TypeNames = new List<string> { "occupancyAggregator", "occAggregate" };
}