PepperDash.Essentials.4Series.Plugin.MobileControl 4.3.0-feature-temp-humidity-messengers.3

This is a prerelease version of PepperDash.Essentials.4Series.Plugin.MobileControl.
There is a newer version of this package available.
See the version list below for details.
dotnet add package PepperDash.Essentials.4Series.Plugin.MobileControl --version 4.3.0-feature-temp-humidity-messengers.3                
NuGet\Install-Package PepperDash.Essentials.4Series.Plugin.MobileControl -Version 4.3.0-feature-temp-humidity-messengers.3                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="PepperDash.Essentials.4Series.Plugin.MobileControl" Version="4.3.0-feature-temp-humidity-messengers.3" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add PepperDash.Essentials.4Series.Plugin.MobileControl --version 4.3.0-feature-temp-humidity-messengers.3                
#r "nuget: PepperDash.Essentials.4Series.Plugin.MobileControl, 4.3.0-feature-temp-humidity-messengers.3"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install PepperDash.Essentials.4Series.Plugin.MobileControl as a Cake Addin
#addin nuget:?package=PepperDash.Essentials.4Series.Plugin.MobileControl&version=4.3.0-feature-temp-humidity-messengers.3&prerelease

// Install PepperDash.Essentials.4Series.Plugin.MobileControl as a Cake Tool
#tool nuget:?package=PepperDash.Essentials.4Series.Plugin.MobileControl&version=4.3.0-feature-temp-humidity-messengers.3&prerelease                

Mobile Control Essentials Plugin

This plugin enables Essentials to communicate with the Mobile Control User App.

This happens via two methods:

  • An Edge Server running the Mobile Control API stack to enable user provided mobile devices to choose and control rooms using either the QR code or numeric user code mechanism
  • If using a 4-series processor, the processor can run a websocket server that allows direct communication from dedicated in-room devices.

Both methods are optionally configurable and can operate independently or in parallel.

A user gets served the Mobile Control User App to their browser via HTTP and subsequently a websocket connection is made to the plugin to allow serial communcation for realtime system control and feedback.

PepperDash Essentials - Releases (v2.0.0 minimum)

PepperDash Mobile Control React App Core - Releases

Direct Connection to 4-Series Processor with or without Edge Server

The steps below detail how to load Mobile Control on a 4-Series processor running a websocket server to be served to local devices like an in-room touchpanel or a dedicated room PC or tablet. Devices that connect in this manner can only connect to a single room, configured by generating a token via console commands on this plugin.

An Edge Server can still optionally be used for mobile devices to connect to any room configured to communicate with the Edge Server.

Folder Structure

Processor
├── html
├── program[xx] // where xx is the two digit slot number
│   └── PepperDashEssentials-X.Y.Z.cpz // Essentials application file
└── user
    └── program[x] // where x is the slot number
        ├── configurationFile*.json // Essentials configuration file
        ├── ir
        ├── mcUserApp // optional folder where user app is served from
        │   ├── _local-config
        │   │   └── _config.local.json // config file for the user app
        │   ├── {Contents of mobile-control-app-directServer-vX.Y.Z.zip file}
        ├── plugins // plugin must be loaded to this folder
        │   └── epi-essentials-mobile-control-4s-X.Y.Z.cplz // the 4s version is for 4-Series and is required for direct websocket commmunications to work.
        └── sgd

Configuration Snippets

_config.local.json

This file is created automatically when program starts up and served up to the client device as part of the Mobile Control app. It contains the information to configure the app and to connect to the processor via websocket.

{
  "apiPath": "http://{processor-ip}:{50000 + Essentials Slot #}/mc/api", // This value must be set to the IP of the processor and the port configured for the websocket
  "gatewayAppPath": "https://{processor-ip}:{50000 + Essentials Slot #}/mc/gateway", // Not used in direct connection scenarios
  "enableDev": true,
  "logoPath": "logo/logo.png",
  "iconSet": "GOOGLE", // Set the icon set to be used.  Valid values are "GOOGLE", "HABANERO" or "NEO
  "loginMode": "room-list",
  "modes": {
    "room-list": {
      "listPageText": "Please select your room",
      "loginHelpText": "Please select your room from the list, then enter the code shown on the display in the room. (Configurable message)",
      "passcodePageText": "Please enter the code shown on this room's display"
    },
    "partnerMetadata": [
    {
        "role": "consultant",
        "description": "Design and consulting by [Consultant Name]",
        "logoPath": "logo/consultant.png"
    },
    {
        "role": "integrator",
        "description": "Integration services by [Integrator Name]",
        "logoPath": "logo/integrator.png"
    }
]
}
}

