Custom Panel
DFleet supports single-page customization using standard HTML combined with ready-made DFleet tags. You can upload a custom panel HTML file and enable the custom panel view to replace or augment the default dashboard layout.
- Navigate to Dashboard > Custom Panel.
- Upload your custom panel HTML file.
- Enable the Custom Panel View toggle to activate your custom layout.
Custom Panel Tags
DFleet provides a set of template tags that act as markers for DFleet actions within custom panel HTML. These tags render dynamic content such as live maps, AMR status tables, and conditional user-group logic.
| Tag | Description |
|---|---|
{% disconnected_indicator %} | Displays a well element when DFleet is disconnected from the server. |
{% live_map %} | Fills the parent container with the live map viewer. |
{% agv_status %} | Renders an AMR status table. Accepts parameters: show_link, show_status, show_battery, show_task_counter, show_last_seen, show_task_runner_ctrl (all default True). |
{% running_tasks %} | Displays a table of currently running tasks. |
{% completed_tasks %} | Displays a table of recently completed tasks. |
{% running_transactions %} | Displays a table of currently running transactions. |
{% completed_transactions %} | Displays a table of recently completed transactions. |
{% active_carriers %} | Displays active carriers. |
{% secsgem_terminal %} | Renders the SECS/GEM terminal interface. |
The {% agv_status %} tag accepts boolean parameters to control which columns are displayed. For example:
{% agv_status show_link=True show_status=True show_battery=True show_task_counter=True show_last_seen=True show_task_runner_ctrl=True %}
User group conditional logic allows you to show or hide sections of the custom panel based on the logged-in user's group membership.
{% if_ug "admin,supervisor" %}
<p>This content is visible to admin and supervisor groups.</p>
{% elif_ug "operator" %}
<p>This content is visible to operators.</p>
{% else_ug %}
<p>This content is visible to all other users.</p>
{% endif_ug %}
Live register tags dynamically change the parent element's text content based on real-time register values.
{% live_register register="FA0" %}
Remote I/O tags change the parent element's text content based on remote I/O device values.
{% live_remote_io device=1 register_mode=0 %}
| Parameter | Description |
|---|---|
| device | The remote I/O device number. |
| register_mode | Set to 0 for input registers or 1 for output registers. |
{% live_remote_io_error device=1 %}
The {% live_remote_io_error %} tag displays the error status of the specified remote I/O device.
JavaScript API
The window.DFleet object is available globally within custom panels. It provides programmatic access to AMR data, task updates, register values, and remote I/O state through both REST-style methods and real-time subscription channels.
General
| API | Description |
|---|---|
DFleet.apiUrl | Property containing the root REST API URL. |
AMR API
| API | Description |
|---|---|
DFleet.agv.getAgvs() | Returns a promise resolving to {id: 'agv_list', agvs: [...]}. |
DFleet.agv.channel.subscribe(cb) | Subscribe to real-time AMR updates. Callback receives {id: 'agv_update', agv: {...}}. |
DFleet.agv.channel.unsubscribe(cb) | Unsubscribe from the AMR update channel. |
DFleet.agv.Agv | Class to parse AMR info objects. Properties mirror the REST API. The last_seen property is a Moment.js instance. |
Task API
| API | Description |
|---|---|
DFleet.task.channel.subscribe(cb) | Subscribe to task updates. Callback receives {id: 'task_update', runningTasks: [...], completedTasks: [...]}. |
DFleet.task.channel.unsubscribe(cb) | Unsubscribe from the task update channel. |
DFleet.task.Task | Class to parse task info. Status is a code integer. StatusName maps codes to human-readable names. Date fields are Moment.js instances. |
Register API (CPNT)
| API | Description |
|---|---|
DFleet.CPNT.register.getRegisters() | Returns a promise resolving to {id: 'list_register', registers: [{id, value}, ...]}. |
DFleet.CPNT.register.channel.subscribe(cb) | Subscribe to register value changes. Callback receives {name, value}. |
Remote I/O API (CPNT)
| API | Description |
|---|---|
DFleet.CPNT.remoteIo.getDevices() | Returns a promise resolving to {id: 'list_devices', devices: [{ip_address, model, name, read_cache, remarks}, ...]}. |
DFleet.CPNT.remoteIo.channel.subscribe(cb) | Subscribe to remote I/O state changes. Callback receives {id: 'device_state', device_id, error, inputs: [...], outputs: [...]}. |
SMTP Settings
SMTP settings support the DFleet Cluster alert feature. In a cluster configuration, when only the primary server remains alive and a sync error is detected, DFleet displays a popup notification and triggers an alarm on the UI.
If SMTP is configured, DFleet also sends an email notification to alert administrators of the cluster failure, ensuring the issue is noticed even when no operator is actively monitoring the dashboard.
AMR Transfer Between DFleet Systems
To transfer an AMR from one DFleet system to another, follow the steps below carefully.
- Backup your current DFleet system before making any changes.
- Connect to the AMR's NavWiz interface via a web browser.
- Navigate to ConfigPanel > System > AGV.
- Verify that the AMR's skillset matches the target DFleet system's requirements.
- Change the Executor Mode from DFleet to Standalone.
- Click Submit and confirm the change.
- Perform a soft reboot of the AMR.
- Change the AMR's Wi-Fi connection to the target DFleet network.
- Change the Executor Mode back to DFleet.
- In the new DFleet system, copy the DFleet Endpoint URL. Paste it into the AMR's AGV configuration.
- Click Submit and confirm the change.
- In the new DFleet system, activate the AMR via the AGV editor.
- Resolve any errors that appear, such as AGV ID mismatches between the AMR and the DFleet system.
AMR in Transaction Mode
AMRs can operate in transaction mode for carrier-based material transport. In this mode, the AMR integrates with the Transaction Manager for automated carrier loading, unloading, and tracking operations.
Transaction mode enables workflows where carriers (physical containers or pallets) are tracked through their lifecycle: pickup from a source station, transport by the AMR, and delivery to a destination station. The Transaction Manager coordinates these operations and maintains the state of each carrier throughout the process.