diff --git a/PepperDashEssentials/AppServer/Messengers/SIMPLCameraMessenger.cs b/PepperDashEssentials/AppServer/Messengers/SIMPLCameraMessenger.cs index b3a46acc..d9868c69 100644 --- a/PepperDashEssentials/AppServer/Messengers/SIMPLCameraMessenger.cs +++ b/PepperDashEssentials/AppServer/Messengers/SIMPLCameraMessenger.cs @@ -95,7 +95,7 @@ namespace PepperDash.Essentials.AppServer.Messengers : base(key, messagePath) { EISC = eisc; - JoinStart = joinStart; + JoinStart = joinStart - 1; EISC.SetUShortSigAction(UshortJoin.CameraPresetCount + JoinStart, (u) => SendCameraFullMessageObject()); @@ -130,7 +130,7 @@ namespace PepperDash.Essentials.AppServer.Messengers // camera presets for (uint i = 1; i <= 6; i++) { - addAction("/cameraPreset" + (i), BoolJoin.CameraPresetStart + JoinStart + i); + addAction("/cameraPreset" + (i), BoolJoin.CameraPresetStart + i + JoinStart); } asc.AddAction(MessagePath + "/fullStatus", new Action(SendCameraFullMessageObject)); @@ -150,7 +150,7 @@ namespace PepperDash.Essentials.AppServer.Messengers { for (uint i = 1; i <= EISC.GetUshort(UshortJoin.CameraPresetCount); i++) { - var presetName = EISC.GetString(JoinStart + StringJoin.CameraPresetNameStart + i); + var presetName = EISC.GetString(StringJoin.CameraPresetNameStart + i + JoinStart); var preset = new CameraPreset((int)i, presetName, string.IsNullOrEmpty(presetName), true); presetList.Add(preset); } diff --git a/PepperDashEssentials/AppServer/Messengers/SIMPLRouteMessenger.cs b/PepperDashEssentials/AppServer/Messengers/SIMPLRouteMessenger.cs index d0f17573..21eabaff 100644 --- a/PepperDashEssentials/AppServer/Messengers/SIMPLRouteMessenger.cs +++ b/PepperDashEssentials/AppServer/Messengers/SIMPLRouteMessenger.cs @@ -29,7 +29,7 @@ namespace PepperDash.Essentials.AppServer.Messengers : base(key, messagePath) { EISC = eisc; - JoinStart = joinStart; + JoinStart = joinStart - 1; EISC.SetStringSigAction(JoinStart + StringJoin.CurrentSource, (s) => SendRoutingFullMessageObject(s)); } diff --git a/PepperDashEssentials/AppServer/Messengers/SimplMessengerPropertiesConfig.cs b/PepperDashEssentials/AppServer/Messengers/SimplMessengerPropertiesConfig.cs new file mode 100644 index 00000000..9ee7407e --- /dev/null +++ b/PepperDashEssentials/AppServer/Messengers/SimplMessengerPropertiesConfig.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; + +using PepperDash.Essentials.Bridges; + +namespace PepperDash.Essentials.AppServer.Messengers +{ + /// + /// Properties to configure a SIMPL Messenger + /// + public class SimplMessengerPropertiesConfig : EiscApiPropertiesConfig.ApiDevicePropertiesConfig + { + } +} \ No newline at end of file diff --git a/PepperDashEssentials/AppServer/RoomBridges/MobileControlDdvc01RoomBridge.cs b/PepperDashEssentials/AppServer/RoomBridges/MobileControlDdvc01RoomBridge.cs index eefd8fbc..9d8ec22b 100644 --- a/PepperDashEssentials/AppServer/RoomBridges/MobileControlDdvc01RoomBridge.cs +++ b/PepperDashEssentials/AppServer/RoomBridges/MobileControlDdvc01RoomBridge.cs @@ -110,7 +110,6 @@ namespace PepperDash.Essentials.Room.MobileControl /// 621 /// public const uint SourceIsEnabledJoinStart = 621; - } public class UshortJoin @@ -755,6 +754,8 @@ namespace PepperDash.Essentials.Room.MobileControl co.Devices.Add(conf); } + SetupDeviceMessengers(); + Debug.Console(0, this, "******* CONFIG FROM DDVC: \r{0}", JsonConvert.SerializeObject(ConfigReader.ConfigObject, Formatting.Indented)); var handler = ConfigurationIsReady; @@ -766,6 +767,63 @@ namespace PepperDash.Essentials.Room.MobileControl ConfigIsLoaded = true; } + /// + /// Iterates device config and adds messengers as neede for each device type + /// + void SetupDeviceMessengers() + { + try + { + foreach (var device in ConfigReader.ConfigObject.Devices) + { + if (device.Group.Equals("appServerMessenger")) + { + var props = JsonConvert.DeserializeObject(device.Properties.ToString()); + + var messengerKey = string.Format("device-{0}-{1}", this.Key, Parent.Key); + + MessengerBase messenger = null; + + var dev = ConfigReader.ConfigObject.GetDeviceForKey(props.DeviceKey); + + if (dev == null) + { + Debug.Console(1, this, "Unable to find device config for key: '{0}'", props.DeviceKey); + return; + } + + var type = device.Type.ToLower(); + + if (type.Equals("simplcameramessenger")) + { + Debug.Console(2, this, "Adding SIMPLCameraMessenger for: '{0}'", props.DeviceKey); + messenger = new SIMPLCameraMessenger(messengerKey, EISC, "/device/" + props.DeviceKey, props.JoinStart); + + } + else if (type.Equals("simplroutemessenger")) + { + Debug.Console(2, this, "Adding SIMPLRouteMessenger for: '{0}'", props.DeviceKey); + messenger = new SIMPLRouteMessenger(messengerKey, EISC, "/device/" + props.DeviceKey, props.JoinStart); + } + + if (messenger != null) + { + DeviceManager.AddDevice(messenger); + messenger.RegisterWithAppServer(Parent); + } + else + { + Debug.Console(2, this, "Unable to add messenger for device: '{0}' of type: '{1}'", props.DeviceKey, type); + } + } + } + } + catch (Exception e) + { + Debug.Console(2, this, "Error Setting up Device Managers: {0}", e); + } + } + /// /// /// diff --git a/PepperDashEssentials/Bridges/BridgeBase.cs b/PepperDashEssentials/Bridges/BridgeBase.cs index 74cc4e87..784be59f 100644 --- a/PepperDashEssentials/Bridges/BridgeBase.cs +++ b/PepperDashEssentials/Bridges/BridgeBase.cs @@ -269,10 +269,10 @@ namespace PepperDash.Essentials.Bridges public EssentialsControlPropertiesConfig Control { get; set; } [JsonProperty("devices")] - public List Devices { get; set; } + public List Devices { get; set; } - public class ApiDevice + public class ApiDevicePropertiesConfig { [JsonProperty("deviceKey")] public string DeviceKey { get; set; } diff --git a/PepperDashEssentials/PepperDashEssentials.csproj b/PepperDashEssentials/PepperDashEssentials.csproj index 62d83715..6cb64c5b 100644 --- a/PepperDashEssentials/PepperDashEssentials.csproj +++ b/PepperDashEssentials/PepperDashEssentials.csproj @@ -115,8 +115,9 @@ - - + + + diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Config/BasicConfig.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Config/BasicConfig.cs index 3673a384..904bfc74 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Config/BasicConfig.cs +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Config/BasicConfig.cs @@ -39,5 +39,25 @@ namespace PepperDash.Essentials.Core.Config return SourceLists[key]; } + + /// + /// Checks Devices for an item with a Key that matches and returns it if found. Otherwise, retunes null + /// + /// Key of desired device + /// + public DeviceConfig GetDeviceForKey(string key) + { + if (string.IsNullOrEmpty(key)) + return null; + + var deviceConfig = Devices.FirstOrDefault(d => d.Key.Equals(key)); + + if (deviceConfig != null) + return deviceConfig; + else + { + return null; + } + } } } \ No newline at end of file