mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-16 21:24:54 +00:00
Updated C2NRthsController Class to build new devices in PreActivate Method
Addresses #292
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
using System.Collections.Generic;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using Crestron.SimplSharpPro;
|
using Crestron.SimplSharpPro;
|
||||||
using Crestron.SimplSharpPro.DeviceSupport;
|
using Crestron.SimplSharpPro.DeviceSupport;
|
||||||
using Crestron.SimplSharpPro.GeneralIO;
|
using Crestron.SimplSharpPro.GeneralIO;
|
||||||
@@ -11,22 +12,38 @@ using PepperDash.Essentials.Core.Config;
|
|||||||
namespace PepperDash.Essentials.Core.CrestronIO
|
namespace PepperDash.Essentials.Core.CrestronIO
|
||||||
{
|
{
|
||||||
[Description("Wrapper class for the C2N-RTHS sensor")]
|
[Description("Wrapper class for the C2N-RTHS sensor")]
|
||||||
public class C2nRthsController : CrestronGenericBridgeableBaseDevice
|
public class C2nRthsController : CrestronGenericBridgeableBaseDevice, IOnline
|
||||||
{
|
{
|
||||||
private readonly C2nRths _device;
|
private C2nRths _device;
|
||||||
|
|
||||||
public IntFeedback TemperatureFeedback { get; private set; }
|
public IntFeedback TemperatureFeedback { get; private set; }
|
||||||
public IntFeedback HumidityFeedback { get; private set; }
|
public IntFeedback HumidityFeedback { get; private set; }
|
||||||
|
public BoolFeedback IsOnline { get; private set; }
|
||||||
|
|
||||||
public C2nRthsController(string key, string name, GenericBase hardware)
|
public C2nRthsController(string key, Func<DeviceConfig, C2nRths> preActivationFunc,
|
||||||
: base(key, name, hardware)
|
DeviceConfig config)
|
||||||
|
: base(key, config.Name)
|
||||||
{
|
{
|
||||||
_device = hardware as C2nRths;
|
|
||||||
|
AddPreActivationAction(() =>
|
||||||
|
{
|
||||||
|
_device = preActivationFunc(config);
|
||||||
|
|
||||||
|
RegisterCrestronGenericBase(_device);
|
||||||
|
|
||||||
TemperatureFeedback = new IntFeedback(() => _device.TemperatureFeedback.UShortValue);
|
TemperatureFeedback = new IntFeedback(() => _device.TemperatureFeedback.UShortValue);
|
||||||
HumidityFeedback = new IntFeedback(() => _device.HumidityFeedback.UShortValue);
|
HumidityFeedback = new IntFeedback(() => _device.HumidityFeedback.UShortValue);
|
||||||
|
IsOnline = new BoolFeedback(() => _device.IsOnline);
|
||||||
|
|
||||||
if (_device != null) _device.BaseEvent += DeviceOnBaseEvent;
|
if (_device != null) _device.BaseEvent += DeviceOnBaseEvent;
|
||||||
|
if (_device != null) _device.OnlineStatusChange += _device_OnlineStatusChange;
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void _device_OnlineStatusChange(GenericBase currentDevice, OnlineOfflineEventArgs args)
|
||||||
|
{
|
||||||
|
IsOnline.FireUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DeviceOnBaseEvent(GenericBase device, BaseEventArgs args)
|
private void DeviceOnBaseEvent(GenericBase device, BaseEventArgs args)
|
||||||
@@ -77,9 +94,50 @@ namespace PepperDash.Essentials.Core.CrestronIO
|
|||||||
HumidityFeedback.LinkInputSig(trilist.UShortInput[joinMap.Humidity.JoinNumber]);
|
HumidityFeedback.LinkInputSig(trilist.UShortInput[joinMap.Humidity.JoinNumber]);
|
||||||
|
|
||||||
trilist.StringInput[joinMap.Name.JoinNumber].StringValue = Name;
|
trilist.StringInput[joinMap.Name.JoinNumber].StringValue = Name;
|
||||||
|
|
||||||
|
trilist.OnlineStatusChange += (d, args) =>
|
||||||
|
{
|
||||||
|
if (!args.DeviceOnLine) return;
|
||||||
|
|
||||||
|
UpdateFeedbacksWhenOnline();
|
||||||
|
|
||||||
|
trilist.StringInput[joinMap.Name.JoinNumber].StringValue = Name;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void UpdateFeedbacksWhenOnline()
|
||||||
|
{
|
||||||
|
IsOnline.FireUpdate();
|
||||||
|
TemperatureFeedback.FireUpdate();
|
||||||
|
HumidityFeedback.FireUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region PreActivation
|
||||||
|
|
||||||
|
private static C2nRths GetC2nRthsDevice(DeviceConfig dc)
|
||||||
|
{
|
||||||
|
var control = CommFactory.GetControlPropertiesConfig(dc);
|
||||||
|
var cresnetId = control.CresnetIdInt;
|
||||||
|
var branchId = control.ControlPortNumber;
|
||||||
|
var parentKey = string.IsNullOrEmpty(control.ControlPortDevKey) ? "processor" : control.ControlPortDevKey;
|
||||||
|
|
||||||
|
if (parentKey.Equals("processor", StringComparison.CurrentCultureIgnoreCase))
|
||||||
|
{
|
||||||
|
Debug.Console(0, "Device {0} is a valid cresnet master - creating new C2nRths");
|
||||||
|
return new C2nRths(cresnetId, Global.ControlSystem);
|
||||||
|
}
|
||||||
|
var cresnetBridge = DeviceManager.GetDeviceForKey(parentKey) as ICresnetBridge;
|
||||||
|
|
||||||
|
if (cresnetBridge != null)
|
||||||
|
{
|
||||||
|
Debug.Console(0, "Device {0} is a valid cresnet master - creating new C2nRths");
|
||||||
|
return new C2nRths(cresnetId, cresnetBridge.Branches[branchId]);
|
||||||
|
}
|
||||||
|
Debug.Console(0, "Device {0} is not a valid cresnet master", branchId);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
public class C2nRthsControllerFactory : EssentialsDeviceFactory<C2nRthsController>
|
public class C2nRthsControllerFactory : EssentialsDeviceFactory<C2nRthsController>
|
||||||
{
|
{
|
||||||
public C2nRthsControllerFactory()
|
public C2nRthsControllerFactory()
|
||||||
@@ -94,7 +152,8 @@ namespace PepperDash.Essentials.Core.CrestronIO
|
|||||||
var control = CommFactory.GetControlPropertiesConfig(dc);
|
var control = CommFactory.GetControlPropertiesConfig(dc);
|
||||||
var cresnetId = control.CresnetIdInt;
|
var cresnetId = control.CresnetIdInt;
|
||||||
|
|
||||||
return new C2nRthsController(dc.Key, dc.Name, new C2nRths(cresnetId, Global.ControlSystem));
|
return new C2nRthsController(dc.Key, GetC2nRthsDevice, dc);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user