Essentials Mobile Control Device Snippet

{
    "key": "mobileControl-25",
    "name": "Mobile Control",
    "type": "mobileControl",
    "group": "api",
    "id": "c9138b74-ae67-4837-89ee-e1fe91e0f0d8",
    "properties": {
        "clientAppUrl": "http://{server-hostname}/mc/gateway", // url of the gateway app on an Edge Server
        "serverUrl": "http://{server-hostname}/mc/api", // url of the MC API on an Edge Server
        "enableApiServer": false, // set to true to enable communication with an Edge Server
        "directServer": { // Optional object to configure for direct communication
            "enableDirectServer": true, // set to true to enable direct communication to the plugins websocket server
            "port": 50001 // Optional custom port number for the websocket communication.  If not specified, default port will be 50000 + the program slot number
        },
        "applicationConfig": { // Optional object to create configuration for the MC Application
            "enableDev": false, // Enables dev information in the application
            "logoPath": "logo/logo.png", // path to the logo for the background in the application
            "iconSet": "GOOGLE", // icon set to be used. Valued values are "GOOGLE", "HABANERO", or "NEO"
            "loginMode": "room-list", // should always be room-list
            "modes": {
                "room-list": {
                    "listPageText": "Please select your room",
                    "loginHelpText": "Please select your room from the list, then enter the code shown on the display.",
                    "passcodePageText": "Please enter the code shown on this room's display"
                }
            },
            "partnerMetadata": [
                {
                    "role": "consultant",
                    "description": "Design and consulting by [Consultant Name]",
                    "logoPath": "logo/consultant.png"
                },
                {
                    "role": "integrator",
                    "description": "Integration services by [Integrator Name]",
                    "logoPath": "logo/integrator.png"
                }
            ]
        }
}
}

properties.directServer.port is 50,000 + Essentials Slot # and should be the same port used in the apiPath and gatewayAppPath URLs of the _config.local.json file.

Mobile Control Plugin Configuration on 4-Series Processor Using Console Commands

Add/Remove UI Client for Direct Communication

