Settings Reference
Settings are configurable parameters defined in the device definition’s settings schema. Vesbite automatically generates a tabbed settings form based on this schema. When settings are saved, they are pushed to the device over RabbitMQ using the routing key devices.{deviceId}.settings.
Settings Schema Structure
A settings schema is composed of tabs, each containing a list of fields. This structure maps directly to the tabbed form rendered in the device settings UI.
{
"tabs": [
{
"label": "RF Settings",
"elements": [
{
"type": "slider",
"key": "transmitPower",
"label": "Transmit Power (dBm)",
"min": 10,
"max": 30,
"step": 0.5,
"default": 25
},
{
"type": "select",
"key": "session",
"label": "Session",
"options": [
{ "value": "S0", "label": "Session 0" },
{ "value": "S1", "label": "Session 1" },
{ "value": "S2", "label": "Session 2" },
{ "value": "S3", "label": "Session 3" }
],
"default": "S1"
}
]
}
]
}Tab Definition
| Property | Type | Description |
|---|---|---|
label | string | Display name shown on the tab |
elements | array | List of form field definitions |
Field Types
Every field shares a common set of base properties, plus type-specific properties.
Common Field Properties
| Property | Type | Required | Description |
|---|---|---|---|
type | string | Yes | Field type discriminator (see types below) |
key | string | Yes | Property name the field binds to in the settings JSON |
label | string | Yes | Display label shown in the form |
placeholder | string | No | Placeholder text for empty fields |
required | boolean | No | Whether the field must have a value. Default: false |
readonly | boolean | No | Whether the field is read-only. Default: false |
text
A single-line text input.
| Property | Type | Description |
|---|---|---|
default | string | Default value |
minLength | number | Minimum character count |
maxLength | number | Maximum character count |
pattern | string | Regex pattern for validation |
{
"type": "text",
"key": "hostname",
"label": "Reader Hostname",
"placeholder": "e.g., reader-01.local",
"default": "",
"maxLength": 253,
"pattern": "^[a-zA-Z0-9.-]+$"
}textarea
A multi-line text input.
| Property | Type | Description |
|---|---|---|
default | string | Default value |
minLength | number | Minimum character count |
maxLength | number | Maximum character count |
rows | number | Number of visible text rows |
{
"type": "textarea",
"key": "notes",
"label": "Notes",
"rows": 4,
"maxLength": 1000
}password
A masked text input for sensitive values.
| Property | Type | Description |
|---|---|---|
default | string | Default value |
minLength | number | Minimum character count |
maxLength | number | Maximum character count |
{
"type": "password",
"key": "accessPassword",
"label": "Access Password",
"placeholder": "Enter password",
"minLength": 8
}number
A numeric input with optional constraints.
| Property | Type | Description |
|---|---|---|
default | number | Default value |
min | number | Minimum allowed value |
max | number | Maximum allowed value |
step | number | Increment step |
{
"type": "number",
"key": "reportIntervalMs",
"label": "Report Interval (ms)",
"default": 500,
"min": 100,
"max": 10000,
"step": 100
}slider
A range slider with a visual track.
| Property | Type | Required | Description |
|---|---|---|---|
default | number | No | Default value |
min | number | Yes | Minimum value |
max | number | Yes | Maximum value |
step | number | No | Step increment. Default: 1 |
{
"type": "slider",
"key": "transmitPower",
"label": "Transmit Power (dBm)",
"min": 10,
"max": 30,
"step": 0.5,
"default": 25
}toggle
A boolean on/off switch.
| Property | Type | Description |
|---|---|---|
default | boolean | Default state. Default: false |
{
"type": "toggle",
"key": "enableFiltering",
"label": "Enable Tag Filtering",
"default": false
}select
A dropdown menu with predefined options.
| Property | Type | Required | Description |
|---|---|---|---|
default | string | No | Default selected value |
options | array | Yes | List of { value, label, disabled? } objects |
allowEmpty | boolean | No | Whether the user can deselect. Default: false |
{
"type": "select",
"key": "searchMode",
"label": "Search Mode",
"options": [
{ "value": "dual-target", "label": "Dual Target" },
{ "value": "single-target", "label": "Single Target" },
{ "value": "single-target-reset", "label": "Single Target with Reset" }
],
"default": "dual-target"
}checkbox-group
A group of checkboxes for multi-select.
| Property | Type | Required | Description |
|---|---|---|---|
default | array | No | Default selected values |
options | array | Yes | List of { value, label, disabled? } objects |
minSelected | number | No | Minimum number of selections |
maxSelected | number | No | Maximum number of selections |
{
"type": "checkbox-group",
"key": "enabledAntennas",
"label": "Enabled Antennas",
"options": [
{ "value": "1", "label": "Antenna 1" },
{ "value": "2", "label": "Antenna 2" },
{ "value": "3", "label": "Antenna 3" },
{ "value": "4", "label": "Antenna 4" }
],
"default": ["1", "2", "3", "4"],
"minSelected": 1
}Select Option Object
Both select and checkbox-group use the same option structure:
| Property | Type | Required | Description |
|---|---|---|---|
value | string | Yes | The value stored when selected |
label | string | Yes | The display text |
disabled | boolean | No | Greys out the option. Default: false |
Validation
Settings are validated against the schema before being sent to the device:
- Type checking – Values must match the field type.
- Required fields – Fields marked
required: truemust have a value. - Range constraints – Numbers must be within
min/maxbounds. - Length constraints – Strings must satisfy
minLength/maxLength. - Pattern matching – Text fields with a
patternare validated against the regex. - Selection constraints – Checkbox groups respect
minSelected/maxSelected.
Invalid settings are rejected with an error message describing the violation.
Common RFID Reader Settings
RF Tab
| Field | Type | Key | Description |
|---|---|---|---|
| Transmit Power | slider | transmitPower | RF power in dBm (10-30) |
| Session | select | session | Gen2 session (S0, S1, S2, S3) |
| Search Mode | select | searchMode | Inventory search mode |
| Enabled Antennas | checkbox-group | enabledAntennas | Which antenna ports to use |
Tag Reports Tab
| Field | Type | Key | Description |
|---|---|---|---|
| Report Interval | number | reportIntervalMs | Milliseconds between tag reports |
| Include TID | toggle | includeTid | Include Tag ID in reports |
| Include RSSI | toggle | includeRssi | Include signal strength in reports |
| Include Antenna | toggle | includeAntenna | Include antenna port in reports |
| Tag Population | number | tagPopulation | Estimated number of tags in the field |
Filtering Tab
| Field | Type | Key | Description |
|---|---|---|---|
| Enable Filtering | toggle | enableFiltering | Master switch for tag filters |
| EPC Filter Mask | text | epcFilterMask | Hex mask applied to EPCs |
| EPC Filter Value | text | epcFilterValue | Hex value to match after masking |
| RSSI Threshold | slider | rssiThreshold | Minimum RSSI in dBm to report a tag |
GPIO Tab
| Field | Type | Key | Description |
|---|---|---|---|
| GPI Debounce | number | gpiDebounceMs | Debounce time in ms for GPI state changes |
| GPO1 Default State | toggle | gpo1Default | Default state of GPO pin 1 on startup |
| GPO2 Default State | toggle | gpo2Default | Default state of GPO pin 2 on startup |
Applying Settings
From the Device Page
- Navigate to Devices and select a device.
- Open the Settings tab.
- Modify values across the available tabs.
- Click Save.
Settings are pushed to the device over RabbitMQ immediately. The device applies them and sends a success/failure response.
From a Workflow
Use the Update Device Settings node. Select the target device and provide the settings as a JSON object:
{
"transmitPower": 25,
"session": "S2",
"enableFiltering": true
}You only need to include the fields you want to change. Omitted fields retain their current values.
On Device Connection
When a device connects and requests its settings (routing key devices.{deviceId}.settings.request), Vesbite responds with the stored settings from the database. This ensures devices always start with their last saved configuration.
Defaults
When a device is adopted, Vesbite reads the settings schema from the device definition, applies default values from each field, and stores them. The device receives these defaults on its next settings request.
See Also
- How to Configure Settings
- Understanding Devices
- Workflow Nodes Reference – The Update Device Settings node