diff --git a/doc/config/_default/config.toml b/doc/config/_default/config.toml index f53b515314..9af886d62a 100644 --- a/doc/config/_default/config.toml +++ b/doc/config/_default/config.toml @@ -23,7 +23,7 @@ pygmentsUseClasses = true github_repository = "https://github.com/TheThingsIndustries/lorawan-stack-docs" github_repository_edit = "https://github.com/TheThingsIndustries/lorawan-stack-docs/blob/master/doc/content" tts_github_repository = "https://github.com/TheThingsNetwork/lorawan-stack" - version = "3.32.0" + version = "3.32.1" [markup] [markup.goldmark] diff --git a/doc/content/the-things-stack/host/aws/ecs/changelog/index.md b/doc/content/the-things-stack/host/aws/ecs/changelog/index.md index 3937ab1797..bb29582059 100644 --- a/doc/content/the-things-stack/host/aws/ecs/changelog/index.md +++ b/doc/content/the-things-stack/host/aws/ecs/changelog/index.md @@ -5,9 +5,9 @@ aliases: [/getting-started/aws/ecs/changelog] # Upgrading -All meaningful changes to templates are documented in this file. +## 3.32.1 -## Unreleased +- Updated ECS AMIs to the latest versions. ## 3.32.0 diff --git a/doc/content/ttn-lw-cli/ttn-lw-cli_applications_webhooks_get.md b/doc/content/ttn-lw-cli/ttn-lw-cli_applications_webhooks_get.md index cd128dc095..0c0225a0be 100644 --- a/doc/content/ttn-lw-cli/ttn-lw-cli_applications_webhooks_get.md +++ b/doc/content/ttn-lw-cli/ttn-lw-cli_applications_webhooks_get.md @@ -44,6 +44,7 @@ ttn-lw-cli applications webhooks get [application-id] [webhook-id] [flags] --join-accept.path select the join_accept.path field --location-solved select the location_solved field and all allowed sub-fields --location-solved.path select the location_solved.path field + --paused select the paused field --queue select the queue field and all allowed sub-fields --queue.enabled select the queue.enabled field --service-data select the service_data field and all allowed sub-fields diff --git a/doc/content/ttn-lw-cli/ttn-lw-cli_applications_webhooks_list.md b/doc/content/ttn-lw-cli/ttn-lw-cli_applications_webhooks_list.md index 0b059987f5..847375c3b4 100644 --- a/doc/content/ttn-lw-cli/ttn-lw-cli_applications_webhooks_list.md +++ b/doc/content/ttn-lw-cli/ttn-lw-cli_applications_webhooks_list.md @@ -44,6 +44,7 @@ ttn-lw-cli applications webhooks list [application-id] [flags] --join-accept.path select the join_accept.path field --location-solved select the location_solved field and all allowed sub-fields --location-solved.path select the location_solved.path field + --paused select the paused field --queue select the queue field and all allowed sub-fields --queue.enabled select the queue.enabled field --service-data select the service_data field and all allowed sub-fields diff --git a/doc/content/ttn-lw-cli/ttn-lw-cli_applications_webhooks_set.md b/doc/content/ttn-lw-cli/ttn-lw-cli_applications_webhooks_set.md index 452cd6c20c..6486f256bb 100644 --- a/doc/content/ttn-lw-cli/ttn-lw-cli_applications_webhooks_set.md +++ b/doc/content/ttn-lw-cli/ttn-lw-cli_applications_webhooks_set.md @@ -29,6 +29,7 @@ ttn-lw-cli applications webhooks set [application-id] [webhook-id] [flags] -h, --help help for set --join-accept.path string --location-solved.path string + --paused --queue.enabled --service-data.path string --template-fields stringToString diff --git a/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_list-frequency-plans.md b/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_list-frequency-plans.md index 7be62dbdbe..8b71c4aac2 100644 --- a/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_list-frequency-plans.md +++ b/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_list-frequency-plans.md @@ -14,7 +14,9 @@ ttn-lw-cli gateways list-frequency-plans [flags] ### Options ``` + --band-id string Band ID to filter by --base-frequency uint32 Base frequency in MHz for hardware support (433, 470, 868 or 915) + --gateways-only List only frequency plans that support gateways -h, --help help for list-frequency-plans ``` diff --git a/doc/content/whats-new/3.32.1.md b/doc/content/whats-new/3.32.1.md new file mode 100644 index 0000000000..8309894e51 --- /dev/null +++ b/doc/content/whats-new/3.32.1.md @@ -0,0 +1,26 @@ +--- +date: 2024-10-14T09:33:47Z +title: "3.32.1" +featured: + { + added: [Endpoint for claiming gateways using a qr code], + fixed: + [ + RX2 and Class C with The Things Industries gateway protocol in dynamic channel plan regions (including `EU868`)., + ], + } +--- + +### Added + +- Option to filter out non-gateway related frequency plans. + - `ListFrequencyPlans` RPC has a new `gateways-only` flag. +- Option to pause application webhooks. +- Endpoint for claiming gateways using a qr code +- Update the GetTemplate endpoint in device repository to check for profile identifiers in the vendor index. +- Support for claiming a gateway via QR code in the Console. + +### Fixed + +- RX2 and Class C with The Things Industries gateway protocol in dynamic channel plan regions (including `EU868`). +- Filtering the list end points for end devices and gateways using the HTTP API. diff --git a/doc/data/api/ttn.lorawan.v3/messages/ApplicationWebhook.yml b/doc/data/api/ttn.lorawan.v3/messages/ApplicationWebhook.yml index 8eb1ed3137..23a207f29a 100644 --- a/doc/data/api/ttn.lorawan.v3/messages/ApplicationWebhook.yml +++ b/doc/data/api/ttn.lorawan.v3/messages/ApplicationWebhook.yml @@ -121,3 +121,8 @@ fields: message: name: ApplicationWebhookQueue default: {} +- name: paused + comment: Set to temporarily pause forwarding uplink data to this end point and receiving + downlinks from this end point. + type: bool + default: false diff --git a/doc/data/api/ttn.lorawan.v3/messages/ListFrequencyPlansRequest.yml b/doc/data/api/ttn.lorawan.v3/messages/ListFrequencyPlansRequest.yml index f33715a307..97d6063c0b 100644 --- a/doc/data/api/ttn.lorawan.v3/messages/ListFrequencyPlansRequest.yml +++ b/doc/data/api/ttn.lorawan.v3/messages/ListFrequencyPlansRequest.yml @@ -8,3 +8,7 @@ fields: comment: Optional Band ID to filter the results. type: string default: "" +- name: gateways_only + comment: Optional field to include only gateway related results. + type: bool + default: false diff --git a/doc/data/api/ttn.lorawan.v3/messages/ParseGatewayQRCodeRequest.yml b/doc/data/api/ttn.lorawan.v3/messages/ParseGatewayQRCodeRequest.yml new file mode 100644 index 0000000000..26ac40cec3 --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/ParseGatewayQRCodeRequest.yml @@ -0,0 +1,18 @@ +name: ParseGatewayQRCodeRequest +fields: +- name: format_id + comment: |- + QR code format identifier. + If this field is not specified, the server will default to ttigpro1. + type: string + rules: + max_len: 36 + pattern: ^[a-z0-9](?:[-]?[a-z0-9]){2,}$|^$ + default: "" +- name: qr_code + comment: Raw QR code contents. + type: bytes + rules: + min_len: 10 + max_len: 1024 + default: "" diff --git a/doc/data/api/ttn.lorawan.v3/messages/ParseGatewayQRCodeResponse.yml b/doc/data/api/ttn.lorawan.v3/messages/ParseGatewayQRCodeResponse.yml new file mode 100644 index 0000000000..9233a7048e --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/ParseGatewayQRCodeResponse.yml @@ -0,0 +1,15 @@ +name: ParseGatewayQRCodeResponse +fields: +- name: format_id + comment: Identifier of the format used to parse the QR code data. + type: string + default: "" +- name: gateway_eui + type: bytes + rules: + len: 8 + ignore_empty: true + default: "" +- name: owner_token + type: string + default: "" diff --git a/doc/data/api/ttn.lorawan.v3/services/EndDeviceRegistry.yml b/doc/data/api/ttn.lorawan.v3/services/EndDeviceRegistry.yml index 98d2cefd7e..2c3481fd60 100644 --- a/doc/data/api/ttn.lorawan.v3/services/EndDeviceRegistry.yml +++ b/doc/data/api/ttn.lorawan.v3/services/EndDeviceRegistry.yml @@ -60,6 +60,8 @@ methods: http: - method: GET path: /applications/{application_ids.application_id}/devices + - method: POST + path: /applications/{application_ids.application_id}/devices/filter Update: name: Update comment: Update the end device, changing the fields specified by the field mask diff --git a/doc/data/api/ttn.lorawan.v3/services/GatewayQRCodeGenerator.yml b/doc/data/api/ttn.lorawan.v3/services/GatewayQRCodeGenerator.yml new file mode 100644 index 0000000000..ebb55b2b5c --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/services/GatewayQRCodeGenerator.yml @@ -0,0 +1,17 @@ +name: GatewayQRCodeGenerator +comment: The GatewayQRCodeGenerator service provides functionality to generate and + parse QR codes for gateways. +methods: + Parse: + name: Parse + comment: Parse QR Codes of known formats and return the information contained + within. + input: + name: ParseGatewayQRCodeRequest + output: + name: ParseGatewayQRCodeResponse + http: + - method: POST + path: /qr-codes/gateways/parse + - method: POST + path: /qr-codes/gateways/{format_id}/parse diff --git a/doc/data/api/ttn.lorawan.v3/services/GatewayRegistry.yml b/doc/data/api/ttn.lorawan.v3/services/GatewayRegistry.yml index 4333480bdb..45167db3d7 100644 --- a/doc/data/api/ttn.lorawan.v3/services/GatewayRegistry.yml +++ b/doc/data/api/ttn.lorawan.v3/services/GatewayRegistry.yml @@ -56,6 +56,8 @@ methods: path: /users/{collaborator.user_ids.user_id}/gateways - method: GET path: /organizations/{collaborator.organization_ids.organization_id}/gateways + - method: POST + path: /gateways/filter Update: name: Update comment: Update the gateway, changing the fields specified by the field mask to diff --git a/doc/data/api/tts.swagger.json b/doc/data/api/tts.swagger.json index 314fb8e340..7ee136d5d9 100644 --- a/doc/data/api/tts.swagger.json +++ b/doc/data/api/tts.swagger.json @@ -8,7 +8,7 @@ "swagger": "2.0", "info": { "title": "The Things Stack for LoRaWAN® OpenAPI 2.0 Reference", - "version": "v3.32.0" + "version": "3.32.1" }, "paths": { "/alerts/notifications/profiles": { @@ -28723,6 +28723,12323 @@ } } }, + "/applications/{application_ids.application_id}/devices/filter": { + "post": { + "description": "Similar to Get, this selects the fields given by the field mask.\nMore or less fields may be returned, depending on the rights of the caller.", + "tags": [ + "EndDeviceRegistry" + ], + "summary": "List end devices in the given application.", + "operationId": "EndDeviceRegistry_List2", + "parameters": [ + { + "type": "string", + "name": "application_ids.application_id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "application_ids": { + "type": "object" + }, + "field_mask": { + "description": "The names of the end device fields that should be returned.\nSee the API reference for which fields can be returned by the different services.", + "type": "string" + }, + "filters": { + "type": "array", + "items": { + "description": "Filter end devices by fields.", + "type": "object", + "properties": { + "updated_since": { + "type": "string", + "format": "date-time" + } + } + } + }, + "limit": { + "description": "Limit the number of results per page.", + "type": "integer", + "format": "int64" + }, + "order": { + "description": "Order the results by this field path (must be present in the field mask).\nDefault ordering is by ID. Prepend with a minus (-) to reverse the order.", + "type": "string" + }, + "page": { + "description": "Page number for pagination. 0 is interpreted as 1.", + "type": "integer", + "format": "int64" + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "end_devices": { + "type": "array", + "items": { + "description": "Defines an End Device registration and its state on the network.\nThe persistence of the EndDevice is divided between the Network Server, Application Server and Join Server.\nSDKs are responsible for combining (if desired) the three.", + "type": "object", + "properties": { + "activated_at": { + "description": "Timestamp when the device has been activated. Stored in the Entity Registry.\nThis field is set by the Application Server when an end device sends\nits first uplink.\nThe Application Server will use the field in order to avoid repeated\ncalls to the Entity Registry.\nThe field cannot be unset once set.", + "type": "string", + "format": "date-time" + }, + "application_server_address": { + "description": "The address of the Application Server where this device is supposed to be registered.\nStored in Entity Registry and Join Server.\nThe typical format of the address is \"host:port\". If the port is omitted,\nthe normal port inference (with DNS lookup, otherwise defaults) is used.\nThe connection shall be established with transport layer security (TLS).\nCustom certificate authorities may be configured out-of-band.", + "type": "string" + }, + "application_server_id": { + "description": "The AS-ID of the Application Server to use.\nStored in Join Server.", + "type": "string" + }, + "application_server_kek_label": { + "description": "The KEK label of the Application Server to use for wrapping the application session key.\nStored in Join Server.", + "type": "string" + }, + "attributes": { + "description": "Key-value attributes for this end device. Typically used for organizing end devices or for storing integration-specific data. Stored in Entity Registry.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "battery_percentage": { + "description": "Latest-known battery percentage of the device.\nReceived via the DevStatus MAC command at last_dev_status_received_at or earlier.\nStored in Network Server.", + "type": "number", + "format": "float" + }, + "claim_authentication_code": { + "description": "Authentication code for end devices.", + "type": "object", + "properties": { + "valid_from": { + "type": "string", + "format": "date-time" + }, + "valid_to": { + "type": "string", + "format": "date-time" + }, + "value": { + "type": "string" + } + } + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "description": { + "description": "Description of the device. Stored in Entity Registry.", + "type": "string" + }, + "downlink_margin": { + "description": "Demodulation signal-to-noise ratio (dB).\nReceived via the DevStatus MAC command at last_dev_status_received_at.\nStored in Network Server.", + "type": "integer", + "format": "int32" + }, + "formatters": { + "type": "object", + "properties": { + "down_formatter": { + "description": " - FORMATTER_NONE: No payload formatter to work with raw payload only.\n - FORMATTER_REPOSITORY: Use payload formatter for the end device type from a repository.\n - FORMATTER_GRPC_SERVICE: gRPC service payload formatter. The parameter is the host:port of the service.\n - FORMATTER_JAVASCRIPT: Custom payload formatter that executes Javascript code. The parameter is a JavaScript filename.\n - FORMATTER_CAYENNELPP: CayenneLPP payload formatter.\n\nMore payload formatters can be added.", + "type": "string", + "default": "FORMATTER_NONE", + "enum": [ + "FORMATTER_NONE", + "FORMATTER_REPOSITORY", + "FORMATTER_GRPC_SERVICE", + "FORMATTER_JAVASCRIPT", + "FORMATTER_CAYENNELPP" + ] + }, + "down_formatter_parameter": { + "description": "Parameter for the down_formatter, must be set together. The API enforces a maximum length of 16KB, but the size may be restricted further by deployment configuration.", + "type": "string" + }, + "up_formatter": { + "description": " - FORMATTER_NONE: No payload formatter to work with raw payload only.\n - FORMATTER_REPOSITORY: Use payload formatter for the end device type from a repository.\n - FORMATTER_GRPC_SERVICE: gRPC service payload formatter. The parameter is the host:port of the service.\n - FORMATTER_JAVASCRIPT: Custom payload formatter that executes Javascript code. The parameter is a JavaScript filename.\n - FORMATTER_CAYENNELPP: CayenneLPP payload formatter.\n\nMore payload formatters can be added.", + "type": "string", + "default": "FORMATTER_NONE", + "enum": [ + "FORMATTER_NONE", + "FORMATTER_REPOSITORY", + "FORMATTER_GRPC_SERVICE", + "FORMATTER_JAVASCRIPT", + "FORMATTER_CAYENNELPP" + ] + }, + "up_formatter_parameter": { + "description": "Parameter for the up_formatter, must be set together. The API enforces a maximum length of 16KB, but the size may be restricted further by deployment configuration.", + "type": "string" + } + } + }, + "frequency_plan_id": { + "description": "ID of the frequency plan used by this device.\nCopied on creation from template identified by version_ids, if any or from the home Network Server device profile, if any.", + "type": "string" + }, + "ids": { + "type": "object", + "properties": { + "application_ids": { + "type": "object", + "properties": { + "application_id": { + "type": "string" + } + } + }, + "dev_addr": { + "description": "The LoRaWAN DevAddr.", + "type": "string", + "format": "string", + "example": "2600ABCD" + }, + "dev_eui": { + "description": "The LoRaWAN DevEUI.", + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + }, + "device_id": { + "type": "string" + }, + "join_eui": { + "description": "The LoRaWAN JoinEUI (AppEUI until LoRaWAN 1.0.3 end devices).", + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + } + } + }, + "join_server_address": { + "description": "The address of the Join Server where this device is supposed to be registered.\nStored in Entity Registry.\nThe typical format of the address is \"host:port\". If the port is omitted,\nthe normal port inference (with DNS lookup, otherwise defaults) is used.\nThe connection shall be established with transport layer security (TLS).\nCustom certificate authorities may be configured out-of-band.", + "type": "string" + }, + "last_dev_nonce": { + "description": "Last DevNonce used.\nThis field is only used for devices using LoRaWAN version 1.1 and later.\nStored in Join Server.", + "type": "integer", + "format": "int64" + }, + "last_dev_status_received_at": { + "description": "Time when last DevStatus MAC command was received.\nStored in Network Server.", + "type": "string", + "format": "date-time" + }, + "last_join_nonce": { + "description": "Last JoinNonce/AppNonce(for devices using LoRaWAN versions preceding 1.1) used.\nStored in Join Server.", + "type": "integer", + "format": "int64" + }, + "last_rj_count_0": { + "description": "Last Rejoin counter value used (type 0/2).\nStored in Join Server.", + "type": "integer", + "format": "int64" + }, + "last_rj_count_1": { + "description": "Last Rejoin counter value used (type 1).\nStored in Join Server.", + "type": "integer", + "format": "int64" + }, + "last_seen_at": { + "description": "Timestamp when a device uplink has been last observed.\nThis field is set by the Application Server and stored in the Identity Server.", + "type": "string", + "format": "date-time" + }, + "locations": { + "description": "Location of the device. Stored in Entity Registry.", + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "accuracy": { + "description": "The accuracy of the location (meters).", + "type": "integer", + "format": "int32" + }, + "altitude": { + "description": "The altitude (meters), where 0 is the mean sea level.", + "type": "integer", + "format": "int32" + }, + "latitude": { + "description": "The North–South position (degrees; -90 to +90), where 0 is the equator, North pole is positive, South pole is negative.", + "type": "number", + "format": "double" + }, + "longitude": { + "description": "The East-West position (degrees; -180 to +180), where 0 is the Prime Meridian (Greenwich), East is positive , West is negative.", + "type": "number", + "format": "double" + }, + "source": { + "description": " - SOURCE_UNKNOWN: The source of the location is not known or not set.\n - SOURCE_GPS: The location is determined by GPS.\n - SOURCE_REGISTRY: The location is set in and updated from a registry.\n - SOURCE_IP_GEOLOCATION: The location is estimated with IP geolocation.\n - SOURCE_WIFI_RSSI_GEOLOCATION: The location is estimated with WiFi RSSI geolocation.\n - SOURCE_BT_RSSI_GEOLOCATION: The location is estimated with BT/BLE RSSI geolocation.\n - SOURCE_LORA_RSSI_GEOLOCATION: The location is estimated with LoRa RSSI geolocation.\n - SOURCE_LORA_TDOA_GEOLOCATION: The location is estimated with LoRa TDOA geolocation.\n - SOURCE_COMBINED_GEOLOCATION: The location is estimated by a combination of geolocation sources.\n\nMore estimation methods can be added.", + "type": "string", + "default": "SOURCE_UNKNOWN", + "enum": [ + "SOURCE_UNKNOWN", + "SOURCE_GPS", + "SOURCE_REGISTRY", + "SOURCE_IP_GEOLOCATION", + "SOURCE_WIFI_RSSI_GEOLOCATION", + "SOURCE_BT_RSSI_GEOLOCATION", + "SOURCE_LORA_RSSI_GEOLOCATION", + "SOURCE_LORA_TDOA_GEOLOCATION", + "SOURCE_COMBINED_GEOLOCATION" + ] + } + } + } + }, + "lora_alliance_profile_ids": { + "type": "object", + "properties": { + "vendor_id": { + "description": "VendorID managed by the LoRa Alliance, as defined in TR005.", + "type": "integer", + "format": "int64" + }, + "vendor_profile_id": { + "description": "ID of the LoRaWAN end device profile assigned by the vendor.", + "type": "integer", + "format": "int64" + } + } + }, + "lorawan_phy_version": { + "type": "string", + "default": "PHY_UNKNOWN", + "enum": [ + "PHY_UNKNOWN", + "PHY_V1_0", + "TS001_V1_0", + "PHY_V1_0_1", + "TS001_V1_0_1", + "PHY_V1_0_2_REV_A", + "RP001_V1_0_2", + "PHY_V1_0_2_REV_B", + "RP001_V1_0_2_REV_B", + "PHY_V1_1_REV_A", + "RP001_V1_1_REV_A", + "PHY_V1_1_REV_B", + "RP001_V1_1_REV_B", + "PHY_V1_0_3_REV_A", + "RP001_V1_0_3_REV_A", + "RP002_V1_0_0", + "RP002_V1_0_1", + "RP002_V1_0_2", + "RP002_V1_0_3", + "RP002_V1_0_4" + ] + }, + "lorawan_version": { + "type": "string", + "default": "MAC_UNKNOWN", + "enum": [ + "MAC_UNKNOWN", + "MAC_V1_0", + "MAC_V1_0_1", + "MAC_V1_0_2", + "MAC_V1_1", + "MAC_V1_0_3", + "MAC_V1_0_4" + ] + }, + "mac_settings": { + "type": "object", + "properties": { + "adr": { + "description": "Adaptive Data Rate settings.", + "type": "object", + "properties": { + "disabled": { + "description": "Configuration options for cases in which ADR is to be disabled\ncompletely.", + "type": "object" + }, + "dynamic": { + "description": "Configuration options for dynamic ADR.", + "type": "object", + "properties": { + "channel_steering": { + "description": "EXPERIMENTAL: Channel steering settings.", + "type": "object", + "properties": { + "disabled": { + "description": "Configuration options for cases in which ADR is not supposed to steer the end device\nto another set of channels.", + "type": "object" + }, + "lora_narrow": { + "description": "Configuration options for LoRa narrow channels steering.\nThe narrow mode attempts to steer the end device towards\nusing the LoRa modulated, 125kHz bandwidth channels.", + "type": "object" + } + } + }, + "margin": { + "description": "The ADR margin (dB) tells the network server how much margin it should add in ADR requests.\nA bigger margin is less efficient, but gives a better chance of successful reception.\nIf unset, the default value from Network Server configuration will be used.", + "type": "number", + "format": "float" + }, + "max_data_rate_index": { + "type": "object", + "properties": { + "value": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + } + } + }, + "max_nb_trans": { + "description": "Maximum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + }, + "max_tx_power_index": { + "description": "Maximum transmission power index.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + }, + "min_data_rate_index": { + "type": "object", + "properties": { + "value": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + } + } + }, + "min_nb_trans": { + "description": "Minimum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + }, + "min_tx_power_index": { + "description": "Minimum transmission power index.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + }, + "overrides": { + "description": "EXPERIMENTAL: Configuration overrides.", + "type": "object", + "properties": { + "data_rate_0": { + "description": "EXPERIMENTAL: Data rate index override settings.", + "type": "object", + "properties": { + "max_nb_trans": { + "description": "Maximum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + }, + "min_nb_trans": { + "description": "Minimum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + } + } + }, + "data_rate_1": { + "description": "EXPERIMENTAL: Data rate index override settings.", + "type": "object", + "properties": { + "max_nb_trans": { + "description": "Maximum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + }, + "min_nb_trans": { + "description": "Minimum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + } + } + }, + "data_rate_10": { + "description": "EXPERIMENTAL: Data rate index override settings.", + "type": "object", + "properties": { + "max_nb_trans": { + "description": "Maximum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + }, + "min_nb_trans": { + "description": "Minimum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + } + } + }, + "data_rate_11": { + "description": "EXPERIMENTAL: Data rate index override settings.", + "type": "object", + "properties": { + "max_nb_trans": { + "description": "Maximum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + }, + "min_nb_trans": { + "description": "Minimum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + } + } + }, + "data_rate_12": { + "description": "EXPERIMENTAL: Data rate index override settings.", + "type": "object", + "properties": { + "max_nb_trans": { + "description": "Maximum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + }, + "min_nb_trans": { + "description": "Minimum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + } + } + }, + "data_rate_13": { + "description": "EXPERIMENTAL: Data rate index override settings.", + "type": "object", + "properties": { + "max_nb_trans": { + "description": "Maximum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + }, + "min_nb_trans": { + "description": "Minimum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + } + } + }, + "data_rate_14": { + "description": "EXPERIMENTAL: Data rate index override settings.", + "type": "object", + "properties": { + "max_nb_trans": { + "description": "Maximum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + }, + "min_nb_trans": { + "description": "Minimum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + } + } + }, + "data_rate_15": { + "description": "EXPERIMENTAL: Data rate index override settings.", + "type": "object", + "properties": { + "max_nb_trans": { + "description": "Maximum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + }, + "min_nb_trans": { + "description": "Minimum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + } + } + }, + "data_rate_2": { + "description": "EXPERIMENTAL: Data rate index override settings.", + "type": "object", + "properties": { + "max_nb_trans": { + "description": "Maximum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + }, + "min_nb_trans": { + "description": "Minimum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + } + } + }, + "data_rate_3": { + "description": "EXPERIMENTAL: Data rate index override settings.", + "type": "object", + "properties": { + "max_nb_trans": { + "description": "Maximum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + }, + "min_nb_trans": { + "description": "Minimum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + } + } + }, + "data_rate_4": { + "description": "EXPERIMENTAL: Data rate index override settings.", + "type": "object", + "properties": { + "max_nb_trans": { + "description": "Maximum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + }, + "min_nb_trans": { + "description": "Minimum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + } + } + }, + "data_rate_5": { + "description": "EXPERIMENTAL: Data rate index override settings.", + "type": "object", + "properties": { + "max_nb_trans": { + "description": "Maximum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + }, + "min_nb_trans": { + "description": "Minimum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + } + } + }, + "data_rate_6": { + "description": "EXPERIMENTAL: Data rate index override settings.", + "type": "object", + "properties": { + "max_nb_trans": { + "description": "Maximum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + }, + "min_nb_trans": { + "description": "Minimum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + } + } + }, + "data_rate_7": { + "description": "EXPERIMENTAL: Data rate index override settings.", + "type": "object", + "properties": { + "max_nb_trans": { + "description": "Maximum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + }, + "min_nb_trans": { + "description": "Minimum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + } + } + }, + "data_rate_8": { + "description": "EXPERIMENTAL: Data rate index override settings.", + "type": "object", + "properties": { + "max_nb_trans": { + "description": "Maximum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + }, + "min_nb_trans": { + "description": "Minimum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + } + } + }, + "data_rate_9": { + "description": "EXPERIMENTAL: Data rate index override settings.", + "type": "object", + "properties": { + "max_nb_trans": { + "description": "Maximum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + }, + "min_nb_trans": { + "description": "Minimum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + } + } + } + } + } + } + }, + "static": { + "description": "Configuration options for static ADR.", + "type": "object", + "properties": { + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "nb_trans": { + "description": "Number of retransmissions.", + "type": "integer", + "format": "int64" + }, + "tx_power_index": { + "description": "Transmission power index to use.", + "type": "integer", + "format": "int64" + } + } + } + } + }, + "adr_margin": { + "description": "The ADR margin (dB) tells the network server how much margin it should add in ADR requests.\nA bigger margin is less efficient, but gives a better chance of successful reception.\nThis field is deprecated, use adr_settings.dynamic.margin instead.", + "type": "number", + "format": "float" + }, + "beacon_frequency": { + "type": "object", + "properties": { + "value": { + "type": "string", + "format": "uint64" + } + } + }, + "class_b_c_downlink_interval": { + "description": "The minimum duration passed before a network-initiated(e.g. Class B or C) downlink following an arbitrary downlink.", + "type": "string" + }, + "class_b_timeout": { + "description": "Maximum delay for the device to answer a MAC request or a confirmed downlink frame.\nIf unset, the default value from Network Server configuration will be used.", + "type": "string" + }, + "class_c_timeout": { + "description": "Maximum delay for the device to answer a MAC request or a confirmed downlink frame.\nIf unset, the default value from Network Server configuration will be used.", + "type": "string" + }, + "desired_adr_ack_delay_exponent": { + "type": "object", + "properties": { + "value": { + "type": "string", + "default": "ADR_ACK_DELAY_1", + "enum": [ + "ADR_ACK_DELAY_1", + "ADR_ACK_DELAY_2", + "ADR_ACK_DELAY_4", + "ADR_ACK_DELAY_8", + "ADR_ACK_DELAY_16", + "ADR_ACK_DELAY_32", + "ADR_ACK_DELAY_64", + "ADR_ACK_DELAY_128", + "ADR_ACK_DELAY_256", + "ADR_ACK_DELAY_512", + "ADR_ACK_DELAY_1024", + "ADR_ACK_DELAY_2048", + "ADR_ACK_DELAY_4096", + "ADR_ACK_DELAY_8192", + "ADR_ACK_DELAY_16384", + "ADR_ACK_DELAY_32768" + ] + } + } + }, + "desired_adr_ack_limit_exponent": { + "type": "object", + "properties": { + "value": { + "type": "string", + "default": "ADR_ACK_LIMIT_1", + "enum": [ + "ADR_ACK_LIMIT_1", + "ADR_ACK_LIMIT_2", + "ADR_ACK_LIMIT_4", + "ADR_ACK_LIMIT_8", + "ADR_ACK_LIMIT_16", + "ADR_ACK_LIMIT_32", + "ADR_ACK_LIMIT_64", + "ADR_ACK_LIMIT_128", + "ADR_ACK_LIMIT_256", + "ADR_ACK_LIMIT_512", + "ADR_ACK_LIMIT_1024", + "ADR_ACK_LIMIT_2048", + "ADR_ACK_LIMIT_4096", + "ADR_ACK_LIMIT_8192", + "ADR_ACK_LIMIT_16384", + "ADR_ACK_LIMIT_32768" + ] + } + } + }, + "desired_beacon_frequency": { + "type": "object", + "properties": { + "value": { + "type": "string", + "format": "uint64" + } + } + }, + "desired_max_duty_cycle": { + "type": "object", + "properties": { + "value": { + "description": " - DUTY_CYCLE_1: 100%.\n - DUTY_CYCLE_2: 50%.\n - DUTY_CYCLE_4: 25%.\n - DUTY_CYCLE_8: 12.5%.\n - DUTY_CYCLE_16: 6.25%.\n - DUTY_CYCLE_32: 3.125%.\n - DUTY_CYCLE_64: 1.5625%.\n - DUTY_CYCLE_128: Roughly 0.781%.\n - DUTY_CYCLE_256: Roughly 0.390%.\n - DUTY_CYCLE_512: Roughly 0.195%.\n - DUTY_CYCLE_1024: Roughly 0.098%.\n - DUTY_CYCLE_2048: Roughly 0.049%.\n - DUTY_CYCLE_4096: Roughly 0.024%.\n - DUTY_CYCLE_8192: Roughly 0.012%.\n - DUTY_CYCLE_16384: Roughly 0.006%.\n - DUTY_CYCLE_32768: Roughly 0.003%.", + "type": "string", + "default": "DUTY_CYCLE_1", + "enum": [ + "DUTY_CYCLE_1", + "DUTY_CYCLE_2", + "DUTY_CYCLE_4", + "DUTY_CYCLE_8", + "DUTY_CYCLE_16", + "DUTY_CYCLE_32", + "DUTY_CYCLE_64", + "DUTY_CYCLE_128", + "DUTY_CYCLE_256", + "DUTY_CYCLE_512", + "DUTY_CYCLE_1024", + "DUTY_CYCLE_2048", + "DUTY_CYCLE_4096", + "DUTY_CYCLE_8192", + "DUTY_CYCLE_16384", + "DUTY_CYCLE_32768" + ] + } + } + }, + "desired_max_eirp": { + "type": "object", + "properties": { + "value": { + "description": " - DEVICE_EIRP_8: 8 dBm.\n - DEVICE_EIRP_10: 10 dBm.\n - DEVICE_EIRP_12: 12 dBm.\n - DEVICE_EIRP_13: 13 dBm.\n - DEVICE_EIRP_14: 14 dBm.\n - DEVICE_EIRP_16: 16 dBm.\n - DEVICE_EIRP_18: 18 dBm.\n - DEVICE_EIRP_20: 20 dBm.\n - DEVICE_EIRP_21: 21 dBm.\n - DEVICE_EIRP_24: 24 dBm.\n - DEVICE_EIRP_26: 26 dBm.\n - DEVICE_EIRP_27: 27 dBm.\n - DEVICE_EIRP_29: 29 dBm.\n - DEVICE_EIRP_30: 30 dBm.\n - DEVICE_EIRP_33: 33 dBm.\n - DEVICE_EIRP_36: 36 dBm.", + "type": "string", + "default": "DEVICE_EIRP_8", + "enum": [ + "DEVICE_EIRP_8", + "DEVICE_EIRP_10", + "DEVICE_EIRP_12", + "DEVICE_EIRP_13", + "DEVICE_EIRP_14", + "DEVICE_EIRP_16", + "DEVICE_EIRP_18", + "DEVICE_EIRP_20", + "DEVICE_EIRP_21", + "DEVICE_EIRP_24", + "DEVICE_EIRP_26", + "DEVICE_EIRP_27", + "DEVICE_EIRP_29", + "DEVICE_EIRP_30", + "DEVICE_EIRP_33", + "DEVICE_EIRP_36" + ] + } + } + }, + "desired_ping_slot_data_rate_index": { + "type": "object", + "properties": { + "value": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + } + } + }, + "desired_ping_slot_frequency": { + "type": "object", + "properties": { + "value": { + "type": "string", + "format": "uint64" + } + } + }, + "desired_relay": { + "description": "RelaySettings represent the settings of a relay.\nThis is used internally by the Network Server.", + "type": "object", + "properties": { + "served": { + "type": "object", + "properties": { + "always": { + "type": "object" + }, + "backoff": { + "description": "Number of wake on radio frames to be sent without an acknowledgement before sending the uplink message directly.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + }, + "dynamic": { + "type": "object", + "properties": { + "smart_enable_level": { + "type": "string", + "default": "RELAY_SMART_ENABLE_LEVEL_8", + "enum": [ + "RELAY_SMART_ENABLE_LEVEL_8", + "RELAY_SMART_ENABLE_LEVEL_16", + "RELAY_SMART_ENABLE_LEVEL_32", + "RELAY_SMART_ENABLE_LEVEL_64" + ] + } + } + }, + "end_device_controlled": { + "type": "object" + }, + "second_channel": { + "type": "object", + "properties": { + "ack_offset": { + "type": "string", + "title": "- RELAY_SECOND_CH_ACK_OFFSET_0: 0 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_200: 200 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_400: 400 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_800: 800 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_1600: 1.6 MHz\n - RELAY_SECOND_CH_ACK_OFFSET_3200: 3.2 MHz", + "default": "RELAY_SECOND_CH_ACK_OFFSET_0", + "enum": [ + "RELAY_SECOND_CH_ACK_OFFSET_0", + "RELAY_SECOND_CH_ACK_OFFSET_200", + "RELAY_SECOND_CH_ACK_OFFSET_400", + "RELAY_SECOND_CH_ACK_OFFSET_800", + "RELAY_SECOND_CH_ACK_OFFSET_1600", + "RELAY_SECOND_CH_ACK_OFFSET_3200" + ] + }, + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "frequency": { + "description": "The frequency (Hz) used by the wake on radio message.", + "type": "string", + "format": "uint64" + } + } + }, + "serving_device_id": { + "description": "End device identifier of the serving end device.", + "type": "string" + } + } + }, + "serving": { + "type": "object", + "properties": { + "cad_periodicity": { + "type": "string", + "title": "- RELAY_CAD_PERIODICITY_20_MILLISECONDS: sic", + "default": "RELAY_CAD_PERIODICITY_1_SECOND", + "enum": [ + "RELAY_CAD_PERIODICITY_1_SECOND", + "RELAY_CAD_PERIODICITY_500_MILLISECONDS", + "RELAY_CAD_PERIODICITY_250_MILLISECONDS", + "RELAY_CAD_PERIODICITY_100_MILLISECONDS", + "RELAY_CAD_PERIODICITY_50_MILLISECONDS", + "RELAY_CAD_PERIODICITY_20_MILLISECONDS" + ] + }, + "default_channel_index": { + "description": "Index of the default wake on radio channel.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + }, + "limits": { + "type": "object", + "properties": { + "join_requests": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "notifications": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "overall": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "reset_behavior": { + "type": "string", + "default": "RELAY_RESET_LIMIT_COUNTER_ZERO", + "enum": [ + "RELAY_RESET_LIMIT_COUNTER_ZERO", + "RELAY_RESET_LIMIT_COUNTER_RELOAD_RATE", + "RELAY_RESET_LIMIT_COUNTER_MAX_VALUE", + "RELAY_RESET_LIMIT_COUNTER_NO_RESET" + ] + }, + "uplink_messages": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + } + } + }, + "second_channel": { + "type": "object", + "properties": { + "ack_offset": { + "type": "string", + "title": "- RELAY_SECOND_CH_ACK_OFFSET_0: 0 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_200: 200 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_400: 400 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_800: 800 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_1600: 1.6 MHz\n - RELAY_SECOND_CH_ACK_OFFSET_3200: 3.2 MHz", + "default": "RELAY_SECOND_CH_ACK_OFFSET_0", + "enum": [ + "RELAY_SECOND_CH_ACK_OFFSET_0", + "RELAY_SECOND_CH_ACK_OFFSET_200", + "RELAY_SECOND_CH_ACK_OFFSET_400", + "RELAY_SECOND_CH_ACK_OFFSET_800", + "RELAY_SECOND_CH_ACK_OFFSET_1600", + "RELAY_SECOND_CH_ACK_OFFSET_3200" + ] + }, + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "frequency": { + "description": "The frequency (Hz) used by the wake on radio message.", + "type": "string", + "format": "uint64" + } + } + }, + "uplink_forwarding_rules": { + "description": "Configured uplink forwarding rules.", + "type": "array", + "items": { + "type": "object", + "properties": { + "device_id": { + "description": "End device identifier of the served end device.", + "type": "string" + }, + "last_w_f_cnt": { + "description": "Last wake on radio frame counter used by the served end device.", + "type": "integer", + "format": "int64" + }, + "limits": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "session_key_id": { + "description": "Session key ID of the session keys used to derive the root relay session key.", + "type": "string", + "format": "byte" + } + } + } + } + } + } + } + }, + "desired_rx1_data_rate_offset": { + "type": "object", + "properties": { + "value": { + "type": "string", + "default": "DATA_RATE_OFFSET_0", + "enum": [ + "DATA_RATE_OFFSET_0", + "DATA_RATE_OFFSET_1", + "DATA_RATE_OFFSET_2", + "DATA_RATE_OFFSET_3", + "DATA_RATE_OFFSET_4", + "DATA_RATE_OFFSET_5", + "DATA_RATE_OFFSET_6", + "DATA_RATE_OFFSET_7" + ] + } + } + }, + "desired_rx1_delay": { + "type": "object", + "properties": { + "value": { + "description": " - RX_DELAY_0: 1 second.\n - RX_DELAY_1: 1 second.\n - RX_DELAY_2: 2 seconds.\n - RX_DELAY_3: 3 seconds.\n - RX_DELAY_4: 4 seconds.\n - RX_DELAY_5: 5 seconds.\n - RX_DELAY_6: 6 seconds.\n - RX_DELAY_7: 7 seconds.\n - RX_DELAY_8: 8 seconds.\n - RX_DELAY_9: 9 seconds.\n - RX_DELAY_10: 10 seconds.\n - RX_DELAY_11: 11 seconds.\n - RX_DELAY_12: 12 seconds.\n - RX_DELAY_13: 13 seconds.\n - RX_DELAY_14: 14 seconds.\n - RX_DELAY_15: 15 seconds.", + "type": "string", + "default": "RX_DELAY_0", + "enum": [ + "RX_DELAY_0", + "RX_DELAY_1", + "RX_DELAY_2", + "RX_DELAY_3", + "RX_DELAY_4", + "RX_DELAY_5", + "RX_DELAY_6", + "RX_DELAY_7", + "RX_DELAY_8", + "RX_DELAY_9", + "RX_DELAY_10", + "RX_DELAY_11", + "RX_DELAY_12", + "RX_DELAY_13", + "RX_DELAY_14", + "RX_DELAY_15" + ] + } + } + }, + "desired_rx2_data_rate_index": { + "type": "object", + "properties": { + "value": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + } + } + }, + "desired_rx2_frequency": { + "type": "object", + "properties": { + "value": { + "type": "string", + "format": "uint64" + } + } + }, + "downlink_dwell_time": { + "type": "object", + "properties": { + "value": { + "type": "boolean" + } + } + }, + "factory_preset_frequencies": { + "description": "List of factory-preset frequencies.\nIf unset, the default value from Network Server configuration or regional parameters specification will be used.", + "type": "array", + "items": { + "type": "string", + "format": "uint64" + } + }, + "max_duty_cycle": { + "type": "object", + "properties": { + "value": { + "description": " - DUTY_CYCLE_1: 100%.\n - DUTY_CYCLE_2: 50%.\n - DUTY_CYCLE_4: 25%.\n - DUTY_CYCLE_8: 12.5%.\n - DUTY_CYCLE_16: 6.25%.\n - DUTY_CYCLE_32: 3.125%.\n - DUTY_CYCLE_64: 1.5625%.\n - DUTY_CYCLE_128: Roughly 0.781%.\n - DUTY_CYCLE_256: Roughly 0.390%.\n - DUTY_CYCLE_512: Roughly 0.195%.\n - DUTY_CYCLE_1024: Roughly 0.098%.\n - DUTY_CYCLE_2048: Roughly 0.049%.\n - DUTY_CYCLE_4096: Roughly 0.024%.\n - DUTY_CYCLE_8192: Roughly 0.012%.\n - DUTY_CYCLE_16384: Roughly 0.006%.\n - DUTY_CYCLE_32768: Roughly 0.003%.", + "type": "string", + "default": "DUTY_CYCLE_1", + "enum": [ + "DUTY_CYCLE_1", + "DUTY_CYCLE_2", + "DUTY_CYCLE_4", + "DUTY_CYCLE_8", + "DUTY_CYCLE_16", + "DUTY_CYCLE_32", + "DUTY_CYCLE_64", + "DUTY_CYCLE_128", + "DUTY_CYCLE_256", + "DUTY_CYCLE_512", + "DUTY_CYCLE_1024", + "DUTY_CYCLE_2048", + "DUTY_CYCLE_4096", + "DUTY_CYCLE_8192", + "DUTY_CYCLE_16384", + "DUTY_CYCLE_32768" + ] + } + } + }, + "ping_slot_data_rate_index": { + "type": "object", + "properties": { + "value": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + } + } + }, + "ping_slot_frequency": { + "type": "object", + "properties": { + "value": { + "type": "string", + "format": "uint64" + } + } + }, + "ping_slot_periodicity": { + "type": "object", + "properties": { + "value": { + "description": " - PING_EVERY_1S: Every second.\n - PING_EVERY_2S: Every 2 seconds.\n - PING_EVERY_4S: Every 4 seconds.\n - PING_EVERY_8S: Every 8 seconds.\n - PING_EVERY_16S: Every 16 seconds.\n - PING_EVERY_32S: Every 32 seconds.\n - PING_EVERY_64S: Every 64 seconds.\n - PING_EVERY_128S: Every 128 seconds.", + "type": "string", + "default": "PING_EVERY_1S", + "enum": [ + "PING_EVERY_1S", + "PING_EVERY_2S", + "PING_EVERY_4S", + "PING_EVERY_8S", + "PING_EVERY_16S", + "PING_EVERY_32S", + "PING_EVERY_64S", + "PING_EVERY_128S" + ] + } + } + }, + "relay": { + "description": "RelaySettings represent the settings of a relay.\nThis is used internally by the Network Server.", + "type": "object", + "properties": { + "served": { + "type": "object", + "properties": { + "always": { + "type": "object" + }, + "backoff": { + "description": "Number of wake on radio frames to be sent without an acknowledgement before sending the uplink message directly.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + }, + "dynamic": { + "type": "object", + "properties": { + "smart_enable_level": { + "type": "string", + "default": "RELAY_SMART_ENABLE_LEVEL_8", + "enum": [ + "RELAY_SMART_ENABLE_LEVEL_8", + "RELAY_SMART_ENABLE_LEVEL_16", + "RELAY_SMART_ENABLE_LEVEL_32", + "RELAY_SMART_ENABLE_LEVEL_64" + ] + } + } + }, + "end_device_controlled": { + "type": "object" + }, + "second_channel": { + "type": "object", + "properties": { + "ack_offset": { + "type": "string", + "title": "- RELAY_SECOND_CH_ACK_OFFSET_0: 0 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_200: 200 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_400: 400 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_800: 800 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_1600: 1.6 MHz\n - RELAY_SECOND_CH_ACK_OFFSET_3200: 3.2 MHz", + "default": "RELAY_SECOND_CH_ACK_OFFSET_0", + "enum": [ + "RELAY_SECOND_CH_ACK_OFFSET_0", + "RELAY_SECOND_CH_ACK_OFFSET_200", + "RELAY_SECOND_CH_ACK_OFFSET_400", + "RELAY_SECOND_CH_ACK_OFFSET_800", + "RELAY_SECOND_CH_ACK_OFFSET_1600", + "RELAY_SECOND_CH_ACK_OFFSET_3200" + ] + }, + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "frequency": { + "description": "The frequency (Hz) used by the wake on radio message.", + "type": "string", + "format": "uint64" + } + } + }, + "serving_device_id": { + "description": "End device identifier of the serving end device.", + "type": "string" + } + } + }, + "serving": { + "type": "object", + "properties": { + "cad_periodicity": { + "type": "string", + "title": "- RELAY_CAD_PERIODICITY_20_MILLISECONDS: sic", + "default": "RELAY_CAD_PERIODICITY_1_SECOND", + "enum": [ + "RELAY_CAD_PERIODICITY_1_SECOND", + "RELAY_CAD_PERIODICITY_500_MILLISECONDS", + "RELAY_CAD_PERIODICITY_250_MILLISECONDS", + "RELAY_CAD_PERIODICITY_100_MILLISECONDS", + "RELAY_CAD_PERIODICITY_50_MILLISECONDS", + "RELAY_CAD_PERIODICITY_20_MILLISECONDS" + ] + }, + "default_channel_index": { + "description": "Index of the default wake on radio channel.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + }, + "limits": { + "type": "object", + "properties": { + "join_requests": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "notifications": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "overall": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "reset_behavior": { + "type": "string", + "default": "RELAY_RESET_LIMIT_COUNTER_ZERO", + "enum": [ + "RELAY_RESET_LIMIT_COUNTER_ZERO", + "RELAY_RESET_LIMIT_COUNTER_RELOAD_RATE", + "RELAY_RESET_LIMIT_COUNTER_MAX_VALUE", + "RELAY_RESET_LIMIT_COUNTER_NO_RESET" + ] + }, + "uplink_messages": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + } + } + }, + "second_channel": { + "type": "object", + "properties": { + "ack_offset": { + "type": "string", + "title": "- RELAY_SECOND_CH_ACK_OFFSET_0: 0 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_200: 200 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_400: 400 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_800: 800 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_1600: 1.6 MHz\n - RELAY_SECOND_CH_ACK_OFFSET_3200: 3.2 MHz", + "default": "RELAY_SECOND_CH_ACK_OFFSET_0", + "enum": [ + "RELAY_SECOND_CH_ACK_OFFSET_0", + "RELAY_SECOND_CH_ACK_OFFSET_200", + "RELAY_SECOND_CH_ACK_OFFSET_400", + "RELAY_SECOND_CH_ACK_OFFSET_800", + "RELAY_SECOND_CH_ACK_OFFSET_1600", + "RELAY_SECOND_CH_ACK_OFFSET_3200" + ] + }, + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "frequency": { + "description": "The frequency (Hz) used by the wake on radio message.", + "type": "string", + "format": "uint64" + } + } + }, + "uplink_forwarding_rules": { + "description": "Configured uplink forwarding rules.", + "type": "array", + "items": { + "type": "object", + "properties": { + "device_id": { + "description": "End device identifier of the served end device.", + "type": "string" + }, + "last_w_f_cnt": { + "description": "Last wake on radio frame counter used by the served end device.", + "type": "integer", + "format": "int64" + }, + "limits": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "session_key_id": { + "description": "Session key ID of the session keys used to derive the root relay session key.", + "type": "string", + "format": "byte" + } + } + } + } + } + } + } + }, + "resets_f_cnt": { + "type": "object", + "properties": { + "value": { + "type": "boolean" + } + } + }, + "rx1_data_rate_offset": { + "type": "object", + "properties": { + "value": { + "type": "string", + "default": "DATA_RATE_OFFSET_0", + "enum": [ + "DATA_RATE_OFFSET_0", + "DATA_RATE_OFFSET_1", + "DATA_RATE_OFFSET_2", + "DATA_RATE_OFFSET_3", + "DATA_RATE_OFFSET_4", + "DATA_RATE_OFFSET_5", + "DATA_RATE_OFFSET_6", + "DATA_RATE_OFFSET_7" + ] + } + } + }, + "rx1_delay": { + "type": "object", + "properties": { + "value": { + "description": " - RX_DELAY_0: 1 second.\n - RX_DELAY_1: 1 second.\n - RX_DELAY_2: 2 seconds.\n - RX_DELAY_3: 3 seconds.\n - RX_DELAY_4: 4 seconds.\n - RX_DELAY_5: 5 seconds.\n - RX_DELAY_6: 6 seconds.\n - RX_DELAY_7: 7 seconds.\n - RX_DELAY_8: 8 seconds.\n - RX_DELAY_9: 9 seconds.\n - RX_DELAY_10: 10 seconds.\n - RX_DELAY_11: 11 seconds.\n - RX_DELAY_12: 12 seconds.\n - RX_DELAY_13: 13 seconds.\n - RX_DELAY_14: 14 seconds.\n - RX_DELAY_15: 15 seconds.", + "type": "string", + "default": "RX_DELAY_0", + "enum": [ + "RX_DELAY_0", + "RX_DELAY_1", + "RX_DELAY_2", + "RX_DELAY_3", + "RX_DELAY_4", + "RX_DELAY_5", + "RX_DELAY_6", + "RX_DELAY_7", + "RX_DELAY_8", + "RX_DELAY_9", + "RX_DELAY_10", + "RX_DELAY_11", + "RX_DELAY_12", + "RX_DELAY_13", + "RX_DELAY_14", + "RX_DELAY_15" + ] + } + } + }, + "rx2_data_rate_index": { + "type": "object", + "properties": { + "value": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + } + } + }, + "rx2_frequency": { + "type": "object", + "properties": { + "value": { + "type": "string", + "format": "uint64" + } + } + }, + "schedule_downlinks": { + "type": "object", + "properties": { + "value": { + "type": "boolean" + } + } + }, + "status_count_periodicity": { + "description": "Number of uplink messages after which a DevStatusReq MACCommand shall be sent.\nIf unset, the default value from Network Server configuration will be used.", + "type": "integer", + "format": "int64" + }, + "status_time_periodicity": { + "description": "The interval after which a DevStatusReq MACCommand shall be sent.\nIf unset, the default value from Network Server configuration will be used.", + "type": "string" + }, + "supports_32_bit_f_cnt": { + "type": "object", + "properties": { + "value": { + "type": "boolean" + } + } + }, + "uplink_dwell_time": { + "type": "object", + "properties": { + "value": { + "type": "boolean" + } + } + }, + "use_adr": { + "type": "object", + "properties": { + "value": { + "type": "boolean" + } + } + } + } + }, + "mac_state": { + "description": "MACState represents the state of MAC layer of the device.\nMACState is reset on each join for OTAA or ResetInd for ABP devices.\nThis is used internally by the Network Server.", + "type": "object", + "properties": { + "current_parameters": { + "description": "MACParameters represent the parameters of the device's MAC layer (active or desired).\nThis is used internally by the Network Server.", + "type": "object", + "properties": { + "adr_ack_delay": { + "description": "ADR: number of messages to wait after setting ADRAckReq and before changing TxPower or DataRate.\nThis field is deprecated, use adr_ack_delay_exponent instead.", + "type": "integer", + "format": "int64" + }, + "adr_ack_delay_exponent": { + "type": "object", + "properties": { + "value": { + "type": "string", + "default": "ADR_ACK_DELAY_1", + "enum": [ + "ADR_ACK_DELAY_1", + "ADR_ACK_DELAY_2", + "ADR_ACK_DELAY_4", + "ADR_ACK_DELAY_8", + "ADR_ACK_DELAY_16", + "ADR_ACK_DELAY_32", + "ADR_ACK_DELAY_64", + "ADR_ACK_DELAY_128", + "ADR_ACK_DELAY_256", + "ADR_ACK_DELAY_512", + "ADR_ACK_DELAY_1024", + "ADR_ACK_DELAY_2048", + "ADR_ACK_DELAY_4096", + "ADR_ACK_DELAY_8192", + "ADR_ACK_DELAY_16384", + "ADR_ACK_DELAY_32768" + ] + } + } + }, + "adr_ack_limit": { + "description": "ADR: number of messages to wait before setting ADRAckReq.\nThis field is deprecated, use adr_ack_limit_exponent instead.", + "type": "integer", + "format": "int64" + }, + "adr_ack_limit_exponent": { + "type": "object", + "properties": { + "value": { + "type": "string", + "default": "ADR_ACK_LIMIT_1", + "enum": [ + "ADR_ACK_LIMIT_1", + "ADR_ACK_LIMIT_2", + "ADR_ACK_LIMIT_4", + "ADR_ACK_LIMIT_8", + "ADR_ACK_LIMIT_16", + "ADR_ACK_LIMIT_32", + "ADR_ACK_LIMIT_64", + "ADR_ACK_LIMIT_128", + "ADR_ACK_LIMIT_256", + "ADR_ACK_LIMIT_512", + "ADR_ACK_LIMIT_1024", + "ADR_ACK_LIMIT_2048", + "ADR_ACK_LIMIT_4096", + "ADR_ACK_LIMIT_8192", + "ADR_ACK_LIMIT_16384", + "ADR_ACK_LIMIT_32768" + ] + } + } + }, + "adr_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "adr_nb_trans": { + "description": "ADR: number of retransmissions.", + "type": "integer", + "format": "int64" + }, + "adr_tx_power_index": { + "description": "ADR: transmission power index to use.", + "type": "integer", + "format": "int64" + }, + "beacon_frequency": { + "description": "Frequency of the class B beacon (Hz).", + "type": "string", + "format": "uint64" + }, + "channels": { + "description": "Configured uplink channels and optionally Rx1 frequency.", + "type": "array", + "items": { + "type": "object", + "properties": { + "downlink_frequency": { + "description": "Downlink frequency of the channel (Hz).", + "type": "string", + "format": "uint64" + }, + "enable_uplink": { + "description": "Channel can be used by device for uplink.", + "type": "boolean" + }, + "max_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "min_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "uplink_frequency": { + "description": "Uplink frequency of the channel (Hz).", + "type": "string", + "format": "uint64" + } + } + } + }, + "downlink_dwell_time": { + "type": "object", + "properties": { + "value": { + "type": "boolean" + } + } + }, + "max_duty_cycle": { + "description": " - DUTY_CYCLE_1: 100%.\n - DUTY_CYCLE_2: 50%.\n - DUTY_CYCLE_4: 25%.\n - DUTY_CYCLE_8: 12.5%.\n - DUTY_CYCLE_16: 6.25%.\n - DUTY_CYCLE_32: 3.125%.\n - DUTY_CYCLE_64: 1.5625%.\n - DUTY_CYCLE_128: Roughly 0.781%.\n - DUTY_CYCLE_256: Roughly 0.390%.\n - DUTY_CYCLE_512: Roughly 0.195%.\n - DUTY_CYCLE_1024: Roughly 0.098%.\n - DUTY_CYCLE_2048: Roughly 0.049%.\n - DUTY_CYCLE_4096: Roughly 0.024%.\n - DUTY_CYCLE_8192: Roughly 0.012%.\n - DUTY_CYCLE_16384: Roughly 0.006%.\n - DUTY_CYCLE_32768: Roughly 0.003%.", + "type": "string", + "default": "DUTY_CYCLE_1", + "enum": [ + "DUTY_CYCLE_1", + "DUTY_CYCLE_2", + "DUTY_CYCLE_4", + "DUTY_CYCLE_8", + "DUTY_CYCLE_16", + "DUTY_CYCLE_32", + "DUTY_CYCLE_64", + "DUTY_CYCLE_128", + "DUTY_CYCLE_256", + "DUTY_CYCLE_512", + "DUTY_CYCLE_1024", + "DUTY_CYCLE_2048", + "DUTY_CYCLE_4096", + "DUTY_CYCLE_8192", + "DUTY_CYCLE_16384", + "DUTY_CYCLE_32768" + ] + }, + "max_eirp": { + "description": "Maximum EIRP (dBm).", + "type": "number", + "format": "float" + }, + "ping_slot_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "ping_slot_data_rate_index_value": { + "type": "object", + "properties": { + "value": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + } + } + }, + "ping_slot_frequency": { + "description": "Frequency of the class B ping slot (Hz).", + "type": "string", + "format": "uint64" + }, + "rejoin_count_periodicity": { + "type": "string", + "default": "REJOIN_COUNT_16", + "enum": [ + "REJOIN_COUNT_16", + "REJOIN_COUNT_32", + "REJOIN_COUNT_64", + "REJOIN_COUNT_128", + "REJOIN_COUNT_256", + "REJOIN_COUNT_512", + "REJOIN_COUNT_1024", + "REJOIN_COUNT_2048", + "REJOIN_COUNT_4096", + "REJOIN_COUNT_8192", + "REJOIN_COUNT_16384", + "REJOIN_COUNT_32768", + "REJOIN_COUNT_65536", + "REJOIN_COUNT_131072", + "REJOIN_COUNT_262144", + "REJOIN_COUNT_524288" + ] + }, + "rejoin_time_periodicity": { + "description": " - REJOIN_TIME_0: Every ~17.1 minutes.\n - REJOIN_TIME_1: Every ~34.1 minutes.\n - REJOIN_TIME_2: Every ~1.1 hours.\n - REJOIN_TIME_3: Every ~2.3 hours.\n - REJOIN_TIME_4: Every ~4.6 hours.\n - REJOIN_TIME_5: Every ~9.1 hours.\n - REJOIN_TIME_6: Every ~18.2 hours.\n - REJOIN_TIME_7: Every ~1.5 days.\n - REJOIN_TIME_8: Every ~3.0 days.\n - REJOIN_TIME_9: Every ~6.1 days.\n - REJOIN_TIME_10: Every ~12.1 days.\n - REJOIN_TIME_11: Every ~3.5 weeks.\n - REJOIN_TIME_12: Every ~1.6 months.\n - REJOIN_TIME_13: Every ~3.2 months.\n - REJOIN_TIME_14: Every ~6.4 months.\n - REJOIN_TIME_15: Every ~1.1 year.", + "type": "string", + "default": "REJOIN_TIME_0", + "enum": [ + "REJOIN_TIME_0", + "REJOIN_TIME_1", + "REJOIN_TIME_2", + "REJOIN_TIME_3", + "REJOIN_TIME_4", + "REJOIN_TIME_5", + "REJOIN_TIME_6", + "REJOIN_TIME_7", + "REJOIN_TIME_8", + "REJOIN_TIME_9", + "REJOIN_TIME_10", + "REJOIN_TIME_11", + "REJOIN_TIME_12", + "REJOIN_TIME_13", + "REJOIN_TIME_14", + "REJOIN_TIME_15" + ] + }, + "relay": { + "description": "RelayParameters represent the parameters of a relay.\nThis is used internally by the Network Server.", + "type": "object", + "properties": { + "served": { + "type": "object", + "properties": { + "always": { + "type": "object" + }, + "backoff": { + "description": "Number of wake on radio frames to be sent without an acknowledgement before sending the uplink message directly.", + "type": "integer", + "format": "int64" + }, + "dynamic": { + "type": "object", + "properties": { + "smart_enable_level": { + "type": "string", + "default": "RELAY_SMART_ENABLE_LEVEL_8", + "enum": [ + "RELAY_SMART_ENABLE_LEVEL_8", + "RELAY_SMART_ENABLE_LEVEL_16", + "RELAY_SMART_ENABLE_LEVEL_32", + "RELAY_SMART_ENABLE_LEVEL_64" + ] + } + } + }, + "end_device_controlled": { + "type": "object" + }, + "second_channel": { + "type": "object", + "properties": { + "ack_offset": { + "type": "string", + "title": "- RELAY_SECOND_CH_ACK_OFFSET_0: 0 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_200: 200 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_400: 400 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_800: 800 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_1600: 1.6 MHz\n - RELAY_SECOND_CH_ACK_OFFSET_3200: 3.2 MHz", + "default": "RELAY_SECOND_CH_ACK_OFFSET_0", + "enum": [ + "RELAY_SECOND_CH_ACK_OFFSET_0", + "RELAY_SECOND_CH_ACK_OFFSET_200", + "RELAY_SECOND_CH_ACK_OFFSET_400", + "RELAY_SECOND_CH_ACK_OFFSET_800", + "RELAY_SECOND_CH_ACK_OFFSET_1600", + "RELAY_SECOND_CH_ACK_OFFSET_3200" + ] + }, + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "frequency": { + "description": "The frequency (Hz) used by the wake on radio message.", + "type": "string", + "format": "uint64" + } + } + }, + "serving_device_id": { + "description": "End device identifier of the serving end device.", + "type": "string" + } + } + }, + "serving": { + "type": "object", + "properties": { + "cad_periodicity": { + "type": "string", + "title": "- RELAY_CAD_PERIODICITY_20_MILLISECONDS: sic", + "default": "RELAY_CAD_PERIODICITY_1_SECOND", + "enum": [ + "RELAY_CAD_PERIODICITY_1_SECOND", + "RELAY_CAD_PERIODICITY_500_MILLISECONDS", + "RELAY_CAD_PERIODICITY_250_MILLISECONDS", + "RELAY_CAD_PERIODICITY_100_MILLISECONDS", + "RELAY_CAD_PERIODICITY_50_MILLISECONDS", + "RELAY_CAD_PERIODICITY_20_MILLISECONDS" + ] + }, + "default_channel_index": { + "description": "Index of the default wake on radio channel.", + "type": "integer", + "format": "int64" + }, + "limits": { + "type": "object", + "properties": { + "join_requests": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "notifications": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "overall": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "reset_behavior": { + "type": "string", + "default": "RELAY_RESET_LIMIT_COUNTER_ZERO", + "enum": [ + "RELAY_RESET_LIMIT_COUNTER_ZERO", + "RELAY_RESET_LIMIT_COUNTER_RELOAD_RATE", + "RELAY_RESET_LIMIT_COUNTER_MAX_VALUE", + "RELAY_RESET_LIMIT_COUNTER_NO_RESET" + ] + }, + "uplink_messages": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + } + } + }, + "second_channel": { + "type": "object", + "properties": { + "ack_offset": { + "type": "string", + "title": "- RELAY_SECOND_CH_ACK_OFFSET_0: 0 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_200: 200 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_400: 400 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_800: 800 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_1600: 1.6 MHz\n - RELAY_SECOND_CH_ACK_OFFSET_3200: 3.2 MHz", + "default": "RELAY_SECOND_CH_ACK_OFFSET_0", + "enum": [ + "RELAY_SECOND_CH_ACK_OFFSET_0", + "RELAY_SECOND_CH_ACK_OFFSET_200", + "RELAY_SECOND_CH_ACK_OFFSET_400", + "RELAY_SECOND_CH_ACK_OFFSET_800", + "RELAY_SECOND_CH_ACK_OFFSET_1600", + "RELAY_SECOND_CH_ACK_OFFSET_3200" + ] + }, + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "frequency": { + "description": "The frequency (Hz) used by the wake on radio message.", + "type": "string", + "format": "uint64" + } + } + }, + "uplink_forwarding_rules": { + "description": "Configured uplink forwarding rules.", + "type": "array", + "items": { + "type": "object", + "properties": { + "device_id": { + "description": "End device identifier of the served end device.", + "type": "string" + }, + "last_w_f_cnt": { + "description": "Last wake on radio frame counter used by the served end device.", + "type": "integer", + "format": "int64" + }, + "limits": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "session_key_id": { + "description": "Session key ID of the session keys used to derive the root relay session key.", + "type": "string", + "format": "byte" + } + } + } + } + } + } + } + }, + "rx1_data_rate_offset": { + "type": "string", + "default": "DATA_RATE_OFFSET_0", + "enum": [ + "DATA_RATE_OFFSET_0", + "DATA_RATE_OFFSET_1", + "DATA_RATE_OFFSET_2", + "DATA_RATE_OFFSET_3", + "DATA_RATE_OFFSET_4", + "DATA_RATE_OFFSET_5", + "DATA_RATE_OFFSET_6", + "DATA_RATE_OFFSET_7" + ] + }, + "rx1_delay": { + "description": " - RX_DELAY_0: 1 second.\n - RX_DELAY_1: 1 second.\n - RX_DELAY_2: 2 seconds.\n - RX_DELAY_3: 3 seconds.\n - RX_DELAY_4: 4 seconds.\n - RX_DELAY_5: 5 seconds.\n - RX_DELAY_6: 6 seconds.\n - RX_DELAY_7: 7 seconds.\n - RX_DELAY_8: 8 seconds.\n - RX_DELAY_9: 9 seconds.\n - RX_DELAY_10: 10 seconds.\n - RX_DELAY_11: 11 seconds.\n - RX_DELAY_12: 12 seconds.\n - RX_DELAY_13: 13 seconds.\n - RX_DELAY_14: 14 seconds.\n - RX_DELAY_15: 15 seconds.", + "type": "string", + "default": "RX_DELAY_0", + "enum": [ + "RX_DELAY_0", + "RX_DELAY_1", + "RX_DELAY_2", + "RX_DELAY_3", + "RX_DELAY_4", + "RX_DELAY_5", + "RX_DELAY_6", + "RX_DELAY_7", + "RX_DELAY_8", + "RX_DELAY_9", + "RX_DELAY_10", + "RX_DELAY_11", + "RX_DELAY_12", + "RX_DELAY_13", + "RX_DELAY_14", + "RX_DELAY_15" + ] + }, + "rx2_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "rx2_frequency": { + "description": "Frequency for Rx2 (Hz).", + "type": "string", + "format": "uint64" + }, + "uplink_dwell_time": { + "type": "object", + "properties": { + "value": { + "type": "boolean" + } + } + } + } + }, + "desired_parameters": { + "description": "MACParameters represent the parameters of the device's MAC layer (active or desired).\nThis is used internally by the Network Server.", + "type": "object", + "properties": { + "adr_ack_delay": { + "description": "ADR: number of messages to wait after setting ADRAckReq and before changing TxPower or DataRate.\nThis field is deprecated, use adr_ack_delay_exponent instead.", + "type": "integer", + "format": "int64" + }, + "adr_ack_delay_exponent": { + "type": "object", + "properties": { + "value": { + "type": "string", + "default": "ADR_ACK_DELAY_1", + "enum": [ + "ADR_ACK_DELAY_1", + "ADR_ACK_DELAY_2", + "ADR_ACK_DELAY_4", + "ADR_ACK_DELAY_8", + "ADR_ACK_DELAY_16", + "ADR_ACK_DELAY_32", + "ADR_ACK_DELAY_64", + "ADR_ACK_DELAY_128", + "ADR_ACK_DELAY_256", + "ADR_ACK_DELAY_512", + "ADR_ACK_DELAY_1024", + "ADR_ACK_DELAY_2048", + "ADR_ACK_DELAY_4096", + "ADR_ACK_DELAY_8192", + "ADR_ACK_DELAY_16384", + "ADR_ACK_DELAY_32768" + ] + } + } + }, + "adr_ack_limit": { + "description": "ADR: number of messages to wait before setting ADRAckReq.\nThis field is deprecated, use adr_ack_limit_exponent instead.", + "type": "integer", + "format": "int64" + }, + "adr_ack_limit_exponent": { + "type": "object", + "properties": { + "value": { + "type": "string", + "default": "ADR_ACK_LIMIT_1", + "enum": [ + "ADR_ACK_LIMIT_1", + "ADR_ACK_LIMIT_2", + "ADR_ACK_LIMIT_4", + "ADR_ACK_LIMIT_8", + "ADR_ACK_LIMIT_16", + "ADR_ACK_LIMIT_32", + "ADR_ACK_LIMIT_64", + "ADR_ACK_LIMIT_128", + "ADR_ACK_LIMIT_256", + "ADR_ACK_LIMIT_512", + "ADR_ACK_LIMIT_1024", + "ADR_ACK_LIMIT_2048", + "ADR_ACK_LIMIT_4096", + "ADR_ACK_LIMIT_8192", + "ADR_ACK_LIMIT_16384", + "ADR_ACK_LIMIT_32768" + ] + } + } + }, + "adr_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "adr_nb_trans": { + "description": "ADR: number of retransmissions.", + "type": "integer", + "format": "int64" + }, + "adr_tx_power_index": { + "description": "ADR: transmission power index to use.", + "type": "integer", + "format": "int64" + }, + "beacon_frequency": { + "description": "Frequency of the class B beacon (Hz).", + "type": "string", + "format": "uint64" + }, + "channels": { + "description": "Configured uplink channels and optionally Rx1 frequency.", + "type": "array", + "items": { + "type": "object", + "properties": { + "downlink_frequency": { + "description": "Downlink frequency of the channel (Hz).", + "type": "string", + "format": "uint64" + }, + "enable_uplink": { + "description": "Channel can be used by device for uplink.", + "type": "boolean" + }, + "max_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "min_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "uplink_frequency": { + "description": "Uplink frequency of the channel (Hz).", + "type": "string", + "format": "uint64" + } + } + } + }, + "downlink_dwell_time": { + "type": "object", + "properties": { + "value": { + "type": "boolean" + } + } + }, + "max_duty_cycle": { + "description": " - DUTY_CYCLE_1: 100%.\n - DUTY_CYCLE_2: 50%.\n - DUTY_CYCLE_4: 25%.\n - DUTY_CYCLE_8: 12.5%.\n - DUTY_CYCLE_16: 6.25%.\n - DUTY_CYCLE_32: 3.125%.\n - DUTY_CYCLE_64: 1.5625%.\n - DUTY_CYCLE_128: Roughly 0.781%.\n - DUTY_CYCLE_256: Roughly 0.390%.\n - DUTY_CYCLE_512: Roughly 0.195%.\n - DUTY_CYCLE_1024: Roughly 0.098%.\n - DUTY_CYCLE_2048: Roughly 0.049%.\n - DUTY_CYCLE_4096: Roughly 0.024%.\n - DUTY_CYCLE_8192: Roughly 0.012%.\n - DUTY_CYCLE_16384: Roughly 0.006%.\n - DUTY_CYCLE_32768: Roughly 0.003%.", + "type": "string", + "default": "DUTY_CYCLE_1", + "enum": [ + "DUTY_CYCLE_1", + "DUTY_CYCLE_2", + "DUTY_CYCLE_4", + "DUTY_CYCLE_8", + "DUTY_CYCLE_16", + "DUTY_CYCLE_32", + "DUTY_CYCLE_64", + "DUTY_CYCLE_128", + "DUTY_CYCLE_256", + "DUTY_CYCLE_512", + "DUTY_CYCLE_1024", + "DUTY_CYCLE_2048", + "DUTY_CYCLE_4096", + "DUTY_CYCLE_8192", + "DUTY_CYCLE_16384", + "DUTY_CYCLE_32768" + ] + }, + "max_eirp": { + "description": "Maximum EIRP (dBm).", + "type": "number", + "format": "float" + }, + "ping_slot_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "ping_slot_data_rate_index_value": { + "type": "object", + "properties": { + "value": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + } + } + }, + "ping_slot_frequency": { + "description": "Frequency of the class B ping slot (Hz).", + "type": "string", + "format": "uint64" + }, + "rejoin_count_periodicity": { + "type": "string", + "default": "REJOIN_COUNT_16", + "enum": [ + "REJOIN_COUNT_16", + "REJOIN_COUNT_32", + "REJOIN_COUNT_64", + "REJOIN_COUNT_128", + "REJOIN_COUNT_256", + "REJOIN_COUNT_512", + "REJOIN_COUNT_1024", + "REJOIN_COUNT_2048", + "REJOIN_COUNT_4096", + "REJOIN_COUNT_8192", + "REJOIN_COUNT_16384", + "REJOIN_COUNT_32768", + "REJOIN_COUNT_65536", + "REJOIN_COUNT_131072", + "REJOIN_COUNT_262144", + "REJOIN_COUNT_524288" + ] + }, + "rejoin_time_periodicity": { + "description": " - REJOIN_TIME_0: Every ~17.1 minutes.\n - REJOIN_TIME_1: Every ~34.1 minutes.\n - REJOIN_TIME_2: Every ~1.1 hours.\n - REJOIN_TIME_3: Every ~2.3 hours.\n - REJOIN_TIME_4: Every ~4.6 hours.\n - REJOIN_TIME_5: Every ~9.1 hours.\n - REJOIN_TIME_6: Every ~18.2 hours.\n - REJOIN_TIME_7: Every ~1.5 days.\n - REJOIN_TIME_8: Every ~3.0 days.\n - REJOIN_TIME_9: Every ~6.1 days.\n - REJOIN_TIME_10: Every ~12.1 days.\n - REJOIN_TIME_11: Every ~3.5 weeks.\n - REJOIN_TIME_12: Every ~1.6 months.\n - REJOIN_TIME_13: Every ~3.2 months.\n - REJOIN_TIME_14: Every ~6.4 months.\n - REJOIN_TIME_15: Every ~1.1 year.", + "type": "string", + "default": "REJOIN_TIME_0", + "enum": [ + "REJOIN_TIME_0", + "REJOIN_TIME_1", + "REJOIN_TIME_2", + "REJOIN_TIME_3", + "REJOIN_TIME_4", + "REJOIN_TIME_5", + "REJOIN_TIME_6", + "REJOIN_TIME_7", + "REJOIN_TIME_8", + "REJOIN_TIME_9", + "REJOIN_TIME_10", + "REJOIN_TIME_11", + "REJOIN_TIME_12", + "REJOIN_TIME_13", + "REJOIN_TIME_14", + "REJOIN_TIME_15" + ] + }, + "relay": { + "description": "RelayParameters represent the parameters of a relay.\nThis is used internally by the Network Server.", + "type": "object", + "properties": { + "served": { + "type": "object", + "properties": { + "always": { + "type": "object" + }, + "backoff": { + "description": "Number of wake on radio frames to be sent without an acknowledgement before sending the uplink message directly.", + "type": "integer", + "format": "int64" + }, + "dynamic": { + "type": "object", + "properties": { + "smart_enable_level": { + "type": "string", + "default": "RELAY_SMART_ENABLE_LEVEL_8", + "enum": [ + "RELAY_SMART_ENABLE_LEVEL_8", + "RELAY_SMART_ENABLE_LEVEL_16", + "RELAY_SMART_ENABLE_LEVEL_32", + "RELAY_SMART_ENABLE_LEVEL_64" + ] + } + } + }, + "end_device_controlled": { + "type": "object" + }, + "second_channel": { + "type": "object", + "properties": { + "ack_offset": { + "type": "string", + "title": "- RELAY_SECOND_CH_ACK_OFFSET_0: 0 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_200: 200 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_400: 400 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_800: 800 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_1600: 1.6 MHz\n - RELAY_SECOND_CH_ACK_OFFSET_3200: 3.2 MHz", + "default": "RELAY_SECOND_CH_ACK_OFFSET_0", + "enum": [ + "RELAY_SECOND_CH_ACK_OFFSET_0", + "RELAY_SECOND_CH_ACK_OFFSET_200", + "RELAY_SECOND_CH_ACK_OFFSET_400", + "RELAY_SECOND_CH_ACK_OFFSET_800", + "RELAY_SECOND_CH_ACK_OFFSET_1600", + "RELAY_SECOND_CH_ACK_OFFSET_3200" + ] + }, + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "frequency": { + "description": "The frequency (Hz) used by the wake on radio message.", + "type": "string", + "format": "uint64" + } + } + }, + "serving_device_id": { + "description": "End device identifier of the serving end device.", + "type": "string" + } + } + }, + "serving": { + "type": "object", + "properties": { + "cad_periodicity": { + "type": "string", + "title": "- RELAY_CAD_PERIODICITY_20_MILLISECONDS: sic", + "default": "RELAY_CAD_PERIODICITY_1_SECOND", + "enum": [ + "RELAY_CAD_PERIODICITY_1_SECOND", + "RELAY_CAD_PERIODICITY_500_MILLISECONDS", + "RELAY_CAD_PERIODICITY_250_MILLISECONDS", + "RELAY_CAD_PERIODICITY_100_MILLISECONDS", + "RELAY_CAD_PERIODICITY_50_MILLISECONDS", + "RELAY_CAD_PERIODICITY_20_MILLISECONDS" + ] + }, + "default_channel_index": { + "description": "Index of the default wake on radio channel.", + "type": "integer", + "format": "int64" + }, + "limits": { + "type": "object", + "properties": { + "join_requests": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "notifications": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "overall": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "reset_behavior": { + "type": "string", + "default": "RELAY_RESET_LIMIT_COUNTER_ZERO", + "enum": [ + "RELAY_RESET_LIMIT_COUNTER_ZERO", + "RELAY_RESET_LIMIT_COUNTER_RELOAD_RATE", + "RELAY_RESET_LIMIT_COUNTER_MAX_VALUE", + "RELAY_RESET_LIMIT_COUNTER_NO_RESET" + ] + }, + "uplink_messages": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + } + } + }, + "second_channel": { + "type": "object", + "properties": { + "ack_offset": { + "type": "string", + "title": "- RELAY_SECOND_CH_ACK_OFFSET_0: 0 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_200: 200 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_400: 400 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_800: 800 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_1600: 1.6 MHz\n - RELAY_SECOND_CH_ACK_OFFSET_3200: 3.2 MHz", + "default": "RELAY_SECOND_CH_ACK_OFFSET_0", + "enum": [ + "RELAY_SECOND_CH_ACK_OFFSET_0", + "RELAY_SECOND_CH_ACK_OFFSET_200", + "RELAY_SECOND_CH_ACK_OFFSET_400", + "RELAY_SECOND_CH_ACK_OFFSET_800", + "RELAY_SECOND_CH_ACK_OFFSET_1600", + "RELAY_SECOND_CH_ACK_OFFSET_3200" + ] + }, + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "frequency": { + "description": "The frequency (Hz) used by the wake on radio message.", + "type": "string", + "format": "uint64" + } + } + }, + "uplink_forwarding_rules": { + "description": "Configured uplink forwarding rules.", + "type": "array", + "items": { + "type": "object", + "properties": { + "device_id": { + "description": "End device identifier of the served end device.", + "type": "string" + }, + "last_w_f_cnt": { + "description": "Last wake on radio frame counter used by the served end device.", + "type": "integer", + "format": "int64" + }, + "limits": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "session_key_id": { + "description": "Session key ID of the session keys used to derive the root relay session key.", + "type": "string", + "format": "byte" + } + } + } + } + } + } + } + }, + "rx1_data_rate_offset": { + "type": "string", + "default": "DATA_RATE_OFFSET_0", + "enum": [ + "DATA_RATE_OFFSET_0", + "DATA_RATE_OFFSET_1", + "DATA_RATE_OFFSET_2", + "DATA_RATE_OFFSET_3", + "DATA_RATE_OFFSET_4", + "DATA_RATE_OFFSET_5", + "DATA_RATE_OFFSET_6", + "DATA_RATE_OFFSET_7" + ] + }, + "rx1_delay": { + "description": " - RX_DELAY_0: 1 second.\n - RX_DELAY_1: 1 second.\n - RX_DELAY_2: 2 seconds.\n - RX_DELAY_3: 3 seconds.\n - RX_DELAY_4: 4 seconds.\n - RX_DELAY_5: 5 seconds.\n - RX_DELAY_6: 6 seconds.\n - RX_DELAY_7: 7 seconds.\n - RX_DELAY_8: 8 seconds.\n - RX_DELAY_9: 9 seconds.\n - RX_DELAY_10: 10 seconds.\n - RX_DELAY_11: 11 seconds.\n - RX_DELAY_12: 12 seconds.\n - RX_DELAY_13: 13 seconds.\n - RX_DELAY_14: 14 seconds.\n - RX_DELAY_15: 15 seconds.", + "type": "string", + "default": "RX_DELAY_0", + "enum": [ + "RX_DELAY_0", + "RX_DELAY_1", + "RX_DELAY_2", + "RX_DELAY_3", + "RX_DELAY_4", + "RX_DELAY_5", + "RX_DELAY_6", + "RX_DELAY_7", + "RX_DELAY_8", + "RX_DELAY_9", + "RX_DELAY_10", + "RX_DELAY_11", + "RX_DELAY_12", + "RX_DELAY_13", + "RX_DELAY_14", + "RX_DELAY_15" + ] + }, + "rx2_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "rx2_frequency": { + "description": "Frequency for Rx2 (Hz).", + "type": "string", + "format": "uint64" + }, + "uplink_dwell_time": { + "type": "object", + "properties": { + "value": { + "type": "boolean" + } + } + } + } + }, + "device_class": { + "type": "string", + "default": "CLASS_A", + "enum": [ + "CLASS_A", + "CLASS_B", + "CLASS_C" + ] + }, + "last_adr_change_f_cnt_up": { + "description": "Frame counter of uplink, which confirmed the last ADR parameter change.", + "type": "integer", + "format": "int64" + }, + "last_confirmed_downlink_at": { + "description": "Time when the last confirmed downlink message or MAC command was scheduled.", + "type": "string", + "format": "date-time" + }, + "last_dev_status_f_cnt_up": { + "description": "Frame counter value of last uplink containing DevStatusAns.", + "type": "integer", + "format": "int64" + }, + "last_downlink_at": { + "description": "Time when the last downlink message was scheduled.", + "type": "string", + "format": "date-time" + }, + "last_network_initiated_downlink_at": { + "description": "Time when the last network-initiated downlink message was scheduled.", + "type": "string", + "format": "date-time" + }, + "lorawan_version": { + "type": "string", + "default": "MAC_UNKNOWN", + "enum": [ + "MAC_UNKNOWN", + "MAC_V1_0", + "MAC_V1_0_1", + "MAC_V1_0_2", + "MAC_V1_1", + "MAC_V1_0_3", + "MAC_V1_0_4" + ] + }, + "pending_application_downlink": { + "type": "object", + "properties": { + "class_b_c": { + "type": "object", + "properties": { + "absolute_time": { + "description": "Absolute time when the downlink message should be transmitted.\nThis requires the gateway to have GPS time synchronization.\nIf the time is in the past or if there is a scheduling conflict, the downlink message fails.\nIf null, the time is selected based on slot availability. This is recommended in class B mode.", + "type": "string", + "format": "date-time" + }, + "gateways": { + "description": "Possible gateway identifiers, antenna index, and group index to use for this downlink message.\nThe Network Server selects one of these gateways for downlink, based on connectivity, signal quality, channel utilization and an available slot.\nIf none of the gateways can be selected, the downlink message fails.\nIf empty, a gateway and antenna is selected automatically from the gateways seen in recent uplinks.\nIf group index is set, gateways will be grouped by the index for the Network Server to select one gateway per group.", + "type": "array", + "items": { + "type": "object", + "properties": { + "antenna_index": { + "type": "integer", + "format": "int64" + }, + "gateway_ids": { + "type": "object", + "properties": { + "eui": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + }, + "gateway_id": { + "type": "string" + } + } + }, + "group_index": { + "type": "integer", + "format": "int64" + } + } + } + } + } + }, + "confirmed": { + "type": "boolean" + }, + "confirmed_retry": { + "type": "object", + "properties": { + "attempt": { + "description": "The number of attempted confirmed downlink acknowledgements.", + "type": "integer", + "format": "int64" + }, + "max_attempts": { + "description": "The maximum number of confirmed downlink acknowledgement attempts.\nIf null, the Application Server configuration is used instead.", + "type": "integer", + "format": "int64" + } + } + }, + "correlation_ids": { + "type": "array", + "items": { + "type": "string" + } + }, + "decoded_payload": { + "description": "The decoded frame payload of the downlink message.\nWhen scheduling downlink with a message processor configured for the end device (see formatters) or application (see default_formatters),\nthis fields acts as input for the downlink encoder, and the output is set to frm_payload.\nWhen reading downlink (listing the queue, downlink message events, etc), this fields acts as output of the downlink decoder, and the input is frm_payload.", + "type": "object" + }, + "decoded_payload_warnings": { + "description": "Warnings generated by the message processor while encoding frm_payload (scheduling downlink) or decoding the frm_payload (reading downlink).", + "type": "array", + "items": { + "type": "string" + } + }, + "f_cnt": { + "type": "integer", + "format": "int64" + }, + "f_port": { + "type": "integer", + "format": "int64" + }, + "frm_payload": { + "description": "The frame payload of the downlink message.\nThe payload is encrypted if the skip_payload_crypto field of the EndDevice\nis true.", + "type": "string", + "format": "byte" + }, + "priority": { + "type": "string", + "default": "LOWEST", + "enum": [ + "LOWEST", + "LOW", + "BELOW_NORMAL", + "NORMAL", + "ABOVE_NORMAL", + "HIGH", + "HIGHEST" + ] + }, + "session_key_id": { + "description": "Join Server issued identifier for the session keys used by this downlink.", + "type": "string", + "format": "byte" + } + } + }, + "pending_join_request": { + "type": "object", + "properties": { + "cf_list": { + "type": "object", + "properties": { + "ch_masks": { + "description": "ChMasks controlling the channels to be used.\nLength of this field must be equal to the amount of uplink channels\ndefined by the selected frequency plan.", + "type": "array", + "items": { + "type": "boolean" + } + }, + "freq": { + "description": "Frequencies to be broadcasted, in hecto-Hz.\nThese values are broadcasted as 24 bits unsigned integers.\nThis field should not contain default values.", + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + }, + "type": { + "type": "string", + "default": "FREQUENCIES", + "enum": [ + "FREQUENCIES", + "CHANNEL_MASKS" + ] + } + } + }, + "downlink_settings": { + "type": "object", + "properties": { + "opt_neg": { + "description": "OptNeg is set if Network Server implements LoRaWAN 1.1 or greater.", + "type": "boolean" + }, + "rx1_dr_offset": { + "type": "string", + "default": "DATA_RATE_OFFSET_0", + "enum": [ + "DATA_RATE_OFFSET_0", + "DATA_RATE_OFFSET_1", + "DATA_RATE_OFFSET_2", + "DATA_RATE_OFFSET_3", + "DATA_RATE_OFFSET_4", + "DATA_RATE_OFFSET_5", + "DATA_RATE_OFFSET_6", + "DATA_RATE_OFFSET_7" + ] + }, + "rx2_dr": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + } + } + }, + "rx_delay": { + "description": " - RX_DELAY_0: 1 second.\n - RX_DELAY_1: 1 second.\n - RX_DELAY_2: 2 seconds.\n - RX_DELAY_3: 3 seconds.\n - RX_DELAY_4: 4 seconds.\n - RX_DELAY_5: 5 seconds.\n - RX_DELAY_6: 6 seconds.\n - RX_DELAY_7: 7 seconds.\n - RX_DELAY_8: 8 seconds.\n - RX_DELAY_9: 9 seconds.\n - RX_DELAY_10: 10 seconds.\n - RX_DELAY_11: 11 seconds.\n - RX_DELAY_12: 12 seconds.\n - RX_DELAY_13: 13 seconds.\n - RX_DELAY_14: 14 seconds.\n - RX_DELAY_15: 15 seconds.", + "type": "string", + "default": "RX_DELAY_0", + "enum": [ + "RX_DELAY_0", + "RX_DELAY_1", + "RX_DELAY_2", + "RX_DELAY_3", + "RX_DELAY_4", + "RX_DELAY_5", + "RX_DELAY_6", + "RX_DELAY_7", + "RX_DELAY_8", + "RX_DELAY_9", + "RX_DELAY_10", + "RX_DELAY_11", + "RX_DELAY_12", + "RX_DELAY_13", + "RX_DELAY_14", + "RX_DELAY_15" + ] + } + } + }, + "pending_relay_downlink": { + "type": "object", + "properties": { + "raw_payload": { + "type": "string", + "format": "byte" + } + } + }, + "pending_requests": { + "description": "Pending MAC requests(i.e. sent requests, for which no response has been received yet).\nRegenerated on each downlink.", + "type": "array", + "items": { + "type": "object", + "properties": { + "adr_param_setup_req": { + "type": "object", + "properties": { + "adr_ack_delay_exponent": { + "type": "string", + "default": "ADR_ACK_DELAY_1", + "enum": [ + "ADR_ACK_DELAY_1", + "ADR_ACK_DELAY_2", + "ADR_ACK_DELAY_4", + "ADR_ACK_DELAY_8", + "ADR_ACK_DELAY_16", + "ADR_ACK_DELAY_32", + "ADR_ACK_DELAY_64", + "ADR_ACK_DELAY_128", + "ADR_ACK_DELAY_256", + "ADR_ACK_DELAY_512", + "ADR_ACK_DELAY_1024", + "ADR_ACK_DELAY_2048", + "ADR_ACK_DELAY_4096", + "ADR_ACK_DELAY_8192", + "ADR_ACK_DELAY_16384", + "ADR_ACK_DELAY_32768" + ] + }, + "adr_ack_limit_exponent": { + "type": "string", + "default": "ADR_ACK_LIMIT_1", + "enum": [ + "ADR_ACK_LIMIT_1", + "ADR_ACK_LIMIT_2", + "ADR_ACK_LIMIT_4", + "ADR_ACK_LIMIT_8", + "ADR_ACK_LIMIT_16", + "ADR_ACK_LIMIT_32", + "ADR_ACK_LIMIT_64", + "ADR_ACK_LIMIT_128", + "ADR_ACK_LIMIT_256", + "ADR_ACK_LIMIT_512", + "ADR_ACK_LIMIT_1024", + "ADR_ACK_LIMIT_2048", + "ADR_ACK_LIMIT_4096", + "ADR_ACK_LIMIT_8192", + "ADR_ACK_LIMIT_16384", + "ADR_ACK_LIMIT_32768" + ] + } + } + }, + "beacon_freq_ans": { + "type": "object", + "properties": { + "frequency_ack": { + "type": "boolean" + } + } + }, + "beacon_freq_req": { + "type": "object", + "properties": { + "frequency": { + "description": "Frequency of the Class B beacons (Hz).", + "type": "string", + "format": "uint64" + } + } + }, + "beacon_timing_ans": { + "type": "object", + "properties": { + "channel_index": { + "type": "integer", + "format": "int64" + }, + "delay": { + "description": "(uint16) See LoRaWAN specification.", + "type": "integer", + "format": "int64" + } + } + }, + "cid": { + "type": "string", + "title": "- CID_BEACON_TIMING: Deprecated", + "default": "CID_RFU_0", + "enum": [ + "CID_RFU_0", + "CID_RESET", + "CID_LINK_CHECK", + "CID_LINK_ADR", + "CID_DUTY_CYCLE", + "CID_RX_PARAM_SETUP", + "CID_DEV_STATUS", + "CID_NEW_CHANNEL", + "CID_RX_TIMING_SETUP", + "CID_TX_PARAM_SETUP", + "CID_DL_CHANNEL", + "CID_REKEY", + "CID_ADR_PARAM_SETUP", + "CID_DEVICE_TIME", + "CID_FORCE_REJOIN", + "CID_REJOIN_PARAM_SETUP", + "CID_PING_SLOT_INFO", + "CID_PING_SLOT_CHANNEL", + "CID_BEACON_TIMING", + "CID_BEACON_FREQ", + "CID_DEVICE_MODE", + "CID_RELAY_CONF", + "CID_RELAY_END_DEVICE_CONF", + "CID_RELAY_FILTER_LIST", + "CID_RELAY_UPDATE_UPLINK_LIST", + "CID_RELAY_CTRL_UPLINK_LIST", + "CID_RELAY_CONFIGURE_FWD_LIMIT", + "CID_RELAY_NOTIFY_NEW_END_DEVICE" + ] + }, + "dev_status_ans": { + "type": "object", + "properties": { + "battery": { + "description": "Device battery status.\n0 indicates that the device is connected to an external power source.\n1..254 indicates a battery level.\n255 indicates that the device was not able to measure the battery level.", + "type": "integer", + "format": "int64" + }, + "margin": { + "description": "SNR of the last downlink (dB; [-32, +31]).", + "type": "integer", + "format": "int32" + } + } + }, + "device_mode_conf": { + "type": "object", + "properties": { + "class": { + "type": "string", + "default": "CLASS_A", + "enum": [ + "CLASS_A", + "CLASS_B", + "CLASS_C" + ] + } + } + }, + "device_mode_ind": { + "type": "object", + "properties": { + "class": { + "type": "string", + "default": "CLASS_A", + "enum": [ + "CLASS_A", + "CLASS_B", + "CLASS_C" + ] + } + } + }, + "device_time_ans": { + "type": "object", + "properties": { + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "dl_channel_ans": { + "type": "object", + "properties": { + "channel_index_ack": { + "type": "boolean" + }, + "frequency_ack": { + "type": "boolean" + } + } + }, + "dl_channel_req": { + "type": "object", + "properties": { + "channel_index": { + "type": "integer", + "format": "int64" + }, + "frequency": { + "description": "Downlink channel frequency (Hz).", + "type": "string", + "format": "uint64" + } + } + }, + "duty_cycle_req": { + "type": "object", + "properties": { + "max_duty_cycle": { + "description": " - DUTY_CYCLE_1: 100%.\n - DUTY_CYCLE_2: 50%.\n - DUTY_CYCLE_4: 25%.\n - DUTY_CYCLE_8: 12.5%.\n - DUTY_CYCLE_16: 6.25%.\n - DUTY_CYCLE_32: 3.125%.\n - DUTY_CYCLE_64: 1.5625%.\n - DUTY_CYCLE_128: Roughly 0.781%.\n - DUTY_CYCLE_256: Roughly 0.390%.\n - DUTY_CYCLE_512: Roughly 0.195%.\n - DUTY_CYCLE_1024: Roughly 0.098%.\n - DUTY_CYCLE_2048: Roughly 0.049%.\n - DUTY_CYCLE_4096: Roughly 0.024%.\n - DUTY_CYCLE_8192: Roughly 0.012%.\n - DUTY_CYCLE_16384: Roughly 0.006%.\n - DUTY_CYCLE_32768: Roughly 0.003%.", + "type": "string", + "default": "DUTY_CYCLE_1", + "enum": [ + "DUTY_CYCLE_1", + "DUTY_CYCLE_2", + "DUTY_CYCLE_4", + "DUTY_CYCLE_8", + "DUTY_CYCLE_16", + "DUTY_CYCLE_32", + "DUTY_CYCLE_64", + "DUTY_CYCLE_128", + "DUTY_CYCLE_256", + "DUTY_CYCLE_512", + "DUTY_CYCLE_1024", + "DUTY_CYCLE_2048", + "DUTY_CYCLE_4096", + "DUTY_CYCLE_8192", + "DUTY_CYCLE_16384", + "DUTY_CYCLE_32768" + ] + } + } + }, + "force_rejoin_req": { + "type": "object", + "properties": { + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "max_retries": { + "type": "integer", + "format": "int64" + }, + "period_exponent": { + "description": " - REJOIN_PERIOD_0: Every 32 to 64 seconds.\n - REJOIN_PERIOD_1: Every 64 to 96 seconds.\n - REJOIN_PERIOD_2: Every 128 to 160 seconds.\n - REJOIN_PERIOD_3: Every 256 to 288 seconds.\n - REJOIN_PERIOD_4: Every 512 to 544 seconds.\n - REJOIN_PERIOD_5: Every 1024 to 1056 seconds.\n - REJOIN_PERIOD_6: Every 2048 to 2080 seconds.\n - REJOIN_PERIOD_7: Every 4096 to 4128 seconds.", + "type": "string", + "default": "REJOIN_PERIOD_0", + "enum": [ + "REJOIN_PERIOD_0", + "REJOIN_PERIOD_1", + "REJOIN_PERIOD_2", + "REJOIN_PERIOD_3", + "REJOIN_PERIOD_4", + "REJOIN_PERIOD_5", + "REJOIN_PERIOD_6", + "REJOIN_PERIOD_7" + ] + }, + "rejoin_type": { + "description": " - CONTEXT: Resets DevAddr, Session Keys, Frame Counters, Radio Parameters.\n - SESSION: Equivalent to the initial JoinRequest.\n - KEYS: Resets DevAddr, Session Keys, Frame Counters, while keeping the Radio Parameters.", + "type": "string", + "default": "CONTEXT", + "enum": [ + "CONTEXT", + "SESSION", + "KEYS" + ] + } + } + }, + "link_adr_ans": { + "type": "object", + "properties": { + "channel_mask_ack": { + "type": "boolean" + }, + "data_rate_index_ack": { + "type": "boolean" + }, + "tx_power_index_ack": { + "type": "boolean" + } + } + }, + "link_adr_req": { + "type": "object", + "properties": { + "channel_mask": { + "type": "array", + "items": { + "type": "boolean" + } + }, + "channel_mask_control": { + "type": "integer", + "format": "int64" + }, + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "nb_trans": { + "type": "integer", + "format": "int64" + }, + "tx_power_index": { + "type": "integer", + "format": "int64" + } + } + }, + "link_check_ans": { + "type": "object", + "properties": { + "gateway_count": { + "type": "integer", + "format": "int64" + }, + "margin": { + "description": "Indicates the link margin in dB of the received LinkCheckReq, relative to the demodulation floor.", + "type": "integer", + "format": "int64" + } + } + }, + "new_channel_ans": { + "type": "object", + "properties": { + "data_rate_ack": { + "type": "boolean" + }, + "frequency_ack": { + "type": "boolean" + } + } + }, + "new_channel_req": { + "type": "object", + "properties": { + "channel_index": { + "type": "integer", + "format": "int64" + }, + "frequency": { + "description": "Channel frequency (Hz).", + "type": "string", + "format": "uint64" + }, + "max_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "min_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + } + } + }, + "ping_slot_channel_ans": { + "type": "object", + "properties": { + "data_rate_index_ack": { + "type": "boolean" + }, + "frequency_ack": { + "type": "boolean" + } + } + }, + "ping_slot_channel_req": { + "type": "object", + "properties": { + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "frequency": { + "description": "Ping slot channel frequency (Hz).", + "type": "string", + "format": "uint64" + } + } + }, + "ping_slot_info_req": { + "type": "object", + "properties": { + "period": { + "description": " - PING_EVERY_1S: Every second.\n - PING_EVERY_2S: Every 2 seconds.\n - PING_EVERY_4S: Every 4 seconds.\n - PING_EVERY_8S: Every 8 seconds.\n - PING_EVERY_16S: Every 16 seconds.\n - PING_EVERY_32S: Every 32 seconds.\n - PING_EVERY_64S: Every 64 seconds.\n - PING_EVERY_128S: Every 128 seconds.", + "type": "string", + "default": "PING_EVERY_1S", + "enum": [ + "PING_EVERY_1S", + "PING_EVERY_2S", + "PING_EVERY_4S", + "PING_EVERY_8S", + "PING_EVERY_16S", + "PING_EVERY_32S", + "PING_EVERY_64S", + "PING_EVERY_128S" + ] + } + } + }, + "raw_payload": { + "type": "string", + "format": "byte" + }, + "rejoin_param_setup_ans": { + "type": "object", + "properties": { + "max_time_exponent_ack": { + "type": "boolean" + } + } + }, + "rejoin_param_setup_req": { + "type": "object", + "properties": { + "max_count_exponent": { + "type": "string", + "default": "REJOIN_COUNT_16", + "enum": [ + "REJOIN_COUNT_16", + "REJOIN_COUNT_32", + "REJOIN_COUNT_64", + "REJOIN_COUNT_128", + "REJOIN_COUNT_256", + "REJOIN_COUNT_512", + "REJOIN_COUNT_1024", + "REJOIN_COUNT_2048", + "REJOIN_COUNT_4096", + "REJOIN_COUNT_8192", + "REJOIN_COUNT_16384", + "REJOIN_COUNT_32768", + "REJOIN_COUNT_65536", + "REJOIN_COUNT_131072", + "REJOIN_COUNT_262144", + "REJOIN_COUNT_524288" + ] + }, + "max_time_exponent": { + "description": " - REJOIN_TIME_0: Every ~17.1 minutes.\n - REJOIN_TIME_1: Every ~34.1 minutes.\n - REJOIN_TIME_2: Every ~1.1 hours.\n - REJOIN_TIME_3: Every ~2.3 hours.\n - REJOIN_TIME_4: Every ~4.6 hours.\n - REJOIN_TIME_5: Every ~9.1 hours.\n - REJOIN_TIME_6: Every ~18.2 hours.\n - REJOIN_TIME_7: Every ~1.5 days.\n - REJOIN_TIME_8: Every ~3.0 days.\n - REJOIN_TIME_9: Every ~6.1 days.\n - REJOIN_TIME_10: Every ~12.1 days.\n - REJOIN_TIME_11: Every ~3.5 weeks.\n - REJOIN_TIME_12: Every ~1.6 months.\n - REJOIN_TIME_13: Every ~3.2 months.\n - REJOIN_TIME_14: Every ~6.4 months.\n - REJOIN_TIME_15: Every ~1.1 year.", + "type": "string", + "default": "REJOIN_TIME_0", + "enum": [ + "REJOIN_TIME_0", + "REJOIN_TIME_1", + "REJOIN_TIME_2", + "REJOIN_TIME_3", + "REJOIN_TIME_4", + "REJOIN_TIME_5", + "REJOIN_TIME_6", + "REJOIN_TIME_7", + "REJOIN_TIME_8", + "REJOIN_TIME_9", + "REJOIN_TIME_10", + "REJOIN_TIME_11", + "REJOIN_TIME_12", + "REJOIN_TIME_13", + "REJOIN_TIME_14", + "REJOIN_TIME_15" + ] + } + } + }, + "rekey_conf": { + "type": "object", + "properties": { + "minor_version": { + "type": "string", + "default": "MINOR_RFU_0", + "enum": [ + "MINOR_RFU_0", + "MINOR_1", + "MINOR_RFU_2", + "MINOR_RFU_3", + "MINOR_RFU_4", + "MINOR_RFU_5", + "MINOR_RFU_6", + "MINOR_RFU_7", + "MINOR_RFU_8", + "MINOR_RFU_9", + "MINOR_RFU_10", + "MINOR_RFU_11", + "MINOR_RFU_12", + "MINOR_RFU_13", + "MINOR_RFU_14", + "MINOR_RFU_15" + ] + } + } + }, + "rekey_ind": { + "type": "object", + "properties": { + "minor_version": { + "type": "string", + "default": "MINOR_RFU_0", + "enum": [ + "MINOR_RFU_0", + "MINOR_1", + "MINOR_RFU_2", + "MINOR_RFU_3", + "MINOR_RFU_4", + "MINOR_RFU_5", + "MINOR_RFU_6", + "MINOR_RFU_7", + "MINOR_RFU_8", + "MINOR_RFU_9", + "MINOR_RFU_10", + "MINOR_RFU_11", + "MINOR_RFU_12", + "MINOR_RFU_13", + "MINOR_RFU_14", + "MINOR_RFU_15" + ] + } + } + }, + "relay_conf_ans": { + "type": "object", + "properties": { + "cad_periodicity_ack": { + "type": "boolean" + }, + "default_channel_index_ack": { + "type": "boolean" + }, + "second_channel_ack_offset_ack": { + "type": "boolean" + }, + "second_channel_data_rate_index_ack": { + "type": "boolean" + }, + "second_channel_frequency_ack": { + "type": "boolean" + }, + "second_channel_index_ack": { + "type": "boolean" + } + } + }, + "relay_conf_req": { + "type": "object", + "properties": { + "configuration": { + "type": "object", + "properties": { + "cad_periodicity": { + "type": "string", + "title": "- RELAY_CAD_PERIODICITY_20_MILLISECONDS: sic", + "default": "RELAY_CAD_PERIODICITY_1_SECOND", + "enum": [ + "RELAY_CAD_PERIODICITY_1_SECOND", + "RELAY_CAD_PERIODICITY_500_MILLISECONDS", + "RELAY_CAD_PERIODICITY_250_MILLISECONDS", + "RELAY_CAD_PERIODICITY_100_MILLISECONDS", + "RELAY_CAD_PERIODICITY_50_MILLISECONDS", + "RELAY_CAD_PERIODICITY_20_MILLISECONDS" + ] + }, + "default_channel_index": { + "type": "integer", + "format": "int64" + }, + "second_channel": { + "type": "object", + "properties": { + "ack_offset": { + "type": "string", + "title": "- RELAY_SECOND_CH_ACK_OFFSET_0: 0 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_200: 200 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_400: 400 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_800: 800 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_1600: 1.6 MHz\n - RELAY_SECOND_CH_ACK_OFFSET_3200: 3.2 MHz", + "default": "RELAY_SECOND_CH_ACK_OFFSET_0", + "enum": [ + "RELAY_SECOND_CH_ACK_OFFSET_0", + "RELAY_SECOND_CH_ACK_OFFSET_200", + "RELAY_SECOND_CH_ACK_OFFSET_400", + "RELAY_SECOND_CH_ACK_OFFSET_800", + "RELAY_SECOND_CH_ACK_OFFSET_1600", + "RELAY_SECOND_CH_ACK_OFFSET_3200" + ] + }, + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "frequency": { + "description": "The frequency (Hz) used by the wake on radio message.", + "type": "string", + "format": "uint64" + } + } + } + } + } + } + }, + "relay_configure_fwd_limit_ans": { + "type": "object" + }, + "relay_configure_fwd_limit_req": { + "type": "object", + "properties": { + "global_uplink_limits": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "join_request_limits": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "notify_limits": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "overall_limits": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "reset_limit_counter": { + "type": "string", + "default": "RELAY_RESET_LIMIT_COUNTER_ZERO", + "enum": [ + "RELAY_RESET_LIMIT_COUNTER_ZERO", + "RELAY_RESET_LIMIT_COUNTER_RELOAD_RATE", + "RELAY_RESET_LIMIT_COUNTER_MAX_VALUE", + "RELAY_RESET_LIMIT_COUNTER_NO_RESET" + ] + } + } + }, + "relay_ctrl_uplink_list_ans": { + "type": "object", + "properties": { + "rule_index_ack": { + "type": "boolean" + }, + "w_f_cnt": { + "type": "integer", + "format": "int64" + } + } + }, + "relay_ctrl_uplink_list_req": { + "type": "object", + "properties": { + "action": { + "type": "string", + "default": "RELAY_CTRL_UPLINK_LIST_ACTION_READ_W_F_CNT", + "enum": [ + "RELAY_CTRL_UPLINK_LIST_ACTION_READ_W_F_CNT", + "RELAY_CTRL_UPLINK_LIST_ACTION_REMOVE_TRUSTED_END_DEVICE" + ] + }, + "rule_index": { + "type": "integer", + "format": "int64" + } + } + }, + "relay_end_device_conf_ans": { + "type": "object", + "properties": { + "backoff_ack": { + "type": "boolean" + }, + "second_channel_data_rate_index_ack": { + "type": "boolean" + }, + "second_channel_frequency_ack": { + "type": "boolean" + }, + "second_channel_index_ack": { + "type": "boolean" + } + } + }, + "relay_end_device_conf_req": { + "type": "object", + "properties": { + "configuration": { + "type": "object", + "properties": { + "always": { + "type": "object" + }, + "backoff": { + "type": "integer", + "format": "int64" + }, + "dynamic": { + "type": "object", + "properties": { + "smart_enable_level": { + "type": "string", + "default": "RELAY_SMART_ENABLE_LEVEL_8", + "enum": [ + "RELAY_SMART_ENABLE_LEVEL_8", + "RELAY_SMART_ENABLE_LEVEL_16", + "RELAY_SMART_ENABLE_LEVEL_32", + "RELAY_SMART_ENABLE_LEVEL_64" + ] + } + } + }, + "end_device_controlled": { + "type": "object" + }, + "second_channel": { + "type": "object", + "properties": { + "ack_offset": { + "type": "string", + "title": "- RELAY_SECOND_CH_ACK_OFFSET_0: 0 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_200: 200 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_400: 400 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_800: 800 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_1600: 1.6 MHz\n - RELAY_SECOND_CH_ACK_OFFSET_3200: 3.2 MHz", + "default": "RELAY_SECOND_CH_ACK_OFFSET_0", + "enum": [ + "RELAY_SECOND_CH_ACK_OFFSET_0", + "RELAY_SECOND_CH_ACK_OFFSET_200", + "RELAY_SECOND_CH_ACK_OFFSET_400", + "RELAY_SECOND_CH_ACK_OFFSET_800", + "RELAY_SECOND_CH_ACK_OFFSET_1600", + "RELAY_SECOND_CH_ACK_OFFSET_3200" + ] + }, + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "frequency": { + "description": "The frequency (Hz) used by the wake on radio message.", + "type": "string", + "format": "uint64" + } + } + }, + "serving_device_id": { + "type": "string" + } + } + } + } + }, + "relay_notify_new_end_device_req": { + "type": "object", + "properties": { + "dev_addr": { + "type": "string", + "format": "string", + "example": "2600ABCD" + }, + "rssi": { + "type": "integer", + "format": "int32" + }, + "snr": { + "type": "integer", + "format": "int32" + } + } + }, + "relay_update_uplink_list_ans": { + "type": "object" + }, + "relay_update_uplink_list_req": { + "type": "object", + "properties": { + "dev_addr": { + "type": "string", + "format": "string", + "example": "2600ABCD" + }, + "device_id": { + "type": "string" + }, + "forward_limits": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "root_wor_s_key": { + "type": "string", + "format": "string", + "example": "0123456789ABCDEF0123456789ABCDEF" + }, + "rule_index": { + "type": "integer", + "format": "int64" + }, + "session_key_id": { + "type": "string", + "format": "byte" + }, + "w_f_cnt": { + "type": "integer", + "format": "int64" + } + } + }, + "reset_conf": { + "type": "object", + "properties": { + "minor_version": { + "type": "string", + "default": "MINOR_RFU_0", + "enum": [ + "MINOR_RFU_0", + "MINOR_1", + "MINOR_RFU_2", + "MINOR_RFU_3", + "MINOR_RFU_4", + "MINOR_RFU_5", + "MINOR_RFU_6", + "MINOR_RFU_7", + "MINOR_RFU_8", + "MINOR_RFU_9", + "MINOR_RFU_10", + "MINOR_RFU_11", + "MINOR_RFU_12", + "MINOR_RFU_13", + "MINOR_RFU_14", + "MINOR_RFU_15" + ] + } + } + }, + "reset_ind": { + "type": "object", + "properties": { + "minor_version": { + "type": "string", + "default": "MINOR_RFU_0", + "enum": [ + "MINOR_RFU_0", + "MINOR_1", + "MINOR_RFU_2", + "MINOR_RFU_3", + "MINOR_RFU_4", + "MINOR_RFU_5", + "MINOR_RFU_6", + "MINOR_RFU_7", + "MINOR_RFU_8", + "MINOR_RFU_9", + "MINOR_RFU_10", + "MINOR_RFU_11", + "MINOR_RFU_12", + "MINOR_RFU_13", + "MINOR_RFU_14", + "MINOR_RFU_15" + ] + } + } + }, + "rx_param_setup_ans": { + "type": "object", + "properties": { + "rx1_data_rate_offset_ack": { + "type": "boolean" + }, + "rx2_data_rate_index_ack": { + "type": "boolean" + }, + "rx2_frequency_ack": { + "type": "boolean" + } + } + }, + "rx_param_setup_req": { + "type": "object", + "properties": { + "rx1_data_rate_offset": { + "type": "string", + "default": "DATA_RATE_OFFSET_0", + "enum": [ + "DATA_RATE_OFFSET_0", + "DATA_RATE_OFFSET_1", + "DATA_RATE_OFFSET_2", + "DATA_RATE_OFFSET_3", + "DATA_RATE_OFFSET_4", + "DATA_RATE_OFFSET_5", + "DATA_RATE_OFFSET_6", + "DATA_RATE_OFFSET_7" + ] + }, + "rx2_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "rx2_frequency": { + "description": "Rx2 frequency (Hz).", + "type": "string", + "format": "uint64" + } + } + }, + "rx_timing_setup_req": { + "type": "object", + "properties": { + "delay": { + "description": " - RX_DELAY_0: 1 second.\n - RX_DELAY_1: 1 second.\n - RX_DELAY_2: 2 seconds.\n - RX_DELAY_3: 3 seconds.\n - RX_DELAY_4: 4 seconds.\n - RX_DELAY_5: 5 seconds.\n - RX_DELAY_6: 6 seconds.\n - RX_DELAY_7: 7 seconds.\n - RX_DELAY_8: 8 seconds.\n - RX_DELAY_9: 9 seconds.\n - RX_DELAY_10: 10 seconds.\n - RX_DELAY_11: 11 seconds.\n - RX_DELAY_12: 12 seconds.\n - RX_DELAY_13: 13 seconds.\n - RX_DELAY_14: 14 seconds.\n - RX_DELAY_15: 15 seconds.", + "type": "string", + "default": "RX_DELAY_0", + "enum": [ + "RX_DELAY_0", + "RX_DELAY_1", + "RX_DELAY_2", + "RX_DELAY_3", + "RX_DELAY_4", + "RX_DELAY_5", + "RX_DELAY_6", + "RX_DELAY_7", + "RX_DELAY_8", + "RX_DELAY_9", + "RX_DELAY_10", + "RX_DELAY_11", + "RX_DELAY_12", + "RX_DELAY_13", + "RX_DELAY_14", + "RX_DELAY_15" + ] + } + } + }, + "tx_param_setup_req": { + "type": "object", + "properties": { + "downlink_dwell_time": { + "type": "boolean" + }, + "max_eirp_index": { + "description": " - DEVICE_EIRP_8: 8 dBm.\n - DEVICE_EIRP_10: 10 dBm.\n - DEVICE_EIRP_12: 12 dBm.\n - DEVICE_EIRP_13: 13 dBm.\n - DEVICE_EIRP_14: 14 dBm.\n - DEVICE_EIRP_16: 16 dBm.\n - DEVICE_EIRP_18: 18 dBm.\n - DEVICE_EIRP_20: 20 dBm.\n - DEVICE_EIRP_21: 21 dBm.\n - DEVICE_EIRP_24: 24 dBm.\n - DEVICE_EIRP_26: 26 dBm.\n - DEVICE_EIRP_27: 27 dBm.\n - DEVICE_EIRP_29: 29 dBm.\n - DEVICE_EIRP_30: 30 dBm.\n - DEVICE_EIRP_33: 33 dBm.\n - DEVICE_EIRP_36: 36 dBm.", + "type": "string", + "default": "DEVICE_EIRP_8", + "enum": [ + "DEVICE_EIRP_8", + "DEVICE_EIRP_10", + "DEVICE_EIRP_12", + "DEVICE_EIRP_13", + "DEVICE_EIRP_14", + "DEVICE_EIRP_16", + "DEVICE_EIRP_18", + "DEVICE_EIRP_20", + "DEVICE_EIRP_21", + "DEVICE_EIRP_24", + "DEVICE_EIRP_26", + "DEVICE_EIRP_27", + "DEVICE_EIRP_29", + "DEVICE_EIRP_30", + "DEVICE_EIRP_33", + "DEVICE_EIRP_36" + ] + }, + "uplink_dwell_time": { + "type": "boolean" + } + } + } + } + } + }, + "ping_slot_periodicity": { + "type": "object", + "properties": { + "value": { + "description": " - PING_EVERY_1S: Every second.\n - PING_EVERY_2S: Every 2 seconds.\n - PING_EVERY_4S: Every 4 seconds.\n - PING_EVERY_8S: Every 8 seconds.\n - PING_EVERY_16S: Every 16 seconds.\n - PING_EVERY_32S: Every 32 seconds.\n - PING_EVERY_64S: Every 64 seconds.\n - PING_EVERY_128S: Every 128 seconds.", + "type": "string", + "default": "PING_EVERY_1S", + "enum": [ + "PING_EVERY_1S", + "PING_EVERY_2S", + "PING_EVERY_4S", + "PING_EVERY_8S", + "PING_EVERY_16S", + "PING_EVERY_32S", + "PING_EVERY_64S", + "PING_EVERY_128S" + ] + } + } + }, + "queued_join_accept": { + "type": "object", + "properties": { + "correlation_ids": { + "type": "array", + "items": { + "type": "string" + } + }, + "dev_addr": { + "type": "string", + "format": "string", + "example": "2600ABCD" + }, + "keys": { + "description": "Session keys for a LoRaWAN session.\nOnly the components for which the keys were meant, will have the key-encryption-key (KEK) to decrypt the individual keys.", + "type": "object", + "properties": { + "app_s_key": { + "type": "object", + "properties": { + "encrypted_key": { + "type": "string", + "format": "byte" + }, + "kek_label": { + "description": "The label of the RFC 3394 key-encryption-key (KEK) that was used to encrypt the key.", + "type": "string" + }, + "key": { + "description": "The unencrypted AES key.", + "type": "string", + "format": "string", + "example": "0123456789ABCDEF0123456789ABCDEF" + } + } + }, + "f_nwk_s_int_key": { + "type": "object", + "properties": { + "encrypted_key": { + "type": "string", + "format": "byte" + }, + "kek_label": { + "description": "The label of the RFC 3394 key-encryption-key (KEK) that was used to encrypt the key.", + "type": "string" + }, + "key": { + "description": "The unencrypted AES key.", + "type": "string", + "format": "string", + "example": "0123456789ABCDEF0123456789ABCDEF" + } + } + }, + "nwk_s_enc_key": { + "type": "object", + "properties": { + "encrypted_key": { + "type": "string", + "format": "byte" + }, + "kek_label": { + "description": "The label of the RFC 3394 key-encryption-key (KEK) that was used to encrypt the key.", + "type": "string" + }, + "key": { + "description": "The unencrypted AES key.", + "type": "string", + "format": "string", + "example": "0123456789ABCDEF0123456789ABCDEF" + } + } + }, + "s_nwk_s_int_key": { + "type": "object", + "properties": { + "encrypted_key": { + "type": "string", + "format": "byte" + }, + "kek_label": { + "description": "The label of the RFC 3394 key-encryption-key (KEK) that was used to encrypt the key.", + "type": "string" + }, + "key": { + "description": "The unencrypted AES key.", + "type": "string", + "format": "string", + "example": "0123456789ABCDEF0123456789ABCDEF" + } + } + }, + "session_key_id": { + "description": "Join Server issued identifier for the session keys.\nThis ID can be used to request the keys from the Join Server in case the are lost.", + "type": "string", + "format": "byte" + } + } + }, + "net_id": { + "type": "string", + "format": "string", + "example": "000013" + }, + "payload": { + "description": "Payload of the join-accept received from Join Server.", + "type": "string", + "format": "byte" + }, + "request": { + "type": "object", + "properties": { + "cf_list": { + "type": "object", + "properties": { + "ch_masks": { + "description": "ChMasks controlling the channels to be used.\nLength of this field must be equal to the amount of uplink channels\ndefined by the selected frequency plan.", + "type": "array", + "items": { + "type": "boolean" + } + }, + "freq": { + "description": "Frequencies to be broadcasted, in hecto-Hz.\nThese values are broadcasted as 24 bits unsigned integers.\nThis field should not contain default values.", + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + }, + "type": { + "type": "string", + "default": "FREQUENCIES", + "enum": [ + "FREQUENCIES", + "CHANNEL_MASKS" + ] + } + } + }, + "downlink_settings": { + "type": "object", + "properties": { + "opt_neg": { + "description": "OptNeg is set if Network Server implements LoRaWAN 1.1 or greater.", + "type": "boolean" + }, + "rx1_dr_offset": { + "type": "string", + "default": "DATA_RATE_OFFSET_0", + "enum": [ + "DATA_RATE_OFFSET_0", + "DATA_RATE_OFFSET_1", + "DATA_RATE_OFFSET_2", + "DATA_RATE_OFFSET_3", + "DATA_RATE_OFFSET_4", + "DATA_RATE_OFFSET_5", + "DATA_RATE_OFFSET_6", + "DATA_RATE_OFFSET_7" + ] + }, + "rx2_dr": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + } + } + }, + "rx_delay": { + "description": " - RX_DELAY_0: 1 second.\n - RX_DELAY_1: 1 second.\n - RX_DELAY_2: 2 seconds.\n - RX_DELAY_3: 3 seconds.\n - RX_DELAY_4: 4 seconds.\n - RX_DELAY_5: 5 seconds.\n - RX_DELAY_6: 6 seconds.\n - RX_DELAY_7: 7 seconds.\n - RX_DELAY_8: 8 seconds.\n - RX_DELAY_9: 9 seconds.\n - RX_DELAY_10: 10 seconds.\n - RX_DELAY_11: 11 seconds.\n - RX_DELAY_12: 12 seconds.\n - RX_DELAY_13: 13 seconds.\n - RX_DELAY_14: 14 seconds.\n - RX_DELAY_15: 15 seconds.", + "type": "string", + "default": "RX_DELAY_0", + "enum": [ + "RX_DELAY_0", + "RX_DELAY_1", + "RX_DELAY_2", + "RX_DELAY_3", + "RX_DELAY_4", + "RX_DELAY_5", + "RX_DELAY_6", + "RX_DELAY_7", + "RX_DELAY_8", + "RX_DELAY_9", + "RX_DELAY_10", + "RX_DELAY_11", + "RX_DELAY_12", + "RX_DELAY_13", + "RX_DELAY_14", + "RX_DELAY_15" + ] + } + } + } + } + }, + "queued_responses": { + "description": "Queued MAC responses.\nRegenerated on each uplink.", + "type": "array", + "items": { + "type": "object", + "properties": { + "adr_param_setup_req": { + "type": "object", + "properties": { + "adr_ack_delay_exponent": { + "type": "string", + "default": "ADR_ACK_DELAY_1", + "enum": [ + "ADR_ACK_DELAY_1", + "ADR_ACK_DELAY_2", + "ADR_ACK_DELAY_4", + "ADR_ACK_DELAY_8", + "ADR_ACK_DELAY_16", + "ADR_ACK_DELAY_32", + "ADR_ACK_DELAY_64", + "ADR_ACK_DELAY_128", + "ADR_ACK_DELAY_256", + "ADR_ACK_DELAY_512", + "ADR_ACK_DELAY_1024", + "ADR_ACK_DELAY_2048", + "ADR_ACK_DELAY_4096", + "ADR_ACK_DELAY_8192", + "ADR_ACK_DELAY_16384", + "ADR_ACK_DELAY_32768" + ] + }, + "adr_ack_limit_exponent": { + "type": "string", + "default": "ADR_ACK_LIMIT_1", + "enum": [ + "ADR_ACK_LIMIT_1", + "ADR_ACK_LIMIT_2", + "ADR_ACK_LIMIT_4", + "ADR_ACK_LIMIT_8", + "ADR_ACK_LIMIT_16", + "ADR_ACK_LIMIT_32", + "ADR_ACK_LIMIT_64", + "ADR_ACK_LIMIT_128", + "ADR_ACK_LIMIT_256", + "ADR_ACK_LIMIT_512", + "ADR_ACK_LIMIT_1024", + "ADR_ACK_LIMIT_2048", + "ADR_ACK_LIMIT_4096", + "ADR_ACK_LIMIT_8192", + "ADR_ACK_LIMIT_16384", + "ADR_ACK_LIMIT_32768" + ] + } + } + }, + "beacon_freq_ans": { + "type": "object", + "properties": { + "frequency_ack": { + "type": "boolean" + } + } + }, + "beacon_freq_req": { + "type": "object", + "properties": { + "frequency": { + "description": "Frequency of the Class B beacons (Hz).", + "type": "string", + "format": "uint64" + } + } + }, + "beacon_timing_ans": { + "type": "object", + "properties": { + "channel_index": { + "type": "integer", + "format": "int64" + }, + "delay": { + "description": "(uint16) See LoRaWAN specification.", + "type": "integer", + "format": "int64" + } + } + }, + "cid": { + "type": "string", + "title": "- CID_BEACON_TIMING: Deprecated", + "default": "CID_RFU_0", + "enum": [ + "CID_RFU_0", + "CID_RESET", + "CID_LINK_CHECK", + "CID_LINK_ADR", + "CID_DUTY_CYCLE", + "CID_RX_PARAM_SETUP", + "CID_DEV_STATUS", + "CID_NEW_CHANNEL", + "CID_RX_TIMING_SETUP", + "CID_TX_PARAM_SETUP", + "CID_DL_CHANNEL", + "CID_REKEY", + "CID_ADR_PARAM_SETUP", + "CID_DEVICE_TIME", + "CID_FORCE_REJOIN", + "CID_REJOIN_PARAM_SETUP", + "CID_PING_SLOT_INFO", + "CID_PING_SLOT_CHANNEL", + "CID_BEACON_TIMING", + "CID_BEACON_FREQ", + "CID_DEVICE_MODE", + "CID_RELAY_CONF", + "CID_RELAY_END_DEVICE_CONF", + "CID_RELAY_FILTER_LIST", + "CID_RELAY_UPDATE_UPLINK_LIST", + "CID_RELAY_CTRL_UPLINK_LIST", + "CID_RELAY_CONFIGURE_FWD_LIMIT", + "CID_RELAY_NOTIFY_NEW_END_DEVICE" + ] + }, + "dev_status_ans": { + "type": "object", + "properties": { + "battery": { + "description": "Device battery status.\n0 indicates that the device is connected to an external power source.\n1..254 indicates a battery level.\n255 indicates that the device was not able to measure the battery level.", + "type": "integer", + "format": "int64" + }, + "margin": { + "description": "SNR of the last downlink (dB; [-32, +31]).", + "type": "integer", + "format": "int32" + } + } + }, + "device_mode_conf": { + "type": "object", + "properties": { + "class": { + "type": "string", + "default": "CLASS_A", + "enum": [ + "CLASS_A", + "CLASS_B", + "CLASS_C" + ] + } + } + }, + "device_mode_ind": { + "type": "object", + "properties": { + "class": { + "type": "string", + "default": "CLASS_A", + "enum": [ + "CLASS_A", + "CLASS_B", + "CLASS_C" + ] + } + } + }, + "device_time_ans": { + "type": "object", + "properties": { + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "dl_channel_ans": { + "type": "object", + "properties": { + "channel_index_ack": { + "type": "boolean" + }, + "frequency_ack": { + "type": "boolean" + } + } + }, + "dl_channel_req": { + "type": "object", + "properties": { + "channel_index": { + "type": "integer", + "format": "int64" + }, + "frequency": { + "description": "Downlink channel frequency (Hz).", + "type": "string", + "format": "uint64" + } + } + }, + "duty_cycle_req": { + "type": "object", + "properties": { + "max_duty_cycle": { + "description": " - DUTY_CYCLE_1: 100%.\n - DUTY_CYCLE_2: 50%.\n - DUTY_CYCLE_4: 25%.\n - DUTY_CYCLE_8: 12.5%.\n - DUTY_CYCLE_16: 6.25%.\n - DUTY_CYCLE_32: 3.125%.\n - DUTY_CYCLE_64: 1.5625%.\n - DUTY_CYCLE_128: Roughly 0.781%.\n - DUTY_CYCLE_256: Roughly 0.390%.\n - DUTY_CYCLE_512: Roughly 0.195%.\n - DUTY_CYCLE_1024: Roughly 0.098%.\n - DUTY_CYCLE_2048: Roughly 0.049%.\n - DUTY_CYCLE_4096: Roughly 0.024%.\n - DUTY_CYCLE_8192: Roughly 0.012%.\n - DUTY_CYCLE_16384: Roughly 0.006%.\n - DUTY_CYCLE_32768: Roughly 0.003%.", + "type": "string", + "default": "DUTY_CYCLE_1", + "enum": [ + "DUTY_CYCLE_1", + "DUTY_CYCLE_2", + "DUTY_CYCLE_4", + "DUTY_CYCLE_8", + "DUTY_CYCLE_16", + "DUTY_CYCLE_32", + "DUTY_CYCLE_64", + "DUTY_CYCLE_128", + "DUTY_CYCLE_256", + "DUTY_CYCLE_512", + "DUTY_CYCLE_1024", + "DUTY_CYCLE_2048", + "DUTY_CYCLE_4096", + "DUTY_CYCLE_8192", + "DUTY_CYCLE_16384", + "DUTY_CYCLE_32768" + ] + } + } + }, + "force_rejoin_req": { + "type": "object", + "properties": { + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "max_retries": { + "type": "integer", + "format": "int64" + }, + "period_exponent": { + "description": " - REJOIN_PERIOD_0: Every 32 to 64 seconds.\n - REJOIN_PERIOD_1: Every 64 to 96 seconds.\n - REJOIN_PERIOD_2: Every 128 to 160 seconds.\n - REJOIN_PERIOD_3: Every 256 to 288 seconds.\n - REJOIN_PERIOD_4: Every 512 to 544 seconds.\n - REJOIN_PERIOD_5: Every 1024 to 1056 seconds.\n - REJOIN_PERIOD_6: Every 2048 to 2080 seconds.\n - REJOIN_PERIOD_7: Every 4096 to 4128 seconds.", + "type": "string", + "default": "REJOIN_PERIOD_0", + "enum": [ + "REJOIN_PERIOD_0", + "REJOIN_PERIOD_1", + "REJOIN_PERIOD_2", + "REJOIN_PERIOD_3", + "REJOIN_PERIOD_4", + "REJOIN_PERIOD_5", + "REJOIN_PERIOD_6", + "REJOIN_PERIOD_7" + ] + }, + "rejoin_type": { + "description": " - CONTEXT: Resets DevAddr, Session Keys, Frame Counters, Radio Parameters.\n - SESSION: Equivalent to the initial JoinRequest.\n - KEYS: Resets DevAddr, Session Keys, Frame Counters, while keeping the Radio Parameters.", + "type": "string", + "default": "CONTEXT", + "enum": [ + "CONTEXT", + "SESSION", + "KEYS" + ] + } + } + }, + "link_adr_ans": { + "type": "object", + "properties": { + "channel_mask_ack": { + "type": "boolean" + }, + "data_rate_index_ack": { + "type": "boolean" + }, + "tx_power_index_ack": { + "type": "boolean" + } + } + }, + "link_adr_req": { + "type": "object", + "properties": { + "channel_mask": { + "type": "array", + "items": { + "type": "boolean" + } + }, + "channel_mask_control": { + "type": "integer", + "format": "int64" + }, + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "nb_trans": { + "type": "integer", + "format": "int64" + }, + "tx_power_index": { + "type": "integer", + "format": "int64" + } + } + }, + "link_check_ans": { + "type": "object", + "properties": { + "gateway_count": { + "type": "integer", + "format": "int64" + }, + "margin": { + "description": "Indicates the link margin in dB of the received LinkCheckReq, relative to the demodulation floor.", + "type": "integer", + "format": "int64" + } + } + }, + "new_channel_ans": { + "type": "object", + "properties": { + "data_rate_ack": { + "type": "boolean" + }, + "frequency_ack": { + "type": "boolean" + } + } + }, + "new_channel_req": { + "type": "object", + "properties": { + "channel_index": { + "type": "integer", + "format": "int64" + }, + "frequency": { + "description": "Channel frequency (Hz).", + "type": "string", + "format": "uint64" + }, + "max_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "min_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + } + } + }, + "ping_slot_channel_ans": { + "type": "object", + "properties": { + "data_rate_index_ack": { + "type": "boolean" + }, + "frequency_ack": { + "type": "boolean" + } + } + }, + "ping_slot_channel_req": { + "type": "object", + "properties": { + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "frequency": { + "description": "Ping slot channel frequency (Hz).", + "type": "string", + "format": "uint64" + } + } + }, + "ping_slot_info_req": { + "type": "object", + "properties": { + "period": { + "description": " - PING_EVERY_1S: Every second.\n - PING_EVERY_2S: Every 2 seconds.\n - PING_EVERY_4S: Every 4 seconds.\n - PING_EVERY_8S: Every 8 seconds.\n - PING_EVERY_16S: Every 16 seconds.\n - PING_EVERY_32S: Every 32 seconds.\n - PING_EVERY_64S: Every 64 seconds.\n - PING_EVERY_128S: Every 128 seconds.", + "type": "string", + "default": "PING_EVERY_1S", + "enum": [ + "PING_EVERY_1S", + "PING_EVERY_2S", + "PING_EVERY_4S", + "PING_EVERY_8S", + "PING_EVERY_16S", + "PING_EVERY_32S", + "PING_EVERY_64S", + "PING_EVERY_128S" + ] + } + } + }, + "raw_payload": { + "type": "string", + "format": "byte" + }, + "rejoin_param_setup_ans": { + "type": "object", + "properties": { + "max_time_exponent_ack": { + "type": "boolean" + } + } + }, + "rejoin_param_setup_req": { + "type": "object", + "properties": { + "max_count_exponent": { + "type": "string", + "default": "REJOIN_COUNT_16", + "enum": [ + "REJOIN_COUNT_16", + "REJOIN_COUNT_32", + "REJOIN_COUNT_64", + "REJOIN_COUNT_128", + "REJOIN_COUNT_256", + "REJOIN_COUNT_512", + "REJOIN_COUNT_1024", + "REJOIN_COUNT_2048", + "REJOIN_COUNT_4096", + "REJOIN_COUNT_8192", + "REJOIN_COUNT_16384", + "REJOIN_COUNT_32768", + "REJOIN_COUNT_65536", + "REJOIN_COUNT_131072", + "REJOIN_COUNT_262144", + "REJOIN_COUNT_524288" + ] + }, + "max_time_exponent": { + "description": " - REJOIN_TIME_0: Every ~17.1 minutes.\n - REJOIN_TIME_1: Every ~34.1 minutes.\n - REJOIN_TIME_2: Every ~1.1 hours.\n - REJOIN_TIME_3: Every ~2.3 hours.\n - REJOIN_TIME_4: Every ~4.6 hours.\n - REJOIN_TIME_5: Every ~9.1 hours.\n - REJOIN_TIME_6: Every ~18.2 hours.\n - REJOIN_TIME_7: Every ~1.5 days.\n - REJOIN_TIME_8: Every ~3.0 days.\n - REJOIN_TIME_9: Every ~6.1 days.\n - REJOIN_TIME_10: Every ~12.1 days.\n - REJOIN_TIME_11: Every ~3.5 weeks.\n - REJOIN_TIME_12: Every ~1.6 months.\n - REJOIN_TIME_13: Every ~3.2 months.\n - REJOIN_TIME_14: Every ~6.4 months.\n - REJOIN_TIME_15: Every ~1.1 year.", + "type": "string", + "default": "REJOIN_TIME_0", + "enum": [ + "REJOIN_TIME_0", + "REJOIN_TIME_1", + "REJOIN_TIME_2", + "REJOIN_TIME_3", + "REJOIN_TIME_4", + "REJOIN_TIME_5", + "REJOIN_TIME_6", + "REJOIN_TIME_7", + "REJOIN_TIME_8", + "REJOIN_TIME_9", + "REJOIN_TIME_10", + "REJOIN_TIME_11", + "REJOIN_TIME_12", + "REJOIN_TIME_13", + "REJOIN_TIME_14", + "REJOIN_TIME_15" + ] + } + } + }, + "rekey_conf": { + "type": "object", + "properties": { + "minor_version": { + "type": "string", + "default": "MINOR_RFU_0", + "enum": [ + "MINOR_RFU_0", + "MINOR_1", + "MINOR_RFU_2", + "MINOR_RFU_3", + "MINOR_RFU_4", + "MINOR_RFU_5", + "MINOR_RFU_6", + "MINOR_RFU_7", + "MINOR_RFU_8", + "MINOR_RFU_9", + "MINOR_RFU_10", + "MINOR_RFU_11", + "MINOR_RFU_12", + "MINOR_RFU_13", + "MINOR_RFU_14", + "MINOR_RFU_15" + ] + } + } + }, + "rekey_ind": { + "type": "object", + "properties": { + "minor_version": { + "type": "string", + "default": "MINOR_RFU_0", + "enum": [ + "MINOR_RFU_0", + "MINOR_1", + "MINOR_RFU_2", + "MINOR_RFU_3", + "MINOR_RFU_4", + "MINOR_RFU_5", + "MINOR_RFU_6", + "MINOR_RFU_7", + "MINOR_RFU_8", + "MINOR_RFU_9", + "MINOR_RFU_10", + "MINOR_RFU_11", + "MINOR_RFU_12", + "MINOR_RFU_13", + "MINOR_RFU_14", + "MINOR_RFU_15" + ] + } + } + }, + "relay_conf_ans": { + "type": "object", + "properties": { + "cad_periodicity_ack": { + "type": "boolean" + }, + "default_channel_index_ack": { + "type": "boolean" + }, + "second_channel_ack_offset_ack": { + "type": "boolean" + }, + "second_channel_data_rate_index_ack": { + "type": "boolean" + }, + "second_channel_frequency_ack": { + "type": "boolean" + }, + "second_channel_index_ack": { + "type": "boolean" + } + } + }, + "relay_conf_req": { + "type": "object", + "properties": { + "configuration": { + "type": "object", + "properties": { + "cad_periodicity": { + "type": "string", + "title": "- RELAY_CAD_PERIODICITY_20_MILLISECONDS: sic", + "default": "RELAY_CAD_PERIODICITY_1_SECOND", + "enum": [ + "RELAY_CAD_PERIODICITY_1_SECOND", + "RELAY_CAD_PERIODICITY_500_MILLISECONDS", + "RELAY_CAD_PERIODICITY_250_MILLISECONDS", + "RELAY_CAD_PERIODICITY_100_MILLISECONDS", + "RELAY_CAD_PERIODICITY_50_MILLISECONDS", + "RELAY_CAD_PERIODICITY_20_MILLISECONDS" + ] + }, + "default_channel_index": { + "type": "integer", + "format": "int64" + }, + "second_channel": { + "type": "object", + "properties": { + "ack_offset": { + "type": "string", + "title": "- RELAY_SECOND_CH_ACK_OFFSET_0: 0 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_200: 200 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_400: 400 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_800: 800 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_1600: 1.6 MHz\n - RELAY_SECOND_CH_ACK_OFFSET_3200: 3.2 MHz", + "default": "RELAY_SECOND_CH_ACK_OFFSET_0", + "enum": [ + "RELAY_SECOND_CH_ACK_OFFSET_0", + "RELAY_SECOND_CH_ACK_OFFSET_200", + "RELAY_SECOND_CH_ACK_OFFSET_400", + "RELAY_SECOND_CH_ACK_OFFSET_800", + "RELAY_SECOND_CH_ACK_OFFSET_1600", + "RELAY_SECOND_CH_ACK_OFFSET_3200" + ] + }, + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "frequency": { + "description": "The frequency (Hz) used by the wake on radio message.", + "type": "string", + "format": "uint64" + } + } + } + } + } + } + }, + "relay_configure_fwd_limit_ans": { + "type": "object" + }, + "relay_configure_fwd_limit_req": { + "type": "object", + "properties": { + "global_uplink_limits": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "join_request_limits": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "notify_limits": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "overall_limits": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "reset_limit_counter": { + "type": "string", + "default": "RELAY_RESET_LIMIT_COUNTER_ZERO", + "enum": [ + "RELAY_RESET_LIMIT_COUNTER_ZERO", + "RELAY_RESET_LIMIT_COUNTER_RELOAD_RATE", + "RELAY_RESET_LIMIT_COUNTER_MAX_VALUE", + "RELAY_RESET_LIMIT_COUNTER_NO_RESET" + ] + } + } + }, + "relay_ctrl_uplink_list_ans": { + "type": "object", + "properties": { + "rule_index_ack": { + "type": "boolean" + }, + "w_f_cnt": { + "type": "integer", + "format": "int64" + } + } + }, + "relay_ctrl_uplink_list_req": { + "type": "object", + "properties": { + "action": { + "type": "string", + "default": "RELAY_CTRL_UPLINK_LIST_ACTION_READ_W_F_CNT", + "enum": [ + "RELAY_CTRL_UPLINK_LIST_ACTION_READ_W_F_CNT", + "RELAY_CTRL_UPLINK_LIST_ACTION_REMOVE_TRUSTED_END_DEVICE" + ] + }, + "rule_index": { + "type": "integer", + "format": "int64" + } + } + }, + "relay_end_device_conf_ans": { + "type": "object", + "properties": { + "backoff_ack": { + "type": "boolean" + }, + "second_channel_data_rate_index_ack": { + "type": "boolean" + }, + "second_channel_frequency_ack": { + "type": "boolean" + }, + "second_channel_index_ack": { + "type": "boolean" + } + } + }, + "relay_end_device_conf_req": { + "type": "object", + "properties": { + "configuration": { + "type": "object", + "properties": { + "always": { + "type": "object" + }, + "backoff": { + "type": "integer", + "format": "int64" + }, + "dynamic": { + "type": "object", + "properties": { + "smart_enable_level": { + "type": "string", + "default": "RELAY_SMART_ENABLE_LEVEL_8", + "enum": [ + "RELAY_SMART_ENABLE_LEVEL_8", + "RELAY_SMART_ENABLE_LEVEL_16", + "RELAY_SMART_ENABLE_LEVEL_32", + "RELAY_SMART_ENABLE_LEVEL_64" + ] + } + } + }, + "end_device_controlled": { + "type": "object" + }, + "second_channel": { + "type": "object", + "properties": { + "ack_offset": { + "type": "string", + "title": "- RELAY_SECOND_CH_ACK_OFFSET_0: 0 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_200: 200 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_400: 400 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_800: 800 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_1600: 1.6 MHz\n - RELAY_SECOND_CH_ACK_OFFSET_3200: 3.2 MHz", + "default": "RELAY_SECOND_CH_ACK_OFFSET_0", + "enum": [ + "RELAY_SECOND_CH_ACK_OFFSET_0", + "RELAY_SECOND_CH_ACK_OFFSET_200", + "RELAY_SECOND_CH_ACK_OFFSET_400", + "RELAY_SECOND_CH_ACK_OFFSET_800", + "RELAY_SECOND_CH_ACK_OFFSET_1600", + "RELAY_SECOND_CH_ACK_OFFSET_3200" + ] + }, + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "frequency": { + "description": "The frequency (Hz) used by the wake on radio message.", + "type": "string", + "format": "uint64" + } + } + }, + "serving_device_id": { + "type": "string" + } + } + } + } + }, + "relay_notify_new_end_device_req": { + "type": "object", + "properties": { + "dev_addr": { + "type": "string", + "format": "string", + "example": "2600ABCD" + }, + "rssi": { + "type": "integer", + "format": "int32" + }, + "snr": { + "type": "integer", + "format": "int32" + } + } + }, + "relay_update_uplink_list_ans": { + "type": "object" + }, + "relay_update_uplink_list_req": { + "type": "object", + "properties": { + "dev_addr": { + "type": "string", + "format": "string", + "example": "2600ABCD" + }, + "device_id": { + "type": "string" + }, + "forward_limits": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "root_wor_s_key": { + "type": "string", + "format": "string", + "example": "0123456789ABCDEF0123456789ABCDEF" + }, + "rule_index": { + "type": "integer", + "format": "int64" + }, + "session_key_id": { + "type": "string", + "format": "byte" + }, + "w_f_cnt": { + "type": "integer", + "format": "int64" + } + } + }, + "reset_conf": { + "type": "object", + "properties": { + "minor_version": { + "type": "string", + "default": "MINOR_RFU_0", + "enum": [ + "MINOR_RFU_0", + "MINOR_1", + "MINOR_RFU_2", + "MINOR_RFU_3", + "MINOR_RFU_4", + "MINOR_RFU_5", + "MINOR_RFU_6", + "MINOR_RFU_7", + "MINOR_RFU_8", + "MINOR_RFU_9", + "MINOR_RFU_10", + "MINOR_RFU_11", + "MINOR_RFU_12", + "MINOR_RFU_13", + "MINOR_RFU_14", + "MINOR_RFU_15" + ] + } + } + }, + "reset_ind": { + "type": "object", + "properties": { + "minor_version": { + "type": "string", + "default": "MINOR_RFU_0", + "enum": [ + "MINOR_RFU_0", + "MINOR_1", + "MINOR_RFU_2", + "MINOR_RFU_3", + "MINOR_RFU_4", + "MINOR_RFU_5", + "MINOR_RFU_6", + "MINOR_RFU_7", + "MINOR_RFU_8", + "MINOR_RFU_9", + "MINOR_RFU_10", + "MINOR_RFU_11", + "MINOR_RFU_12", + "MINOR_RFU_13", + "MINOR_RFU_14", + "MINOR_RFU_15" + ] + } + } + }, + "rx_param_setup_ans": { + "type": "object", + "properties": { + "rx1_data_rate_offset_ack": { + "type": "boolean" + }, + "rx2_data_rate_index_ack": { + "type": "boolean" + }, + "rx2_frequency_ack": { + "type": "boolean" + } + } + }, + "rx_param_setup_req": { + "type": "object", + "properties": { + "rx1_data_rate_offset": { + "type": "string", + "default": "DATA_RATE_OFFSET_0", + "enum": [ + "DATA_RATE_OFFSET_0", + "DATA_RATE_OFFSET_1", + "DATA_RATE_OFFSET_2", + "DATA_RATE_OFFSET_3", + "DATA_RATE_OFFSET_4", + "DATA_RATE_OFFSET_5", + "DATA_RATE_OFFSET_6", + "DATA_RATE_OFFSET_7" + ] + }, + "rx2_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "rx2_frequency": { + "description": "Rx2 frequency (Hz).", + "type": "string", + "format": "uint64" + } + } + }, + "rx_timing_setup_req": { + "type": "object", + "properties": { + "delay": { + "description": " - RX_DELAY_0: 1 second.\n - RX_DELAY_1: 1 second.\n - RX_DELAY_2: 2 seconds.\n - RX_DELAY_3: 3 seconds.\n - RX_DELAY_4: 4 seconds.\n - RX_DELAY_5: 5 seconds.\n - RX_DELAY_6: 6 seconds.\n - RX_DELAY_7: 7 seconds.\n - RX_DELAY_8: 8 seconds.\n - RX_DELAY_9: 9 seconds.\n - RX_DELAY_10: 10 seconds.\n - RX_DELAY_11: 11 seconds.\n - RX_DELAY_12: 12 seconds.\n - RX_DELAY_13: 13 seconds.\n - RX_DELAY_14: 14 seconds.\n - RX_DELAY_15: 15 seconds.", + "type": "string", + "default": "RX_DELAY_0", + "enum": [ + "RX_DELAY_0", + "RX_DELAY_1", + "RX_DELAY_2", + "RX_DELAY_3", + "RX_DELAY_4", + "RX_DELAY_5", + "RX_DELAY_6", + "RX_DELAY_7", + "RX_DELAY_8", + "RX_DELAY_9", + "RX_DELAY_10", + "RX_DELAY_11", + "RX_DELAY_12", + "RX_DELAY_13", + "RX_DELAY_14", + "RX_DELAY_15" + ] + } + } + }, + "tx_param_setup_req": { + "type": "object", + "properties": { + "downlink_dwell_time": { + "type": "boolean" + }, + "max_eirp_index": { + "description": " - DEVICE_EIRP_8: 8 dBm.\n - DEVICE_EIRP_10: 10 dBm.\n - DEVICE_EIRP_12: 12 dBm.\n - DEVICE_EIRP_13: 13 dBm.\n - DEVICE_EIRP_14: 14 dBm.\n - DEVICE_EIRP_16: 16 dBm.\n - DEVICE_EIRP_18: 18 dBm.\n - DEVICE_EIRP_20: 20 dBm.\n - DEVICE_EIRP_21: 21 dBm.\n - DEVICE_EIRP_24: 24 dBm.\n - DEVICE_EIRP_26: 26 dBm.\n - DEVICE_EIRP_27: 27 dBm.\n - DEVICE_EIRP_29: 29 dBm.\n - DEVICE_EIRP_30: 30 dBm.\n - DEVICE_EIRP_33: 33 dBm.\n - DEVICE_EIRP_36: 36 dBm.", + "type": "string", + "default": "DEVICE_EIRP_8", + "enum": [ + "DEVICE_EIRP_8", + "DEVICE_EIRP_10", + "DEVICE_EIRP_12", + "DEVICE_EIRP_13", + "DEVICE_EIRP_14", + "DEVICE_EIRP_16", + "DEVICE_EIRP_18", + "DEVICE_EIRP_20", + "DEVICE_EIRP_21", + "DEVICE_EIRP_24", + "DEVICE_EIRP_26", + "DEVICE_EIRP_27", + "DEVICE_EIRP_29", + "DEVICE_EIRP_30", + "DEVICE_EIRP_33", + "DEVICE_EIRP_36" + ] + }, + "uplink_dwell_time": { + "type": "boolean" + } + } + } + } + } + }, + "recent_downlinks": { + "description": "Recent data downlink messages sorted by time.\nThe number of messages stored may depend on configuration.", + "type": "array", + "items": { + "description": "A minimal DownlinkMessage definition which is binary compatible with the top level DownlinkMessage message.\nUsed for type safe recent downlink storage.", + "type": "object", + "properties": { + "correlation_ids": { + "type": "array", + "items": { + "type": "string" + } + }, + "payload": { + "type": "object", + "properties": { + "m_hdr": { + "type": "object", + "properties": { + "m_type": { + "type": "string", + "default": "JOIN_REQUEST", + "enum": [ + "JOIN_REQUEST", + "JOIN_ACCEPT", + "UNCONFIRMED_UP", + "UNCONFIRMED_DOWN", + "CONFIRMED_UP", + "CONFIRMED_DOWN", + "REJOIN_REQUEST", + "PROPRIETARY" + ] + } + } + }, + "mac_payload": { + "type": "object", + "properties": { + "f_port": { + "type": "integer", + "format": "int64" + }, + "full_f_cnt": { + "type": "integer", + "format": "int64" + } + } + } + } + } + } + } + }, + "recent_mac_command_identifiers": { + "description": "MAC command identifiers sent by the end device in the last received uplink.\nThe Network Server may choose to store only certain types of MAC\ncommand identifiers in the underlying implementation.", + "type": "array", + "items": { + "type": "string", + "title": "- CID_BEACON_TIMING: Deprecated", + "default": "CID_RFU_0", + "enum": [ + "CID_RFU_0", + "CID_RESET", + "CID_LINK_CHECK", + "CID_LINK_ADR", + "CID_DUTY_CYCLE", + "CID_RX_PARAM_SETUP", + "CID_DEV_STATUS", + "CID_NEW_CHANNEL", + "CID_RX_TIMING_SETUP", + "CID_TX_PARAM_SETUP", + "CID_DL_CHANNEL", + "CID_REKEY", + "CID_ADR_PARAM_SETUP", + "CID_DEVICE_TIME", + "CID_FORCE_REJOIN", + "CID_REJOIN_PARAM_SETUP", + "CID_PING_SLOT_INFO", + "CID_PING_SLOT_CHANNEL", + "CID_BEACON_TIMING", + "CID_BEACON_FREQ", + "CID_DEVICE_MODE", + "CID_RELAY_CONF", + "CID_RELAY_END_DEVICE_CONF", + "CID_RELAY_FILTER_LIST", + "CID_RELAY_UPDATE_UPLINK_LIST", + "CID_RELAY_CTRL_UPLINK_LIST", + "CID_RELAY_CONFIGURE_FWD_LIMIT", + "CID_RELAY_NOTIFY_NEW_END_DEVICE" + ] + } + }, + "recent_uplinks": { + "description": "Recent data uplink messages sorted by time.\nThe number of messages stored may depend on configuration.", + "type": "array", + "items": { + "description": "A minimal UplinkMessage definition which is binary compatible with the top level UplinkMessage message.\nUsed for type safe recent uplink storage.", + "type": "object", + "properties": { + "correlation_ids": { + "type": "array", + "items": { + "type": "string" + } + }, + "device_channel_index": { + "type": "integer", + "format": "int64" + }, + "payload": { + "type": "object", + "title": "Message represents a LoRaWAN message", + "properties": { + "join_accept_payload": { + "type": "object", + "properties": { + "cf_list": { + "type": "object", + "properties": { + "ch_masks": { + "description": "ChMasks controlling the channels to be used.\nLength of this field must be equal to the amount of uplink channels\ndefined by the selected frequency plan.", + "type": "array", + "items": { + "type": "boolean" + } + }, + "freq": { + "description": "Frequencies to be broadcasted, in hecto-Hz.\nThese values are broadcasted as 24 bits unsigned integers.\nThis field should not contain default values.", + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + }, + "type": { + "type": "string", + "default": "FREQUENCIES", + "enum": [ + "FREQUENCIES", + "CHANNEL_MASKS" + ] + } + } + }, + "dev_addr": { + "type": "string", + "format": "string", + "example": "2600ABCD" + }, + "dl_settings": { + "type": "object", + "properties": { + "opt_neg": { + "description": "OptNeg is set if Network Server implements LoRaWAN 1.1 or greater.", + "type": "boolean" + }, + "rx1_dr_offset": { + "type": "string", + "default": "DATA_RATE_OFFSET_0", + "enum": [ + "DATA_RATE_OFFSET_0", + "DATA_RATE_OFFSET_1", + "DATA_RATE_OFFSET_2", + "DATA_RATE_OFFSET_3", + "DATA_RATE_OFFSET_4", + "DATA_RATE_OFFSET_5", + "DATA_RATE_OFFSET_6", + "DATA_RATE_OFFSET_7" + ] + }, + "rx2_dr": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + } + } + }, + "encrypted": { + "type": "string", + "format": "byte" + }, + "join_nonce": { + "type": "string", + "format": "string", + "example": "ABCDEF" + }, + "net_id": { + "type": "string", + "format": "string", + "example": "000013" + }, + "rx_delay": { + "description": " - RX_DELAY_0: 1 second.\n - RX_DELAY_1: 1 second.\n - RX_DELAY_2: 2 seconds.\n - RX_DELAY_3: 3 seconds.\n - RX_DELAY_4: 4 seconds.\n - RX_DELAY_5: 5 seconds.\n - RX_DELAY_6: 6 seconds.\n - RX_DELAY_7: 7 seconds.\n - RX_DELAY_8: 8 seconds.\n - RX_DELAY_9: 9 seconds.\n - RX_DELAY_10: 10 seconds.\n - RX_DELAY_11: 11 seconds.\n - RX_DELAY_12: 12 seconds.\n - RX_DELAY_13: 13 seconds.\n - RX_DELAY_14: 14 seconds.\n - RX_DELAY_15: 15 seconds.", + "type": "string", + "default": "RX_DELAY_0", + "enum": [ + "RX_DELAY_0", + "RX_DELAY_1", + "RX_DELAY_2", + "RX_DELAY_3", + "RX_DELAY_4", + "RX_DELAY_5", + "RX_DELAY_6", + "RX_DELAY_7", + "RX_DELAY_8", + "RX_DELAY_9", + "RX_DELAY_10", + "RX_DELAY_11", + "RX_DELAY_12", + "RX_DELAY_13", + "RX_DELAY_14", + "RX_DELAY_15" + ] + } + } + }, + "join_request_payload": { + "type": "object", + "properties": { + "dev_eui": { + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + }, + "dev_nonce": { + "type": "string", + "format": "string", + "example": "ABCD" + }, + "join_eui": { + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + } + } + }, + "m_hdr": { + "type": "object", + "properties": { + "m_type": { + "type": "string", + "default": "JOIN_REQUEST", + "enum": [ + "JOIN_REQUEST", + "JOIN_ACCEPT", + "UNCONFIRMED_UP", + "UNCONFIRMED_DOWN", + "CONFIRMED_UP", + "CONFIRMED_DOWN", + "REJOIN_REQUEST", + "PROPRIETARY" + ] + }, + "major": { + "type": "string", + "default": "LORAWAN_R1", + "enum": [ + "LORAWAN_R1" + ] + } + } + }, + "mac_payload": { + "type": "object", + "properties": { + "decoded_payload": { + "type": "object" + }, + "f_hdr": { + "type": "object", + "properties": { + "dev_addr": { + "type": "string", + "format": "string", + "example": "2600ABCD" + }, + "f_cnt": { + "type": "integer", + "format": "int64" + }, + "f_ctrl": { + "type": "object", + "properties": { + "ack": { + "type": "boolean" + }, + "adr": { + "type": "boolean" + }, + "adr_ack_req": { + "description": "Only on uplink.", + "type": "boolean" + }, + "class_b": { + "description": "Only on uplink.", + "type": "boolean" + }, + "f_pending": { + "description": "Only on downlink.", + "type": "boolean" + } + } + }, + "f_opts": { + "type": "string", + "format": "byte" + } + } + }, + "f_port": { + "type": "integer", + "format": "int64" + }, + "frm_payload": { + "type": "string", + "format": "byte" + }, + "full_f_cnt": { + "description": "Full 32-bit FCnt value. Used internally by Network Server.", + "type": "integer", + "format": "int64" + } + } + }, + "mic": { + "type": "string", + "format": "byte" + }, + "rejoin_request_payload": { + "type": "object", + "properties": { + "dev_eui": { + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + }, + "join_eui": { + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + }, + "net_id": { + "type": "string", + "format": "string", + "example": "000013" + }, + "rejoin_cnt": { + "description": "Contains RJCount0 or RJCount1 depending on rejoin_type.", + "type": "integer", + "format": "int64" + }, + "rejoin_type": { + "description": " - CONTEXT: Resets DevAddr, Session Keys, Frame Counters, Radio Parameters.\n - SESSION: Equivalent to the initial JoinRequest.\n - KEYS: Resets DevAddr, Session Keys, Frame Counters, while keeping the Radio Parameters.", + "type": "string", + "default": "CONTEXT", + "enum": [ + "CONTEXT", + "SESSION", + "KEYS" + ] + } + } + } + } + }, + "received_at": { + "type": "string", + "format": "date-time" + }, + "rx_metadata": { + "type": "array", + "items": { + "type": "object", + "properties": { + "channel_rssi": { + "type": "number", + "format": "float" + }, + "downlink_path_constraint": { + "description": " - DOWNLINK_PATH_CONSTRAINT_NONE: Indicates that the gateway can be selected for downlink without constraints by the Network Server.\n - DOWNLINK_PATH_CONSTRAINT_PREFER_OTHER: Indicates that the gateway can be selected for downlink only if no other or better gateway can be selected.\n - DOWNLINK_PATH_CONSTRAINT_NEVER: Indicates that this gateway will never be selected for downlink, even if that results in no available downlink path.", + "type": "string", + "default": "DOWNLINK_PATH_CONSTRAINT_NONE", + "enum": [ + "DOWNLINK_PATH_CONSTRAINT_NONE", + "DOWNLINK_PATH_CONSTRAINT_PREFER_OTHER", + "DOWNLINK_PATH_CONSTRAINT_NEVER" + ] + }, + "gateway_ids": { + "type": "object", + "properties": { + "eui": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + }, + "gateway_id": { + "type": "string" + } + } + }, + "packet_broker": { + "type": "object" + }, + "relay": { + "type": "object" + }, + "snr": { + "type": "number", + "format": "float" + }, + "uplink_token": { + "type": "string", + "format": "byte" + } + } + } + }, + "settings": { + "type": "object", + "properties": { + "data_rate": { + "type": "object", + "properties": { + "fsk": { + "type": "object", + "properties": { + "bit_rate": { + "description": "Bit rate (bps).", + "type": "integer", + "format": "int64" + } + } + }, + "lora": { + "type": "object", + "properties": { + "bandwidth": { + "description": "Bandwidth (Hz).", + "type": "integer", + "format": "int64" + }, + "coding_rate": { + "type": "string" + }, + "spreading_factor": { + "type": "integer", + "format": "int64" + } + } + }, + "lrfhss": { + "type": "object", + "properties": { + "coding_rate": { + "type": "string" + }, + "modulation_type": { + "type": "integer", + "format": "int64" + }, + "operating_channel_width": { + "description": "Operating Channel Width (Hz).", + "type": "integer", + "format": "int64" + } + } + } + } + } + } + } + } + } + }, + "rejected_adr_data_rate_indexes": { + "description": "ADR Data rate index values rejected by the device.\nReset each time `current_parameters.channels` change.\nElements are sorted in ascending order.", + "type": "array", + "items": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + } + }, + "rejected_adr_tx_power_indexes": { + "description": "ADR TX output power index values rejected by the device.\nElements are sorted in ascending order.", + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + }, + "rejected_data_rate_ranges": { + "description": "Data rate ranges rejected by the device per frequency.", + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "ranges": { + "type": "array", + "items": { + "type": "object", + "properties": { + "max_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "min_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + } + } + } + } + } + } + }, + "rejected_frequencies": { + "description": "Frequencies rejected by the device.", + "type": "array", + "items": { + "type": "string", + "format": "uint64" + } + }, + "rx_windows_available": { + "description": "Whether or not Rx windows are expected to be open.\nSet to true every time an uplink is received.\nSet to false every time a successful downlink scheduling attempt is made.", + "type": "boolean" + } + } + }, + "max_frequency": { + "description": "Maximum frequency the device is capable of using (Hz). Stored in Network Server.\nCopied on creation from template identified by version_ids, if any or from the home Network Server device profile, if any.", + "type": "string", + "format": "uint64" + }, + "min_frequency": { + "description": "Minimum frequency the device is capable of using (Hz). Stored in Network Server.\nCopied on creation from template identified by version_ids, if any or from the home Network Server device profile, if any.", + "type": "string", + "format": "uint64" + }, + "multicast": { + "description": "Indicates whether this device represents a multicast group.", + "type": "boolean" + }, + "name": { + "description": "Friendly name of the device. Stored in Entity Registry.", + "type": "string" + }, + "net_id": { + "description": "Home NetID. Stored in Join Server.", + "type": "string", + "format": "string", + "example": "000013" + }, + "network_server_address": { + "description": "The address of the Network Server where this device is supposed to be registered.\nStored in Entity Registry and Join Server.\nThe typical format of the address is \"host:port\". If the port is omitted,\nthe normal port inference (with DNS lookup, otherwise defaults) is used.\nThe connection shall be established with transport layer security (TLS).\nCustom certificate authorities may be configured out-of-band.", + "type": "string" + }, + "network_server_kek_label": { + "description": "The KEK label of the Network Server to use for wrapping network session keys.\nStored in Join Server.", + "type": "string" + }, + "pending_mac_state": { + "description": "MACState represents the state of MAC layer of the device.\nMACState is reset on each join for OTAA or ResetInd for ABP devices.\nThis is used internally by the Network Server.", + "type": "object", + "properties": { + "current_parameters": { + "description": "MACParameters represent the parameters of the device's MAC layer (active or desired).\nThis is used internally by the Network Server.", + "type": "object", + "properties": { + "adr_ack_delay": { + "description": "ADR: number of messages to wait after setting ADRAckReq and before changing TxPower or DataRate.\nThis field is deprecated, use adr_ack_delay_exponent instead.", + "type": "integer", + "format": "int64" + }, + "adr_ack_delay_exponent": { + "type": "object", + "properties": { + "value": { + "type": "string", + "default": "ADR_ACK_DELAY_1", + "enum": [ + "ADR_ACK_DELAY_1", + "ADR_ACK_DELAY_2", + "ADR_ACK_DELAY_4", + "ADR_ACK_DELAY_8", + "ADR_ACK_DELAY_16", + "ADR_ACK_DELAY_32", + "ADR_ACK_DELAY_64", + "ADR_ACK_DELAY_128", + "ADR_ACK_DELAY_256", + "ADR_ACK_DELAY_512", + "ADR_ACK_DELAY_1024", + "ADR_ACK_DELAY_2048", + "ADR_ACK_DELAY_4096", + "ADR_ACK_DELAY_8192", + "ADR_ACK_DELAY_16384", + "ADR_ACK_DELAY_32768" + ] + } + } + }, + "adr_ack_limit": { + "description": "ADR: number of messages to wait before setting ADRAckReq.\nThis field is deprecated, use adr_ack_limit_exponent instead.", + "type": "integer", + "format": "int64" + }, + "adr_ack_limit_exponent": { + "type": "object", + "properties": { + "value": { + "type": "string", + "default": "ADR_ACK_LIMIT_1", + "enum": [ + "ADR_ACK_LIMIT_1", + "ADR_ACK_LIMIT_2", + "ADR_ACK_LIMIT_4", + "ADR_ACK_LIMIT_8", + "ADR_ACK_LIMIT_16", + "ADR_ACK_LIMIT_32", + "ADR_ACK_LIMIT_64", + "ADR_ACK_LIMIT_128", + "ADR_ACK_LIMIT_256", + "ADR_ACK_LIMIT_512", + "ADR_ACK_LIMIT_1024", + "ADR_ACK_LIMIT_2048", + "ADR_ACK_LIMIT_4096", + "ADR_ACK_LIMIT_8192", + "ADR_ACK_LIMIT_16384", + "ADR_ACK_LIMIT_32768" + ] + } + } + }, + "adr_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "adr_nb_trans": { + "description": "ADR: number of retransmissions.", + "type": "integer", + "format": "int64" + }, + "adr_tx_power_index": { + "description": "ADR: transmission power index to use.", + "type": "integer", + "format": "int64" + }, + "beacon_frequency": { + "description": "Frequency of the class B beacon (Hz).", + "type": "string", + "format": "uint64" + }, + "channels": { + "description": "Configured uplink channels and optionally Rx1 frequency.", + "type": "array", + "items": { + "type": "object", + "properties": { + "downlink_frequency": { + "description": "Downlink frequency of the channel (Hz).", + "type": "string", + "format": "uint64" + }, + "enable_uplink": { + "description": "Channel can be used by device for uplink.", + "type": "boolean" + }, + "max_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "min_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "uplink_frequency": { + "description": "Uplink frequency of the channel (Hz).", + "type": "string", + "format": "uint64" + } + } + } + }, + "downlink_dwell_time": { + "type": "object", + "properties": { + "value": { + "type": "boolean" + } + } + }, + "max_duty_cycle": { + "description": " - DUTY_CYCLE_1: 100%.\n - DUTY_CYCLE_2: 50%.\n - DUTY_CYCLE_4: 25%.\n - DUTY_CYCLE_8: 12.5%.\n - DUTY_CYCLE_16: 6.25%.\n - DUTY_CYCLE_32: 3.125%.\n - DUTY_CYCLE_64: 1.5625%.\n - DUTY_CYCLE_128: Roughly 0.781%.\n - DUTY_CYCLE_256: Roughly 0.390%.\n - DUTY_CYCLE_512: Roughly 0.195%.\n - DUTY_CYCLE_1024: Roughly 0.098%.\n - DUTY_CYCLE_2048: Roughly 0.049%.\n - DUTY_CYCLE_4096: Roughly 0.024%.\n - DUTY_CYCLE_8192: Roughly 0.012%.\n - DUTY_CYCLE_16384: Roughly 0.006%.\n - DUTY_CYCLE_32768: Roughly 0.003%.", + "type": "string", + "default": "DUTY_CYCLE_1", + "enum": [ + "DUTY_CYCLE_1", + "DUTY_CYCLE_2", + "DUTY_CYCLE_4", + "DUTY_CYCLE_8", + "DUTY_CYCLE_16", + "DUTY_CYCLE_32", + "DUTY_CYCLE_64", + "DUTY_CYCLE_128", + "DUTY_CYCLE_256", + "DUTY_CYCLE_512", + "DUTY_CYCLE_1024", + "DUTY_CYCLE_2048", + "DUTY_CYCLE_4096", + "DUTY_CYCLE_8192", + "DUTY_CYCLE_16384", + "DUTY_CYCLE_32768" + ] + }, + "max_eirp": { + "description": "Maximum EIRP (dBm).", + "type": "number", + "format": "float" + }, + "ping_slot_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "ping_slot_data_rate_index_value": { + "type": "object", + "properties": { + "value": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + } + } + }, + "ping_slot_frequency": { + "description": "Frequency of the class B ping slot (Hz).", + "type": "string", + "format": "uint64" + }, + "rejoin_count_periodicity": { + "type": "string", + "default": "REJOIN_COUNT_16", + "enum": [ + "REJOIN_COUNT_16", + "REJOIN_COUNT_32", + "REJOIN_COUNT_64", + "REJOIN_COUNT_128", + "REJOIN_COUNT_256", + "REJOIN_COUNT_512", + "REJOIN_COUNT_1024", + "REJOIN_COUNT_2048", + "REJOIN_COUNT_4096", + "REJOIN_COUNT_8192", + "REJOIN_COUNT_16384", + "REJOIN_COUNT_32768", + "REJOIN_COUNT_65536", + "REJOIN_COUNT_131072", + "REJOIN_COUNT_262144", + "REJOIN_COUNT_524288" + ] + }, + "rejoin_time_periodicity": { + "description": " - REJOIN_TIME_0: Every ~17.1 minutes.\n - REJOIN_TIME_1: Every ~34.1 minutes.\n - REJOIN_TIME_2: Every ~1.1 hours.\n - REJOIN_TIME_3: Every ~2.3 hours.\n - REJOIN_TIME_4: Every ~4.6 hours.\n - REJOIN_TIME_5: Every ~9.1 hours.\n - REJOIN_TIME_6: Every ~18.2 hours.\n - REJOIN_TIME_7: Every ~1.5 days.\n - REJOIN_TIME_8: Every ~3.0 days.\n - REJOIN_TIME_9: Every ~6.1 days.\n - REJOIN_TIME_10: Every ~12.1 days.\n - REJOIN_TIME_11: Every ~3.5 weeks.\n - REJOIN_TIME_12: Every ~1.6 months.\n - REJOIN_TIME_13: Every ~3.2 months.\n - REJOIN_TIME_14: Every ~6.4 months.\n - REJOIN_TIME_15: Every ~1.1 year.", + "type": "string", + "default": "REJOIN_TIME_0", + "enum": [ + "REJOIN_TIME_0", + "REJOIN_TIME_1", + "REJOIN_TIME_2", + "REJOIN_TIME_3", + "REJOIN_TIME_4", + "REJOIN_TIME_5", + "REJOIN_TIME_6", + "REJOIN_TIME_7", + "REJOIN_TIME_8", + "REJOIN_TIME_9", + "REJOIN_TIME_10", + "REJOIN_TIME_11", + "REJOIN_TIME_12", + "REJOIN_TIME_13", + "REJOIN_TIME_14", + "REJOIN_TIME_15" + ] + }, + "relay": { + "description": "RelayParameters represent the parameters of a relay.\nThis is used internally by the Network Server.", + "type": "object", + "properties": { + "served": { + "type": "object", + "properties": { + "always": { + "type": "object" + }, + "backoff": { + "description": "Number of wake on radio frames to be sent without an acknowledgement before sending the uplink message directly.", + "type": "integer", + "format": "int64" + }, + "dynamic": { + "type": "object", + "properties": { + "smart_enable_level": { + "type": "string", + "default": "RELAY_SMART_ENABLE_LEVEL_8", + "enum": [ + "RELAY_SMART_ENABLE_LEVEL_8", + "RELAY_SMART_ENABLE_LEVEL_16", + "RELAY_SMART_ENABLE_LEVEL_32", + "RELAY_SMART_ENABLE_LEVEL_64" + ] + } + } + }, + "end_device_controlled": { + "type": "object" + }, + "second_channel": { + "type": "object", + "properties": { + "ack_offset": { + "type": "string", + "title": "- RELAY_SECOND_CH_ACK_OFFSET_0: 0 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_200: 200 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_400: 400 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_800: 800 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_1600: 1.6 MHz\n - RELAY_SECOND_CH_ACK_OFFSET_3200: 3.2 MHz", + "default": "RELAY_SECOND_CH_ACK_OFFSET_0", + "enum": [ + "RELAY_SECOND_CH_ACK_OFFSET_0", + "RELAY_SECOND_CH_ACK_OFFSET_200", + "RELAY_SECOND_CH_ACK_OFFSET_400", + "RELAY_SECOND_CH_ACK_OFFSET_800", + "RELAY_SECOND_CH_ACK_OFFSET_1600", + "RELAY_SECOND_CH_ACK_OFFSET_3200" + ] + }, + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "frequency": { + "description": "The frequency (Hz) used by the wake on radio message.", + "type": "string", + "format": "uint64" + } + } + }, + "serving_device_id": { + "description": "End device identifier of the serving end device.", + "type": "string" + } + } + }, + "serving": { + "type": "object", + "properties": { + "cad_periodicity": { + "type": "string", + "title": "- RELAY_CAD_PERIODICITY_20_MILLISECONDS: sic", + "default": "RELAY_CAD_PERIODICITY_1_SECOND", + "enum": [ + "RELAY_CAD_PERIODICITY_1_SECOND", + "RELAY_CAD_PERIODICITY_500_MILLISECONDS", + "RELAY_CAD_PERIODICITY_250_MILLISECONDS", + "RELAY_CAD_PERIODICITY_100_MILLISECONDS", + "RELAY_CAD_PERIODICITY_50_MILLISECONDS", + "RELAY_CAD_PERIODICITY_20_MILLISECONDS" + ] + }, + "default_channel_index": { + "description": "Index of the default wake on radio channel.", + "type": "integer", + "format": "int64" + }, + "limits": { + "type": "object", + "properties": { + "join_requests": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "notifications": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "overall": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "reset_behavior": { + "type": "string", + "default": "RELAY_RESET_LIMIT_COUNTER_ZERO", + "enum": [ + "RELAY_RESET_LIMIT_COUNTER_ZERO", + "RELAY_RESET_LIMIT_COUNTER_RELOAD_RATE", + "RELAY_RESET_LIMIT_COUNTER_MAX_VALUE", + "RELAY_RESET_LIMIT_COUNTER_NO_RESET" + ] + }, + "uplink_messages": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + } + } + }, + "second_channel": { + "type": "object", + "properties": { + "ack_offset": { + "type": "string", + "title": "- RELAY_SECOND_CH_ACK_OFFSET_0: 0 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_200: 200 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_400: 400 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_800: 800 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_1600: 1.6 MHz\n - RELAY_SECOND_CH_ACK_OFFSET_3200: 3.2 MHz", + "default": "RELAY_SECOND_CH_ACK_OFFSET_0", + "enum": [ + "RELAY_SECOND_CH_ACK_OFFSET_0", + "RELAY_SECOND_CH_ACK_OFFSET_200", + "RELAY_SECOND_CH_ACK_OFFSET_400", + "RELAY_SECOND_CH_ACK_OFFSET_800", + "RELAY_SECOND_CH_ACK_OFFSET_1600", + "RELAY_SECOND_CH_ACK_OFFSET_3200" + ] + }, + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "frequency": { + "description": "The frequency (Hz) used by the wake on radio message.", + "type": "string", + "format": "uint64" + } + } + }, + "uplink_forwarding_rules": { + "description": "Configured uplink forwarding rules.", + "type": "array", + "items": { + "type": "object", + "properties": { + "device_id": { + "description": "End device identifier of the served end device.", + "type": "string" + }, + "last_w_f_cnt": { + "description": "Last wake on radio frame counter used by the served end device.", + "type": "integer", + "format": "int64" + }, + "limits": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "session_key_id": { + "description": "Session key ID of the session keys used to derive the root relay session key.", + "type": "string", + "format": "byte" + } + } + } + } + } + } + } + }, + "rx1_data_rate_offset": { + "type": "string", + "default": "DATA_RATE_OFFSET_0", + "enum": [ + "DATA_RATE_OFFSET_0", + "DATA_RATE_OFFSET_1", + "DATA_RATE_OFFSET_2", + "DATA_RATE_OFFSET_3", + "DATA_RATE_OFFSET_4", + "DATA_RATE_OFFSET_5", + "DATA_RATE_OFFSET_6", + "DATA_RATE_OFFSET_7" + ] + }, + "rx1_delay": { + "description": " - RX_DELAY_0: 1 second.\n - RX_DELAY_1: 1 second.\n - RX_DELAY_2: 2 seconds.\n - RX_DELAY_3: 3 seconds.\n - RX_DELAY_4: 4 seconds.\n - RX_DELAY_5: 5 seconds.\n - RX_DELAY_6: 6 seconds.\n - RX_DELAY_7: 7 seconds.\n - RX_DELAY_8: 8 seconds.\n - RX_DELAY_9: 9 seconds.\n - RX_DELAY_10: 10 seconds.\n - RX_DELAY_11: 11 seconds.\n - RX_DELAY_12: 12 seconds.\n - RX_DELAY_13: 13 seconds.\n - RX_DELAY_14: 14 seconds.\n - RX_DELAY_15: 15 seconds.", + "type": "string", + "default": "RX_DELAY_0", + "enum": [ + "RX_DELAY_0", + "RX_DELAY_1", + "RX_DELAY_2", + "RX_DELAY_3", + "RX_DELAY_4", + "RX_DELAY_5", + "RX_DELAY_6", + "RX_DELAY_7", + "RX_DELAY_8", + "RX_DELAY_9", + "RX_DELAY_10", + "RX_DELAY_11", + "RX_DELAY_12", + "RX_DELAY_13", + "RX_DELAY_14", + "RX_DELAY_15" + ] + }, + "rx2_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "rx2_frequency": { + "description": "Frequency for Rx2 (Hz).", + "type": "string", + "format": "uint64" + }, + "uplink_dwell_time": { + "type": "object", + "properties": { + "value": { + "type": "boolean" + } + } + } + } + }, + "desired_parameters": { + "description": "MACParameters represent the parameters of the device's MAC layer (active or desired).\nThis is used internally by the Network Server.", + "type": "object", + "properties": { + "adr_ack_delay": { + "description": "ADR: number of messages to wait after setting ADRAckReq and before changing TxPower or DataRate.\nThis field is deprecated, use adr_ack_delay_exponent instead.", + "type": "integer", + "format": "int64" + }, + "adr_ack_delay_exponent": { + "type": "object", + "properties": { + "value": { + "type": "string", + "default": "ADR_ACK_DELAY_1", + "enum": [ + "ADR_ACK_DELAY_1", + "ADR_ACK_DELAY_2", + "ADR_ACK_DELAY_4", + "ADR_ACK_DELAY_8", + "ADR_ACK_DELAY_16", + "ADR_ACK_DELAY_32", + "ADR_ACK_DELAY_64", + "ADR_ACK_DELAY_128", + "ADR_ACK_DELAY_256", + "ADR_ACK_DELAY_512", + "ADR_ACK_DELAY_1024", + "ADR_ACK_DELAY_2048", + "ADR_ACK_DELAY_4096", + "ADR_ACK_DELAY_8192", + "ADR_ACK_DELAY_16384", + "ADR_ACK_DELAY_32768" + ] + } + } + }, + "adr_ack_limit": { + "description": "ADR: number of messages to wait before setting ADRAckReq.\nThis field is deprecated, use adr_ack_limit_exponent instead.", + "type": "integer", + "format": "int64" + }, + "adr_ack_limit_exponent": { + "type": "object", + "properties": { + "value": { + "type": "string", + "default": "ADR_ACK_LIMIT_1", + "enum": [ + "ADR_ACK_LIMIT_1", + "ADR_ACK_LIMIT_2", + "ADR_ACK_LIMIT_4", + "ADR_ACK_LIMIT_8", + "ADR_ACK_LIMIT_16", + "ADR_ACK_LIMIT_32", + "ADR_ACK_LIMIT_64", + "ADR_ACK_LIMIT_128", + "ADR_ACK_LIMIT_256", + "ADR_ACK_LIMIT_512", + "ADR_ACK_LIMIT_1024", + "ADR_ACK_LIMIT_2048", + "ADR_ACK_LIMIT_4096", + "ADR_ACK_LIMIT_8192", + "ADR_ACK_LIMIT_16384", + "ADR_ACK_LIMIT_32768" + ] + } + } + }, + "adr_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "adr_nb_trans": { + "description": "ADR: number of retransmissions.", + "type": "integer", + "format": "int64" + }, + "adr_tx_power_index": { + "description": "ADR: transmission power index to use.", + "type": "integer", + "format": "int64" + }, + "beacon_frequency": { + "description": "Frequency of the class B beacon (Hz).", + "type": "string", + "format": "uint64" + }, + "channels": { + "description": "Configured uplink channels and optionally Rx1 frequency.", + "type": "array", + "items": { + "type": "object", + "properties": { + "downlink_frequency": { + "description": "Downlink frequency of the channel (Hz).", + "type": "string", + "format": "uint64" + }, + "enable_uplink": { + "description": "Channel can be used by device for uplink.", + "type": "boolean" + }, + "max_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "min_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "uplink_frequency": { + "description": "Uplink frequency of the channel (Hz).", + "type": "string", + "format": "uint64" + } + } + } + }, + "downlink_dwell_time": { + "type": "object", + "properties": { + "value": { + "type": "boolean" + } + } + }, + "max_duty_cycle": { + "description": " - DUTY_CYCLE_1: 100%.\n - DUTY_CYCLE_2: 50%.\n - DUTY_CYCLE_4: 25%.\n - DUTY_CYCLE_8: 12.5%.\n - DUTY_CYCLE_16: 6.25%.\n - DUTY_CYCLE_32: 3.125%.\n - DUTY_CYCLE_64: 1.5625%.\n - DUTY_CYCLE_128: Roughly 0.781%.\n - DUTY_CYCLE_256: Roughly 0.390%.\n - DUTY_CYCLE_512: Roughly 0.195%.\n - DUTY_CYCLE_1024: Roughly 0.098%.\n - DUTY_CYCLE_2048: Roughly 0.049%.\n - DUTY_CYCLE_4096: Roughly 0.024%.\n - DUTY_CYCLE_8192: Roughly 0.012%.\n - DUTY_CYCLE_16384: Roughly 0.006%.\n - DUTY_CYCLE_32768: Roughly 0.003%.", + "type": "string", + "default": "DUTY_CYCLE_1", + "enum": [ + "DUTY_CYCLE_1", + "DUTY_CYCLE_2", + "DUTY_CYCLE_4", + "DUTY_CYCLE_8", + "DUTY_CYCLE_16", + "DUTY_CYCLE_32", + "DUTY_CYCLE_64", + "DUTY_CYCLE_128", + "DUTY_CYCLE_256", + "DUTY_CYCLE_512", + "DUTY_CYCLE_1024", + "DUTY_CYCLE_2048", + "DUTY_CYCLE_4096", + "DUTY_CYCLE_8192", + "DUTY_CYCLE_16384", + "DUTY_CYCLE_32768" + ] + }, + "max_eirp": { + "description": "Maximum EIRP (dBm).", + "type": "number", + "format": "float" + }, + "ping_slot_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "ping_slot_data_rate_index_value": { + "type": "object", + "properties": { + "value": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + } + } + }, + "ping_slot_frequency": { + "description": "Frequency of the class B ping slot (Hz).", + "type": "string", + "format": "uint64" + }, + "rejoin_count_periodicity": { + "type": "string", + "default": "REJOIN_COUNT_16", + "enum": [ + "REJOIN_COUNT_16", + "REJOIN_COUNT_32", + "REJOIN_COUNT_64", + "REJOIN_COUNT_128", + "REJOIN_COUNT_256", + "REJOIN_COUNT_512", + "REJOIN_COUNT_1024", + "REJOIN_COUNT_2048", + "REJOIN_COUNT_4096", + "REJOIN_COUNT_8192", + "REJOIN_COUNT_16384", + "REJOIN_COUNT_32768", + "REJOIN_COUNT_65536", + "REJOIN_COUNT_131072", + "REJOIN_COUNT_262144", + "REJOIN_COUNT_524288" + ] + }, + "rejoin_time_periodicity": { + "description": " - REJOIN_TIME_0: Every ~17.1 minutes.\n - REJOIN_TIME_1: Every ~34.1 minutes.\n - REJOIN_TIME_2: Every ~1.1 hours.\n - REJOIN_TIME_3: Every ~2.3 hours.\n - REJOIN_TIME_4: Every ~4.6 hours.\n - REJOIN_TIME_5: Every ~9.1 hours.\n - REJOIN_TIME_6: Every ~18.2 hours.\n - REJOIN_TIME_7: Every ~1.5 days.\n - REJOIN_TIME_8: Every ~3.0 days.\n - REJOIN_TIME_9: Every ~6.1 days.\n - REJOIN_TIME_10: Every ~12.1 days.\n - REJOIN_TIME_11: Every ~3.5 weeks.\n - REJOIN_TIME_12: Every ~1.6 months.\n - REJOIN_TIME_13: Every ~3.2 months.\n - REJOIN_TIME_14: Every ~6.4 months.\n - REJOIN_TIME_15: Every ~1.1 year.", + "type": "string", + "default": "REJOIN_TIME_0", + "enum": [ + "REJOIN_TIME_0", + "REJOIN_TIME_1", + "REJOIN_TIME_2", + "REJOIN_TIME_3", + "REJOIN_TIME_4", + "REJOIN_TIME_5", + "REJOIN_TIME_6", + "REJOIN_TIME_7", + "REJOIN_TIME_8", + "REJOIN_TIME_9", + "REJOIN_TIME_10", + "REJOIN_TIME_11", + "REJOIN_TIME_12", + "REJOIN_TIME_13", + "REJOIN_TIME_14", + "REJOIN_TIME_15" + ] + }, + "relay": { + "description": "RelayParameters represent the parameters of a relay.\nThis is used internally by the Network Server.", + "type": "object", + "properties": { + "served": { + "type": "object", + "properties": { + "always": { + "type": "object" + }, + "backoff": { + "description": "Number of wake on radio frames to be sent without an acknowledgement before sending the uplink message directly.", + "type": "integer", + "format": "int64" + }, + "dynamic": { + "type": "object", + "properties": { + "smart_enable_level": { + "type": "string", + "default": "RELAY_SMART_ENABLE_LEVEL_8", + "enum": [ + "RELAY_SMART_ENABLE_LEVEL_8", + "RELAY_SMART_ENABLE_LEVEL_16", + "RELAY_SMART_ENABLE_LEVEL_32", + "RELAY_SMART_ENABLE_LEVEL_64" + ] + } + } + }, + "end_device_controlled": { + "type": "object" + }, + "second_channel": { + "type": "object", + "properties": { + "ack_offset": { + "type": "string", + "title": "- RELAY_SECOND_CH_ACK_OFFSET_0: 0 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_200: 200 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_400: 400 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_800: 800 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_1600: 1.6 MHz\n - RELAY_SECOND_CH_ACK_OFFSET_3200: 3.2 MHz", + "default": "RELAY_SECOND_CH_ACK_OFFSET_0", + "enum": [ + "RELAY_SECOND_CH_ACK_OFFSET_0", + "RELAY_SECOND_CH_ACK_OFFSET_200", + "RELAY_SECOND_CH_ACK_OFFSET_400", + "RELAY_SECOND_CH_ACK_OFFSET_800", + "RELAY_SECOND_CH_ACK_OFFSET_1600", + "RELAY_SECOND_CH_ACK_OFFSET_3200" + ] + }, + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "frequency": { + "description": "The frequency (Hz) used by the wake on radio message.", + "type": "string", + "format": "uint64" + } + } + }, + "serving_device_id": { + "description": "End device identifier of the serving end device.", + "type": "string" + } + } + }, + "serving": { + "type": "object", + "properties": { + "cad_periodicity": { + "type": "string", + "title": "- RELAY_CAD_PERIODICITY_20_MILLISECONDS: sic", + "default": "RELAY_CAD_PERIODICITY_1_SECOND", + "enum": [ + "RELAY_CAD_PERIODICITY_1_SECOND", + "RELAY_CAD_PERIODICITY_500_MILLISECONDS", + "RELAY_CAD_PERIODICITY_250_MILLISECONDS", + "RELAY_CAD_PERIODICITY_100_MILLISECONDS", + "RELAY_CAD_PERIODICITY_50_MILLISECONDS", + "RELAY_CAD_PERIODICITY_20_MILLISECONDS" + ] + }, + "default_channel_index": { + "description": "Index of the default wake on radio channel.", + "type": "integer", + "format": "int64" + }, + "limits": { + "type": "object", + "properties": { + "join_requests": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "notifications": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "overall": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "reset_behavior": { + "type": "string", + "default": "RELAY_RESET_LIMIT_COUNTER_ZERO", + "enum": [ + "RELAY_RESET_LIMIT_COUNTER_ZERO", + "RELAY_RESET_LIMIT_COUNTER_RELOAD_RATE", + "RELAY_RESET_LIMIT_COUNTER_MAX_VALUE", + "RELAY_RESET_LIMIT_COUNTER_NO_RESET" + ] + }, + "uplink_messages": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + } + } + }, + "second_channel": { + "type": "object", + "properties": { + "ack_offset": { + "type": "string", + "title": "- RELAY_SECOND_CH_ACK_OFFSET_0: 0 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_200: 200 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_400: 400 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_800: 800 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_1600: 1.6 MHz\n - RELAY_SECOND_CH_ACK_OFFSET_3200: 3.2 MHz", + "default": "RELAY_SECOND_CH_ACK_OFFSET_0", + "enum": [ + "RELAY_SECOND_CH_ACK_OFFSET_0", + "RELAY_SECOND_CH_ACK_OFFSET_200", + "RELAY_SECOND_CH_ACK_OFFSET_400", + "RELAY_SECOND_CH_ACK_OFFSET_800", + "RELAY_SECOND_CH_ACK_OFFSET_1600", + "RELAY_SECOND_CH_ACK_OFFSET_3200" + ] + }, + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "frequency": { + "description": "The frequency (Hz) used by the wake on radio message.", + "type": "string", + "format": "uint64" + } + } + }, + "uplink_forwarding_rules": { + "description": "Configured uplink forwarding rules.", + "type": "array", + "items": { + "type": "object", + "properties": { + "device_id": { + "description": "End device identifier of the served end device.", + "type": "string" + }, + "last_w_f_cnt": { + "description": "Last wake on radio frame counter used by the served end device.", + "type": "integer", + "format": "int64" + }, + "limits": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "session_key_id": { + "description": "Session key ID of the session keys used to derive the root relay session key.", + "type": "string", + "format": "byte" + } + } + } + } + } + } + } + }, + "rx1_data_rate_offset": { + "type": "string", + "default": "DATA_RATE_OFFSET_0", + "enum": [ + "DATA_RATE_OFFSET_0", + "DATA_RATE_OFFSET_1", + "DATA_RATE_OFFSET_2", + "DATA_RATE_OFFSET_3", + "DATA_RATE_OFFSET_4", + "DATA_RATE_OFFSET_5", + "DATA_RATE_OFFSET_6", + "DATA_RATE_OFFSET_7" + ] + }, + "rx1_delay": { + "description": " - RX_DELAY_0: 1 second.\n - RX_DELAY_1: 1 second.\n - RX_DELAY_2: 2 seconds.\n - RX_DELAY_3: 3 seconds.\n - RX_DELAY_4: 4 seconds.\n - RX_DELAY_5: 5 seconds.\n - RX_DELAY_6: 6 seconds.\n - RX_DELAY_7: 7 seconds.\n - RX_DELAY_8: 8 seconds.\n - RX_DELAY_9: 9 seconds.\n - RX_DELAY_10: 10 seconds.\n - RX_DELAY_11: 11 seconds.\n - RX_DELAY_12: 12 seconds.\n - RX_DELAY_13: 13 seconds.\n - RX_DELAY_14: 14 seconds.\n - RX_DELAY_15: 15 seconds.", + "type": "string", + "default": "RX_DELAY_0", + "enum": [ + "RX_DELAY_0", + "RX_DELAY_1", + "RX_DELAY_2", + "RX_DELAY_3", + "RX_DELAY_4", + "RX_DELAY_5", + "RX_DELAY_6", + "RX_DELAY_7", + "RX_DELAY_8", + "RX_DELAY_9", + "RX_DELAY_10", + "RX_DELAY_11", + "RX_DELAY_12", + "RX_DELAY_13", + "RX_DELAY_14", + "RX_DELAY_15" + ] + }, + "rx2_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "rx2_frequency": { + "description": "Frequency for Rx2 (Hz).", + "type": "string", + "format": "uint64" + }, + "uplink_dwell_time": { + "type": "object", + "properties": { + "value": { + "type": "boolean" + } + } + } + } + }, + "device_class": { + "type": "string", + "default": "CLASS_A", + "enum": [ + "CLASS_A", + "CLASS_B", + "CLASS_C" + ] + }, + "last_adr_change_f_cnt_up": { + "description": "Frame counter of uplink, which confirmed the last ADR parameter change.", + "type": "integer", + "format": "int64" + }, + "last_confirmed_downlink_at": { + "description": "Time when the last confirmed downlink message or MAC command was scheduled.", + "type": "string", + "format": "date-time" + }, + "last_dev_status_f_cnt_up": { + "description": "Frame counter value of last uplink containing DevStatusAns.", + "type": "integer", + "format": "int64" + }, + "last_downlink_at": { + "description": "Time when the last downlink message was scheduled.", + "type": "string", + "format": "date-time" + }, + "last_network_initiated_downlink_at": { + "description": "Time when the last network-initiated downlink message was scheduled.", + "type": "string", + "format": "date-time" + }, + "lorawan_version": { + "type": "string", + "default": "MAC_UNKNOWN", + "enum": [ + "MAC_UNKNOWN", + "MAC_V1_0", + "MAC_V1_0_1", + "MAC_V1_0_2", + "MAC_V1_1", + "MAC_V1_0_3", + "MAC_V1_0_4" + ] + }, + "pending_application_downlink": { + "type": "object", + "properties": { + "class_b_c": { + "type": "object", + "properties": { + "absolute_time": { + "description": "Absolute time when the downlink message should be transmitted.\nThis requires the gateway to have GPS time synchronization.\nIf the time is in the past or if there is a scheduling conflict, the downlink message fails.\nIf null, the time is selected based on slot availability. This is recommended in class B mode.", + "type": "string", + "format": "date-time" + }, + "gateways": { + "description": "Possible gateway identifiers, antenna index, and group index to use for this downlink message.\nThe Network Server selects one of these gateways for downlink, based on connectivity, signal quality, channel utilization and an available slot.\nIf none of the gateways can be selected, the downlink message fails.\nIf empty, a gateway and antenna is selected automatically from the gateways seen in recent uplinks.\nIf group index is set, gateways will be grouped by the index for the Network Server to select one gateway per group.", + "type": "array", + "items": { + "type": "object", + "properties": { + "antenna_index": { + "type": "integer", + "format": "int64" + }, + "gateway_ids": { + "type": "object", + "properties": { + "eui": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + }, + "gateway_id": { + "type": "string" + } + } + }, + "group_index": { + "type": "integer", + "format": "int64" + } + } + } + } + } + }, + "confirmed": { + "type": "boolean" + }, + "confirmed_retry": { + "type": "object", + "properties": { + "attempt": { + "description": "The number of attempted confirmed downlink acknowledgements.", + "type": "integer", + "format": "int64" + }, + "max_attempts": { + "description": "The maximum number of confirmed downlink acknowledgement attempts.\nIf null, the Application Server configuration is used instead.", + "type": "integer", + "format": "int64" + } + } + }, + "correlation_ids": { + "type": "array", + "items": { + "type": "string" + } + }, + "decoded_payload": { + "description": "The decoded frame payload of the downlink message.\nWhen scheduling downlink with a message processor configured for the end device (see formatters) or application (see default_formatters),\nthis fields acts as input for the downlink encoder, and the output is set to frm_payload.\nWhen reading downlink (listing the queue, downlink message events, etc), this fields acts as output of the downlink decoder, and the input is frm_payload.", + "type": "object" + }, + "decoded_payload_warnings": { + "description": "Warnings generated by the message processor while encoding frm_payload (scheduling downlink) or decoding the frm_payload (reading downlink).", + "type": "array", + "items": { + "type": "string" + } + }, + "f_cnt": { + "type": "integer", + "format": "int64" + }, + "f_port": { + "type": "integer", + "format": "int64" + }, + "frm_payload": { + "description": "The frame payload of the downlink message.\nThe payload is encrypted if the skip_payload_crypto field of the EndDevice\nis true.", + "type": "string", + "format": "byte" + }, + "priority": { + "type": "string", + "default": "LOWEST", + "enum": [ + "LOWEST", + "LOW", + "BELOW_NORMAL", + "NORMAL", + "ABOVE_NORMAL", + "HIGH", + "HIGHEST" + ] + }, + "session_key_id": { + "description": "Join Server issued identifier for the session keys used by this downlink.", + "type": "string", + "format": "byte" + } + } + }, + "pending_join_request": { + "type": "object", + "properties": { + "cf_list": { + "type": "object", + "properties": { + "ch_masks": { + "description": "ChMasks controlling the channels to be used.\nLength of this field must be equal to the amount of uplink channels\ndefined by the selected frequency plan.", + "type": "array", + "items": { + "type": "boolean" + } + }, + "freq": { + "description": "Frequencies to be broadcasted, in hecto-Hz.\nThese values are broadcasted as 24 bits unsigned integers.\nThis field should not contain default values.", + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + }, + "type": { + "type": "string", + "default": "FREQUENCIES", + "enum": [ + "FREQUENCIES", + "CHANNEL_MASKS" + ] + } + } + }, + "downlink_settings": { + "type": "object", + "properties": { + "opt_neg": { + "description": "OptNeg is set if Network Server implements LoRaWAN 1.1 or greater.", + "type": "boolean" + }, + "rx1_dr_offset": { + "type": "string", + "default": "DATA_RATE_OFFSET_0", + "enum": [ + "DATA_RATE_OFFSET_0", + "DATA_RATE_OFFSET_1", + "DATA_RATE_OFFSET_2", + "DATA_RATE_OFFSET_3", + "DATA_RATE_OFFSET_4", + "DATA_RATE_OFFSET_5", + "DATA_RATE_OFFSET_6", + "DATA_RATE_OFFSET_7" + ] + }, + "rx2_dr": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + } + } + }, + "rx_delay": { + "description": " - RX_DELAY_0: 1 second.\n - RX_DELAY_1: 1 second.\n - RX_DELAY_2: 2 seconds.\n - RX_DELAY_3: 3 seconds.\n - RX_DELAY_4: 4 seconds.\n - RX_DELAY_5: 5 seconds.\n - RX_DELAY_6: 6 seconds.\n - RX_DELAY_7: 7 seconds.\n - RX_DELAY_8: 8 seconds.\n - RX_DELAY_9: 9 seconds.\n - RX_DELAY_10: 10 seconds.\n - RX_DELAY_11: 11 seconds.\n - RX_DELAY_12: 12 seconds.\n - RX_DELAY_13: 13 seconds.\n - RX_DELAY_14: 14 seconds.\n - RX_DELAY_15: 15 seconds.", + "type": "string", + "default": "RX_DELAY_0", + "enum": [ + "RX_DELAY_0", + "RX_DELAY_1", + "RX_DELAY_2", + "RX_DELAY_3", + "RX_DELAY_4", + "RX_DELAY_5", + "RX_DELAY_6", + "RX_DELAY_7", + "RX_DELAY_8", + "RX_DELAY_9", + "RX_DELAY_10", + "RX_DELAY_11", + "RX_DELAY_12", + "RX_DELAY_13", + "RX_DELAY_14", + "RX_DELAY_15" + ] + } + } + }, + "pending_relay_downlink": { + "type": "object", + "properties": { + "raw_payload": { + "type": "string", + "format": "byte" + } + } + }, + "pending_requests": { + "description": "Pending MAC requests(i.e. sent requests, for which no response has been received yet).\nRegenerated on each downlink.", + "type": "array", + "items": { + "type": "object", + "properties": { + "adr_param_setup_req": { + "type": "object", + "properties": { + "adr_ack_delay_exponent": { + "type": "string", + "default": "ADR_ACK_DELAY_1", + "enum": [ + "ADR_ACK_DELAY_1", + "ADR_ACK_DELAY_2", + "ADR_ACK_DELAY_4", + "ADR_ACK_DELAY_8", + "ADR_ACK_DELAY_16", + "ADR_ACK_DELAY_32", + "ADR_ACK_DELAY_64", + "ADR_ACK_DELAY_128", + "ADR_ACK_DELAY_256", + "ADR_ACK_DELAY_512", + "ADR_ACK_DELAY_1024", + "ADR_ACK_DELAY_2048", + "ADR_ACK_DELAY_4096", + "ADR_ACK_DELAY_8192", + "ADR_ACK_DELAY_16384", + "ADR_ACK_DELAY_32768" + ] + }, + "adr_ack_limit_exponent": { + "type": "string", + "default": "ADR_ACK_LIMIT_1", + "enum": [ + "ADR_ACK_LIMIT_1", + "ADR_ACK_LIMIT_2", + "ADR_ACK_LIMIT_4", + "ADR_ACK_LIMIT_8", + "ADR_ACK_LIMIT_16", + "ADR_ACK_LIMIT_32", + "ADR_ACK_LIMIT_64", + "ADR_ACK_LIMIT_128", + "ADR_ACK_LIMIT_256", + "ADR_ACK_LIMIT_512", + "ADR_ACK_LIMIT_1024", + "ADR_ACK_LIMIT_2048", + "ADR_ACK_LIMIT_4096", + "ADR_ACK_LIMIT_8192", + "ADR_ACK_LIMIT_16384", + "ADR_ACK_LIMIT_32768" + ] + } + } + }, + "beacon_freq_ans": { + "type": "object", + "properties": { + "frequency_ack": { + "type": "boolean" + } + } + }, + "beacon_freq_req": { + "type": "object", + "properties": { + "frequency": { + "description": "Frequency of the Class B beacons (Hz).", + "type": "string", + "format": "uint64" + } + } + }, + "beacon_timing_ans": { + "type": "object", + "properties": { + "channel_index": { + "type": "integer", + "format": "int64" + }, + "delay": { + "description": "(uint16) See LoRaWAN specification.", + "type": "integer", + "format": "int64" + } + } + }, + "cid": { + "type": "string", + "title": "- CID_BEACON_TIMING: Deprecated", + "default": "CID_RFU_0", + "enum": [ + "CID_RFU_0", + "CID_RESET", + "CID_LINK_CHECK", + "CID_LINK_ADR", + "CID_DUTY_CYCLE", + "CID_RX_PARAM_SETUP", + "CID_DEV_STATUS", + "CID_NEW_CHANNEL", + "CID_RX_TIMING_SETUP", + "CID_TX_PARAM_SETUP", + "CID_DL_CHANNEL", + "CID_REKEY", + "CID_ADR_PARAM_SETUP", + "CID_DEVICE_TIME", + "CID_FORCE_REJOIN", + "CID_REJOIN_PARAM_SETUP", + "CID_PING_SLOT_INFO", + "CID_PING_SLOT_CHANNEL", + "CID_BEACON_TIMING", + "CID_BEACON_FREQ", + "CID_DEVICE_MODE", + "CID_RELAY_CONF", + "CID_RELAY_END_DEVICE_CONF", + "CID_RELAY_FILTER_LIST", + "CID_RELAY_UPDATE_UPLINK_LIST", + "CID_RELAY_CTRL_UPLINK_LIST", + "CID_RELAY_CONFIGURE_FWD_LIMIT", + "CID_RELAY_NOTIFY_NEW_END_DEVICE" + ] + }, + "dev_status_ans": { + "type": "object", + "properties": { + "battery": { + "description": "Device battery status.\n0 indicates that the device is connected to an external power source.\n1..254 indicates a battery level.\n255 indicates that the device was not able to measure the battery level.", + "type": "integer", + "format": "int64" + }, + "margin": { + "description": "SNR of the last downlink (dB; [-32, +31]).", + "type": "integer", + "format": "int32" + } + } + }, + "device_mode_conf": { + "type": "object", + "properties": { + "class": { + "type": "string", + "default": "CLASS_A", + "enum": [ + "CLASS_A", + "CLASS_B", + "CLASS_C" + ] + } + } + }, + "device_mode_ind": { + "type": "object", + "properties": { + "class": { + "type": "string", + "default": "CLASS_A", + "enum": [ + "CLASS_A", + "CLASS_B", + "CLASS_C" + ] + } + } + }, + "device_time_ans": { + "type": "object", + "properties": { + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "dl_channel_ans": { + "type": "object", + "properties": { + "channel_index_ack": { + "type": "boolean" + }, + "frequency_ack": { + "type": "boolean" + } + } + }, + "dl_channel_req": { + "type": "object", + "properties": { + "channel_index": { + "type": "integer", + "format": "int64" + }, + "frequency": { + "description": "Downlink channel frequency (Hz).", + "type": "string", + "format": "uint64" + } + } + }, + "duty_cycle_req": { + "type": "object", + "properties": { + "max_duty_cycle": { + "description": " - DUTY_CYCLE_1: 100%.\n - DUTY_CYCLE_2: 50%.\n - DUTY_CYCLE_4: 25%.\n - DUTY_CYCLE_8: 12.5%.\n - DUTY_CYCLE_16: 6.25%.\n - DUTY_CYCLE_32: 3.125%.\n - DUTY_CYCLE_64: 1.5625%.\n - DUTY_CYCLE_128: Roughly 0.781%.\n - DUTY_CYCLE_256: Roughly 0.390%.\n - DUTY_CYCLE_512: Roughly 0.195%.\n - DUTY_CYCLE_1024: Roughly 0.098%.\n - DUTY_CYCLE_2048: Roughly 0.049%.\n - DUTY_CYCLE_4096: Roughly 0.024%.\n - DUTY_CYCLE_8192: Roughly 0.012%.\n - DUTY_CYCLE_16384: Roughly 0.006%.\n - DUTY_CYCLE_32768: Roughly 0.003%.", + "type": "string", + "default": "DUTY_CYCLE_1", + "enum": [ + "DUTY_CYCLE_1", + "DUTY_CYCLE_2", + "DUTY_CYCLE_4", + "DUTY_CYCLE_8", + "DUTY_CYCLE_16", + "DUTY_CYCLE_32", + "DUTY_CYCLE_64", + "DUTY_CYCLE_128", + "DUTY_CYCLE_256", + "DUTY_CYCLE_512", + "DUTY_CYCLE_1024", + "DUTY_CYCLE_2048", + "DUTY_CYCLE_4096", + "DUTY_CYCLE_8192", + "DUTY_CYCLE_16384", + "DUTY_CYCLE_32768" + ] + } + } + }, + "force_rejoin_req": { + "type": "object", + "properties": { + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "max_retries": { + "type": "integer", + "format": "int64" + }, + "period_exponent": { + "description": " - REJOIN_PERIOD_0: Every 32 to 64 seconds.\n - REJOIN_PERIOD_1: Every 64 to 96 seconds.\n - REJOIN_PERIOD_2: Every 128 to 160 seconds.\n - REJOIN_PERIOD_3: Every 256 to 288 seconds.\n - REJOIN_PERIOD_4: Every 512 to 544 seconds.\n - REJOIN_PERIOD_5: Every 1024 to 1056 seconds.\n - REJOIN_PERIOD_6: Every 2048 to 2080 seconds.\n - REJOIN_PERIOD_7: Every 4096 to 4128 seconds.", + "type": "string", + "default": "REJOIN_PERIOD_0", + "enum": [ + "REJOIN_PERIOD_0", + "REJOIN_PERIOD_1", + "REJOIN_PERIOD_2", + "REJOIN_PERIOD_3", + "REJOIN_PERIOD_4", + "REJOIN_PERIOD_5", + "REJOIN_PERIOD_6", + "REJOIN_PERIOD_7" + ] + }, + "rejoin_type": { + "description": " - CONTEXT: Resets DevAddr, Session Keys, Frame Counters, Radio Parameters.\n - SESSION: Equivalent to the initial JoinRequest.\n - KEYS: Resets DevAddr, Session Keys, Frame Counters, while keeping the Radio Parameters.", + "type": "string", + "default": "CONTEXT", + "enum": [ + "CONTEXT", + "SESSION", + "KEYS" + ] + } + } + }, + "link_adr_ans": { + "type": "object", + "properties": { + "channel_mask_ack": { + "type": "boolean" + }, + "data_rate_index_ack": { + "type": "boolean" + }, + "tx_power_index_ack": { + "type": "boolean" + } + } + }, + "link_adr_req": { + "type": "object", + "properties": { + "channel_mask": { + "type": "array", + "items": { + "type": "boolean" + } + }, + "channel_mask_control": { + "type": "integer", + "format": "int64" + }, + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "nb_trans": { + "type": "integer", + "format": "int64" + }, + "tx_power_index": { + "type": "integer", + "format": "int64" + } + } + }, + "link_check_ans": { + "type": "object", + "properties": { + "gateway_count": { + "type": "integer", + "format": "int64" + }, + "margin": { + "description": "Indicates the link margin in dB of the received LinkCheckReq, relative to the demodulation floor.", + "type": "integer", + "format": "int64" + } + } + }, + "new_channel_ans": { + "type": "object", + "properties": { + "data_rate_ack": { + "type": "boolean" + }, + "frequency_ack": { + "type": "boolean" + } + } + }, + "new_channel_req": { + "type": "object", + "properties": { + "channel_index": { + "type": "integer", + "format": "int64" + }, + "frequency": { + "description": "Channel frequency (Hz).", + "type": "string", + "format": "uint64" + }, + "max_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "min_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + } + } + }, + "ping_slot_channel_ans": { + "type": "object", + "properties": { + "data_rate_index_ack": { + "type": "boolean" + }, + "frequency_ack": { + "type": "boolean" + } + } + }, + "ping_slot_channel_req": { + "type": "object", + "properties": { + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "frequency": { + "description": "Ping slot channel frequency (Hz).", + "type": "string", + "format": "uint64" + } + } + }, + "ping_slot_info_req": { + "type": "object", + "properties": { + "period": { + "description": " - PING_EVERY_1S: Every second.\n - PING_EVERY_2S: Every 2 seconds.\n - PING_EVERY_4S: Every 4 seconds.\n - PING_EVERY_8S: Every 8 seconds.\n - PING_EVERY_16S: Every 16 seconds.\n - PING_EVERY_32S: Every 32 seconds.\n - PING_EVERY_64S: Every 64 seconds.\n - PING_EVERY_128S: Every 128 seconds.", + "type": "string", + "default": "PING_EVERY_1S", + "enum": [ + "PING_EVERY_1S", + "PING_EVERY_2S", + "PING_EVERY_4S", + "PING_EVERY_8S", + "PING_EVERY_16S", + "PING_EVERY_32S", + "PING_EVERY_64S", + "PING_EVERY_128S" + ] + } + } + }, + "raw_payload": { + "type": "string", + "format": "byte" + }, + "rejoin_param_setup_ans": { + "type": "object", + "properties": { + "max_time_exponent_ack": { + "type": "boolean" + } + } + }, + "rejoin_param_setup_req": { + "type": "object", + "properties": { + "max_count_exponent": { + "type": "string", + "default": "REJOIN_COUNT_16", + "enum": [ + "REJOIN_COUNT_16", + "REJOIN_COUNT_32", + "REJOIN_COUNT_64", + "REJOIN_COUNT_128", + "REJOIN_COUNT_256", + "REJOIN_COUNT_512", + "REJOIN_COUNT_1024", + "REJOIN_COUNT_2048", + "REJOIN_COUNT_4096", + "REJOIN_COUNT_8192", + "REJOIN_COUNT_16384", + "REJOIN_COUNT_32768", + "REJOIN_COUNT_65536", + "REJOIN_COUNT_131072", + "REJOIN_COUNT_262144", + "REJOIN_COUNT_524288" + ] + }, + "max_time_exponent": { + "description": " - REJOIN_TIME_0: Every ~17.1 minutes.\n - REJOIN_TIME_1: Every ~34.1 minutes.\n - REJOIN_TIME_2: Every ~1.1 hours.\n - REJOIN_TIME_3: Every ~2.3 hours.\n - REJOIN_TIME_4: Every ~4.6 hours.\n - REJOIN_TIME_5: Every ~9.1 hours.\n - REJOIN_TIME_6: Every ~18.2 hours.\n - REJOIN_TIME_7: Every ~1.5 days.\n - REJOIN_TIME_8: Every ~3.0 days.\n - REJOIN_TIME_9: Every ~6.1 days.\n - REJOIN_TIME_10: Every ~12.1 days.\n - REJOIN_TIME_11: Every ~3.5 weeks.\n - REJOIN_TIME_12: Every ~1.6 months.\n - REJOIN_TIME_13: Every ~3.2 months.\n - REJOIN_TIME_14: Every ~6.4 months.\n - REJOIN_TIME_15: Every ~1.1 year.", + "type": "string", + "default": "REJOIN_TIME_0", + "enum": [ + "REJOIN_TIME_0", + "REJOIN_TIME_1", + "REJOIN_TIME_2", + "REJOIN_TIME_3", + "REJOIN_TIME_4", + "REJOIN_TIME_5", + "REJOIN_TIME_6", + "REJOIN_TIME_7", + "REJOIN_TIME_8", + "REJOIN_TIME_9", + "REJOIN_TIME_10", + "REJOIN_TIME_11", + "REJOIN_TIME_12", + "REJOIN_TIME_13", + "REJOIN_TIME_14", + "REJOIN_TIME_15" + ] + } + } + }, + "rekey_conf": { + "type": "object", + "properties": { + "minor_version": { + "type": "string", + "default": "MINOR_RFU_0", + "enum": [ + "MINOR_RFU_0", + "MINOR_1", + "MINOR_RFU_2", + "MINOR_RFU_3", + "MINOR_RFU_4", + "MINOR_RFU_5", + "MINOR_RFU_6", + "MINOR_RFU_7", + "MINOR_RFU_8", + "MINOR_RFU_9", + "MINOR_RFU_10", + "MINOR_RFU_11", + "MINOR_RFU_12", + "MINOR_RFU_13", + "MINOR_RFU_14", + "MINOR_RFU_15" + ] + } + } + }, + "rekey_ind": { + "type": "object", + "properties": { + "minor_version": { + "type": "string", + "default": "MINOR_RFU_0", + "enum": [ + "MINOR_RFU_0", + "MINOR_1", + "MINOR_RFU_2", + "MINOR_RFU_3", + "MINOR_RFU_4", + "MINOR_RFU_5", + "MINOR_RFU_6", + "MINOR_RFU_7", + "MINOR_RFU_8", + "MINOR_RFU_9", + "MINOR_RFU_10", + "MINOR_RFU_11", + "MINOR_RFU_12", + "MINOR_RFU_13", + "MINOR_RFU_14", + "MINOR_RFU_15" + ] + } + } + }, + "relay_conf_ans": { + "type": "object", + "properties": { + "cad_periodicity_ack": { + "type": "boolean" + }, + "default_channel_index_ack": { + "type": "boolean" + }, + "second_channel_ack_offset_ack": { + "type": "boolean" + }, + "second_channel_data_rate_index_ack": { + "type": "boolean" + }, + "second_channel_frequency_ack": { + "type": "boolean" + }, + "second_channel_index_ack": { + "type": "boolean" + } + } + }, + "relay_conf_req": { + "type": "object", + "properties": { + "configuration": { + "type": "object", + "properties": { + "cad_periodicity": { + "type": "string", + "title": "- RELAY_CAD_PERIODICITY_20_MILLISECONDS: sic", + "default": "RELAY_CAD_PERIODICITY_1_SECOND", + "enum": [ + "RELAY_CAD_PERIODICITY_1_SECOND", + "RELAY_CAD_PERIODICITY_500_MILLISECONDS", + "RELAY_CAD_PERIODICITY_250_MILLISECONDS", + "RELAY_CAD_PERIODICITY_100_MILLISECONDS", + "RELAY_CAD_PERIODICITY_50_MILLISECONDS", + "RELAY_CAD_PERIODICITY_20_MILLISECONDS" + ] + }, + "default_channel_index": { + "type": "integer", + "format": "int64" + }, + "second_channel": { + "type": "object", + "properties": { + "ack_offset": { + "type": "string", + "title": "- RELAY_SECOND_CH_ACK_OFFSET_0: 0 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_200: 200 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_400: 400 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_800: 800 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_1600: 1.6 MHz\n - RELAY_SECOND_CH_ACK_OFFSET_3200: 3.2 MHz", + "default": "RELAY_SECOND_CH_ACK_OFFSET_0", + "enum": [ + "RELAY_SECOND_CH_ACK_OFFSET_0", + "RELAY_SECOND_CH_ACK_OFFSET_200", + "RELAY_SECOND_CH_ACK_OFFSET_400", + "RELAY_SECOND_CH_ACK_OFFSET_800", + "RELAY_SECOND_CH_ACK_OFFSET_1600", + "RELAY_SECOND_CH_ACK_OFFSET_3200" + ] + }, + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "frequency": { + "description": "The frequency (Hz) used by the wake on radio message.", + "type": "string", + "format": "uint64" + } + } + } + } + } + } + }, + "relay_configure_fwd_limit_ans": { + "type": "object" + }, + "relay_configure_fwd_limit_req": { + "type": "object", + "properties": { + "global_uplink_limits": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "join_request_limits": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "notify_limits": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "overall_limits": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "reset_limit_counter": { + "type": "string", + "default": "RELAY_RESET_LIMIT_COUNTER_ZERO", + "enum": [ + "RELAY_RESET_LIMIT_COUNTER_ZERO", + "RELAY_RESET_LIMIT_COUNTER_RELOAD_RATE", + "RELAY_RESET_LIMIT_COUNTER_MAX_VALUE", + "RELAY_RESET_LIMIT_COUNTER_NO_RESET" + ] + } + } + }, + "relay_ctrl_uplink_list_ans": { + "type": "object", + "properties": { + "rule_index_ack": { + "type": "boolean" + }, + "w_f_cnt": { + "type": "integer", + "format": "int64" + } + } + }, + "relay_ctrl_uplink_list_req": { + "type": "object", + "properties": { + "action": { + "type": "string", + "default": "RELAY_CTRL_UPLINK_LIST_ACTION_READ_W_F_CNT", + "enum": [ + "RELAY_CTRL_UPLINK_LIST_ACTION_READ_W_F_CNT", + "RELAY_CTRL_UPLINK_LIST_ACTION_REMOVE_TRUSTED_END_DEVICE" + ] + }, + "rule_index": { + "type": "integer", + "format": "int64" + } + } + }, + "relay_end_device_conf_ans": { + "type": "object", + "properties": { + "backoff_ack": { + "type": "boolean" + }, + "second_channel_data_rate_index_ack": { + "type": "boolean" + }, + "second_channel_frequency_ack": { + "type": "boolean" + }, + "second_channel_index_ack": { + "type": "boolean" + } + } + }, + "relay_end_device_conf_req": { + "type": "object", + "properties": { + "configuration": { + "type": "object", + "properties": { + "always": { + "type": "object" + }, + "backoff": { + "type": "integer", + "format": "int64" + }, + "dynamic": { + "type": "object", + "properties": { + "smart_enable_level": { + "type": "string", + "default": "RELAY_SMART_ENABLE_LEVEL_8", + "enum": [ + "RELAY_SMART_ENABLE_LEVEL_8", + "RELAY_SMART_ENABLE_LEVEL_16", + "RELAY_SMART_ENABLE_LEVEL_32", + "RELAY_SMART_ENABLE_LEVEL_64" + ] + } + } + }, + "end_device_controlled": { + "type": "object" + }, + "second_channel": { + "type": "object", + "properties": { + "ack_offset": { + "type": "string", + "title": "- RELAY_SECOND_CH_ACK_OFFSET_0: 0 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_200: 200 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_400: 400 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_800: 800 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_1600: 1.6 MHz\n - RELAY_SECOND_CH_ACK_OFFSET_3200: 3.2 MHz", + "default": "RELAY_SECOND_CH_ACK_OFFSET_0", + "enum": [ + "RELAY_SECOND_CH_ACK_OFFSET_0", + "RELAY_SECOND_CH_ACK_OFFSET_200", + "RELAY_SECOND_CH_ACK_OFFSET_400", + "RELAY_SECOND_CH_ACK_OFFSET_800", + "RELAY_SECOND_CH_ACK_OFFSET_1600", + "RELAY_SECOND_CH_ACK_OFFSET_3200" + ] + }, + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "frequency": { + "description": "The frequency (Hz) used by the wake on radio message.", + "type": "string", + "format": "uint64" + } + } + }, + "serving_device_id": { + "type": "string" + } + } + } + } + }, + "relay_notify_new_end_device_req": { + "type": "object", + "properties": { + "dev_addr": { + "type": "string", + "format": "string", + "example": "2600ABCD" + }, + "rssi": { + "type": "integer", + "format": "int32" + }, + "snr": { + "type": "integer", + "format": "int32" + } + } + }, + "relay_update_uplink_list_ans": { + "type": "object" + }, + "relay_update_uplink_list_req": { + "type": "object", + "properties": { + "dev_addr": { + "type": "string", + "format": "string", + "example": "2600ABCD" + }, + "device_id": { + "type": "string" + }, + "forward_limits": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "root_wor_s_key": { + "type": "string", + "format": "string", + "example": "0123456789ABCDEF0123456789ABCDEF" + }, + "rule_index": { + "type": "integer", + "format": "int64" + }, + "session_key_id": { + "type": "string", + "format": "byte" + }, + "w_f_cnt": { + "type": "integer", + "format": "int64" + } + } + }, + "reset_conf": { + "type": "object", + "properties": { + "minor_version": { + "type": "string", + "default": "MINOR_RFU_0", + "enum": [ + "MINOR_RFU_0", + "MINOR_1", + "MINOR_RFU_2", + "MINOR_RFU_3", + "MINOR_RFU_4", + "MINOR_RFU_5", + "MINOR_RFU_6", + "MINOR_RFU_7", + "MINOR_RFU_8", + "MINOR_RFU_9", + "MINOR_RFU_10", + "MINOR_RFU_11", + "MINOR_RFU_12", + "MINOR_RFU_13", + "MINOR_RFU_14", + "MINOR_RFU_15" + ] + } + } + }, + "reset_ind": { + "type": "object", + "properties": { + "minor_version": { + "type": "string", + "default": "MINOR_RFU_0", + "enum": [ + "MINOR_RFU_0", + "MINOR_1", + "MINOR_RFU_2", + "MINOR_RFU_3", + "MINOR_RFU_4", + "MINOR_RFU_5", + "MINOR_RFU_6", + "MINOR_RFU_7", + "MINOR_RFU_8", + "MINOR_RFU_9", + "MINOR_RFU_10", + "MINOR_RFU_11", + "MINOR_RFU_12", + "MINOR_RFU_13", + "MINOR_RFU_14", + "MINOR_RFU_15" + ] + } + } + }, + "rx_param_setup_ans": { + "type": "object", + "properties": { + "rx1_data_rate_offset_ack": { + "type": "boolean" + }, + "rx2_data_rate_index_ack": { + "type": "boolean" + }, + "rx2_frequency_ack": { + "type": "boolean" + } + } + }, + "rx_param_setup_req": { + "type": "object", + "properties": { + "rx1_data_rate_offset": { + "type": "string", + "default": "DATA_RATE_OFFSET_0", + "enum": [ + "DATA_RATE_OFFSET_0", + "DATA_RATE_OFFSET_1", + "DATA_RATE_OFFSET_2", + "DATA_RATE_OFFSET_3", + "DATA_RATE_OFFSET_4", + "DATA_RATE_OFFSET_5", + "DATA_RATE_OFFSET_6", + "DATA_RATE_OFFSET_7" + ] + }, + "rx2_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "rx2_frequency": { + "description": "Rx2 frequency (Hz).", + "type": "string", + "format": "uint64" + } + } + }, + "rx_timing_setup_req": { + "type": "object", + "properties": { + "delay": { + "description": " - RX_DELAY_0: 1 second.\n - RX_DELAY_1: 1 second.\n - RX_DELAY_2: 2 seconds.\n - RX_DELAY_3: 3 seconds.\n - RX_DELAY_4: 4 seconds.\n - RX_DELAY_5: 5 seconds.\n - RX_DELAY_6: 6 seconds.\n - RX_DELAY_7: 7 seconds.\n - RX_DELAY_8: 8 seconds.\n - RX_DELAY_9: 9 seconds.\n - RX_DELAY_10: 10 seconds.\n - RX_DELAY_11: 11 seconds.\n - RX_DELAY_12: 12 seconds.\n - RX_DELAY_13: 13 seconds.\n - RX_DELAY_14: 14 seconds.\n - RX_DELAY_15: 15 seconds.", + "type": "string", + "default": "RX_DELAY_0", + "enum": [ + "RX_DELAY_0", + "RX_DELAY_1", + "RX_DELAY_2", + "RX_DELAY_3", + "RX_DELAY_4", + "RX_DELAY_5", + "RX_DELAY_6", + "RX_DELAY_7", + "RX_DELAY_8", + "RX_DELAY_9", + "RX_DELAY_10", + "RX_DELAY_11", + "RX_DELAY_12", + "RX_DELAY_13", + "RX_DELAY_14", + "RX_DELAY_15" + ] + } + } + }, + "tx_param_setup_req": { + "type": "object", + "properties": { + "downlink_dwell_time": { + "type": "boolean" + }, + "max_eirp_index": { + "description": " - DEVICE_EIRP_8: 8 dBm.\n - DEVICE_EIRP_10: 10 dBm.\n - DEVICE_EIRP_12: 12 dBm.\n - DEVICE_EIRP_13: 13 dBm.\n - DEVICE_EIRP_14: 14 dBm.\n - DEVICE_EIRP_16: 16 dBm.\n - DEVICE_EIRP_18: 18 dBm.\n - DEVICE_EIRP_20: 20 dBm.\n - DEVICE_EIRP_21: 21 dBm.\n - DEVICE_EIRP_24: 24 dBm.\n - DEVICE_EIRP_26: 26 dBm.\n - DEVICE_EIRP_27: 27 dBm.\n - DEVICE_EIRP_29: 29 dBm.\n - DEVICE_EIRP_30: 30 dBm.\n - DEVICE_EIRP_33: 33 dBm.\n - DEVICE_EIRP_36: 36 dBm.", + "type": "string", + "default": "DEVICE_EIRP_8", + "enum": [ + "DEVICE_EIRP_8", + "DEVICE_EIRP_10", + "DEVICE_EIRP_12", + "DEVICE_EIRP_13", + "DEVICE_EIRP_14", + "DEVICE_EIRP_16", + "DEVICE_EIRP_18", + "DEVICE_EIRP_20", + "DEVICE_EIRP_21", + "DEVICE_EIRP_24", + "DEVICE_EIRP_26", + "DEVICE_EIRP_27", + "DEVICE_EIRP_29", + "DEVICE_EIRP_30", + "DEVICE_EIRP_33", + "DEVICE_EIRP_36" + ] + }, + "uplink_dwell_time": { + "type": "boolean" + } + } + } + } + } + }, + "ping_slot_periodicity": { + "type": "object", + "properties": { + "value": { + "description": " - PING_EVERY_1S: Every second.\n - PING_EVERY_2S: Every 2 seconds.\n - PING_EVERY_4S: Every 4 seconds.\n - PING_EVERY_8S: Every 8 seconds.\n - PING_EVERY_16S: Every 16 seconds.\n - PING_EVERY_32S: Every 32 seconds.\n - PING_EVERY_64S: Every 64 seconds.\n - PING_EVERY_128S: Every 128 seconds.", + "type": "string", + "default": "PING_EVERY_1S", + "enum": [ + "PING_EVERY_1S", + "PING_EVERY_2S", + "PING_EVERY_4S", + "PING_EVERY_8S", + "PING_EVERY_16S", + "PING_EVERY_32S", + "PING_EVERY_64S", + "PING_EVERY_128S" + ] + } + } + }, + "queued_join_accept": { + "type": "object", + "properties": { + "correlation_ids": { + "type": "array", + "items": { + "type": "string" + } + }, + "dev_addr": { + "type": "string", + "format": "string", + "example": "2600ABCD" + }, + "keys": { + "description": "Session keys for a LoRaWAN session.\nOnly the components for which the keys were meant, will have the key-encryption-key (KEK) to decrypt the individual keys.", + "type": "object", + "properties": { + "app_s_key": { + "type": "object", + "properties": { + "encrypted_key": { + "type": "string", + "format": "byte" + }, + "kek_label": { + "description": "The label of the RFC 3394 key-encryption-key (KEK) that was used to encrypt the key.", + "type": "string" + }, + "key": { + "description": "The unencrypted AES key.", + "type": "string", + "format": "string", + "example": "0123456789ABCDEF0123456789ABCDEF" + } + } + }, + "f_nwk_s_int_key": { + "type": "object", + "properties": { + "encrypted_key": { + "type": "string", + "format": "byte" + }, + "kek_label": { + "description": "The label of the RFC 3394 key-encryption-key (KEK) that was used to encrypt the key.", + "type": "string" + }, + "key": { + "description": "The unencrypted AES key.", + "type": "string", + "format": "string", + "example": "0123456789ABCDEF0123456789ABCDEF" + } + } + }, + "nwk_s_enc_key": { + "type": "object", + "properties": { + "encrypted_key": { + "type": "string", + "format": "byte" + }, + "kek_label": { + "description": "The label of the RFC 3394 key-encryption-key (KEK) that was used to encrypt the key.", + "type": "string" + }, + "key": { + "description": "The unencrypted AES key.", + "type": "string", + "format": "string", + "example": "0123456789ABCDEF0123456789ABCDEF" + } + } + }, + "s_nwk_s_int_key": { + "type": "object", + "properties": { + "encrypted_key": { + "type": "string", + "format": "byte" + }, + "kek_label": { + "description": "The label of the RFC 3394 key-encryption-key (KEK) that was used to encrypt the key.", + "type": "string" + }, + "key": { + "description": "The unencrypted AES key.", + "type": "string", + "format": "string", + "example": "0123456789ABCDEF0123456789ABCDEF" + } + } + }, + "session_key_id": { + "description": "Join Server issued identifier for the session keys.\nThis ID can be used to request the keys from the Join Server in case the are lost.", + "type": "string", + "format": "byte" + } + } + }, + "net_id": { + "type": "string", + "format": "string", + "example": "000013" + }, + "payload": { + "description": "Payload of the join-accept received from Join Server.", + "type": "string", + "format": "byte" + }, + "request": { + "type": "object", + "properties": { + "cf_list": { + "type": "object", + "properties": { + "ch_masks": { + "description": "ChMasks controlling the channels to be used.\nLength of this field must be equal to the amount of uplink channels\ndefined by the selected frequency plan.", + "type": "array", + "items": { + "type": "boolean" + } + }, + "freq": { + "description": "Frequencies to be broadcasted, in hecto-Hz.\nThese values are broadcasted as 24 bits unsigned integers.\nThis field should not contain default values.", + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + }, + "type": { + "type": "string", + "default": "FREQUENCIES", + "enum": [ + "FREQUENCIES", + "CHANNEL_MASKS" + ] + } + } + }, + "downlink_settings": { + "type": "object", + "properties": { + "opt_neg": { + "description": "OptNeg is set if Network Server implements LoRaWAN 1.1 or greater.", + "type": "boolean" + }, + "rx1_dr_offset": { + "type": "string", + "default": "DATA_RATE_OFFSET_0", + "enum": [ + "DATA_RATE_OFFSET_0", + "DATA_RATE_OFFSET_1", + "DATA_RATE_OFFSET_2", + "DATA_RATE_OFFSET_3", + "DATA_RATE_OFFSET_4", + "DATA_RATE_OFFSET_5", + "DATA_RATE_OFFSET_6", + "DATA_RATE_OFFSET_7" + ] + }, + "rx2_dr": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + } + } + }, + "rx_delay": { + "description": " - RX_DELAY_0: 1 second.\n - RX_DELAY_1: 1 second.\n - RX_DELAY_2: 2 seconds.\n - RX_DELAY_3: 3 seconds.\n - RX_DELAY_4: 4 seconds.\n - RX_DELAY_5: 5 seconds.\n - RX_DELAY_6: 6 seconds.\n - RX_DELAY_7: 7 seconds.\n - RX_DELAY_8: 8 seconds.\n - RX_DELAY_9: 9 seconds.\n - RX_DELAY_10: 10 seconds.\n - RX_DELAY_11: 11 seconds.\n - RX_DELAY_12: 12 seconds.\n - RX_DELAY_13: 13 seconds.\n - RX_DELAY_14: 14 seconds.\n - RX_DELAY_15: 15 seconds.", + "type": "string", + "default": "RX_DELAY_0", + "enum": [ + "RX_DELAY_0", + "RX_DELAY_1", + "RX_DELAY_2", + "RX_DELAY_3", + "RX_DELAY_4", + "RX_DELAY_5", + "RX_DELAY_6", + "RX_DELAY_7", + "RX_DELAY_8", + "RX_DELAY_9", + "RX_DELAY_10", + "RX_DELAY_11", + "RX_DELAY_12", + "RX_DELAY_13", + "RX_DELAY_14", + "RX_DELAY_15" + ] + } + } + } + } + }, + "queued_responses": { + "description": "Queued MAC responses.\nRegenerated on each uplink.", + "type": "array", + "items": { + "type": "object", + "properties": { + "adr_param_setup_req": { + "type": "object", + "properties": { + "adr_ack_delay_exponent": { + "type": "string", + "default": "ADR_ACK_DELAY_1", + "enum": [ + "ADR_ACK_DELAY_1", + "ADR_ACK_DELAY_2", + "ADR_ACK_DELAY_4", + "ADR_ACK_DELAY_8", + "ADR_ACK_DELAY_16", + "ADR_ACK_DELAY_32", + "ADR_ACK_DELAY_64", + "ADR_ACK_DELAY_128", + "ADR_ACK_DELAY_256", + "ADR_ACK_DELAY_512", + "ADR_ACK_DELAY_1024", + "ADR_ACK_DELAY_2048", + "ADR_ACK_DELAY_4096", + "ADR_ACK_DELAY_8192", + "ADR_ACK_DELAY_16384", + "ADR_ACK_DELAY_32768" + ] + }, + "adr_ack_limit_exponent": { + "type": "string", + "default": "ADR_ACK_LIMIT_1", + "enum": [ + "ADR_ACK_LIMIT_1", + "ADR_ACK_LIMIT_2", + "ADR_ACK_LIMIT_4", + "ADR_ACK_LIMIT_8", + "ADR_ACK_LIMIT_16", + "ADR_ACK_LIMIT_32", + "ADR_ACK_LIMIT_64", + "ADR_ACK_LIMIT_128", + "ADR_ACK_LIMIT_256", + "ADR_ACK_LIMIT_512", + "ADR_ACK_LIMIT_1024", + "ADR_ACK_LIMIT_2048", + "ADR_ACK_LIMIT_4096", + "ADR_ACK_LIMIT_8192", + "ADR_ACK_LIMIT_16384", + "ADR_ACK_LIMIT_32768" + ] + } + } + }, + "beacon_freq_ans": { + "type": "object", + "properties": { + "frequency_ack": { + "type": "boolean" + } + } + }, + "beacon_freq_req": { + "type": "object", + "properties": { + "frequency": { + "description": "Frequency of the Class B beacons (Hz).", + "type": "string", + "format": "uint64" + } + } + }, + "beacon_timing_ans": { + "type": "object", + "properties": { + "channel_index": { + "type": "integer", + "format": "int64" + }, + "delay": { + "description": "(uint16) See LoRaWAN specification.", + "type": "integer", + "format": "int64" + } + } + }, + "cid": { + "type": "string", + "title": "- CID_BEACON_TIMING: Deprecated", + "default": "CID_RFU_0", + "enum": [ + "CID_RFU_0", + "CID_RESET", + "CID_LINK_CHECK", + "CID_LINK_ADR", + "CID_DUTY_CYCLE", + "CID_RX_PARAM_SETUP", + "CID_DEV_STATUS", + "CID_NEW_CHANNEL", + "CID_RX_TIMING_SETUP", + "CID_TX_PARAM_SETUP", + "CID_DL_CHANNEL", + "CID_REKEY", + "CID_ADR_PARAM_SETUP", + "CID_DEVICE_TIME", + "CID_FORCE_REJOIN", + "CID_REJOIN_PARAM_SETUP", + "CID_PING_SLOT_INFO", + "CID_PING_SLOT_CHANNEL", + "CID_BEACON_TIMING", + "CID_BEACON_FREQ", + "CID_DEVICE_MODE", + "CID_RELAY_CONF", + "CID_RELAY_END_DEVICE_CONF", + "CID_RELAY_FILTER_LIST", + "CID_RELAY_UPDATE_UPLINK_LIST", + "CID_RELAY_CTRL_UPLINK_LIST", + "CID_RELAY_CONFIGURE_FWD_LIMIT", + "CID_RELAY_NOTIFY_NEW_END_DEVICE" + ] + }, + "dev_status_ans": { + "type": "object", + "properties": { + "battery": { + "description": "Device battery status.\n0 indicates that the device is connected to an external power source.\n1..254 indicates a battery level.\n255 indicates that the device was not able to measure the battery level.", + "type": "integer", + "format": "int64" + }, + "margin": { + "description": "SNR of the last downlink (dB; [-32, +31]).", + "type": "integer", + "format": "int32" + } + } + }, + "device_mode_conf": { + "type": "object", + "properties": { + "class": { + "type": "string", + "default": "CLASS_A", + "enum": [ + "CLASS_A", + "CLASS_B", + "CLASS_C" + ] + } + } + }, + "device_mode_ind": { + "type": "object", + "properties": { + "class": { + "type": "string", + "default": "CLASS_A", + "enum": [ + "CLASS_A", + "CLASS_B", + "CLASS_C" + ] + } + } + }, + "device_time_ans": { + "type": "object", + "properties": { + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "dl_channel_ans": { + "type": "object", + "properties": { + "channel_index_ack": { + "type": "boolean" + }, + "frequency_ack": { + "type": "boolean" + } + } + }, + "dl_channel_req": { + "type": "object", + "properties": { + "channel_index": { + "type": "integer", + "format": "int64" + }, + "frequency": { + "description": "Downlink channel frequency (Hz).", + "type": "string", + "format": "uint64" + } + } + }, + "duty_cycle_req": { + "type": "object", + "properties": { + "max_duty_cycle": { + "description": " - DUTY_CYCLE_1: 100%.\n - DUTY_CYCLE_2: 50%.\n - DUTY_CYCLE_4: 25%.\n - DUTY_CYCLE_8: 12.5%.\n - DUTY_CYCLE_16: 6.25%.\n - DUTY_CYCLE_32: 3.125%.\n - DUTY_CYCLE_64: 1.5625%.\n - DUTY_CYCLE_128: Roughly 0.781%.\n - DUTY_CYCLE_256: Roughly 0.390%.\n - DUTY_CYCLE_512: Roughly 0.195%.\n - DUTY_CYCLE_1024: Roughly 0.098%.\n - DUTY_CYCLE_2048: Roughly 0.049%.\n - DUTY_CYCLE_4096: Roughly 0.024%.\n - DUTY_CYCLE_8192: Roughly 0.012%.\n - DUTY_CYCLE_16384: Roughly 0.006%.\n - DUTY_CYCLE_32768: Roughly 0.003%.", + "type": "string", + "default": "DUTY_CYCLE_1", + "enum": [ + "DUTY_CYCLE_1", + "DUTY_CYCLE_2", + "DUTY_CYCLE_4", + "DUTY_CYCLE_8", + "DUTY_CYCLE_16", + "DUTY_CYCLE_32", + "DUTY_CYCLE_64", + "DUTY_CYCLE_128", + "DUTY_CYCLE_256", + "DUTY_CYCLE_512", + "DUTY_CYCLE_1024", + "DUTY_CYCLE_2048", + "DUTY_CYCLE_4096", + "DUTY_CYCLE_8192", + "DUTY_CYCLE_16384", + "DUTY_CYCLE_32768" + ] + } + } + }, + "force_rejoin_req": { + "type": "object", + "properties": { + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "max_retries": { + "type": "integer", + "format": "int64" + }, + "period_exponent": { + "description": " - REJOIN_PERIOD_0: Every 32 to 64 seconds.\n - REJOIN_PERIOD_1: Every 64 to 96 seconds.\n - REJOIN_PERIOD_2: Every 128 to 160 seconds.\n - REJOIN_PERIOD_3: Every 256 to 288 seconds.\n - REJOIN_PERIOD_4: Every 512 to 544 seconds.\n - REJOIN_PERIOD_5: Every 1024 to 1056 seconds.\n - REJOIN_PERIOD_6: Every 2048 to 2080 seconds.\n - REJOIN_PERIOD_7: Every 4096 to 4128 seconds.", + "type": "string", + "default": "REJOIN_PERIOD_0", + "enum": [ + "REJOIN_PERIOD_0", + "REJOIN_PERIOD_1", + "REJOIN_PERIOD_2", + "REJOIN_PERIOD_3", + "REJOIN_PERIOD_4", + "REJOIN_PERIOD_5", + "REJOIN_PERIOD_6", + "REJOIN_PERIOD_7" + ] + }, + "rejoin_type": { + "description": " - CONTEXT: Resets DevAddr, Session Keys, Frame Counters, Radio Parameters.\n - SESSION: Equivalent to the initial JoinRequest.\n - KEYS: Resets DevAddr, Session Keys, Frame Counters, while keeping the Radio Parameters.", + "type": "string", + "default": "CONTEXT", + "enum": [ + "CONTEXT", + "SESSION", + "KEYS" + ] + } + } + }, + "link_adr_ans": { + "type": "object", + "properties": { + "channel_mask_ack": { + "type": "boolean" + }, + "data_rate_index_ack": { + "type": "boolean" + }, + "tx_power_index_ack": { + "type": "boolean" + } + } + }, + "link_adr_req": { + "type": "object", + "properties": { + "channel_mask": { + "type": "array", + "items": { + "type": "boolean" + } + }, + "channel_mask_control": { + "type": "integer", + "format": "int64" + }, + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "nb_trans": { + "type": "integer", + "format": "int64" + }, + "tx_power_index": { + "type": "integer", + "format": "int64" + } + } + }, + "link_check_ans": { + "type": "object", + "properties": { + "gateway_count": { + "type": "integer", + "format": "int64" + }, + "margin": { + "description": "Indicates the link margin in dB of the received LinkCheckReq, relative to the demodulation floor.", + "type": "integer", + "format": "int64" + } + } + }, + "new_channel_ans": { + "type": "object", + "properties": { + "data_rate_ack": { + "type": "boolean" + }, + "frequency_ack": { + "type": "boolean" + } + } + }, + "new_channel_req": { + "type": "object", + "properties": { + "channel_index": { + "type": "integer", + "format": "int64" + }, + "frequency": { + "description": "Channel frequency (Hz).", + "type": "string", + "format": "uint64" + }, + "max_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "min_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + } + } + }, + "ping_slot_channel_ans": { + "type": "object", + "properties": { + "data_rate_index_ack": { + "type": "boolean" + }, + "frequency_ack": { + "type": "boolean" + } + } + }, + "ping_slot_channel_req": { + "type": "object", + "properties": { + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "frequency": { + "description": "Ping slot channel frequency (Hz).", + "type": "string", + "format": "uint64" + } + } + }, + "ping_slot_info_req": { + "type": "object", + "properties": { + "period": { + "description": " - PING_EVERY_1S: Every second.\n - PING_EVERY_2S: Every 2 seconds.\n - PING_EVERY_4S: Every 4 seconds.\n - PING_EVERY_8S: Every 8 seconds.\n - PING_EVERY_16S: Every 16 seconds.\n - PING_EVERY_32S: Every 32 seconds.\n - PING_EVERY_64S: Every 64 seconds.\n - PING_EVERY_128S: Every 128 seconds.", + "type": "string", + "default": "PING_EVERY_1S", + "enum": [ + "PING_EVERY_1S", + "PING_EVERY_2S", + "PING_EVERY_4S", + "PING_EVERY_8S", + "PING_EVERY_16S", + "PING_EVERY_32S", + "PING_EVERY_64S", + "PING_EVERY_128S" + ] + } + } + }, + "raw_payload": { + "type": "string", + "format": "byte" + }, + "rejoin_param_setup_ans": { + "type": "object", + "properties": { + "max_time_exponent_ack": { + "type": "boolean" + } + } + }, + "rejoin_param_setup_req": { + "type": "object", + "properties": { + "max_count_exponent": { + "type": "string", + "default": "REJOIN_COUNT_16", + "enum": [ + "REJOIN_COUNT_16", + "REJOIN_COUNT_32", + "REJOIN_COUNT_64", + "REJOIN_COUNT_128", + "REJOIN_COUNT_256", + "REJOIN_COUNT_512", + "REJOIN_COUNT_1024", + "REJOIN_COUNT_2048", + "REJOIN_COUNT_4096", + "REJOIN_COUNT_8192", + "REJOIN_COUNT_16384", + "REJOIN_COUNT_32768", + "REJOIN_COUNT_65536", + "REJOIN_COUNT_131072", + "REJOIN_COUNT_262144", + "REJOIN_COUNT_524288" + ] + }, + "max_time_exponent": { + "description": " - REJOIN_TIME_0: Every ~17.1 minutes.\n - REJOIN_TIME_1: Every ~34.1 minutes.\n - REJOIN_TIME_2: Every ~1.1 hours.\n - REJOIN_TIME_3: Every ~2.3 hours.\n - REJOIN_TIME_4: Every ~4.6 hours.\n - REJOIN_TIME_5: Every ~9.1 hours.\n - REJOIN_TIME_6: Every ~18.2 hours.\n - REJOIN_TIME_7: Every ~1.5 days.\n - REJOIN_TIME_8: Every ~3.0 days.\n - REJOIN_TIME_9: Every ~6.1 days.\n - REJOIN_TIME_10: Every ~12.1 days.\n - REJOIN_TIME_11: Every ~3.5 weeks.\n - REJOIN_TIME_12: Every ~1.6 months.\n - REJOIN_TIME_13: Every ~3.2 months.\n - REJOIN_TIME_14: Every ~6.4 months.\n - REJOIN_TIME_15: Every ~1.1 year.", + "type": "string", + "default": "REJOIN_TIME_0", + "enum": [ + "REJOIN_TIME_0", + "REJOIN_TIME_1", + "REJOIN_TIME_2", + "REJOIN_TIME_3", + "REJOIN_TIME_4", + "REJOIN_TIME_5", + "REJOIN_TIME_6", + "REJOIN_TIME_7", + "REJOIN_TIME_8", + "REJOIN_TIME_9", + "REJOIN_TIME_10", + "REJOIN_TIME_11", + "REJOIN_TIME_12", + "REJOIN_TIME_13", + "REJOIN_TIME_14", + "REJOIN_TIME_15" + ] + } + } + }, + "rekey_conf": { + "type": "object", + "properties": { + "minor_version": { + "type": "string", + "default": "MINOR_RFU_0", + "enum": [ + "MINOR_RFU_0", + "MINOR_1", + "MINOR_RFU_2", + "MINOR_RFU_3", + "MINOR_RFU_4", + "MINOR_RFU_5", + "MINOR_RFU_6", + "MINOR_RFU_7", + "MINOR_RFU_8", + "MINOR_RFU_9", + "MINOR_RFU_10", + "MINOR_RFU_11", + "MINOR_RFU_12", + "MINOR_RFU_13", + "MINOR_RFU_14", + "MINOR_RFU_15" + ] + } + } + }, + "rekey_ind": { + "type": "object", + "properties": { + "minor_version": { + "type": "string", + "default": "MINOR_RFU_0", + "enum": [ + "MINOR_RFU_0", + "MINOR_1", + "MINOR_RFU_2", + "MINOR_RFU_3", + "MINOR_RFU_4", + "MINOR_RFU_5", + "MINOR_RFU_6", + "MINOR_RFU_7", + "MINOR_RFU_8", + "MINOR_RFU_9", + "MINOR_RFU_10", + "MINOR_RFU_11", + "MINOR_RFU_12", + "MINOR_RFU_13", + "MINOR_RFU_14", + "MINOR_RFU_15" + ] + } + } + }, + "relay_conf_ans": { + "type": "object", + "properties": { + "cad_periodicity_ack": { + "type": "boolean" + }, + "default_channel_index_ack": { + "type": "boolean" + }, + "second_channel_ack_offset_ack": { + "type": "boolean" + }, + "second_channel_data_rate_index_ack": { + "type": "boolean" + }, + "second_channel_frequency_ack": { + "type": "boolean" + }, + "second_channel_index_ack": { + "type": "boolean" + } + } + }, + "relay_conf_req": { + "type": "object", + "properties": { + "configuration": { + "type": "object", + "properties": { + "cad_periodicity": { + "type": "string", + "title": "- RELAY_CAD_PERIODICITY_20_MILLISECONDS: sic", + "default": "RELAY_CAD_PERIODICITY_1_SECOND", + "enum": [ + "RELAY_CAD_PERIODICITY_1_SECOND", + "RELAY_CAD_PERIODICITY_500_MILLISECONDS", + "RELAY_CAD_PERIODICITY_250_MILLISECONDS", + "RELAY_CAD_PERIODICITY_100_MILLISECONDS", + "RELAY_CAD_PERIODICITY_50_MILLISECONDS", + "RELAY_CAD_PERIODICITY_20_MILLISECONDS" + ] + }, + "default_channel_index": { + "type": "integer", + "format": "int64" + }, + "second_channel": { + "type": "object", + "properties": { + "ack_offset": { + "type": "string", + "title": "- RELAY_SECOND_CH_ACK_OFFSET_0: 0 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_200: 200 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_400: 400 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_800: 800 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_1600: 1.6 MHz\n - RELAY_SECOND_CH_ACK_OFFSET_3200: 3.2 MHz", + "default": "RELAY_SECOND_CH_ACK_OFFSET_0", + "enum": [ + "RELAY_SECOND_CH_ACK_OFFSET_0", + "RELAY_SECOND_CH_ACK_OFFSET_200", + "RELAY_SECOND_CH_ACK_OFFSET_400", + "RELAY_SECOND_CH_ACK_OFFSET_800", + "RELAY_SECOND_CH_ACK_OFFSET_1600", + "RELAY_SECOND_CH_ACK_OFFSET_3200" + ] + }, + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "frequency": { + "description": "The frequency (Hz) used by the wake on radio message.", + "type": "string", + "format": "uint64" + } + } + } + } + } + } + }, + "relay_configure_fwd_limit_ans": { + "type": "object" + }, + "relay_configure_fwd_limit_req": { + "type": "object", + "properties": { + "global_uplink_limits": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "join_request_limits": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "notify_limits": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "overall_limits": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "reset_limit_counter": { + "type": "string", + "default": "RELAY_RESET_LIMIT_COUNTER_ZERO", + "enum": [ + "RELAY_RESET_LIMIT_COUNTER_ZERO", + "RELAY_RESET_LIMIT_COUNTER_RELOAD_RATE", + "RELAY_RESET_LIMIT_COUNTER_MAX_VALUE", + "RELAY_RESET_LIMIT_COUNTER_NO_RESET" + ] + } + } + }, + "relay_ctrl_uplink_list_ans": { + "type": "object", + "properties": { + "rule_index_ack": { + "type": "boolean" + }, + "w_f_cnt": { + "type": "integer", + "format": "int64" + } + } + }, + "relay_ctrl_uplink_list_req": { + "type": "object", + "properties": { + "action": { + "type": "string", + "default": "RELAY_CTRL_UPLINK_LIST_ACTION_READ_W_F_CNT", + "enum": [ + "RELAY_CTRL_UPLINK_LIST_ACTION_READ_W_F_CNT", + "RELAY_CTRL_UPLINK_LIST_ACTION_REMOVE_TRUSTED_END_DEVICE" + ] + }, + "rule_index": { + "type": "integer", + "format": "int64" + } + } + }, + "relay_end_device_conf_ans": { + "type": "object", + "properties": { + "backoff_ack": { + "type": "boolean" + }, + "second_channel_data_rate_index_ack": { + "type": "boolean" + }, + "second_channel_frequency_ack": { + "type": "boolean" + }, + "second_channel_index_ack": { + "type": "boolean" + } + } + }, + "relay_end_device_conf_req": { + "type": "object", + "properties": { + "configuration": { + "type": "object", + "properties": { + "always": { + "type": "object" + }, + "backoff": { + "type": "integer", + "format": "int64" + }, + "dynamic": { + "type": "object", + "properties": { + "smart_enable_level": { + "type": "string", + "default": "RELAY_SMART_ENABLE_LEVEL_8", + "enum": [ + "RELAY_SMART_ENABLE_LEVEL_8", + "RELAY_SMART_ENABLE_LEVEL_16", + "RELAY_SMART_ENABLE_LEVEL_32", + "RELAY_SMART_ENABLE_LEVEL_64" + ] + } + } + }, + "end_device_controlled": { + "type": "object" + }, + "second_channel": { + "type": "object", + "properties": { + "ack_offset": { + "type": "string", + "title": "- RELAY_SECOND_CH_ACK_OFFSET_0: 0 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_200: 200 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_400: 400 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_800: 800 kHz\n - RELAY_SECOND_CH_ACK_OFFSET_1600: 1.6 MHz\n - RELAY_SECOND_CH_ACK_OFFSET_3200: 3.2 MHz", + "default": "RELAY_SECOND_CH_ACK_OFFSET_0", + "enum": [ + "RELAY_SECOND_CH_ACK_OFFSET_0", + "RELAY_SECOND_CH_ACK_OFFSET_200", + "RELAY_SECOND_CH_ACK_OFFSET_400", + "RELAY_SECOND_CH_ACK_OFFSET_800", + "RELAY_SECOND_CH_ACK_OFFSET_1600", + "RELAY_SECOND_CH_ACK_OFFSET_3200" + ] + }, + "data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "frequency": { + "description": "The frequency (Hz) used by the wake on radio message.", + "type": "string", + "format": "uint64" + } + } + }, + "serving_device_id": { + "type": "string" + } + } + } + } + }, + "relay_notify_new_end_device_req": { + "type": "object", + "properties": { + "dev_addr": { + "type": "string", + "format": "string", + "example": "2600ABCD" + }, + "rssi": { + "type": "integer", + "format": "int32" + }, + "snr": { + "type": "integer", + "format": "int32" + } + } + }, + "relay_update_uplink_list_ans": { + "type": "object" + }, + "relay_update_uplink_list_req": { + "type": "object", + "properties": { + "dev_addr": { + "type": "string", + "format": "string", + "example": "2600ABCD" + }, + "device_id": { + "type": "string" + }, + "forward_limits": { + "type": "object", + "properties": { + "bucket_size": { + "type": "string", + "title": "- RELAY_LIMIT_BUCKET_SIZE_12: sic", + "default": "RELAY_LIMIT_BUCKET_SIZE_1", + "enum": [ + "RELAY_LIMIT_BUCKET_SIZE_1", + "RELAY_LIMIT_BUCKET_SIZE_2", + "RELAY_LIMIT_BUCKET_SIZE_4", + "RELAY_LIMIT_BUCKET_SIZE_12" + ] + }, + "reload_rate": { + "description": "The number of tokens which are replenished in the bucket every hour.", + "type": "integer", + "format": "int64" + } + } + }, + "root_wor_s_key": { + "type": "string", + "format": "string", + "example": "0123456789ABCDEF0123456789ABCDEF" + }, + "rule_index": { + "type": "integer", + "format": "int64" + }, + "session_key_id": { + "type": "string", + "format": "byte" + }, + "w_f_cnt": { + "type": "integer", + "format": "int64" + } + } + }, + "reset_conf": { + "type": "object", + "properties": { + "minor_version": { + "type": "string", + "default": "MINOR_RFU_0", + "enum": [ + "MINOR_RFU_0", + "MINOR_1", + "MINOR_RFU_2", + "MINOR_RFU_3", + "MINOR_RFU_4", + "MINOR_RFU_5", + "MINOR_RFU_6", + "MINOR_RFU_7", + "MINOR_RFU_8", + "MINOR_RFU_9", + "MINOR_RFU_10", + "MINOR_RFU_11", + "MINOR_RFU_12", + "MINOR_RFU_13", + "MINOR_RFU_14", + "MINOR_RFU_15" + ] + } + } + }, + "reset_ind": { + "type": "object", + "properties": { + "minor_version": { + "type": "string", + "default": "MINOR_RFU_0", + "enum": [ + "MINOR_RFU_0", + "MINOR_1", + "MINOR_RFU_2", + "MINOR_RFU_3", + "MINOR_RFU_4", + "MINOR_RFU_5", + "MINOR_RFU_6", + "MINOR_RFU_7", + "MINOR_RFU_8", + "MINOR_RFU_9", + "MINOR_RFU_10", + "MINOR_RFU_11", + "MINOR_RFU_12", + "MINOR_RFU_13", + "MINOR_RFU_14", + "MINOR_RFU_15" + ] + } + } + }, + "rx_param_setup_ans": { + "type": "object", + "properties": { + "rx1_data_rate_offset_ack": { + "type": "boolean" + }, + "rx2_data_rate_index_ack": { + "type": "boolean" + }, + "rx2_frequency_ack": { + "type": "boolean" + } + } + }, + "rx_param_setup_req": { + "type": "object", + "properties": { + "rx1_data_rate_offset": { + "type": "string", + "default": "DATA_RATE_OFFSET_0", + "enum": [ + "DATA_RATE_OFFSET_0", + "DATA_RATE_OFFSET_1", + "DATA_RATE_OFFSET_2", + "DATA_RATE_OFFSET_3", + "DATA_RATE_OFFSET_4", + "DATA_RATE_OFFSET_5", + "DATA_RATE_OFFSET_6", + "DATA_RATE_OFFSET_7" + ] + }, + "rx2_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "rx2_frequency": { + "description": "Rx2 frequency (Hz).", + "type": "string", + "format": "uint64" + } + } + }, + "rx_timing_setup_req": { + "type": "object", + "properties": { + "delay": { + "description": " - RX_DELAY_0: 1 second.\n - RX_DELAY_1: 1 second.\n - RX_DELAY_2: 2 seconds.\n - RX_DELAY_3: 3 seconds.\n - RX_DELAY_4: 4 seconds.\n - RX_DELAY_5: 5 seconds.\n - RX_DELAY_6: 6 seconds.\n - RX_DELAY_7: 7 seconds.\n - RX_DELAY_8: 8 seconds.\n - RX_DELAY_9: 9 seconds.\n - RX_DELAY_10: 10 seconds.\n - RX_DELAY_11: 11 seconds.\n - RX_DELAY_12: 12 seconds.\n - RX_DELAY_13: 13 seconds.\n - RX_DELAY_14: 14 seconds.\n - RX_DELAY_15: 15 seconds.", + "type": "string", + "default": "RX_DELAY_0", + "enum": [ + "RX_DELAY_0", + "RX_DELAY_1", + "RX_DELAY_2", + "RX_DELAY_3", + "RX_DELAY_4", + "RX_DELAY_5", + "RX_DELAY_6", + "RX_DELAY_7", + "RX_DELAY_8", + "RX_DELAY_9", + "RX_DELAY_10", + "RX_DELAY_11", + "RX_DELAY_12", + "RX_DELAY_13", + "RX_DELAY_14", + "RX_DELAY_15" + ] + } + } + }, + "tx_param_setup_req": { + "type": "object", + "properties": { + "downlink_dwell_time": { + "type": "boolean" + }, + "max_eirp_index": { + "description": " - DEVICE_EIRP_8: 8 dBm.\n - DEVICE_EIRP_10: 10 dBm.\n - DEVICE_EIRP_12: 12 dBm.\n - DEVICE_EIRP_13: 13 dBm.\n - DEVICE_EIRP_14: 14 dBm.\n - DEVICE_EIRP_16: 16 dBm.\n - DEVICE_EIRP_18: 18 dBm.\n - DEVICE_EIRP_20: 20 dBm.\n - DEVICE_EIRP_21: 21 dBm.\n - DEVICE_EIRP_24: 24 dBm.\n - DEVICE_EIRP_26: 26 dBm.\n - DEVICE_EIRP_27: 27 dBm.\n - DEVICE_EIRP_29: 29 dBm.\n - DEVICE_EIRP_30: 30 dBm.\n - DEVICE_EIRP_33: 33 dBm.\n - DEVICE_EIRP_36: 36 dBm.", + "type": "string", + "default": "DEVICE_EIRP_8", + "enum": [ + "DEVICE_EIRP_8", + "DEVICE_EIRP_10", + "DEVICE_EIRP_12", + "DEVICE_EIRP_13", + "DEVICE_EIRP_14", + "DEVICE_EIRP_16", + "DEVICE_EIRP_18", + "DEVICE_EIRP_20", + "DEVICE_EIRP_21", + "DEVICE_EIRP_24", + "DEVICE_EIRP_26", + "DEVICE_EIRP_27", + "DEVICE_EIRP_29", + "DEVICE_EIRP_30", + "DEVICE_EIRP_33", + "DEVICE_EIRP_36" + ] + }, + "uplink_dwell_time": { + "type": "boolean" + } + } + } + } + } + }, + "recent_downlinks": { + "description": "Recent data downlink messages sorted by time.\nThe number of messages stored may depend on configuration.", + "type": "array", + "items": { + "description": "A minimal DownlinkMessage definition which is binary compatible with the top level DownlinkMessage message.\nUsed for type safe recent downlink storage.", + "type": "object", + "properties": { + "correlation_ids": { + "type": "array", + "items": { + "type": "string" + } + }, + "payload": { + "type": "object", + "properties": { + "m_hdr": { + "type": "object", + "properties": { + "m_type": { + "type": "string", + "default": "JOIN_REQUEST", + "enum": [ + "JOIN_REQUEST", + "JOIN_ACCEPT", + "UNCONFIRMED_UP", + "UNCONFIRMED_DOWN", + "CONFIRMED_UP", + "CONFIRMED_DOWN", + "REJOIN_REQUEST", + "PROPRIETARY" + ] + } + } + }, + "mac_payload": { + "type": "object", + "properties": { + "f_port": { + "type": "integer", + "format": "int64" + }, + "full_f_cnt": { + "type": "integer", + "format": "int64" + } + } + } + } + } + } + } + }, + "recent_mac_command_identifiers": { + "description": "MAC command identifiers sent by the end device in the last received uplink.\nThe Network Server may choose to store only certain types of MAC\ncommand identifiers in the underlying implementation.", + "type": "array", + "items": { + "type": "string", + "title": "- CID_BEACON_TIMING: Deprecated", + "default": "CID_RFU_0", + "enum": [ + "CID_RFU_0", + "CID_RESET", + "CID_LINK_CHECK", + "CID_LINK_ADR", + "CID_DUTY_CYCLE", + "CID_RX_PARAM_SETUP", + "CID_DEV_STATUS", + "CID_NEW_CHANNEL", + "CID_RX_TIMING_SETUP", + "CID_TX_PARAM_SETUP", + "CID_DL_CHANNEL", + "CID_REKEY", + "CID_ADR_PARAM_SETUP", + "CID_DEVICE_TIME", + "CID_FORCE_REJOIN", + "CID_REJOIN_PARAM_SETUP", + "CID_PING_SLOT_INFO", + "CID_PING_SLOT_CHANNEL", + "CID_BEACON_TIMING", + "CID_BEACON_FREQ", + "CID_DEVICE_MODE", + "CID_RELAY_CONF", + "CID_RELAY_END_DEVICE_CONF", + "CID_RELAY_FILTER_LIST", + "CID_RELAY_UPDATE_UPLINK_LIST", + "CID_RELAY_CTRL_UPLINK_LIST", + "CID_RELAY_CONFIGURE_FWD_LIMIT", + "CID_RELAY_NOTIFY_NEW_END_DEVICE" + ] + } + }, + "recent_uplinks": { + "description": "Recent data uplink messages sorted by time.\nThe number of messages stored may depend on configuration.", + "type": "array", + "items": { + "description": "A minimal UplinkMessage definition which is binary compatible with the top level UplinkMessage message.\nUsed for type safe recent uplink storage.", + "type": "object", + "properties": { + "correlation_ids": { + "type": "array", + "items": { + "type": "string" + } + }, + "device_channel_index": { + "type": "integer", + "format": "int64" + }, + "payload": { + "type": "object", + "title": "Message represents a LoRaWAN message", + "properties": { + "join_accept_payload": { + "type": "object", + "properties": { + "cf_list": { + "type": "object", + "properties": { + "ch_masks": { + "description": "ChMasks controlling the channels to be used.\nLength of this field must be equal to the amount of uplink channels\ndefined by the selected frequency plan.", + "type": "array", + "items": { + "type": "boolean" + } + }, + "freq": { + "description": "Frequencies to be broadcasted, in hecto-Hz.\nThese values are broadcasted as 24 bits unsigned integers.\nThis field should not contain default values.", + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + }, + "type": { + "type": "string", + "default": "FREQUENCIES", + "enum": [ + "FREQUENCIES", + "CHANNEL_MASKS" + ] + } + } + }, + "dev_addr": { + "type": "string", + "format": "string", + "example": "2600ABCD" + }, + "dl_settings": { + "type": "object", + "properties": { + "opt_neg": { + "description": "OptNeg is set if Network Server implements LoRaWAN 1.1 or greater.", + "type": "boolean" + }, + "rx1_dr_offset": { + "type": "string", + "default": "DATA_RATE_OFFSET_0", + "enum": [ + "DATA_RATE_OFFSET_0", + "DATA_RATE_OFFSET_1", + "DATA_RATE_OFFSET_2", + "DATA_RATE_OFFSET_3", + "DATA_RATE_OFFSET_4", + "DATA_RATE_OFFSET_5", + "DATA_RATE_OFFSET_6", + "DATA_RATE_OFFSET_7" + ] + }, + "rx2_dr": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + } + } + }, + "encrypted": { + "type": "string", + "format": "byte" + }, + "join_nonce": { + "type": "string", + "format": "string", + "example": "ABCDEF" + }, + "net_id": { + "type": "string", + "format": "string", + "example": "000013" + }, + "rx_delay": { + "description": " - RX_DELAY_0: 1 second.\n - RX_DELAY_1: 1 second.\n - RX_DELAY_2: 2 seconds.\n - RX_DELAY_3: 3 seconds.\n - RX_DELAY_4: 4 seconds.\n - RX_DELAY_5: 5 seconds.\n - RX_DELAY_6: 6 seconds.\n - RX_DELAY_7: 7 seconds.\n - RX_DELAY_8: 8 seconds.\n - RX_DELAY_9: 9 seconds.\n - RX_DELAY_10: 10 seconds.\n - RX_DELAY_11: 11 seconds.\n - RX_DELAY_12: 12 seconds.\n - RX_DELAY_13: 13 seconds.\n - RX_DELAY_14: 14 seconds.\n - RX_DELAY_15: 15 seconds.", + "type": "string", + "default": "RX_DELAY_0", + "enum": [ + "RX_DELAY_0", + "RX_DELAY_1", + "RX_DELAY_2", + "RX_DELAY_3", + "RX_DELAY_4", + "RX_DELAY_5", + "RX_DELAY_6", + "RX_DELAY_7", + "RX_DELAY_8", + "RX_DELAY_9", + "RX_DELAY_10", + "RX_DELAY_11", + "RX_DELAY_12", + "RX_DELAY_13", + "RX_DELAY_14", + "RX_DELAY_15" + ] + } + } + }, + "join_request_payload": { + "type": "object", + "properties": { + "dev_eui": { + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + }, + "dev_nonce": { + "type": "string", + "format": "string", + "example": "ABCD" + }, + "join_eui": { + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + } + } + }, + "m_hdr": { + "type": "object", + "properties": { + "m_type": { + "type": "string", + "default": "JOIN_REQUEST", + "enum": [ + "JOIN_REQUEST", + "JOIN_ACCEPT", + "UNCONFIRMED_UP", + "UNCONFIRMED_DOWN", + "CONFIRMED_UP", + "CONFIRMED_DOWN", + "REJOIN_REQUEST", + "PROPRIETARY" + ] + }, + "major": { + "type": "string", + "default": "LORAWAN_R1", + "enum": [ + "LORAWAN_R1" + ] + } + } + }, + "mac_payload": { + "type": "object", + "properties": { + "decoded_payload": { + "type": "object" + }, + "f_hdr": { + "type": "object", + "properties": { + "dev_addr": { + "type": "string", + "format": "string", + "example": "2600ABCD" + }, + "f_cnt": { + "type": "integer", + "format": "int64" + }, + "f_ctrl": { + "type": "object", + "properties": { + "ack": { + "type": "boolean" + }, + "adr": { + "type": "boolean" + }, + "adr_ack_req": { + "description": "Only on uplink.", + "type": "boolean" + }, + "class_b": { + "description": "Only on uplink.", + "type": "boolean" + }, + "f_pending": { + "description": "Only on downlink.", + "type": "boolean" + } + } + }, + "f_opts": { + "type": "string", + "format": "byte" + } + } + }, + "f_port": { + "type": "integer", + "format": "int64" + }, + "frm_payload": { + "type": "string", + "format": "byte" + }, + "full_f_cnt": { + "description": "Full 32-bit FCnt value. Used internally by Network Server.", + "type": "integer", + "format": "int64" + } + } + }, + "mic": { + "type": "string", + "format": "byte" + }, + "rejoin_request_payload": { + "type": "object", + "properties": { + "dev_eui": { + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + }, + "join_eui": { + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + }, + "net_id": { + "type": "string", + "format": "string", + "example": "000013" + }, + "rejoin_cnt": { + "description": "Contains RJCount0 or RJCount1 depending on rejoin_type.", + "type": "integer", + "format": "int64" + }, + "rejoin_type": { + "description": " - CONTEXT: Resets DevAddr, Session Keys, Frame Counters, Radio Parameters.\n - SESSION: Equivalent to the initial JoinRequest.\n - KEYS: Resets DevAddr, Session Keys, Frame Counters, while keeping the Radio Parameters.", + "type": "string", + "default": "CONTEXT", + "enum": [ + "CONTEXT", + "SESSION", + "KEYS" + ] + } + } + } + } + }, + "received_at": { + "type": "string", + "format": "date-time" + }, + "rx_metadata": { + "type": "array", + "items": { + "type": "object", + "properties": { + "channel_rssi": { + "type": "number", + "format": "float" + }, + "downlink_path_constraint": { + "description": " - DOWNLINK_PATH_CONSTRAINT_NONE: Indicates that the gateway can be selected for downlink without constraints by the Network Server.\n - DOWNLINK_PATH_CONSTRAINT_PREFER_OTHER: Indicates that the gateway can be selected for downlink only if no other or better gateway can be selected.\n - DOWNLINK_PATH_CONSTRAINT_NEVER: Indicates that this gateway will never be selected for downlink, even if that results in no available downlink path.", + "type": "string", + "default": "DOWNLINK_PATH_CONSTRAINT_NONE", + "enum": [ + "DOWNLINK_PATH_CONSTRAINT_NONE", + "DOWNLINK_PATH_CONSTRAINT_PREFER_OTHER", + "DOWNLINK_PATH_CONSTRAINT_NEVER" + ] + }, + "gateway_ids": { + "type": "object", + "properties": { + "eui": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + }, + "gateway_id": { + "type": "string" + } + } + }, + "packet_broker": { + "type": "object" + }, + "relay": { + "type": "object" + }, + "snr": { + "type": "number", + "format": "float" + }, + "uplink_token": { + "type": "string", + "format": "byte" + } + } + } + }, + "settings": { + "type": "object", + "properties": { + "data_rate": { + "type": "object", + "properties": { + "fsk": { + "type": "object", + "properties": { + "bit_rate": { + "description": "Bit rate (bps).", + "type": "integer", + "format": "int64" + } + } + }, + "lora": { + "type": "object", + "properties": { + "bandwidth": { + "description": "Bandwidth (Hz).", + "type": "integer", + "format": "int64" + }, + "coding_rate": { + "type": "string" + }, + "spreading_factor": { + "type": "integer", + "format": "int64" + } + } + }, + "lrfhss": { + "type": "object", + "properties": { + "coding_rate": { + "type": "string" + }, + "modulation_type": { + "type": "integer", + "format": "int64" + }, + "operating_channel_width": { + "description": "Operating Channel Width (Hz).", + "type": "integer", + "format": "int64" + } + } + } + } + } + } + } + } + } + }, + "rejected_adr_data_rate_indexes": { + "description": "ADR Data rate index values rejected by the device.\nReset each time `current_parameters.channels` change.\nElements are sorted in ascending order.", + "type": "array", + "items": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + } + }, + "rejected_adr_tx_power_indexes": { + "description": "ADR TX output power index values rejected by the device.\nElements are sorted in ascending order.", + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + }, + "rejected_data_rate_ranges": { + "description": "Data rate ranges rejected by the device per frequency.", + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "ranges": { + "type": "array", + "items": { + "type": "object", + "properties": { + "max_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + }, + "min_data_rate_index": { + "type": "string", + "default": "DATA_RATE_0", + "enum": [ + "DATA_RATE_0", + "DATA_RATE_1", + "DATA_RATE_2", + "DATA_RATE_3", + "DATA_RATE_4", + "DATA_RATE_5", + "DATA_RATE_6", + "DATA_RATE_7", + "DATA_RATE_8", + "DATA_RATE_9", + "DATA_RATE_10", + "DATA_RATE_11", + "DATA_RATE_12", + "DATA_RATE_13", + "DATA_RATE_14", + "DATA_RATE_15" + ] + } + } + } + } + } + } + }, + "rejected_frequencies": { + "description": "Frequencies rejected by the device.", + "type": "array", + "items": { + "type": "string", + "format": "uint64" + } + }, + "rx_windows_available": { + "description": "Whether or not Rx windows are expected to be open.\nSet to true every time an uplink is received.\nSet to false every time a successful downlink scheduling attempt is made.", + "type": "boolean" + } + } + }, + "pending_session": { + "type": "object", + "properties": { + "dev_addr": { + "description": "Device Address, issued by the Network Server or chosen by device manufacturer in case of testing range (beginning with 00-03).\nKnown by Network Server, Application Server and Join Server. Owned by Network Server.", + "type": "string", + "format": "string", + "example": "2600ABCD" + }, + "keys": { + "description": "Session keys for a LoRaWAN session.\nOnly the components for which the keys were meant, will have the key-encryption-key (KEK) to decrypt the individual keys.", + "type": "object", + "properties": { + "app_s_key": { + "type": "object", + "properties": { + "encrypted_key": { + "type": "string", + "format": "byte" + }, + "kek_label": { + "description": "The label of the RFC 3394 key-encryption-key (KEK) that was used to encrypt the key.", + "type": "string" + }, + "key": { + "description": "The unencrypted AES key.", + "type": "string", + "format": "string", + "example": "0123456789ABCDEF0123456789ABCDEF" + } + } + }, + "f_nwk_s_int_key": { + "type": "object", + "properties": { + "encrypted_key": { + "type": "string", + "format": "byte" + }, + "kek_label": { + "description": "The label of the RFC 3394 key-encryption-key (KEK) that was used to encrypt the key.", + "type": "string" + }, + "key": { + "description": "The unencrypted AES key.", + "type": "string", + "format": "string", + "example": "0123456789ABCDEF0123456789ABCDEF" + } + } + }, + "nwk_s_enc_key": { + "type": "object", + "properties": { + "encrypted_key": { + "type": "string", + "format": "byte" + }, + "kek_label": { + "description": "The label of the RFC 3394 key-encryption-key (KEK) that was used to encrypt the key.", + "type": "string" + }, + "key": { + "description": "The unencrypted AES key.", + "type": "string", + "format": "string", + "example": "0123456789ABCDEF0123456789ABCDEF" + } + } + }, + "s_nwk_s_int_key": { + "type": "object", + "properties": { + "encrypted_key": { + "type": "string", + "format": "byte" + }, + "kek_label": { + "description": "The label of the RFC 3394 key-encryption-key (KEK) that was used to encrypt the key.", + "type": "string" + }, + "key": { + "description": "The unencrypted AES key.", + "type": "string", + "format": "string", + "example": "0123456789ABCDEF0123456789ABCDEF" + } + } + }, + "session_key_id": { + "description": "Join Server issued identifier for the session keys.\nThis ID can be used to request the keys from the Join Server in case the are lost.", + "type": "string", + "format": "byte" + } + } + }, + "last_a_f_cnt_down": { + "description": "Last application downlink frame counter value used. Application Server only.", + "type": "integer", + "format": "int64" + }, + "last_conf_f_cnt_down": { + "description": "Frame counter of the last confirmed downlink message sent. Network Server only.", + "type": "integer", + "format": "int64" + }, + "last_f_cnt_up": { + "description": "Last uplink frame counter value used. Network Server only. Application Server assumes the Network Server checked it.", + "type": "integer", + "format": "int64" + }, + "last_n_f_cnt_down": { + "description": "Last network downlink frame counter value used. Network Server only.", + "type": "integer", + "format": "int64" + }, + "queued_application_downlinks": { + "description": "Queued Application downlink messages. Stored in Application Server and Network Server.", + "type": "array", + "items": { + "type": "object", + "properties": { + "class_b_c": { + "type": "object", + "properties": { + "absolute_time": { + "description": "Absolute time when the downlink message should be transmitted.\nThis requires the gateway to have GPS time synchronization.\nIf the time is in the past or if there is a scheduling conflict, the downlink message fails.\nIf null, the time is selected based on slot availability. This is recommended in class B mode.", + "type": "string", + "format": "date-time" + }, + "gateways": { + "description": "Possible gateway identifiers, antenna index, and group index to use for this downlink message.\nThe Network Server selects one of these gateways for downlink, based on connectivity, signal quality, channel utilization and an available slot.\nIf none of the gateways can be selected, the downlink message fails.\nIf empty, a gateway and antenna is selected automatically from the gateways seen in recent uplinks.\nIf group index is set, gateways will be grouped by the index for the Network Server to select one gateway per group.", + "type": "array", + "items": { + "type": "object", + "properties": { + "antenna_index": { + "type": "integer", + "format": "int64" + }, + "gateway_ids": { + "type": "object", + "properties": { + "eui": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + }, + "gateway_id": { + "type": "string" + } + } + }, + "group_index": { + "type": "integer", + "format": "int64" + } + } + } + } + } + }, + "confirmed": { + "type": "boolean" + }, + "confirmed_retry": { + "type": "object", + "properties": { + "attempt": { + "description": "The number of attempted confirmed downlink acknowledgements.", + "type": "integer", + "format": "int64" + }, + "max_attempts": { + "description": "The maximum number of confirmed downlink acknowledgement attempts.\nIf null, the Application Server configuration is used instead.", + "type": "integer", + "format": "int64" + } + } + }, + "correlation_ids": { + "type": "array", + "items": { + "type": "string" + } + }, + "decoded_payload": { + "description": "The decoded frame payload of the downlink message.\nWhen scheduling downlink with a message processor configured for the end device (see formatters) or application (see default_formatters),\nthis fields acts as input for the downlink encoder, and the output is set to frm_payload.\nWhen reading downlink (listing the queue, downlink message events, etc), this fields acts as output of the downlink decoder, and the input is frm_payload.", + "type": "object" + }, + "decoded_payload_warnings": { + "description": "Warnings generated by the message processor while encoding frm_payload (scheduling downlink) or decoding the frm_payload (reading downlink).", + "type": "array", + "items": { + "type": "string" + } + }, + "f_cnt": { + "type": "integer", + "format": "int64" + }, + "f_port": { + "type": "integer", + "format": "int64" + }, + "frm_payload": { + "description": "The frame payload of the downlink message.\nThe payload is encrypted if the skip_payload_crypto field of the EndDevice\nis true.", + "type": "string", + "format": "byte" + }, + "priority": { + "type": "string", + "default": "LOWEST", + "enum": [ + "LOWEST", + "LOW", + "BELOW_NORMAL", + "NORMAL", + "ABOVE_NORMAL", + "HIGH", + "HIGHEST" + ] + }, + "session_key_id": { + "description": "Join Server issued identifier for the session keys used by this downlink.", + "type": "string", + "format": "byte" + } + } + } + }, + "started_at": { + "description": "Time when the session started. Network Server only.", + "type": "string", + "format": "date-time" + } + } + }, + "picture": { + "type": "object", + "properties": { + "embedded": { + "type": "object", + "properties": { + "data": { + "description": "Picture data. A data URI can be constructed as follows:\n`data:\u003cmime_type\u003e;base64,\u003cdata\u003e`.", + "type": "string", + "format": "byte" + }, + "mime_type": { + "description": "MIME type of the picture.", + "type": "string" + } + } + }, + "sizes": { + "description": "URLs of the picture for different sizes, if available on a CDN.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "power_state": { + "description": "Power state of the device.", + "type": "string", + "default": "POWER_UNKNOWN", + "enum": [ + "POWER_UNKNOWN", + "POWER_BATTERY", + "POWER_EXTERNAL" + ] + }, + "provisioner_id": { + "description": "ID of the provisioner. Stored in Join Server.", + "type": "string" + }, + "provisioning_data": { + "description": "Vendor-specific provisioning data. Stored in Join Server.", + "type": "object" + }, + "queued_application_downlinks": { + "description": "Queued Application downlink messages. Stored in Application Server,\nwhich sets them on the Network Server.\nThis field is deprecated and is always set equal to session.queued_application_downlinks.", + "type": "array", + "items": { + "type": "object", + "properties": { + "class_b_c": { + "type": "object", + "properties": { + "absolute_time": { + "description": "Absolute time when the downlink message should be transmitted.\nThis requires the gateway to have GPS time synchronization.\nIf the time is in the past or if there is a scheduling conflict, the downlink message fails.\nIf null, the time is selected based on slot availability. This is recommended in class B mode.", + "type": "string", + "format": "date-time" + }, + "gateways": { + "description": "Possible gateway identifiers, antenna index, and group index to use for this downlink message.\nThe Network Server selects one of these gateways for downlink, based on connectivity, signal quality, channel utilization and an available slot.\nIf none of the gateways can be selected, the downlink message fails.\nIf empty, a gateway and antenna is selected automatically from the gateways seen in recent uplinks.\nIf group index is set, gateways will be grouped by the index for the Network Server to select one gateway per group.", + "type": "array", + "items": { + "type": "object", + "properties": { + "antenna_index": { + "type": "integer", + "format": "int64" + }, + "gateway_ids": { + "type": "object", + "properties": { + "eui": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + }, + "gateway_id": { + "type": "string" + } + } + }, + "group_index": { + "type": "integer", + "format": "int64" + } + } + } + } + } + }, + "confirmed": { + "type": "boolean" + }, + "confirmed_retry": { + "type": "object", + "properties": { + "attempt": { + "description": "The number of attempted confirmed downlink acknowledgements.", + "type": "integer", + "format": "int64" + }, + "max_attempts": { + "description": "The maximum number of confirmed downlink acknowledgement attempts.\nIf null, the Application Server configuration is used instead.", + "type": "integer", + "format": "int64" + } + } + }, + "correlation_ids": { + "type": "array", + "items": { + "type": "string" + } + }, + "decoded_payload": { + "description": "The decoded frame payload of the downlink message.\nWhen scheduling downlink with a message processor configured for the end device (see formatters) or application (see default_formatters),\nthis fields acts as input for the downlink encoder, and the output is set to frm_payload.\nWhen reading downlink (listing the queue, downlink message events, etc), this fields acts as output of the downlink decoder, and the input is frm_payload.", + "type": "object" + }, + "decoded_payload_warnings": { + "description": "Warnings generated by the message processor while encoding frm_payload (scheduling downlink) or decoding the frm_payload (reading downlink).", + "type": "array", + "items": { + "type": "string" + } + }, + "f_cnt": { + "type": "integer", + "format": "int64" + }, + "f_port": { + "type": "integer", + "format": "int64" + }, + "frm_payload": { + "description": "The frame payload of the downlink message.\nThe payload is encrypted if the skip_payload_crypto field of the EndDevice\nis true.", + "type": "string", + "format": "byte" + }, + "priority": { + "type": "string", + "default": "LOWEST", + "enum": [ + "LOWEST", + "LOW", + "BELOW_NORMAL", + "NORMAL", + "ABOVE_NORMAL", + "HIGH", + "HIGHEST" + ] + }, + "session_key_id": { + "description": "Join Server issued identifier for the session keys used by this downlink.", + "type": "string", + "format": "byte" + } + } + } + }, + "resets_join_nonces": { + "description": "Whether the device resets the join and dev nonces (not LoRaWAN compliant). Stored in Join Server.\nCopied on creation from template identified by version_ids, if any or from the home Network Server device profile, if any.", + "type": "boolean" + }, + "root_keys": { + "description": "Root keys for a LoRaWAN device.\nThese are stored on the Join Server.", + "type": "object", + "properties": { + "app_key": { + "type": "object", + "properties": { + "encrypted_key": { + "type": "string", + "format": "byte" + }, + "kek_label": { + "description": "The label of the RFC 3394 key-encryption-key (KEK) that was used to encrypt the key.", + "type": "string" + }, + "key": { + "description": "The unencrypted AES key.", + "type": "string", + "format": "string", + "example": "0123456789ABCDEF0123456789ABCDEF" + } + } + }, + "nwk_key": { + "type": "object", + "properties": { + "encrypted_key": { + "type": "string", + "format": "byte" + }, + "kek_label": { + "description": "The label of the RFC 3394 key-encryption-key (KEK) that was used to encrypt the key.", + "type": "string" + }, + "key": { + "description": "The unencrypted AES key.", + "type": "string", + "format": "string", + "example": "0123456789ABCDEF0123456789ABCDEF" + } + } + }, + "root_key_id": { + "description": "Join Server issued identifier for the root keys.", + "type": "string" + } + } + }, + "serial_number": { + "type": "string" + }, + "service_profile_id": { + "description": "Default service profile. Stored in Entity Registry.", + "type": "string" + }, + "session": { + "type": "object", + "properties": { + "dev_addr": { + "description": "Device Address, issued by the Network Server or chosen by device manufacturer in case of testing range (beginning with 00-03).\nKnown by Network Server, Application Server and Join Server. Owned by Network Server.", + "type": "string", + "format": "string", + "example": "2600ABCD" + }, + "keys": { + "description": "Session keys for a LoRaWAN session.\nOnly the components for which the keys were meant, will have the key-encryption-key (KEK) to decrypt the individual keys.", + "type": "object", + "properties": { + "app_s_key": { + "type": "object", + "properties": { + "encrypted_key": { + "type": "string", + "format": "byte" + }, + "kek_label": { + "description": "The label of the RFC 3394 key-encryption-key (KEK) that was used to encrypt the key.", + "type": "string" + }, + "key": { + "description": "The unencrypted AES key.", + "type": "string", + "format": "string", + "example": "0123456789ABCDEF0123456789ABCDEF" + } + } + }, + "f_nwk_s_int_key": { + "type": "object", + "properties": { + "encrypted_key": { + "type": "string", + "format": "byte" + }, + "kek_label": { + "description": "The label of the RFC 3394 key-encryption-key (KEK) that was used to encrypt the key.", + "type": "string" + }, + "key": { + "description": "The unencrypted AES key.", + "type": "string", + "format": "string", + "example": "0123456789ABCDEF0123456789ABCDEF" + } + } + }, + "nwk_s_enc_key": { + "type": "object", + "properties": { + "encrypted_key": { + "type": "string", + "format": "byte" + }, + "kek_label": { + "description": "The label of the RFC 3394 key-encryption-key (KEK) that was used to encrypt the key.", + "type": "string" + }, + "key": { + "description": "The unencrypted AES key.", + "type": "string", + "format": "string", + "example": "0123456789ABCDEF0123456789ABCDEF" + } + } + }, + "s_nwk_s_int_key": { + "type": "object", + "properties": { + "encrypted_key": { + "type": "string", + "format": "byte" + }, + "kek_label": { + "description": "The label of the RFC 3394 key-encryption-key (KEK) that was used to encrypt the key.", + "type": "string" + }, + "key": { + "description": "The unencrypted AES key.", + "type": "string", + "format": "string", + "example": "0123456789ABCDEF0123456789ABCDEF" + } + } + }, + "session_key_id": { + "description": "Join Server issued identifier for the session keys.\nThis ID can be used to request the keys from the Join Server in case the are lost.", + "type": "string", + "format": "byte" + } + } + }, + "last_a_f_cnt_down": { + "description": "Last application downlink frame counter value used. Application Server only.", + "type": "integer", + "format": "int64" + }, + "last_conf_f_cnt_down": { + "description": "Frame counter of the last confirmed downlink message sent. Network Server only.", + "type": "integer", + "format": "int64" + }, + "last_f_cnt_up": { + "description": "Last uplink frame counter value used. Network Server only. Application Server assumes the Network Server checked it.", + "type": "integer", + "format": "int64" + }, + "last_n_f_cnt_down": { + "description": "Last network downlink frame counter value used. Network Server only.", + "type": "integer", + "format": "int64" + }, + "queued_application_downlinks": { + "description": "Queued Application downlink messages. Stored in Application Server and Network Server.", + "type": "array", + "items": { + "type": "object", + "properties": { + "class_b_c": { + "type": "object", + "properties": { + "absolute_time": { + "description": "Absolute time when the downlink message should be transmitted.\nThis requires the gateway to have GPS time synchronization.\nIf the time is in the past or if there is a scheduling conflict, the downlink message fails.\nIf null, the time is selected based on slot availability. This is recommended in class B mode.", + "type": "string", + "format": "date-time" + }, + "gateways": { + "description": "Possible gateway identifiers, antenna index, and group index to use for this downlink message.\nThe Network Server selects one of these gateways for downlink, based on connectivity, signal quality, channel utilization and an available slot.\nIf none of the gateways can be selected, the downlink message fails.\nIf empty, a gateway and antenna is selected automatically from the gateways seen in recent uplinks.\nIf group index is set, gateways will be grouped by the index for the Network Server to select one gateway per group.", + "type": "array", + "items": { + "type": "object", + "properties": { + "antenna_index": { + "type": "integer", + "format": "int64" + }, + "gateway_ids": { + "type": "object", + "properties": { + "eui": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + }, + "gateway_id": { + "type": "string" + } + } + }, + "group_index": { + "type": "integer", + "format": "int64" + } + } + } + } + } + }, + "confirmed": { + "type": "boolean" + }, + "confirmed_retry": { + "type": "object", + "properties": { + "attempt": { + "description": "The number of attempted confirmed downlink acknowledgements.", + "type": "integer", + "format": "int64" + }, + "max_attempts": { + "description": "The maximum number of confirmed downlink acknowledgement attempts.\nIf null, the Application Server configuration is used instead.", + "type": "integer", + "format": "int64" + } + } + }, + "correlation_ids": { + "type": "array", + "items": { + "type": "string" + } + }, + "decoded_payload": { + "description": "The decoded frame payload of the downlink message.\nWhen scheduling downlink with a message processor configured for the end device (see formatters) or application (see default_formatters),\nthis fields acts as input for the downlink encoder, and the output is set to frm_payload.\nWhen reading downlink (listing the queue, downlink message events, etc), this fields acts as output of the downlink decoder, and the input is frm_payload.", + "type": "object" + }, + "decoded_payload_warnings": { + "description": "Warnings generated by the message processor while encoding frm_payload (scheduling downlink) or decoding the frm_payload (reading downlink).", + "type": "array", + "items": { + "type": "string" + } + }, + "f_cnt": { + "type": "integer", + "format": "int64" + }, + "f_port": { + "type": "integer", + "format": "int64" + }, + "frm_payload": { + "description": "The frame payload of the downlink message.\nThe payload is encrypted if the skip_payload_crypto field of the EndDevice\nis true.", + "type": "string", + "format": "byte" + }, + "priority": { + "type": "string", + "default": "LOWEST", + "enum": [ + "LOWEST", + "LOW", + "BELOW_NORMAL", + "NORMAL", + "ABOVE_NORMAL", + "HIGH", + "HIGHEST" + ] + }, + "session_key_id": { + "description": "Join Server issued identifier for the session keys used by this downlink.", + "type": "string", + "format": "byte" + } + } + } + }, + "started_at": { + "description": "Time when the session started. Network Server only.", + "type": "string", + "format": "date-time" + } + } + }, + "skip_payload_crypto": { + "description": "Skip decryption of uplink payloads and encryption of downlink payloads.\nThis field is deprecated, use skip_payload_crypto_override instead.", + "type": "boolean" + }, + "skip_payload_crypto_override": { + "description": "Skip decryption of uplink payloads and encryption of downlink payloads.\nThis field overrides the application-level setting.", + "type": "boolean" + }, + "supports_class_b": { + "description": "Whether the device supports class B.\nCopied on creation from template identified by version_ids, if any or from the home Network Server device profile, if any.", + "type": "boolean" + }, + "supports_class_c": { + "description": "Whether the device supports class C.\nCopied on creation from template identified by version_ids, if any or from the home Network Server device profile, if any.", + "type": "boolean" + }, + "supports_join": { + "description": "The device supports join (it's OTAA).\nCopied on creation from template identified by version_ids, if any or from the home Network Server device profile, if any.", + "type": "boolean" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "used_dev_nonces": { + "description": "Used DevNonces sorted in ascending order.\nThis field is only used for devices using LoRaWAN versions preceding 1.1.\nStored in Join Server.", + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + }, + "version_ids": { + "description": "Identifies an end device model with version information.", + "type": "object", + "properties": { + "band_id": { + "type": "string" + }, + "brand_id": { + "type": "string" + }, + "firmware_version": { + "type": "string" + }, + "hardware_version": { + "type": "string" + }, + "model_id": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, "/applications/{application_ids.application_id}/devices/{device_id}": { "delete": { "description": "Before deleting an end device it first needs to be deleted from the\nNsEndDeviceRegistry, the AsEndDeviceRegistry and the JsEndDeviceRegistry.\nIn addition, if the device claimed on a Join Server, it also needs to be\nunclaimed via the DeviceClaimingServer so it can be claimed in the future.\nThis is NOT done automatically.", @@ -91741,7 +104058,54 @@ } }, "error": { - "$ref": "#/definitions/v3ErrorDetails" + "description": "Error details that are communicated over gRPC (and HTTP) APIs.\nThe messages (for translation) are stored as \"error:\u003cnamespace\u003e:\u003cname\u003e\".", + "type": "object", + "properties": { + "attributes": { + "description": "Attributes that should be filled into the message format. Any extra attributes\ncan be displayed as error details.", + "type": "object" + }, + "cause": { + "description": "The error that caused this error.", + "$ref": "#/definitions/v3ErrorDetails" + }, + "code": { + "description": "The status code of the error.", + "type": "integer", + "format": "int64" + }, + "correlation_id": { + "description": "The correlation ID of the error can be used to correlate the error to stack\ntraces the network may (or may not) store about recent errors.", + "type": "string" + }, + "details": { + "description": "The details of the error.", + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message_format": { + "description": "The default (fallback) message format that should be used for the error.\nThis is also used if the client does not have a translation for the error.", + "type": "string" + }, + "name": { + "description": "Name of the error.", + "type": "string" + }, + "namespace": { + "description": "Namespace of the error (typically the package name in The Things Stack).", + "type": "string" + } + } } } }, @@ -157096,7 +169460,54 @@ } }, "error": { - "$ref": "#/definitions/v3ErrorDetails" + "description": "Error details that are communicated over gRPC (and HTTP) APIs.\nThe messages (for translation) are stored as \"error:\u003cnamespace\u003e:\u003cname\u003e\".", + "type": "object", + "properties": { + "attributes": { + "description": "Attributes that should be filled into the message format. Any extra attributes\ncan be displayed as error details.", + "type": "object" + }, + "cause": { + "description": "The error that caused this error.", + "$ref": "#/definitions/v3ErrorDetails" + }, + "code": { + "description": "The status code of the error.", + "type": "integer", + "format": "int64" + }, + "correlation_id": { + "description": "The correlation ID of the error can be used to correlate the error to stack\ntraces the network may (or may not) store about recent errors.", + "type": "string" + }, + "details": { + "description": "The details of the error.", + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message_format": { + "description": "The default (fallback) message format that should be used for the error.\nThis is also used if the client does not have a translation for the error.", + "type": "string" + }, + "name": { + "description": "Name of the error.", + "type": "string" + }, + "namespace": { + "description": "Namespace of the error (typically the package name in The Things Stack).", + "type": "string" + } + } } } }, @@ -160546,7 +172957,54 @@ } }, "error": { - "$ref": "#/definitions/v3ErrorDetails" + "description": "Error details that are communicated over gRPC (and HTTP) APIs.\nThe messages (for translation) are stored as \"error:\u003cnamespace\u003e:\u003cname\u003e\".", + "type": "object", + "properties": { + "attributes": { + "description": "Attributes that should be filled into the message format. Any extra attributes\ncan be displayed as error details.", + "type": "object" + }, + "cause": { + "description": "The error that caused this error.", + "$ref": "#/definitions/v3ErrorDetails" + }, + "code": { + "description": "The status code of the error.", + "type": "integer", + "format": "int64" + }, + "correlation_id": { + "description": "The correlation ID of the error can be used to correlate the error to stack\ntraces the network may (or may not) store about recent errors.", + "type": "string" + }, + "details": { + "description": "The details of the error.", + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message_format": { + "description": "The default (fallback) message format that should be used for the error.\nThis is also used if the client does not have a translation for the error.", + "type": "string" + }, + "name": { + "description": "Name of the error.", + "type": "string" + }, + "namespace": { + "description": "Namespace of the error (typically the package name in The Things Stack).", + "type": "string" + } + } } } }, @@ -165724,6 +178182,10 @@ } } }, + "paused": { + "description": "Set to temporarily pause forwarding uplink data to this end point and receiving downlinks from this end point.", + "type": "boolean" + }, "queue": { "type": "object", "properties": { @@ -166044,6 +178506,10 @@ } } }, + "paused": { + "description": "Set to temporarily pause forwarding uplink data to this end point and receiving downlinks from this end point.", + "type": "boolean" + }, "queue": { "type": "object", "properties": { @@ -166257,54 +178723,473 @@ "format": "date-time" }, "last_failed_attempt_details": { - "description": "Error details that are communicated over gRPC (and HTTP) APIs.\nThe messages (for translation) are stored as \"error:\u003cnamespace\u003e:\u003cname\u003e\".", - "type": "object", - "properties": { - "attributes": { - "description": "Attributes that should be filled into the message format. Any extra attributes\ncan be displayed as error details.", - "type": "object" - }, - "cause": { - "description": "The error that caused this error.", - "$ref": "#/definitions/v3ErrorDetails" - }, - "code": { - "description": "The status code of the error.", - "type": "integer", - "format": "int64" - }, - "correlation_id": { - "description": "The correlation ID of the error can be used to correlate the error to stack\ntraces the network may (or may not) store about recent errors.", - "type": "string" - }, - "details": { - "description": "The details of the error.", - "type": "array", - "items": { - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", - "type": "object", - "properties": { - "@type": { - "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", - "type": "string" - } - }, - "additionalProperties": {} - } - }, - "message_format": { - "description": "The default (fallback) message format that should be used for the error.\nThis is also used if the client does not have a translation for the error.", - "type": "string" - }, - "name": { - "description": "Name of the error.", - "type": "string" - }, - "namespace": { - "description": "Namespace of the error (typically the package name in The Things Stack).", - "type": "string" - } - } + "$ref": "#/definitions/v3ErrorDetails" + } + } + } + } + }, + "ids": { + "type": "object", + "properties": { + "application_ids": { + "type": "object" + }, + "webhook_id": { + "type": "string" + } + } + }, + "join_accept": { + "type": "object", + "properties": { + "path": { + "description": "Path to append to the base URL.", + "type": "string" + } + } + }, + "location_solved": { + "type": "object", + "properties": { + "path": { + "description": "Path to append to the base URL.", + "type": "string" + } + } + }, + "paused": { + "description": "Set to temporarily pause forwarding uplink data to this end point and receiving downlinks from this end point.", + "type": "boolean" + }, + "queue": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + } + }, + "service_data": { + "type": "object", + "properties": { + "path": { + "description": "Path to append to the base URL.", + "type": "string" + } + } + }, + "template_fields": { + "description": "The value of the fields used by the template. Maps field.id to the value.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "template_ids": { + "type": "object", + "properties": { + "template_id": { + "type": "string" + } + } + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "uplink_message": { + "type": "object", + "properties": { + "path": { + "description": "Path to append to the base URL.", + "type": "string" + } + } + }, + "uplink_normalized": { + "type": "object", + "properties": { + "path": { + "description": "Path to append to the base URL.", + "type": "string" + } + } + } + } + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "base_url": { + "description": "Base URL to which the message's path is appended.", + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "downlink_ack": { + "type": "object", + "properties": { + "path": { + "description": "Path to append to the base URL.", + "type": "string" + } + } + }, + "downlink_api_key": { + "description": "The API key to be used for downlink queue operations.\nThe field is provided for convenience reasons, and can contain API keys with additional rights (albeit this is discouraged).", + "type": "string" + }, + "downlink_failed": { + "type": "object", + "properties": { + "path": { + "description": "Path to append to the base URL.", + "type": "string" + } + } + }, + "downlink_nack": { + "type": "object", + "properties": { + "path": { + "description": "Path to append to the base URL.", + "type": "string" + } + } + }, + "downlink_queue_invalidated": { + "type": "object", + "properties": { + "path": { + "description": "Path to append to the base URL.", + "type": "string" + } + } + }, + "downlink_queued": { + "type": "object", + "properties": { + "path": { + "description": "Path to append to the base URL.", + "type": "string" + } + } + }, + "downlink_sent": { + "type": "object", + "properties": { + "path": { + "description": "Path to append to the base URL.", + "type": "string" + } + } + }, + "field_mask": { + "type": "string" + }, + "format": { + "description": "The format to use for the body.\nSupported values depend on the Application Server configuration.", + "type": "string" + }, + "headers": { + "description": "HTTP headers to use.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "health_status": { + "type": "object", + "properties": { + "healthy": { + "type": "object" + }, + "unhealthy": { + "type": "object", + "properties": { + "failed_attempts": { + "type": "string", + "format": "uint64" + }, + "last_failed_attempt_at": { + "type": "string", + "format": "date-time" + }, + "last_failed_attempt_details": { + "$ref": "#/definitions/v3ErrorDetails" + } + } + } + } + }, + "ids": { + "type": "object", + "properties": { + "application_ids": { + "type": "object", + "properties": { + "application_id": { + "type": "string" + } + } + }, + "webhook_id": { + "type": "string" + } + } + }, + "join_accept": { + "type": "object", + "properties": { + "path": { + "description": "Path to append to the base URL.", + "type": "string" + } + } + }, + "location_solved": { + "type": "object", + "properties": { + "path": { + "description": "Path to append to the base URL.", + "type": "string" + } + } + }, + "paused": { + "description": "Set to temporarily pause forwarding uplink data to this end point and receiving downlinks from this end point.", + "type": "boolean" + }, + "queue": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + } + }, + "service_data": { + "type": "object", + "properties": { + "path": { + "description": "Path to append to the base URL.", + "type": "string" + } + } + }, + "template_fields": { + "description": "The value of the fields used by the template. Maps field.id to the value.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "template_ids": { + "type": "object", + "properties": { + "template_id": { + "type": "string" + } + } + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "uplink_message": { + "type": "object", + "properties": { + "path": { + "description": "Path to append to the base URL.", + "type": "string" + } + } + }, + "uplink_normalized": { + "type": "object", + "properties": { + "path": { + "description": "Path to append to the base URL.", + "type": "string" + } + } + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, + "/as/webhooks/{webhook.ids.application_ids.application_id}/{webhook.ids.webhook_id}": { + "put": { + "tags": [ + "ApplicationWebhookRegistry" + ], + "operationId": "ApplicationWebhookRegistry_Set", + "parameters": [ + { + "type": "string", + "name": "webhook.ids.application_ids.application_id", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "webhook.ids.webhook_id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "field_mask": { + "type": "string" + }, + "webhook": { + "type": "object", + "properties": { + "base_url": { + "description": "Base URL to which the message's path is appended.", + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "downlink_ack": { + "type": "object", + "properties": { + "path": { + "description": "Path to append to the base URL.", + "type": "string" + } + } + }, + "downlink_api_key": { + "description": "The API key to be used for downlink queue operations.\nThe field is provided for convenience reasons, and can contain API keys with additional rights (albeit this is discouraged).", + "type": "string" + }, + "downlink_failed": { + "type": "object", + "properties": { + "path": { + "description": "Path to append to the base URL.", + "type": "string" + } + } + }, + "downlink_nack": { + "type": "object", + "properties": { + "path": { + "description": "Path to append to the base URL.", + "type": "string" + } + } + }, + "downlink_queue_invalidated": { + "type": "object", + "properties": { + "path": { + "description": "Path to append to the base URL.", + "type": "string" + } + } + }, + "downlink_queued": { + "type": "object", + "properties": { + "path": { + "description": "Path to append to the base URL.", + "type": "string" + } + } + }, + "downlink_sent": { + "type": "object", + "properties": { + "path": { + "description": "Path to append to the base URL.", + "type": "string" + } + } + }, + "field_mask": { + "type": "string" + }, + "format": { + "description": "The format to use for the body.\nSupported values depend on the Application Server configuration.", + "type": "string" + }, + "headers": { + "description": "HTTP headers to use.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "health_status": { + "type": "object", + "properties": { + "healthy": { + "type": "object" + }, + "unhealthy": { + "type": "object", + "properties": { + "failed_attempts": { + "type": "string", + "format": "uint64" + }, + "last_failed_attempt_at": { + "type": "string", + "format": "date-time" + }, + "last_failed_attempt_details": { + "$ref": "#/definitions/v3ErrorDetails" } } } @@ -166339,510 +179224,9 @@ } } }, - "queue": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - } - }, - "service_data": { - "type": "object", - "properties": { - "path": { - "description": "Path to append to the base URL.", - "type": "string" - } - } - }, - "template_fields": { - "description": "The value of the fields used by the template. Maps field.id to the value.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "template_ids": { - "type": "object", - "properties": { - "template_id": { - "type": "string" - } - } - }, - "updated_at": { - "type": "string", - "format": "date-time" - }, - "uplink_message": { - "type": "object", - "properties": { - "path": { - "description": "Path to append to the base URL.", - "type": "string" - } - } - }, - "uplink_normalized": { - "type": "object", - "properties": { - "path": { - "description": "Path to append to the base URL.", - "type": "string" - } - } - } - } - } - } - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "type": "object", - "properties": { - "base_url": { - "description": "Base URL to which the message's path is appended.", - "type": "string" - }, - "created_at": { - "type": "string", - "format": "date-time" - }, - "downlink_ack": { - "type": "object", - "properties": { - "path": { - "description": "Path to append to the base URL.", - "type": "string" - } - } - }, - "downlink_api_key": { - "description": "The API key to be used for downlink queue operations.\nThe field is provided for convenience reasons, and can contain API keys with additional rights (albeit this is discouraged).", - "type": "string" - }, - "downlink_failed": { - "type": "object", - "properties": { - "path": { - "description": "Path to append to the base URL.", - "type": "string" - } - } - }, - "downlink_nack": { - "type": "object", - "properties": { - "path": { - "description": "Path to append to the base URL.", - "type": "string" - } - } - }, - "downlink_queue_invalidated": { - "type": "object", - "properties": { - "path": { - "description": "Path to append to the base URL.", - "type": "string" - } - } - }, - "downlink_queued": { - "type": "object", - "properties": { - "path": { - "description": "Path to append to the base URL.", - "type": "string" - } - } - }, - "downlink_sent": { - "type": "object", - "properties": { - "path": { - "description": "Path to append to the base URL.", - "type": "string" - } - } - }, - "field_mask": { - "type": "string" - }, - "format": { - "description": "The format to use for the body.\nSupported values depend on the Application Server configuration.", - "type": "string" - }, - "headers": { - "description": "HTTP headers to use.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "health_status": { - "type": "object", - "properties": { - "healthy": { - "type": "object" - }, - "unhealthy": { - "type": "object", - "properties": { - "failed_attempts": { - "type": "string", - "format": "uint64" - }, - "last_failed_attempt_at": { - "type": "string", - "format": "date-time" - }, - "last_failed_attempt_details": { - "$ref": "#/definitions/v3ErrorDetails" - } - } - } - } - }, - "ids": { - "type": "object", - "properties": { - "application_ids": { - "type": "object", - "properties": { - "application_id": { - "type": "string" - } - } - }, - "webhook_id": { - "type": "string" - } - } - }, - "join_accept": { - "type": "object", - "properties": { - "path": { - "description": "Path to append to the base URL.", - "type": "string" - } - } - }, - "location_solved": { - "type": "object", - "properties": { - "path": { - "description": "Path to append to the base URL.", - "type": "string" - } - } - }, - "queue": { - "type": "object", - "properties": { - "enabled": { + "paused": { + "description": "Set to temporarily pause forwarding uplink data to this end point and receiving downlinks from this end point.", "type": "boolean" - } - } - }, - "service_data": { - "type": "object", - "properties": { - "path": { - "description": "Path to append to the base URL.", - "type": "string" - } - } - }, - "template_fields": { - "description": "The value of the fields used by the template. Maps field.id to the value.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "template_ids": { - "type": "object", - "properties": { - "template_id": { - "type": "string" - } - } - }, - "updated_at": { - "type": "string", - "format": "date-time" - }, - "uplink_message": { - "type": "object", - "properties": { - "path": { - "description": "Path to append to the base URL.", - "type": "string" - } - } - }, - "uplink_normalized": { - "type": "object", - "properties": { - "path": { - "description": "Path to append to the base URL.", - "type": "string" - } - } - } - } - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "format": "int32" - }, - "details": { - "type": "array", - "items": { - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", - "type": "object", - "properties": { - "@type": { - "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", - "type": "string" - } - }, - "additionalProperties": {} - } - }, - "message": { - "type": "string" - } - } - } - } - } - } - }, - "/as/webhooks/{webhook.ids.application_ids.application_id}/{webhook.ids.webhook_id}": { - "put": { - "tags": [ - "ApplicationWebhookRegistry" - ], - "operationId": "ApplicationWebhookRegistry_Set", - "parameters": [ - { - "type": "string", - "name": "webhook.ids.application_ids.application_id", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "webhook.ids.webhook_id", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "field_mask": { - "type": "string" - }, - "webhook": { - "type": "object", - "properties": { - "base_url": { - "description": "Base URL to which the message's path is appended.", - "type": "string" - }, - "created_at": { - "type": "string", - "format": "date-time" - }, - "downlink_ack": { - "type": "object", - "properties": { - "path": { - "description": "Path to append to the base URL.", - "type": "string" - } - } - }, - "downlink_api_key": { - "description": "The API key to be used for downlink queue operations.\nThe field is provided for convenience reasons, and can contain API keys with additional rights (albeit this is discouraged).", - "type": "string" - }, - "downlink_failed": { - "type": "object", - "properties": { - "path": { - "description": "Path to append to the base URL.", - "type": "string" - } - } - }, - "downlink_nack": { - "type": "object", - "properties": { - "path": { - "description": "Path to append to the base URL.", - "type": "string" - } - } - }, - "downlink_queue_invalidated": { - "type": "object", - "properties": { - "path": { - "description": "Path to append to the base URL.", - "type": "string" - } - } - }, - "downlink_queued": { - "type": "object", - "properties": { - "path": { - "description": "Path to append to the base URL.", - "type": "string" - } - } - }, - "downlink_sent": { - "type": "object", - "properties": { - "path": { - "description": "Path to append to the base URL.", - "type": "string" - } - } - }, - "field_mask": { - "type": "string" - }, - "format": { - "description": "The format to use for the body.\nSupported values depend on the Application Server configuration.", - "type": "string" - }, - "headers": { - "description": "HTTP headers to use.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "health_status": { - "type": "object", - "properties": { - "healthy": { - "type": "object" - }, - "unhealthy": { - "type": "object", - "properties": { - "failed_attempts": { - "type": "string", - "format": "uint64" - }, - "last_failed_attempt_at": { - "type": "string", - "format": "date-time" - }, - "last_failed_attempt_details": { - "description": "Error details that are communicated over gRPC (and HTTP) APIs.\nThe messages (for translation) are stored as \"error:\u003cnamespace\u003e:\u003cname\u003e\".", - "type": "object", - "properties": { - "attributes": { - "description": "Attributes that should be filled into the message format. Any extra attributes\ncan be displayed as error details.", - "type": "object" - }, - "cause": { - "description": "The error that caused this error.", - "$ref": "#/definitions/v3ErrorDetails" - }, - "code": { - "description": "The status code of the error.", - "type": "integer", - "format": "int64" - }, - "correlation_id": { - "description": "The correlation ID of the error can be used to correlate the error to stack\ntraces the network may (or may not) store about recent errors.", - "type": "string" - }, - "details": { - "description": "The details of the error.", - "type": "array", - "items": { - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", - "type": "object", - "properties": { - "@type": { - "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", - "type": "string" - } - }, - "additionalProperties": {} - } - }, - "message_format": { - "description": "The default (fallback) message format that should be used for the error.\nThis is also used if the client does not have a translation for the error.", - "type": "string" - }, - "name": { - "description": "Name of the error.", - "type": "string" - }, - "namespace": { - "description": "Namespace of the error (typically the package name in The Things Stack).", - "type": "string" - } - } - } - } - } - } - }, - "ids": { - "type": "object", - "properties": { - "application_ids": { - "type": "object" - }, - "webhook_id": { - "type": "string" - } - } - }, - "join_accept": { - "type": "object", - "properties": { - "path": { - "description": "Path to append to the base URL.", - "type": "string" - } - } - }, - "location_solved": { - "type": "object", - "properties": { - "path": { - "description": "Path to append to the base URL.", - "type": "string" - } - } }, "queue": { "type": "object", @@ -167048,6 +179432,10 @@ } } }, + "paused": { + "description": "Set to temporarily pause forwarding uplink data to this end point and receiving downlinks from this end point.", + "type": "boolean" + }, "queue": { "type": "object", "properties": { @@ -172923,6 +185311,12 @@ "description": "Optional Band ID to filter the results.", "name": "band_id", "in": "query" + }, + { + "type": "boolean", + "description": "Optional field to include only gateway related results.", + "name": "gateways_only", + "in": "query" } ], "responses": { @@ -240819,64 +253213,614 @@ } } }, - "/gateways": { - "get": { + "/gateways": { + "get": { + "description": "If no user or organization is given, this returns the gateways the caller\nhas access to.\nSimilar to Get, this selects the fields given by the field mask.\nMore or less fields may be returned, depending on the rights of the caller.", + "tags": [ + "GatewayRegistry" + ], + "summary": "List gateways where the given user or organization is a direct collaborator.", + "operationId": "GatewayRegistry_List", + "parameters": [ + { + "type": "string", + "description": "This ID shares namespace with user IDs.", + "name": "collaborator.organization_ids.organization_id", + "in": "query" + }, + { + "type": "string", + "description": "This ID shares namespace with organization IDs.", + "name": "collaborator.user_ids.user_id", + "in": "query" + }, + { + "type": "string", + "description": "Secondary identifier, which can only be used in specific requests.", + "name": "collaborator.user_ids.email", + "in": "query" + }, + { + "type": "string", + "description": "The names of the gateway fields that should be returned.", + "name": "field_mask", + "in": "query" + }, + { + "type": "string", + "description": "Order the results by this field path (must be present in the field mask).\nDefault ordering is by ID. Prepend with a minus (-) to reverse the order.", + "name": "order", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "Limit the number of results per page.", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "Page number for pagination. 0 is interpreted as 1.", + "name": "page", + "in": "query" + }, + { + "type": "boolean", + "description": "Only return recently deleted gateways.", + "name": "deleted", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "gateways": { + "type": "array", + "items": { + "description": "Gateway is the message that defines a gateway on the network.", + "type": "object", + "properties": { + "administrative_contact": { + "description": "OrganizationOrUserIdentifiers contains either organization or user identifiers.", + "type": "object", + "properties": { + "organization_ids": { + "type": "object", + "properties": { + "organization_id": { + "description": "This ID shares namespace with user IDs.", + "type": "string" + } + } + }, + "user_ids": { + "type": "object", + "properties": { + "email": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string" + }, + "user_id": { + "description": "This ID shares namespace with organization IDs.", + "type": "string" + } + } + } + } + }, + "alert_notification_profile_ids": { + "type": "object", + "properties": { + "profile_id": { + "type": "string" + } + } + }, + "antennas": { + "description": "Antennas of the gateway. Location information of the antennas is public and can be seen by any authenticated user in the network if location_public=true.", + "type": "array", + "items": { + "description": "GatewayAntenna is the message that defines a gateway antenna.", + "type": "object", + "properties": { + "attributes": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "gain": { + "description": "Antenna gain relative to the gateway, in dBi.", + "type": "number", + "format": "float" + }, + "location": { + "type": "object", + "properties": { + "accuracy": { + "description": "The accuracy of the location (meters).", + "type": "integer", + "format": "int32" + }, + "altitude": { + "description": "The altitude (meters), where 0 is the mean sea level.", + "type": "integer", + "format": "int32" + }, + "latitude": { + "description": "The North–South position (degrees; -90 to +90), where 0 is the equator, North pole is positive, South pole is negative.", + "type": "number", + "format": "double" + }, + "longitude": { + "description": "The East-West position (degrees; -180 to +180), where 0 is the Prime Meridian (Greenwich), East is positive , West is negative.", + "type": "number", + "format": "double" + }, + "source": { + "description": " - SOURCE_UNKNOWN: The source of the location is not known or not set.\n - SOURCE_GPS: The location is determined by GPS.\n - SOURCE_REGISTRY: The location is set in and updated from a registry.\n - SOURCE_IP_GEOLOCATION: The location is estimated with IP geolocation.\n - SOURCE_WIFI_RSSI_GEOLOCATION: The location is estimated with WiFi RSSI geolocation.\n - SOURCE_BT_RSSI_GEOLOCATION: The location is estimated with BT/BLE RSSI geolocation.\n - SOURCE_LORA_RSSI_GEOLOCATION: The location is estimated with LoRa RSSI geolocation.\n - SOURCE_LORA_TDOA_GEOLOCATION: The location is estimated with LoRa TDOA geolocation.\n - SOURCE_COMBINED_GEOLOCATION: The location is estimated by a combination of geolocation sources.\n\nMore estimation methods can be added.", + "type": "string", + "default": "SOURCE_UNKNOWN", + "enum": [ + "SOURCE_UNKNOWN", + "SOURCE_GPS", + "SOURCE_REGISTRY", + "SOURCE_IP_GEOLOCATION", + "SOURCE_WIFI_RSSI_GEOLOCATION", + "SOURCE_BT_RSSI_GEOLOCATION", + "SOURCE_LORA_RSSI_GEOLOCATION", + "SOURCE_LORA_TDOA_GEOLOCATION", + "SOURCE_COMBINED_GEOLOCATION" + ] + } + } + }, + "placement": { + "type": "string", + "default": "PLACEMENT_UNKNOWN", + "enum": [ + "PLACEMENT_UNKNOWN", + "INDOOR", + "OUTDOOR" + ] + } + } + } + }, + "attributes": { + "description": "Key-value attributes for this gateway. Typically used for organizing gateways or for storing integration-specific data.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "auto_update": { + "type": "boolean" + }, + "claim_authentication_code": { + "description": "Authentication code for claiming gateways.", + "type": "object", + "properties": { + "secret": { + "description": "Secret contains a secret value. It also contains the ID of the Encryption key used to encrypt it.", + "type": "object", + "properties": { + "key_id": { + "description": "ID of the Key used to encrypt the secret.", + "type": "string" + }, + "value": { + "type": "string", + "format": "byte" + } + } + }, + "valid_from": { + "type": "string", + "format": "date-time" + }, + "valid_to": { + "type": "string", + "format": "date-time" + } + } + }, + "contact_info": { + "description": "Contact information for this gateway. Typically used to indicate who to contact with technical/security questions about the gateway.\nThis field is deprecated. Use administrative_contact and technical_contact instead.", + "type": "array", + "items": { + "type": "object", + "properties": { + "contact_method": { + "type": "string", + "default": "CONTACT_METHOD_OTHER", + "enum": [ + "CONTACT_METHOD_OTHER", + "CONTACT_METHOD_EMAIL", + "CONTACT_METHOD_PHONE" + ] + }, + "contact_type": { + "type": "string", + "default": "CONTACT_TYPE_OTHER", + "enum": [ + "CONTACT_TYPE_OTHER", + "CONTACT_TYPE_ABUSE", + "CONTACT_TYPE_BILLING", + "CONTACT_TYPE_TECHNICAL" + ] + }, + "public": { + "type": "boolean" + }, + "validated_at": { + "type": "string", + "format": "date-time" + }, + "value": { + "type": "string" + } + } + } + }, + "created_at": { + "description": "When the gateway was created. This information is public and can be seen by any authenticated user in the network.", + "type": "string", + "format": "date-time" + }, + "deleted_at": { + "description": "When the gateway was deleted. This information is public and can be seen by any authenticated user in the network.", + "type": "string", + "format": "date-time" + }, + "description": { + "description": "A description for the gateway. This information is public and can be seen by any authenticated user in the network.", + "type": "string" + }, + "disable_packet_broker_forwarding": { + "type": "boolean" + }, + "downlink_path_constraint": { + "description": " - DOWNLINK_PATH_CONSTRAINT_NONE: Indicates that the gateway can be selected for downlink without constraints by the Network Server.\n - DOWNLINK_PATH_CONSTRAINT_PREFER_OTHER: Indicates that the gateway can be selected for downlink only if no other or better gateway can be selected.\n - DOWNLINK_PATH_CONSTRAINT_NEVER: Indicates that this gateway will never be selected for downlink, even if that results in no available downlink path.", + "type": "string", + "default": "DOWNLINK_PATH_CONSTRAINT_NONE", + "enum": [ + "DOWNLINK_PATH_CONSTRAINT_NONE", + "DOWNLINK_PATH_CONSTRAINT_PREFER_OTHER", + "DOWNLINK_PATH_CONSTRAINT_NEVER" + ] + }, + "enforce_duty_cycle": { + "description": "Enforcing gateway duty cycle is recommended for all gateways to respect spectrum regulations. Disable enforcing the\nduty cycle only in controlled research and development environments.", + "type": "boolean" + }, + "frequency_plan_id": { + "description": "Frequency plan ID of the gateway.\nThis information is public and can be seen by any authenticated user in the network.\nDEPRECATED: use frequency_plan_ids.\nThis equals the first element of the frequency_plan_ids field.", + "type": "string" + }, + "frequency_plan_ids": { + "description": "Frequency plan IDs of the gateway.\nThis information is public and can be seen by any authenticated user in the network.\nThe first element equals the frequency_plan_id field.", + "type": "array", + "items": { + "type": "string" + } + }, + "gateway_server_address": { + "description": "The address of the Gateway Server to connect to.\nThis information is public and can be seen by any authenticated user in the network if status_public is true.\nThe typical format of the address is \"scheme://host:port\". The scheme is optional. If the port is omitted,\nthe normal port inference (with DNS lookup, otherwise defaults) is used.\nThe connection shall be established with transport layer security (TLS).\nCustom certificate authorities may be configured out-of-band.", + "type": "string" + }, + "ids": { + "type": "object", + "properties": { + "eui": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + }, + "gateway_id": { + "type": "string" + } + } + }, + "lbs_lns_secret": { + "description": "Secret contains a secret value. It also contains the ID of the Encryption key used to encrypt it.", + "type": "object", + "properties": { + "key_id": { + "description": "ID of the Key used to encrypt the secret.", + "type": "string" + }, + "value": { + "type": "string", + "format": "byte" + } + } + }, + "location_public": { + "description": "The location of this gateway may be publicly displayed.", + "type": "boolean" + }, + "lrfhss": { + "description": "LR-FHSS gateway capabilities.", + "type": "object", + "properties": { + "supported": { + "description": "The gateway supports the LR-FHSS uplink channels.", + "type": "boolean" + } + } + }, + "name": { + "description": "The name of the gateway. This information is public and can be seen by any authenticated user in the network.", + "type": "string" + }, + "require_authenticated_connection": { + "description": "Require an authenticated gateway connection. This prevents the gateway from using the UDP protocol and requires authentication when using other protocols.", + "type": "boolean" + }, + "schedule_anytime_delay": { + "description": "Adjust the time that GS schedules class C messages in advance. This is useful for gateways that have a known high latency backhaul, like 3G and satellite.", + "type": "string" + }, + "schedule_downlink_late": { + "description": "Enable server-side buffering of downlink messages. This is recommended for gateways using the Semtech UDP Packet\nForwarder v2.x or older, as it does not feature a just-in-time queue. If enabled, the Gateway Server schedules the\ndownlink message late to the gateway so that it does not overwrite previously scheduled downlink messages that have\nnot been transmitted yet.", + "type": "boolean" + }, + "status_public": { + "description": "The status of this gateway may be publicly displayed.", + "type": "boolean" + }, + "target_cups_key": { + "description": "Secret contains a secret value. It also contains the ID of the Encryption key used to encrypt it.", + "type": "object", + "properties": { + "key_id": { + "description": "ID of the Key used to encrypt the secret.", + "type": "string" + }, + "value": { + "type": "string", + "format": "byte" + } + } + }, + "target_cups_uri": { + "description": "CUPS URI for LoRa Basics Station CUPS redirection.\nThe CUPS Trust field will be automatically fetched from the cert chain presented by the target server.", + "type": "string" + }, + "technical_contact": { + "description": "OrganizationOrUserIdentifiers contains either organization or user identifiers.", + "type": "object", + "properties": { + "organization_ids": { + "type": "object", + "properties": { + "organization_id": { + "description": "This ID shares namespace with user IDs.", + "type": "string" + } + } + }, + "user_ids": { + "type": "object", + "properties": { + "email": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string" + }, + "user_id": { + "description": "This ID shares namespace with organization IDs.", + "type": "string" + } + } + } + } + }, + "update_channel": { + "type": "string" + }, + "update_location_from_status": { + "description": "Update the location of this gateway from status messages. This only works for gateways connecting with authentication; gateways connected over UDP are not supported.", + "type": "boolean" + }, + "updated_at": { + "description": "When the gateway was last updated. This information is public and can be seen by any authenticated user in the network.", + "type": "string", + "format": "date-time" + }, + "version_ids": { + "description": "Identifies an end device model with version information.", + "type": "object", + "properties": { + "brand_id": { + "type": "string" + }, + "firmware_version": { + "type": "string" + }, + "hardware_version": { + "type": "string" + }, + "model_id": { + "type": "string" + }, + "runtime_version": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, + "/gateways/batch": { + "delete": { + "description": "This operation is atomic; either all gateways are deleted or none.\nThe caller must have delete rights on all requested gateways.", + "tags": [ + "GatewayBatchRegistry" + ], + "summary": "Delete a batch of gateways.", + "operationId": "GatewayBatchRegistry_Delete", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, + "/gateways/filter": { + "post": { "description": "If no user or organization is given, this returns the gateways the caller\nhas access to.\nSimilar to Get, this selects the fields given by the field mask.\nMore or less fields may be returned, depending on the rights of the caller.", "tags": [ "GatewayRegistry" ], "summary": "List gateways where the given user or organization is a direct collaborator.", - "operationId": "GatewayRegistry_List", + "operationId": "GatewayRegistry_List4", "parameters": [ { - "type": "string", - "description": "This ID shares namespace with user IDs.", - "name": "collaborator.organization_ids.organization_id", - "in": "query" - }, - { - "type": "string", - "description": "This ID shares namespace with organization IDs.", - "name": "collaborator.user_ids.user_id", - "in": "query" - }, - { - "type": "string", - "description": "Secondary identifier, which can only be used in specific requests.", - "name": "collaborator.user_ids.email", - "in": "query" - }, - { - "type": "string", - "description": "The names of the gateway fields that should be returned.", - "name": "field_mask", - "in": "query" - }, - { - "type": "string", - "description": "Order the results by this field path (must be present in the field mask).\nDefault ordering is by ID. Prepend with a minus (-) to reverse the order.", - "name": "order", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "description": "Limit the number of results per page.", - "name": "limit", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "description": "Page number for pagination. 0 is interpreted as 1.", - "name": "page", - "in": "query" - }, - { - "type": "boolean", - "description": "Only return recently deleted gateways.", - "name": "deleted", - "in": "query" + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "collaborator": { + "description": "OrganizationOrUserIdentifiers contains either organization or user identifiers.", + "type": "object", + "properties": { + "organization_ids": { + "type": "object", + "properties": { + "organization_id": { + "description": "This ID shares namespace with user IDs.", + "type": "string" + } + } + }, + "user_ids": { + "type": "object", + "properties": { + "email": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string" + }, + "user_id": { + "description": "This ID shares namespace with organization IDs.", + "type": "string" + } + } + } + } + }, + "deleted": { + "description": "Only return recently deleted gateways.", + "type": "boolean" + }, + "field_mask": { + "description": "The names of the gateway fields that should be returned.", + "type": "string" + }, + "filters": { + "type": "array", + "items": { + "description": "Filter gateways by fields.", + "type": "object", + "properties": { + "updated_since": { + "type": "string", + "format": "date-time" + } + } + } + }, + "limit": { + "description": "Limit the number of results per page.", + "type": "integer", + "format": "int64" + }, + "order": { + "description": "Order the results by this field path (must be present in the field mask).\nDefault ordering is by ID. Prepend with a minus (-) to reverse the order.", + "type": "string" + }, + "page": { + "description": "Page number for pagination. 0 is interpreted as 1.", + "type": "integer", + "format": "int64" + } + } + } } ], "responses": { @@ -241299,53 +254243,6 @@ } } }, - "/gateways/batch": { - "delete": { - "description": "This operation is atomic; either all gateways are deleted or none.\nThe caller must have delete rights on all requested gateways.", - "tags": [ - "GatewayBatchRegistry" - ], - "summary": "Delete a batch of gateways.", - "operationId": "GatewayBatchRegistry_Delete", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "type": "object" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "format": "int32" - }, - "details": { - "type": "array", - "items": { - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", - "type": "object", - "properties": { - "@type": { - "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", - "type": "string" - } - }, - "additionalProperties": {} - } - }, - "message": { - "type": "string" - } - } - } - } - } - } - }, "/gateways/rights/batch": { "get": { "description": "The check is successful if there are no errors.", @@ -453110,6 +466007,171 @@ } } }, + "/qr-codes/gateways/parse": { + "post": { + "tags": [ + "GatewayQRCodeGenerator" + ], + "summary": "Parse QR Codes of known formats and return the information contained within.", + "operationId": "GatewayQRCodeGenerator_Parse", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "format_id": { + "description": "QR code format identifier.\nIf this field is not specified, the server will default to ttigpro1.", + "type": "string" + }, + "qr_code": { + "description": "Raw QR code contents.", + "type": "string", + "format": "byte" + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "format_id": { + "description": "Identifier of the format used to parse the QR code data.", + "type": "string" + }, + "gateway_eui": { + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + }, + "owner_token": { + "type": "string" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, + "/qr-codes/gateways/{format_id}/parse": { + "post": { + "tags": [ + "GatewayQRCodeGenerator" + ], + "summary": "Parse QR Codes of known formats and return the information contained within.", + "operationId": "GatewayQRCodeGenerator_Parse2", + "parameters": [ + { + "type": "string", + "description": "QR code format identifier.\nIf this field is not specified, the server will default to ttigpro1.", + "name": "format_id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "qr_code": { + "description": "Raw QR code contents.", + "type": "string", + "format": "byte" + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "format_id": { + "description": "Identifier of the format used to parse the QR code data.", + "type": "string" + }, + "gateway_eui": { + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + }, + "owner_token": { + "type": "string" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, "/search/accounts": { "get": { "tags": [ @@ -485456,7 +498518,54 @@ } }, "error": { - "$ref": "#/definitions/v3ErrorDetails" + "description": "Error details that are communicated over gRPC (and HTTP) APIs.\nThe messages (for translation) are stored as \"error:\u003cnamespace\u003e:\u003cname\u003e\".", + "type": "object", + "properties": { + "attributes": { + "description": "Attributes that should be filled into the message format. Any extra attributes\ncan be displayed as error details.", + "type": "object" + }, + "cause": { + "description": "The error that caused this error.", + "$ref": "#/definitions/v3ErrorDetails" + }, + "code": { + "description": "The status code of the error.", + "type": "integer", + "format": "int64" + }, + "correlation_id": { + "description": "The correlation ID of the error can be used to correlate the error to stack\ntraces the network may (or may not) store about recent errors.", + "type": "string" + }, + "details": { + "description": "The details of the error.", + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message_format": { + "description": "The default (fallback) message format that should be used for the error.\nThis is also used if the client does not have a translation for the error.", + "type": "string" + }, + "name": { + "description": "Name of the error.", + "type": "string" + }, + "namespace": { + "description": "Namespace of the error (typically the package name in The Things Stack).", + "type": "string" + } + } } } }, @@ -489695,16 +502804,6 @@ } } }, - "EndDeviceQRCodeGeneratorParseBody": { - "type": "object", - "properties": { - "qr_code": { - "description": "Raw QR code contents.", - "type": "string", - "format": "byte" - } - } - }, "EntityCountingEntityCountingType": { "type": "string", "default": "ALL", @@ -500162,7 +513261,54 @@ } }, "error": { - "$ref": "#/definitions/v3ErrorDetails" + "description": "Error details that are communicated over gRPC (and HTTP) APIs.\nThe messages (for translation) are stored as \"error:\u003cnamespace\u003e:\u003cname\u003e\".", + "type": "object", + "properties": { + "attributes": { + "description": "Attributes that should be filled into the message format. Any extra attributes\ncan be displayed as error details.", + "type": "object" + }, + "cause": { + "description": "The error that caused this error.", + "$ref": "#/definitions/v3ErrorDetails" + }, + "code": { + "description": "The status code of the error.", + "type": "integer", + "format": "int64" + }, + "correlation_id": { + "description": "The correlation ID of the error can be used to correlate the error to stack\ntraces the network may (or may not) store about recent errors.", + "type": "string" + }, + "details": { + "description": "The details of the error.", + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message_format": { + "description": "The default (fallback) message format that should be used for the error.\nThis is also used if the client does not have a translation for the error.", + "type": "string" + }, + "name": { + "description": "Name of the error.", + "type": "string" + }, + "namespace": { + "description": "Namespace of the error (typically the package name in The Things Stack).", + "type": "string" + } + } } } }, @@ -502714,7 +515860,54 @@ } }, "error": { - "$ref": "#/definitions/v3ErrorDetails" + "description": "Error details that are communicated over gRPC (and HTTP) APIs.\nThe messages (for translation) are stored as \"error:\u003cnamespace\u003e:\u003cname\u003e\".", + "type": "object", + "properties": { + "attributes": { + "description": "Attributes that should be filled into the message format. Any extra attributes\ncan be displayed as error details.", + "type": "object" + }, + "cause": { + "description": "The error that caused this error.", + "$ref": "#/definitions/v3ErrorDetails" + }, + "code": { + "description": "The status code of the error.", + "type": "integer", + "format": "int64" + }, + "correlation_id": { + "description": "The correlation ID of the error can be used to correlate the error to stack\ntraces the network may (or may not) store about recent errors.", + "type": "string" + }, + "details": { + "description": "The details of the error.", + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message_format": { + "description": "The default (fallback) message format that should be used for the error.\nThis is also used if the client does not have a translation for the error.", + "type": "string" + }, + "name": { + "description": "Name of the error.", + "type": "string" + }, + "namespace": { + "description": "Namespace of the error (typically the package name in The Things Stack).", + "type": "string" + } + } } } }, @@ -505706,6 +518899,10 @@ } } }, + "paused": { + "description": "Set to temporarily pause forwarding uplink data to this end point and receiving downlinks from this end point.", + "type": "boolean" + }, "queue": { "type": "object", "properties": { @@ -506021,54 +519218,7 @@ "format": "date-time" }, "last_failed_attempt_details": { - "description": "Error details that are communicated over gRPC (and HTTP) APIs.\nThe messages (for translation) are stored as \"error:\u003cnamespace\u003e:\u003cname\u003e\".", - "type": "object", - "properties": { - "attributes": { - "description": "Attributes that should be filled into the message format. Any extra attributes\ncan be displayed as error details.", - "type": "object" - }, - "cause": { - "description": "The error that caused this error.", - "$ref": "#/definitions/v3ErrorDetails" - }, - "code": { - "description": "The status code of the error.", - "type": "integer", - "format": "int64" - }, - "correlation_id": { - "description": "The correlation ID of the error can be used to correlate the error to stack\ntraces the network may (or may not) store about recent errors.", - "type": "string" - }, - "details": { - "description": "The details of the error.", - "type": "array", - "items": { - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", - "type": "object", - "properties": { - "@type": { - "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", - "type": "string" - } - }, - "additionalProperties": {} - } - }, - "message_format": { - "description": "The default (fallback) message format that should be used for the error.\nThis is also used if the client does not have a translation for the error.", - "type": "string" - }, - "name": { - "description": "Name of the error.", - "type": "string" - }, - "namespace": { - "description": "Namespace of the error (typically the package name in The Things Stack).", - "type": "string" - } - } + "$ref": "#/definitions/v3ErrorDetails" } } } @@ -506103,6 +519253,10 @@ } } }, + "paused": { + "description": "Set to temporarily pause forwarding uplink data to this end point and receiving downlinks from this end point.", + "type": "boolean" + }, "queue": { "type": "object", "properties": { @@ -506709,6 +519863,10 @@ } } }, + "paused": { + "description": "Set to temporarily pause forwarding uplink data to this end point and receiving downlinks from this end point.", + "type": "boolean" + }, "queue": { "type": "object", "properties": { @@ -539308,6 +552466,16 @@ } } }, + "v3EndDeviceQRCodeGeneratorParseBody": { + "type": "object", + "properties": { + "qr_code": { + "description": "Raw QR code contents.", + "type": "string", + "format": "byte" + } + } + }, "v3EndDeviceRegistryCreateBody": { "type": "object", "properties": { @@ -551521,6 +564689,45 @@ } } }, + "v3EndDeviceRegistryListBody": { + "type": "object", + "properties": { + "application_ids": { + "type": "object" + }, + "field_mask": { + "description": "The names of the end device fields that should be returned.\nSee the API reference for which fields can be returned by the different services.", + "type": "string" + }, + "filters": { + "type": "array", + "items": { + "description": "Filter end devices by fields.", + "type": "object", + "properties": { + "updated_since": { + "type": "string", + "format": "date-time" + } + } + } + }, + "limit": { + "description": "Limit the number of results per page.", + "type": "integer", + "format": "int64" + }, + "order": { + "description": "Order the results by this field path (must be present in the field mask).\nDefault ordering is by ID. Prepend with a minus (-) to reverse the order.", + "type": "string" + }, + "page": { + "description": "Page number for pagination. 0 is interpreted as 1.", + "type": "integer", + "format": "int64" + } + } + }, "v3EndDeviceRegistryUpdateBody": { "type": "object", "properties": { @@ -591034,6 +604241,16 @@ } } }, + "v3GatewayQRCodeGeneratorParseBody": { + "type": "object", + "properties": { + "qr_code": { + "description": "Raw QR code contents.", + "type": "string", + "format": "byte" + } + } + }, "v3GatewayRTTStatistic": { "description": "Gateway RTT statistic.", "type": "object", @@ -619915,6 +633132,74 @@ } } }, + "v3ListGatewaysRequest": { + "type": "object", + "properties": { + "collaborator": { + "description": "OrganizationOrUserIdentifiers contains either organization or user identifiers.", + "type": "object", + "properties": { + "organization_ids": { + "type": "object", + "properties": { + "organization_id": { + "description": "This ID shares namespace with user IDs.", + "type": "string" + } + } + }, + "user_ids": { + "type": "object", + "properties": { + "email": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string" + }, + "user_id": { + "description": "This ID shares namespace with organization IDs.", + "type": "string" + } + } + } + } + }, + "deleted": { + "description": "Only return recently deleted gateways.", + "type": "boolean" + }, + "field_mask": { + "description": "The names of the gateway fields that should be returned.", + "type": "string" + }, + "filters": { + "type": "array", + "items": { + "description": "Filter gateways by fields.", + "type": "object", + "properties": { + "updated_since": { + "type": "string", + "format": "date-time" + } + } + } + }, + "limit": { + "description": "Limit the number of results per page.", + "type": "integer", + "format": "int64" + }, + "order": { + "description": "Order the results by this field path (must be present in the field mask).\nDefault ordering is by ID. Prepend with a minus (-) to reverse the order.", + "type": "string" + }, + "page": { + "description": "Page number for pagination. 0 is interpreted as 1.", + "type": "integer", + "format": "int64" + } + } + }, "v3ListGatewaysRequestFilter": { "description": "Filter gateways by fields.", "type": "object", @@ -658337,6 +671622,37 @@ } } }, + "v3ParseGatewayQRCodeRequest": { + "type": "object", + "properties": { + "format_id": { + "description": "QR code format identifier.\nIf this field is not specified, the server will default to ttigpro1.", + "type": "string" + }, + "qr_code": { + "description": "Raw QR code contents.", + "type": "string", + "format": "byte" + } + } + }, + "v3ParseGatewayQRCodeResponse": { + "type": "object", + "properties": { + "format_id": { + "description": "Identifier of the format used to parse the QR code data.", + "type": "string" + }, + "gateway_eui": { + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + }, + "owner_token": { + "type": "string" + } + } + }, "v3PayloadFormatter": { "description": " - FORMATTER_NONE: No payload formatter to work with raw payload only.\n - FORMATTER_REPOSITORY: Use payload formatter for the end device type from a repository.\n - FORMATTER_GRPC_SERVICE: gRPC service payload formatter. The parameter is the host:port of the service.\n - FORMATTER_JAVASCRIPT: Custom payload formatter that executes Javascript code. The parameter is a JavaScript filename.\n - FORMATTER_CAYENNELPP: CayenneLPP payload formatter.\n\nMore payload formatters can be added.", "type": "string", @@ -666444,6 +679760,9 @@ "description": "Generate and parse end device QR codes.", "name": "EndDeviceQRCodeGenerator" }, + { + "name": "GatewayQRCodeGenerator" + }, { "description": "Search for end devices in the End Device Registry.", "name": "EndDeviceRegistrySearch"