mobileadduiclient(:essentials-slot-#) {room-key} {grant-code} // currently the grant code is not enforced. Any string can be used

// example
mobileadduiclient:1 room1 AOIUYGHG

mobileremoveuiclient(:essentials-slot-#) {token} // removes the ui client matching the specified token

// example
mobileremoveuiclient:1 81c4eb3c-dbc5-410c-8816-90500f474236

The room-key value must match the key of a room defined in the rooms array of the running Essentials configuration file.

Each connection requires a unique Token that serves to differentiate between unique user interfaces, allowing selective updates and unique user experience sessions on unique devices.

Get Mobile Control Info

The following commands gets the current mobile control info. The Client URL is needed for the Crestron TS(W) General Web URL field to run on a TS(W) panel directly.

// get mobile control info
mobileinfo

// exmaple mobile control info response
DIN-AP4>mobileinfo

Mobile Control Edge Server API Information:
    Not Enabled in Config.

Mobile Control Direct Server Infromation:
    User App URL: http://10.0.0.223:50001/mc/app?token=[insert_client_token]
    Server port: 50001

    UI Client Info:
    Tokens Defined: 1
    Clients Connected: 0

Client 1:
Room Key: room1
Token: 81c4eb3c-dbc5-410c-8816-90500f474236
Client URL: http://10.0.0.223:50001/mc/app?token=81c4eb3c-dbc5-410c-8816-90500f474236
Connected: False
Duration: Not Connected


DIN-AP4>

Messengers for communicating between Essentials Devices and the Client User Interface

The included library mobile-control-messengers contains the MessengerBase class and a set of messengers that correspond either to common abstract base classes or to specific interfaces and are used to generate a dynamic API for the User Interface client applications to integrate with.

As part of the Essentials program startup cycle, this plugin will iterate through the loaded devices and rooms and attempt to create messengers for each device for every base class or interface that device can successfully be cast as.

In addition to the automatically instantiated messengers, plugin devices can reference the mobile-control-messengers project via nuget as a dependency and thus inherit from the MessengerBase class to create custom messengers. These custom messengers will have to be manually added to the MobileControlSystemController instance.

To view the paths at runtime, the console command mobilecontrolshowactionpaths:[slotnumber] will print all the action paths for the mobile control API.

Product Compatible and additional computed target framework versions.
.NET Framework net472 is compatible.  net48 was computed.  net481 was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
4.4.0-feature-userInterface... 36 11/14/2024
4.3.4-hotfix-selectable-sou... 40 11/15/2024
4.3.3 118 10/24/2024
4.3.3-auth-request-issues.1 55 10/24/2024
4.3.2 91 10/24/2024
4.3.2-tv-presets-fix.1 43 10/24/2024
4.3.1 95 10/15/2024
4.3.1-auth-request-issues.2 54 10/16/2024
4.3.1-auth-request-issues.1 47 10/15/2024
4.3.0 149 8/1/2024
4.3.0-feature-temp-humidity... 61 9/16/2024
4.3.0-feature-temp-humidity... 52 9/16/2024
4.3.0-feature-temp-humidity... 54 9/16/2024
4.3.0-feature-temp-humidity... 62 9/13/2024
4.3.0-feature-temp-humidity... 56 9/13/2024
4.3.0-feature-logo-and-part... 55 8/27/2024
4.3.0-feature-logo-and-part... 65 8/9/2024
4.3.0-feature-add-levelCont... 43 8/1/2024
4.3.0-feature-add-handler-f... 66 9/18/2024
4.2.0 102 7/11/2024
4.2.0-routing-updates.4 57 6/25/2024
4.2.0-routing-updates.3 55 6/24/2024
4.2.0-routing-updates.2 59 6/21/2024
4.2.0-routing-updates.1 64 5/28/2024
4.2.0-feature-documentation... 59 7/15/2024
4.2.0-feature-add-levelCont... 67 7/26/2024
4.2.0-feature-add-levelCont... 55 7/2/2024
4.2.0-feature-add-levelCont... 52 6/29/2024
4.2.0-feature-add-levelCont... 47 6/28/2024
4.2.0-feature-add-levelCont... 46 6/26/2024
4.2.0-feature-add-levelCont... 40 6/13/2024
4.2.0-feature-add-levelCont... 55 6/10/2024
4.2.0-feature-add-levelCont... 47 6/10/2024
4.2.0-feature-add-levelCont... 53 6/6/2024
4.2.0-feature-add-levelCont... 65 5/24/2024
4.2.0-feature-add-levelCont... 42 5/22/2024
4.1.1 94 5/23/2024
4.1.1-routing-updates.3 62 5/23/2024
4.1.1-routing-updates.2 66 5/23/2024
4.1.1-incoming-call-updates.1 69 5/22/2024
4.1.0 132 5/20/2024
4.1.0-testing-updates.2 63 5/20/2024
4.1.0-testing-updates.1 66 5/17/2024
4.0.1 123 5/16/2024
4.0.1-update-essentials-ver... 63 5/16/2024
4.0.1-update-essentials-ver... 48 5/14/2024
4.0.0 94 5/14/2024
4.0.0-fix-mobile-control-sy... 65 5/11/2024
4.0.0-fix-mobile-control-sy... 60 5/11/2024
4.0.0-fix-mobile-control-sy... 82 5/7/2024
4.0.0-feature-mc-touchpanel... 55 4/29/2024
4.0.0-feature-mc-touchpanel... 54 4/29/2024
4.0.0-feature-mc-touchpanel... 48 4/29/2024
4.0.0-feature-mc-touchpanel... 48 4/29/2024
4.0.0-feature-mc-touchpanel... 81 4/26/2024
4.0.0-feature-mc-touchpanel... 59 4/26/2024
4.0.0-feature-mc-touchpanel... 66 4/25/2024
4.0.0-feature-mc-touchpanel... 63 4/24/2024
4.0.0-feature-mc-touchpanel... 65 4/18/2024
4.0.0-feature-mc-touchpanel... 61 4/12/2024
4.0.0-feature-mc-touchpanel... 64 4/9/2024
4.0.0-feature-mc-touchpanel... 61 4/8/2024
4.0.0-feature-mc-touchpanel... 61 4/4/2024
4.0.0-feature-mc-touchpanel... 64 4/3/2024
4.0.0-feature-mc-touchpanel... 58 4/2/2024
4.0.0-feature-iessentialsro... 81 5/6/2024
4.0.0-feature-iessentialsro... 32 5/2/2024
4.0.0-feature-event-message... 43 5/1/2024
4.0.0-feature-event-message... 54 4/29/2024
4.0.0-feature-add-screenLif... 47 5/14/2024
4.0.0-feature-add-screenLif... 61 5/14/2024
4.0.0-feature-add-screenLif... 61 5/13/2024
4.0.0-feature-add-screenLif... 63 5/13/2024
4.0.0-feature-add-screenLif... 64 5/10/2024
4.0.0-feature-add-levelCont... 62 5/17/2024
4.0.0-feature-add-levelCont... 61 5/17/2024
3.3.0-feature-mc-touchpanel... 55 4/2/2024
3.3.0-feature-mc-touchpanel... 60 4/2/2024
3.3.0-feature-mc-touchpanel... 66 3/29/2024
3.3.0-feature-mc-touchpanel... 59 3/28/2024
3.3.0-feature-mc-touchpanel... 63 3/22/2024
3.3.0-feature-mc-touchpanel... 71 3/22/2024
3.3.0-feature-mc-touchpanel... 61 3/22/2024
3.3.0-feature-mc-touchpanel... 61 3/21/2024
3.3.0-feature-mc-touchpanel... 61 3/21/2024
3.3.0-feature-mc-touchpanel... 63 3/21/2024
3.3.0-feature-mc-touchpanel... 64 3/20/2024
3.3.0-feature-mc-touchpanel... 68 3/20/2024
3.3.0-feature-mc-touchpanel... 52 3/14/2024
3.3.0-feature-mc-touchpanel... 61 3/14/2024
3.3.0-feature-mc-touchpanel... 71 3/14/2024
3.3.0-feature-mc-touchpanel... 64 3/13/2024
3.3.0-feature-mc-touchpanel... 57 3/12/2024
3.3.0-feature-mc-touchpanel... 60 3/12/2024
3.3.0-feature-mc-touchpanel... 75 3/9/2024
3.3.0-feature-mc-touchpanel... 64 3/9/2024
3.3.0-feature-mc-touchpanel... 68 3/8/2024
3.3.0-feature-mc-touchpanel... 75 3/7/2024
3.3.0-feature-mc-touchpanel... 72 3/7/2024
3.3.0-feature-mc-touchpanel... 61 3/7/2024
3.3.0-feature-mc-touchpanel... 65 3/6/2024
3.3.0-feature-mc-touchpanel... 65 3/6/2024
3.3.0-feature-mc-touchpanel... 63 3/6/2024
3.3.0-feature-mc-touchpanel... 65 3/1/2024
3.3.0-feature-mc-touchpanel... 70 2/24/2024
3.3.0-feature-mc-touchpanel... 59 2/22/2024
3.3.0-feature-mc-touchpanel... 63 2/19/2024
3.3.0-feature-mc-touchpanel... 58 2/15/2024
3.3.0-feature-mc-touchpanel... 60 2/15/2024
3.3.0-feature-mc-touchpanel... 65 2/12/2024
3.3.0-feature-mc-touchpanel... 63 2/8/2024
3.2.0 155 1/30/2024
3.2.0-feature-move-messenge... 55 1/29/2024
3.2.0-feature-move-messenge... 56 1/29/2024
3.2.0-feature-move-messenge... 55 1/29/2024
3.1.1-hotfix-344 140 7/20/2023
3.1.1-hotfix-343 132 7/17/2023
3.1.1-hotfix-342 167 3/22/2023
3.1.1-hotfix-341 168 3/22/2023
3.1.1-alpha-347 97 1/11/2024