End Device Groups Configuration
endDeviceGroups.json is a static JSON configuration file that defines logical groupings of end devices (DERs, ESS units, etc.) within a region. It is loaded at runtime by the GMS UI applications via a plain HTTP GET request, there is no database or API backing it. The file must be present and accessible at the expected URL path for the application to load groups correctly.
If the file is missing, the application logs a warning and continues without groups (no hard failure). If the file is malformed (not a JSON array), the application throws an error surfaced as a notification to the user.
Affected Applications
Two GMS UI applications currently consume this file:
- One Line App
- Schedule Dispatch UI
Both apps fetch the file from /config/endDeviceGroups.json, which is relative to the application's served origin, so it resolves to wherever the app is hosted (e.g., https://your-host/config/endDeviceGroups.json).
Docker Compose Deployment
In an OpenDSO Docker Compose deployment, endDeviceGroups.json is not baked into the image, it is mounted in from the deployment repo so the same image can be reused across environments.
Source location
The file lives in the deployment repo's config tree:
<deployment-repo>/
├── config/
│ └── ui-app/config/endDeviceGroups.json ← edit this file
└── opendso-docker-compose/
└── compose.yaml
From compose.yaml, the relative path is ../config/ui-app/config/endDeviceGroups.json.
Mount
The Schedule Dispatch UI service (edo-adr-app in the compose file) volume-mounts the file read-only into the nginx web root:
volumes:
- ../config/ui-app/config/endDeviceGroups.json:/usr/share/nginx/html/config/endDeviceGroups.json:ro
It is then served to the browser at GET /config/endDeviceGroups.json. Edits to the file on the host are picked up on the next request by the user's web browser. You shouldn't need to restart the container for edits to be picked up by the next GET request (but your browser may cache the file, requiring a 'clear cache' operation on your browser).
File Format
The file must be a JSON array of EndDeviceGroup objects. Each object represents one logical grouping.
[
{
"mrid": "499ea957-268d-458b-9cd6-d70f505097ad",
"name": "DER Grouping 1",
"equipmentType": "endDeviceGroup",
"regions": [
"290347ae-a0a6-4036-8d0c-0b45bd052376"
],
"endDevices": [
"a5bb4b08-ca31-40f6-bc5d-8477452ea162"
],
"location": [{ "x": -8, "y": -8 }],
"spec": "medium-compute",
"description": "Schedule DER Nodes",
"services": ["schedule service"]
}
]
| Field | Type | Required | Description |
|---|---|---|---|
mrid | string (UUID) | Yes | Unique identifier. Must match the MRID of the corresponding device/grouping-of-der-equipment that the DER Dispatch Services (ie. VTN Service) are configured to expect. This MRID will be used as the MRID for the OpenFMB Schedules produced and consumed by the Schedule Dispatch UI. |
name | string | Yes | Display name shown in the UI for this EndDeviceGroup (ex. "EdoNode"). |
equipmentType | string | Yes | Must be "endDeviceGroup". |
regions | string[] | Yes | One or more region MRIDs this group belongs to. Controls which region's topology it appears under (useful for filtering what EndDeviceGroups are rendered on the UI Apps). |
endDevices | string[] | Yes | MRIDs of the devices/equipment that belong to this group. Can reference other EndDeviceGroups (nesting is supported). |
location | [{x, y}] | No | Coordinates used to position the group on the one-line diagram. |
spec | string | No | Hardware or compute spec label (e.g. "medium-compute", "ESS-Equipment"). |
description | string | No | Freeform description shown in device details. Useful for documentation or custom data fields. |
services | string[] | No | Labels for the services associated with this group (e.g. "ADR VTN Service", "customer dispatch schedule service", "FLISR"). |
Troubleshooting
Groups do not appear in the UI
The browser console will show:
FetchEndDeviceGroups : /config/endDeviceGroups.json was not found or found unexpected HTML at /config/endDeviceGroups.json. If you're expecting end device groups, verify the deployment configuration.
This means either the file is missing from the served path, or the web server is returning an HTML error page (404/500) instead of JSON. Verify the file is reachable at the /config/endDeviceGroups.json URL of the running application. In a Docker Compose deployment, also confirm that the edo-adr-app container configuration has the correct mounted path for the endDeviceGroups.json.
Notification error in the UI
If the file exists but is not a JSON array (e.g., it is a single object {}), the app surfaces a user-visible error: endDeviceGroups json needs to be an array. Ensure the top-level structure is [...].
Related
- Settings Configuration Guide, the other UI JSON configuration files (
applicationsSettings.json,servicesSettings.json). - Schedule Dispatch UI, User Guide, consumes End Device Groups as its Dispatch Nodes.