mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-01-29 12:24:59 +00:00
Refactored method names for better consistency. Built out Din8sw8 and Din8sw8Output classes. Added logic for RelayControlledShade class to operate relays based on open/close/stop method calls
This commit is contained in:
@@ -12,24 +12,16 @@ namespace PepperDash.Essentials.Core.CrestronIO
|
||||
/// <summary>
|
||||
/// Represents a generic device controlled by relays
|
||||
/// </summary>
|
||||
public class GenericRelayDevice : Device
|
||||
public class GenericRelayDevice : Device, ISwitchedOutput
|
||||
{
|
||||
public Relay RelayOutput { get; private set; }
|
||||
|
||||
public BoolFeedback RelayStateFeedback { get; private set; }
|
||||
|
||||
Func<bool> RelayStateFeedbackFunc
|
||||
{
|
||||
get
|
||||
{
|
||||
return () => RelayOutput.State;
|
||||
}
|
||||
}
|
||||
public BoolFeedback OutputIsOnFeedback { get; private set; }
|
||||
|
||||
public GenericRelayDevice(string key, Relay relay):
|
||||
base(key)
|
||||
{
|
||||
RelayStateFeedback = new BoolFeedback(RelayStateFeedbackFunc);
|
||||
OutputIsOnFeedback = new BoolFeedback(new Func<bool>(() => RelayOutput.State));
|
||||
|
||||
if (relay.AvailableForUse)
|
||||
RelayOutput = relay;
|
||||
@@ -39,7 +31,7 @@ namespace PepperDash.Essentials.Core.CrestronIO
|
||||
|
||||
void RelayOutput_StateChange(Relay relay, RelayEventArgs args)
|
||||
{
|
||||
RelayStateFeedback.FireUpdate();
|
||||
OutputIsOnFeedback.FireUpdate();
|
||||
}
|
||||
|
||||
public void OpenRelay()
|
||||
@@ -59,5 +51,19 @@ namespace PepperDash.Essentials.Core.CrestronIO
|
||||
else
|
||||
CloseRelay();
|
||||
}
|
||||
|
||||
#region ISwitchedOutput Members
|
||||
|
||||
void ISwitchedOutput.On()
|
||||
{
|
||||
CloseRelay();
|
||||
}
|
||||
|
||||
void ISwitchedOutput.Off()
|
||||
{
|
||||
OpenRelay();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
|
||||
using PepperDash.Essentials.Core;
|
||||
|
||||
namespace PepperDash.Essentials.Core.CrestronIO
|
||||
{
|
||||
/// <summary>
|
||||
/// Describes an output capable of switching on and off
|
||||
/// </summary>
|
||||
public interface ISwitchedOutput
|
||||
{
|
||||
BoolFeedback OutputIsOnFeedback {get;}
|
||||
|
||||
void On();
|
||||
void Off();
|
||||
}
|
||||
|
||||
public interface ISwitchedOutputCollection
|
||||
{
|
||||
Dictionary<uint, ISwitchedOutput> SwitchedOutputs { get; }
|
||||
}
|
||||
}
|
||||
@@ -109,6 +109,7 @@
|
||||
<Compile Include="Crestron IO\Inputs\IDigitalInput.cs" />
|
||||
<Compile Include="Crestron IO\IOPortConfig.cs" />
|
||||
<Compile Include="Crestron IO\Relay\GenericRelayDevice.cs" />
|
||||
<Compile Include="Crestron IO\Relay\ISwitchedOutput.cs" />
|
||||
<Compile Include="Devices\CodecInterfaces.cs" />
|
||||
<Compile Include="Global\JobTimer.cs" />
|
||||
<Compile Include="Lighting\Lighting Interfaces.cs" />
|
||||
@@ -183,6 +184,7 @@
|
||||
<Compile Include="Routing\RoutingPortNames.cs" />
|
||||
<Compile Include="Routing\TieLineConfig.cs" />
|
||||
<Compile Include="Shades\Shade Interfaces.cs" />
|
||||
<Compile Include="Shades\ShadeBase.cs" />
|
||||
<Compile Include="Shades\ShadeController.cs" />
|
||||
<Compile Include="SmartObjects\SmartObjectNumeric.cs" />
|
||||
<Compile Include="SmartObjects\SmartObjectDynamicList.cs" />
|
||||
|
||||
@@ -16,8 +16,8 @@ namespace PepperDash.Essentials.Core.Shades
|
||||
/// </summary>
|
||||
public interface iShadesRaiseLower
|
||||
{
|
||||
void Raise();
|
||||
void Lower();
|
||||
void Open();
|
||||
void Stop();
|
||||
void Close();
|
||||
}
|
||||
}
|
||||
30
Essentials Core/PepperDashEssentialsBase/Shades/ShadeBase.cs
Normal file
30
Essentials Core/PepperDashEssentialsBase/Shades/ShadeBase.cs
Normal file
@@ -0,0 +1,30 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core.CrestronIO;
|
||||
|
||||
namespace PepperDash.Essentials.Core.Shades
|
||||
{
|
||||
public abstract class ShadeBase : Device, iShadesRaiseLower
|
||||
{
|
||||
public ISwitchedOutput SwitchedOutput;
|
||||
|
||||
public ShadeBase(string key, string name)
|
||||
: base(key, name)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
#region iShadesRaiseLower Members
|
||||
|
||||
public abstract void Open();
|
||||
public abstract void Stop();
|
||||
public abstract void Close();
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -10,24 +10,14 @@ namespace PepperDash.Essentials.Core.Shades
|
||||
{
|
||||
public class ShadeController : Device, IShades
|
||||
{
|
||||
public List<ShadeBase> IShades.Shades { get; private set; }
|
||||
public List<ShadeBase> Shades { get; private set; }
|
||||
|
||||
}
|
||||
|
||||
public abstract class ShadeBase : Device, iShadesRaiseLower
|
||||
{
|
||||
public ShadeBase(string key, string name)
|
||||
public ShadeController(string key, string name)
|
||||
: base(key, name)
|
||||
{
|
||||
|
||||
Shades = new List<ShadeBase>();
|
||||
}
|
||||
|
||||
#region iShadesRaiseLower Members
|
||||
|
||||
public void iShadesRaiseLower.Raise();
|
||||
public void iShadesRaiseLower.Lower();
|
||||
public void iShadesRaiseLower.Stop();
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
}
|
||||
@@ -4,24 +4,70 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
using Crestron.SimplSharpPro;
|
||||
using Crestron.SimplSharpPro.DeviceSupport;
|
||||
using Crestron.SimplSharpPro.Lighting;
|
||||
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
using PepperDash.Essentials.Core.CrestronIO;
|
||||
|
||||
namespace PepperDash.Essentials.Devices.Common.Environment.Lighting
|
||||
{
|
||||
public class Din8sw8Controller : Device
|
||||
public class Din8sw8Controller : Device, ISwitchedOutputCollection
|
||||
{
|
||||
// Need to figure out some sort of interface to make these switched outputs behave like processor relays so they can be used interchangably
|
||||
|
||||
public Din8Sw8 SwitchModule { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Collection of generic switched outputs
|
||||
/// </summary>
|
||||
public Dictionary<uint, ISwitchedOutput> SwitchedOutputs;
|
||||
|
||||
public Din8sw8Controller(string key, string cresnetId)
|
||||
: base(key)
|
||||
{
|
||||
|
||||
SwitchedOutputs = new Dictionary<uint, ISwitchedOutput>();
|
||||
|
||||
PopulateDictionary();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Populates the generic collection with the loads from the Crestron collection
|
||||
/// </summary>
|
||||
void PopulateDictionary()
|
||||
{
|
||||
foreach (var item in SwitchModule.SwitchedLoads)
|
||||
{
|
||||
SwitchedOutputs.Add(item.Number, new Din8sw8Output(item));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Wrapper class to
|
||||
/// </summary>
|
||||
public class Din8sw8Output : ISwitchedOutput
|
||||
{
|
||||
SwitchedLoadWithOverrideParameter SwitchedOutput;
|
||||
|
||||
public BoolFeedback OutputIsOnFeedback { get; protected set; }
|
||||
|
||||
public Din8sw8Output(SwitchedLoadWithOverrideParameter switchedOutput)
|
||||
{
|
||||
SwitchedOutput = switchedOutput;
|
||||
|
||||
OutputIsOnFeedback = new BoolFeedback(new Func<bool>(() => SwitchedOutput.IsOn));
|
||||
}
|
||||
|
||||
public void On()
|
||||
{
|
||||
SwitchedOutput.FullOn();
|
||||
}
|
||||
|
||||
public void Off()
|
||||
{
|
||||
SwitchedOutput.FullOff();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,29 +5,91 @@ using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
using PepperDash.Essentials.Core.CrestronIO;
|
||||
using PepperDash.Essentials.Core.Shades;
|
||||
|
||||
namespace PepperDash.Essentials.Devices.Common.Environment.Somfy
|
||||
{
|
||||
/// <summary>
|
||||
/// Controls a single shade using three relays
|
||||
/// </summary>
|
||||
public class RelayControlledShade : ShadeBase
|
||||
{
|
||||
ISwitchedOutput OpenRelay;
|
||||
ISwitchedOutput StopRelay;
|
||||
ISwitchedOutput CloseRelay;
|
||||
|
||||
int RelayPulseTime;
|
||||
|
||||
public RelayControlledShade(string key, string name, RelayControlledShadeConfigProperties props)
|
||||
: base(key, name)
|
||||
{
|
||||
RelayPulseTime = props.RelayPulseTime;
|
||||
//Create ISwitchedOutput objects based on props
|
||||
|
||||
OpenRelay = GetSwitchedOutputFromDevice(props.Relays.Open);
|
||||
StopRelay = GetSwitchedOutputFromDevice(props.Relays.Stop);
|
||||
CloseRelay = GetSwitchedOutputFromDevice(props.Relays.Close);
|
||||
}
|
||||
|
||||
|
||||
public void Raise()
|
||||
public override void Open()
|
||||
{
|
||||
StopRelay.Off();
|
||||
CloseRelay.Off();
|
||||
|
||||
OpenRelay.On();
|
||||
}
|
||||
|
||||
public override void Stop()
|
||||
{
|
||||
OpenRelay.Off();
|
||||
CloseRelay.Off();
|
||||
|
||||
StopRelay.On();
|
||||
CTimer stopTimer = new CTimer(new CTimerCallbackFunction((o) => StopRelay.Off()), RelayPulseTime);
|
||||
}
|
||||
|
||||
public override void Close()
|
||||
{
|
||||
OpenRelay.Off();
|
||||
StopRelay.Off();
|
||||
|
||||
CloseRelay.On();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Attempts to get the port on teh specified device from config
|
||||
/// </summary>
|
||||
/// <param name="relayConfig"></param>
|
||||
/// <returns></returns>
|
||||
ISwitchedOutput GetSwitchedOutputFromDevice(IOPortConfig relayConfig)
|
||||
{
|
||||
var portDevice = DeviceManager.GetDeviceForKey(relayConfig.PortDeviceKey);
|
||||
|
||||
if (portDevice != null)
|
||||
{
|
||||
return (portDevice as ISwitchedOutputCollection).SwitchedOutputs[relayConfig.PortNumber];
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Console(1, this, "Error: Unable to get relay on port '{0}' from device with key '{1}'", relayConfig.PortNumber, relayConfig.PortDeviceKey);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class RelayControlledShadeConfigProperties
|
||||
{
|
||||
public int RelayPulseTime { get; set; }
|
||||
public ShadeRelaysConfig Relays { get; set; }
|
||||
|
||||
public class ShadeRelaysConfig
|
||||
{
|
||||
public IOPortConfig Open { get; set; }
|
||||
public IOPortConfig Stop { get; set; }
|
||||
public IOPortConfig Close { get; set; }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -302,6 +302,8 @@ namespace PepperDash.Essentials.Devices.Common
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user