Device Management
Core Platformdevice_health_readDevice ManagementCompares a facility's latest internet speed test with what its devices need. network returns the download and upload speed in Mbps, and for screens, cameras (recording plus live streaming) and connected speaker systems seen in the last 24 hours: the device count, the bandwidth each needs and whether the connection is enough. Use it to diagnose slow or dropping devices, or before adding devices. Pass facilityIds to check several facilities.
Actions:
- network: Network bandwidth check.
Parameters
| Name | Type | Description |
|---|---|---|
action* | "network" | What to do; each action is described in the tool description. |
facilityId | string | Facility ID. Optional when the connected facility is the one you mean. |
facilityIds | array | Several facility IDs, to run the same request at each. Use instead of facilityId. |
device_inventory_readDevice ManagementEvery device registered to a facility: display screens, cloud cameras, network cameras, AI edge processors, duress buttons, door controllers, AI agents and IoT sensors. Use it to troubleshoot, audit equipment or find a device's ID.
Each device has its type, model, IDs (deviceUuid; deviceID for screens; deviceSerialNumber for duress buttons), location, network details (IP, Wi-Fi or ethernet, SSID, channel, nearby networks; metadata.networkStats has the PoE switch port), health (CPU temperature, memory, uptime) and metadata.updated, the last heartbeat in Unix ms. Offline means no heartbeat for 5 minutes; a device offline over 7 days with an online twin (same equipment, name or location) was most likely replaced. networkCamera rows are streams pulled by the edge processor in edgeProcessorUUID; their deviceUuid (starting ep_) can't receive commands. Stream URL credentials show as : unless includeCredentials is set. Recommend wired ethernet over Wi-Fi.
Related: cctv_cameras_read and cctv_cameras_write (cameras), cctv_edge_processors_write (edge processors), device_inventory_write (rename, configure, move), device_send_command (control), device_health_read (bandwidth).
Actions:
- list: List devices. Devices at the facility, filtered by type or name. With facilityIds, each facility returns its first page.
Parameters
| Name | Type | Description |
|---|---|---|
action* | "list" | What to do; each action is described in the tool description. |
facilityId | string | Facility ID. Optional when the connected facility is the one you mean. |
facilityIds | array | Several facility IDs, to run the same request at each. Use instead of facilityId. |
deviceType | string | Only this type, as in deviceType: screen, camera, networkCamera, duress and so on |
query | string | Name, room, deviceID, deviceUuid or serial number contains this |
includeCredentials | boolean | Return stream URLs with their username and password. Off by default (credentials show as ***:***). Only set this when the user explicitly needs the credentials; it needs CCTV access at the facility. |
limit | integer | Items per page (default 25, at most 100) |
cursor | string | nextCursor from the previous page |
device_inventory_writeDevice ManagementChanges a device registered to a facility. rename_screen and configure_screen change a display screen (identify it by deviceID from device_inventory_read); for a screen's groups, tags or display mode use the display tools instead. move moves a screen, cloud camera, duress button, door controller, AI agent or AI edge processor to another facility in the same organisation.
Actions:
- rename_screen: Rename a screen. Applies straight away, also for offline or end-of-life screens. Needs deviceID, displayName.
- configure_screen: Change a screen's hardware settings. Only the settings you pass change. They are pushed to the device and may restart its display. Offline and end-of-life screens (status 409) can only be renamed. Needs deviceID. Asks for confirmation.
- move: Move a device to another facility. facilityId is where the device is now; you need access to the target too. Moving an edge processor moves its network cameras; to move single network cameras use cctv_edge_processors_write transfer_cameras. Needs targetFacilityId, deviceType. Asks for confirmation.
Parameters
| Name | Type | Description |
|---|---|---|
action* | "rename_screen" | "configure_screen" | "move" | What to do; each action is described in the tool description. |
deviceID | string | Screen deviceID (6-character code) |
displayName | string | New screen name (rename_screen, configure_screen) |
facilityId | string | Facility ID. Optional when the connected facility is the one you mean. |
orientation | "normal" | "left" | "right" | "inverted" | Screen rotation (configure_screen) |
resolution | "auto" | "1920x1080" | "1280x720" | "720x400" | Output resolution; auto uses what the display reports (configure_screen) |
scheduledReboot | "disabled" | "daily" | "weekly" | "monthly" | When the screen reboots itself (configure_screen) |
displayBrightness | integer | Backlight brightness, 0-100 (configure_screen) |
airplayEnabled | boolean | Screen accepts AirPlay (configure_screen) |
airplayName | string | Custom AirPlay receiver name; empty for the automatic name (configure_screen) |
airplayPin | string | 4-digit AirPlay PIN; empty to remove (configure_screen) |
duressEnabled | boolean | Bluetooth duress button scanner (configure_screen) |
sonosEnabled | boolean | Sonos speaker control (configure_screen) |
wifiSupport | boolean | Captive Wi-Fi setup portal (configure_screen) |
cameraRestreamingEnabled | boolean | Restream local camera feeds from the screen (configure_screen) |
targetFacilityId | string | Facility to move the device to (move) |
deviceType | "screen" | "camera" | "duress" | "door-controller" | "ph-ai-agent" | "ai-edge-processor" | Kind of device; it decides which identifier to pass (move) |
deviceUuid | string | Camera, door controller, AI agent or edge processor deviceUuid (move) |
deviceSerialNumber | string | Duress button serial number (move) |
confirm | boolean | Set only after the user confirmed the preview returned by the first call |
device_send_commandDevice ManagementSends a live command to one device, or to every device at a facility: reboot, display on or off, restart the browser, show a message, load a page, install updates or power cycle a PoE port. Online devices act within seconds; offline devices never get it. Every command asks for confirmation first.
Target one device with uuid (its deviceUuid from device_inventory_read), or every device with broadcast: true. Pass facilityIds to run at several facilities. Screens take every command; cameras take rebootDevice and unlockUpdates. Network cameras (deviceUuid starting ep_) can't receive commands; target their edge processor (edgeProcessorUUID) or power cycle their PoE port.
To bring back an offline PoE camera, read its metadata.networkStats (switchID, sw_port) in device_inventory_read, then send powerCyclePort to any online device at the facility with arguments {switchID, switchPort}. That device asks the facility's network controller to cut and restore the port's power.
Parameters
| Name | Type | Description |
|---|---|---|
facilityId | string | Facility ID. Optional when the connected facility is the one you mean. |
facilityIds | array | Several facility IDs, to run the same request at each. Use instead of facilityId. |
command* | "displayOff" | "displayOn" | "unlockUpdates" | "rebootDevice" | "restartBrowser" | "gpuDebugOn" | "gpuDebugOff" | "restartBleScanner" | "osd" | "loadUrl" | "powerCyclePort" | Command to send. Broadcast restartBleScanner when duress buttons aren't detected; adding, moving or removing a button already does this, and screens reload the list every ~10 minutes. |
broadcast | boolean | Send to every device at the facility instead of one uuid |
uuid | string | The deviceUuid from device_inventory_read; omit when broadcasting |
arguments | objectstring | osd: the message text, shown over the current content. loadUrl: an http(s) URL, shown until the next program load or reboot. powerCyclePort: {switchID, switchPort}. Omit for other commands. |
confirm | boolean | Set only after the user confirmed the preview returned by the first call |