CSV import
The Channels, Devices, Gateways, and Groups pages have an Upload CSV button for creating many objects at once.
The flow
Section titled “The flow”- Pick a CSV file.
- Celestian shows a per-row preview (valid or error, and the reason). The preview runs exactly the same path as the real import and then rolls it back, so rules, uniqueness, permissions, and quotas are really checked.
- When every row is valid, choose to import. If even one row has a problem, nothing is saved.
- Download the result report. Device keys generated automatically appear only in this report, once.
General rules: the column separator is , or ; (detected from the header, handy for local Excel), a BOM is ignored, unknown columns are refused, a list inside one cell is separated by |, and at most 500 rows and about 900 KB per file.
Channels
Section titled “Channels”name,route,tags,metadata_jsonWarehouse Telemetry,warehouse-telemetry,telemetry|warehouse,Device Control,device-control,control,Devices and Gateways
Section titled “Devices and Gateways”name,key,serial,device_type_key,device_type_version,is_gateway,tags,gateway,channels,metadata_jsonBuilding A Gateway,,GW-A,,,true,gateway,,warehouse-telemetry,Freezer Room A1 Sensor,,001a2b3c4d5e,,,false,freezer-room,GW-A,warehouse-telemetry:publish,Chiller B1 Sensor,,001a2b3c4d5f,,,false,chiller,GW-A,,| Column | Description |
|---|---|
name* |
Required. |
key |
Empty = generated automatically (appears only in the download report). A key you supply is not echoed back. |
serial |
Unique per workspace. |
device_type_key, device_type_version, attributes_json |
Bind the device to a type and fill in its attributes. Without a version, the latest active version is used. |
is_gateway |
true for a gateway. On the Gateways page every row is automatically a gateway. |
gateway |
The Serial or ID of the intermediary gateway (it may be a gateway on an earlier row of the same file). |
channels |
A route or ID of a channel. The suffix :publish or :subscribe restricts the type; without a suffix it means both. The channel must already exist, and you need the connect permission on both sides. |
Groups
Section titled “Groups”name,description,parent,tags,metadata_jsonBuilding A,Main cold storage,,building,Floor 1,,Building A,floor,Quotas
Section titled “Quotas”An import that exceeds your device or channel quota is cancelled entirely, with a quota.*_exceeded error per row.