Create Device
Now that the blueprint is complete, we can move on to creating the device.
- Gateway Web UI
- Enapter CLI
- HTTP API
This approach is meant only for devices connected through Enapter Gateway
Open web browser and enter your Gateway's IP address. Click on Energy Managment System.

Enapter Gateway home page
Create a new device. Click on New Device and select virtual UCM as a runtime.

Create a new device

Choose virtual UCM as a runtime
Select the blueprint. Select Another Device, enter device name and upload the blueprint zip file.

Select the type of device to create

Enter device name and choose blueprint zip file

Device is finally created
You will need the API Token.
Get UCM Device ID
$ enapter3 device list
Response:
{
"devices": [
{
"authorized_role": "INSTALLER",
"blueprint_id": "0731254e-bfaa-5f90-8223-a53125b005ec",
"id": "f646aecf-96b7-4c95-85e4-af6d0932579b",
"implemented_profiles": [],
"name": "Virtual UCM",
"site_id": "72a0ea68-9430-457a-a30a-946cacc74295",
"slug": "virtual-ucm",
"type": "VIRTUAL_UCM",
"updated_at": "2026-02-06T14:43:11.24156Z"
}
],
"total_count": 1
}
We need id value of Virtual UCM, which is f646aecf-96b7-4c95-85e4-af6d0932579b.
Create Lua Device
$ enapter3 device create lua-device \
--blueprint-path="<path/to/blueprint/folder>" \
--runtime-id="f646aecf-96b7-4c95-85e4-af6d0932579b" \
--device-name="Gas Sensor"
Response:
{
"device_id":"45f9c624-2850-4fe4-b9be-f608cb550f9a",
"slug":"gas-sensor"
}
You will need the API Token.
Ensure you're using the correct API base URL. Below Enapter Gateway host name is used.
Get UCM Device ID
$ curl http://enapter-gateway.local/api/v3/devices \
-H 'X-Enapter-Auth-Token: {ACCESS_TOKEN}' \
Response:
{
"devices": [
{
"authorized_role": "INSTALLER",
"blueprint_id": "0731254e-bfaa-5f90-8223-a53125b005ec",
"id": "f646aecf-96b7-4c95-85e4-af6d0932579b",
"implemented_profiles": [],
"name": "Virtual UCM",
"site_id": "72a0ea68-9430-457a-a30a-946cacc74295",
"slug": "virtual-ucm",
"type": "VIRTUAL_UCM",
"updated_at": "2026-02-06T14:43:11.24156Z"
}
],
"total_count": 1
}
We need id value of Virtual UCM, which is f646aecf-96b7-4c95-85e4-af6d0932579b.
Zip Blueprint Folder
You can also do this in the command terminal by running the following command:
zip -j -r first_blueprint.zip <path/to/blueprint/folder>
This way the archive won't contain root folder.
Upload Blueprint
$ curl -X POST \
http://enapter-gateway.local/api/v3/blueprints/upload \
-H 'X-Enapter-Auth-Token: {ACCESS_TOKEN}' \
-F data=@first_blueprint.zip
Response:
{
"blueprint": {
"id":"c4751c90-1ddc-4a29-8dc6-049536c13476",
"created_at":"2026-02-06T15:34:09.782227Z"
}
}
Now we have everything to create a device.
Create Lua Device
$ curl -X POST \
http://enapter-gateway.local/api/v3/provisioning/lua_device \
-H 'X-Enapter-Auth-Token: {ACCESS_TOKEN}' \
-d '{
"runtime_id": "f646aecf-96b7-4c95-85e4-af6d0932579b",
"blueprint_id": "c4751c90-1ddc-4a29-8dc6-049536c13476",
"name": "Gas Sensor"
}'
Response:
{
"device_id":"45f9c624-2850-4fe4-b9be-f608cb550f9a",
"slug":"gas-sensor"
}