diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IHasCamerasMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IHasCamerasMessenger.cs
index 7099e52c..00c2c2fe 100644
--- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IHasCamerasMessenger.cs
+++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IHasCamerasMessenger.cs
@@ -1,17 +1,14 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
+using Newtonsoft.Json;
using PepperDash.Essentials.Devices.Common.Cameras;
+using System;
+using System.Collections.Generic;
namespace PepperDash.Essentials.AppServer.Messengers
{
///
/// Messenger for devices that implement the IHasCameras interface.
///
+ [Obsolete("Use IHasCamerasWithControlsMessenger instead. This class will be removed in a future version")]
public class IHasCamerasMessenger : MessengerBase
{
///
diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IHasCamerasWithControlMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IHasCamerasWithControlMessenger.cs
new file mode 100644
index 00000000..d94cc4c4
--- /dev/null
+++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IHasCamerasWithControlMessenger.cs
@@ -0,0 +1,99 @@
+using Newtonsoft.Json;
+using PepperDash.Essentials.Devices.Common.Cameras;
+using System;
+using System.Collections.Generic;
+
+namespace PepperDash.Essentials.AppServer.Messengers
+{
+ ///
+ /// Messenger for devices that implement the IHasCameras interface.
+ ///
+ public class IHasCamerasWithControlMessenger : MessengerBase
+ {
+ ///
+ /// Device being bridged that implements IHasCameras interface.
+ ///
+ public IHasCamerasWithControls CameraController { get; private set; }
+
+ ///
+ /// Messenger for devices that implement IHasCameras interface.
+ ///
+ ///
+ ///
+ ///
+ ///
+ public IHasCamerasWithControlMessenger(string key, string messagePath, IHasCamerasWithControls cameraController)
+ : base(key, messagePath, cameraController)
+ {
+ CameraController = cameraController ?? throw new ArgumentNullException("cameraController");
+ CameraController.CameraSelected += CameraController_CameraSelected;
+ }
+
+ private void CameraController_CameraSelected(object sender, CameraSelectedEventArgs e)
+ {
+ PostStatusMessage(new IHasCamerasWithControlsStateMessage
+ {
+ SelectedCamera = e.SelectedCamera
+ });
+ }
+
+ ///
+ /// Registers the actions for this messenger.
+ ///
+ ///
+ protected override void RegisterActions()
+ {
+ base.RegisterActions();
+
+ AddAction("/fullStatus", (id, context) => SendFullStatus(id));
+
+ AddAction("/cameraListStatus", (id, content) => SendFullStatus(id));
+
+ AddAction("/selectCamera", (id, content) =>
+ {
+ var cameraKey = content?.ToObject();
+
+ if (!string.IsNullOrEmpty(cameraKey))
+ {
+ CameraController.SelectCamera(cameraKey);
+ }
+ else
+ {
+ throw new ArgumentException("Content must be a string representing the camera key");
+ }
+ });
+ }
+
+ private void SendFullStatus(string clientId)
+ {
+ var state = new IHasCamerasWithControlsStateMessage
+ {
+ CameraList = CameraController.Cameras,
+ SelectedCamera = CameraController.SelectedCamera
+ };
+
+ PostStatusMessage(state, clientId);
+ }
+
+
+ }
+
+ ///
+ /// State message for devices that implement the IHasCameras interface.
+ ///
+ public class IHasCamerasWithControlsStateMessage : DeviceStateMessageBase
+ {
+ ///
+ /// List of cameras available in the device.
+ ///
+ [JsonProperty("cameraList", NullValueHandling = NullValueHandling.Ignore)]
+ public List CameraList { get; set; }
+
+ ///
+ /// The currently selected camera on the device.
+ ///
+ [JsonProperty("selectedCamera", NullValueHandling = NullValueHandling.Ignore)]
+ public IHasCameraControls SelectedCamera { get; set; }
+
+ }
+}
diff --git a/src/PepperDash.Essentials.MobileControl/MobileControlSystemController.cs b/src/PepperDash.Essentials.MobileControl/MobileControlSystemController.cs
index 0579c1f6..a4914c10 100644
--- a/src/PepperDash.Essentials.MobileControl/MobileControlSystemController.cs
+++ b/src/PepperDash.Essentials.MobileControl/MobileControlSystemController.cs
@@ -975,6 +975,19 @@ namespace PepperDash.Essentials
messengerAdded = true;
}
+ if (device is IHasCamerasWithControls cameras2)
+ {
+ this.LogVerbose("Adding IHasCamerasMessenger for {deviceKey}", device.Key
+ );
+ var messenger = new IHasCamerasWithControlMessenger(
+ $"{device.Key}-cameras-{Key}",
+ $"/device/{device.Key}",
+ cameras2
+ );
+ AddDefaultDeviceMessenger(messenger);
+ messengerAdded = true;
+ }
+
this.LogVerbose("Trying to cast to generic device for device: {key}", device.Key);
if (device is EssentialsDevice)