diff --git a/doc/content/applications/aws/_index.md b/doc/content/applications/aws/_index.md index fd4ab86ebb..58dd6a5fc6 100644 --- a/doc/content/applications/aws/_index.md +++ b/doc/content/applications/aws/_index.md @@ -7,13 +7,12 @@ This integration brings LoRaWAN to [AWS IoT](https://aws.amazon.com/iot/): sync Syncing the thing registry allows you to manage LoRaWAN devices in AWS IoT: devices are created and updated in The Things Network. Syncing thing shadows enables reporting shadow state from uplink messages and sending downlink messages from shadow delta updates. Finally, uplink and downlink messages are available on AWS IoT MQTT so you can store messages in [DynamoDB](https://aws.amazon.com/dynamodb/), invoke [Lambda](https://aws.amazon.com/lambda/) functions and many more. -This integration runs in your AWS account and security context and can connect to The Things Network public community network and private networks. +This integration runs in your AWS account and security context and can connect to The Things Stack Sandbox and private networks. ## Getting Started See [Quick Start]({{< relref "./quick-start" >}}) on how to get started. - ## Video [![Getting started with AWS IoT](https://img.youtube.com/vi/XuMv258g1kY/0.jpg)](https://www.youtube.com/watch?v=XuMv258g1kY) diff --git a/doc/content/applications/golang/api/_index.md b/doc/content/applications/golang/api/_index.md index fa41e2b509..79a8f5a153 100644 --- a/doc/content/applications/golang/api/_index.md +++ b/doc/content/applications/golang/api/_index.md @@ -1,7 +1,7 @@ --- title: API Reference weight: -1000 -source: 'https://github.com/TheThingsNetwork/go-app-sdk/blob/master/API.md' +source: "https://github.com/TheThingsNetwork/go-app-sdk/blob/master/API.md" --- import ttnsdk "github.com/TheThingsNetwork/go-app-sdk" @@ -18,6 +18,7 @@ retrieve the addresses of the Handler and MQTT server. ```go var ClientVersion = "2.x.x" ``` + ClientVersion to use ```go @@ -32,13 +33,15 @@ var DialOptions = []grpc.DialOption{ grpc.WithBlock(), } ``` + DialOptions to use when connecting to components -## func MoveDevice +## func MoveDevice ```go func MoveDevice(devID string, from, to DeviceManager) (err error) ``` + MoveDevice moves a device to another application ## type ApplicationManager @@ -172,19 +175,21 @@ ClientConfig contains the configuration for the API client. Use the NewConfig() or NewCommunityConfig() functions to initialize your configuration, otherwise NewClient will panic. -## func NewCommunityConfig +## func NewCommunityConfig ```go func NewCommunityConfig(clientName string) ClientConfig ``` + NewCommunityConfig creates a new configuration for the API client that is -pre-configured for the Public Community Network. +pre-configured for the The Things Stack Sandbox. -## func NewConfig +## func NewConfig ```go func NewConfig(clientName, accountServerAddress, discoveryServerAddress string) ClientConfig ``` + NewConfig creates a new configuration for the API client. ## func (ClientConfig) NewClient @@ -192,6 +197,7 @@ NewConfig creates a new configuration for the API client. ```go func (c ClientConfig) NewClient(appID, appAccessKey string) Client ``` + NewClient creates a new API client from the configuration, using the given Application ID and Application access key. @@ -211,62 +217,69 @@ type Device struct { Device in an application -## func (*Device) Delete +## func (\*Device) Delete ```go func (d *Device) Delete() error ``` + Delete the device. This function panics if this is a new device. -## func (*Device) IsNew +## func (\*Device) IsNew ```go func (d *Device) IsNew() bool ``` + IsNew indicates whether the device is new. -## func (*Device) Personalize +## func (\*Device) Personalize ```go func (d *Device) Personalize(nwkSKey types.NwkSKey, appSKey types.AppSKey) error ``` + Personalize a device by requesting a DevAddr from the network, and setting the NwkSKey and AppSKey to the given values. This function panics if this is a new device, so make sure you Get() the device first. -## func (*Device) PersonalizeFunc +## func (\*Device) PersonalizeFunc ```go func (d *Device) PersonalizeFunc(personalizeFunc func(types.DevAddr) (types.NwkSKey, types.AppSKey)) error ``` + PersonalizeFunc personalizes a device by requesting a DevAddr from the network, and setting the NwkSKey and AppSKey to the result of the personalizeFunc. This function panics if this is a new device, so make sure you Get() the device first. -## func (*Device) PersonalizeRandom +## func (\*Device) PersonalizeRandom ```go func (d *Device) PersonalizeRandom() error ``` + PersonalizeRandom personalizes a device by requesting a DevAddr from the network, and setting the NwkSKey and AppSKey to randomly generated values. This function panics if this is a new device, so make sure you Get() the device first. -## func (*Device) SetManager +## func (\*Device) SetManager ```go func (d *Device) SetManager(manager DeviceManager) ``` + SetManager sets the manager of the device. This function panics if this is not a new device. -## func (*Device) Update +## func (\*Device) Update ```go func (d *Device) Update() error ``` + Update the device. This function panics if this is a new device. ## type DeviceList @@ -275,13 +288,14 @@ Update the device. This function panics if this is a new device. type DeviceList []*SparseDevice ``` -DeviceList is a slice of *SparseDevice. +DeviceList is a slice of \*SparseDevice. ## func (DeviceList) AsDevices ```go func (d DeviceList) AsDevices() []*Device ``` + AsDevices returns the DeviceList as a slice of *Device instead of *SparseDevice ## type DeviceManager @@ -377,10 +391,11 @@ type SparseDevice struct { SparseDevice contains most, but not all fields of the device. It's returned by List operations to save server resources -## func (*SparseDevice) AsDevice +## func (\*SparseDevice) AsDevice ```go func (d *SparseDevice) AsDevice() *Device ``` + AsDevice wraps the *SparseDevice and returns a *Device containing that sparse device diff --git a/doc/content/applications/golang/quick-start/_index.md b/doc/content/applications/golang/quick-start/_index.md index 333c52b69c..baadc51de0 100644 --- a/doc/content/applications/golang/quick-start/_index.md +++ b/doc/content/applications/golang/quick-start/_index.md @@ -76,14 +76,14 @@ appID := os.Getenv("TTN_APP_ID") appAccessKey := os.Getenv("TTN_APP_ACCESS_KEY") ``` -Next, we create a new **SDK Configuration** to connect to the public community network: +Next, we create a new **SDK Configuration** to connect to the The Things Stack Sandbox: ```go config := ttnsdk.NewCommunityConfig(sdkClientName) config.ClientVersion = "2.0.5" // The version of the application ``` -And we create a new **SDK Client** for the application. +And we create a new **SDK Client** for the application. The second line makes sure the client is cleaned up before the end of the program. You could add more of these `defer something.Close()` below, as it's good practice to clean up after you no longer need something. The `client.Close()` will make sure that everything we start after this point, will also be cleaned up, so I left out those other `defer something.Close()` for simplicity. diff --git a/doc/content/devices/_index.md b/doc/content/devices/_index.md index 418494e704..a7b5d56ee1 100644 --- a/doc/content/devices/_index.md +++ b/doc/content/devices/_index.md @@ -2,14 +2,14 @@ title: Devices description: Connect devices to The Things Network. sections: - - SDKs & Libraries - - Hardware + - SDKs & Libraries + - Hardware image: /devices/icon.png weight: 600 hidden: true --- -The Things Network is the first open source, decentralized infrastructure for the Internet of Things. The community edition is free for fair use. Learn how to connect your Things! +The Things Network is the first open source, decentralized infrastructure for the Internet of Things. [The Things Stack Sandbox](https://console.cloud.thethings.network) is free for fair use. Learn how to connect your Things! Before your device can communicate via The Things Network, you will need to [register]({{< relref "registration" >}}) it. diff --git a/doc/content/gateways/packet-forwarder/semtech-udp/_index.md b/doc/content/gateways/packet-forwarder/semtech-udp/_index.md index 155c258cb2..2c10d86270 100644 --- a/doc/content/gateways/packet-forwarder/semtech-udp/_index.md +++ b/doc/content/gateways/packet-forwarder/semtech-udp/_index.md @@ -32,7 +32,7 @@ Once the registration is complete, add the **gateway EUI** in the `local_conf.js ### Router configuration -After that, edit the `global_conf.json` file to point to the router. If you're using the public community network, you will need to add the **address of the router region** - for example, for the EU region, it will be `router.eu.thethings.network`. Otherwise, it will be the hostname of your **router** - most of the time, it is just the hostname of your network. +After that, edit the `global_conf.json` file to point to the router. If you're using the The Things Stack Sandbox, you will need to add the **address of the router region** - for example, for the EU region, it will be `router.eu.thethings.network`. Otherwise, it will be the hostname of your **router** - most of the time, it is just the hostname of your network. Unless you're running the network yourself on specific ports, the **ports** will be 1700 and 1700. @@ -50,19 +50,19 @@ Unless you're running the network yourself on specific ports, the **ports** will #### Router addresses -| Region | Router address | -| ----------------------------------- | ------------------------------------------------ | -| `router.eu.thethings.network` | EU 433 and EU 863-870 | -| `router.us.thethings.network` | US 902-928 | -| `router.cn.thethings.network` | China 470-510 and 779-787 | -| `router.as.thethings.network` | Southeast Asia 923 MHz | -| `router.as1.thethings.network` | Southeast Asia 920-923 MHz | -| `router.as2.thethings.network` | Southeast Asia 923-925 MHz | -| `router.kr.thethings.network` | Korea 920-923 MHz | -| `router.jp.thethings.network` | Japan 923-925 MHz (with EIRP cap according to Japanese regulations)| -| `au915.thethings.meshed.com.au` | Australia 915-928 MHz | -| `as923.thethings.meshed.com.au` | Australia (Southeast Asia 923MHz frequency plan) | -| `ttn.opennetworkinfrastructure.org` | Switzerland (EU 433 and EU 863-870) | +| Region | Router address | +| ----------------------------------- | ------------------------------------------------------------------- | +| `router.eu.thethings.network` | EU 433 and EU 863-870 | +| `router.us.thethings.network` | US 902-928 | +| `router.cn.thethings.network` | China 470-510 and 779-787 | +| `router.as.thethings.network` | Southeast Asia 923 MHz | +| `router.as1.thethings.network` | Southeast Asia 920-923 MHz | +| `router.as2.thethings.network` | Southeast Asia 923-925 MHz | +| `router.kr.thethings.network` | Korea 920-923 MHz | +| `router.jp.thethings.network` | Japan 923-925 MHz (with EIRP cap according to Japanese regulations) | +| `au915.thethings.meshed.com.au` | Australia 915-928 MHz | +| `as923.thethings.meshed.com.au` | Australia (Southeast Asia 923MHz frequency plan) | +| `ttn.opennetworkinfrastructure.org` | Switzerland (EU 433 and EU 863-870) | ## Troubleshooting diff --git a/doc/content/gateways/packet-forwarder/ttn/_index.md b/doc/content/gateways/packet-forwarder/ttn/_index.md index 11baa3dbbd..4c90682e1d 100644 --- a/doc/content/gateways/packet-forwarder/ttn/_index.md +++ b/doc/content/gateways/packet-forwarder/ttn/_index.md @@ -6,11 +6,11 @@ title: TTN Packet Forwarder The TTN Packet Forwarder is a new packet forwarder, developed by the Things Network Core Team in Go. Builds for a selection of gateways, and documentation on how it is built, is available [on GitHub](https://github.com/TheThingsNetwork/packet_forwarder). Among the features of this packet forwarder: -* Built in [Golang](https://golang.org) and open-source +- Built in [Golang](https://golang.org) and open-source -* Connects with the [Gateway Connector protocol]({{< relref "../../start/connection/#gateway-connector-protocol" >}}): authentified, reliable and encrypted +- Connects with the [Gateway Connector protocol]({{< relref "../../start/connection/#gateway-connector-protocol" >}}): authentified, reliable and encrypted -* Pre-built for multiple gateways, and build instructions available for all SPI LoRa gateways +- Pre-built for multiple gateways, and build instructions available for all SPI LoRa gateways ## Installation @@ -22,9 +22,9 @@ We will be adding more gateways over time. In the meantime, if you have a differ The TTN Packet Forwarder is configured through a configuration file. The location file's default location is `$HOME/.pktfwd.yml`, but can be located in different locations in our pre-built packages: -* In the Multitech Conduit package, it is located at the `/usr/cfg/config.yml` path. +- In the Multitech Conduit package, it is located at the `/usr/cfg/config.yml` path. -* In the Kerlink IoT Station package, it is located at the `/mnt/fsuser-1/ttn-pkt-fwd/config.yml` path. +- In the Kerlink IoT Station package, it is located at the `/mnt/fsuser-1/ttn-pkt-fwd/config.yml` path. For in-depth configuration, all the paths are available [in the GitHub documentation](https://github.com/TheThingsNetwork/packet_forwarder#run). @@ -39,7 +39,7 @@ key: ### Configure on a private network -To configure the gateway to connect on a network that is **not** the public community network, set those values in the configuration: +To configure the gateway to connect on a network that is **not** the The Things Stack Sandbox, set those values in the configuration: ```yaml discovery-server: : @@ -75,9 +75,9 @@ _Example of this error happening_ This error happens when the gateway fails to complete a DNS lookup for the account server. It can happen for these reasons: -* Your gateway **doesn't have access to Internet** or to its DNS server. To verify if your gateway has access to Internet, the easiest way is to execute `ping 8.8.8.8`. If there is an answer, your gateway is certainly connected. You'll also want to make sure that if you're behind a firewall, it isn't blocking DNS resolutions. +- Your gateway **doesn't have access to Internet** or to its DNS server. To verify if your gateway has access to Internet, the easiest way is to execute `ping 8.8.8.8`. If there is an answer, your gateway is certainly connected. You'll also want to make sure that if you're behind a firewall, it isn't blocking DNS resolutions. -* There is **no DNS server configured** on the gateway. The resolution method for this issue varies from gateway to gateway - for most Linux-based gateways, it can be resolved by configuring Google's DNS servers. Edit the `/etc/resolv.conf` file, and fill it with this: +- There is **no DNS server configured** on the gateway. The resolution method for this issue varies from gateway to gateway - for most Linux-based gateways, it can be resolved by configuring Google's DNS servers. Edit the `/etc/resolv.conf` file, and fill it with this: ``` nameserver 8.8.8.8 @@ -100,8 +100,8 @@ This is another SSL certificates error, which can happen if you're setting up yo A **failed to start concentrator** error means that the **start procedure of the LoRa concentrator has failed**. It can be due to several errors: -* The **communication with the device failed**. This can happen, for example: - * if you're using a build for the wrong gateway ; - * if you've made your own build, and that the communication interface (SPI-based, or FTDI-based) was not set up properly ; - * if some obstacle is preventing communication between the process and the concentrator. For example, if your concentrator needs a [reset before usage](https://github.com/TheThingsNetwork/packet_forwarder/blob/develop/docs/INSTALL_INSTRUCTIONS/IMST_RPI.md#pin-reset), or if the interface needs to be [enabled before usage](https://www.thethingsnetwork.org/forum/t/pause-or-stop-packet-forwarding-on-kerlink/5352/2). -* The LoRa concentrator is not **configured properly**. For examlpe, some gateways require additional [configuration steps](https://github.com/TheThingsNetwork/packet_forwarder/blob/dd535444e02f5ddd3ca379f2de715d417bde0f0c/pktfwd/configuration.go#L18-L21) - consult your gateway's documentation to know if the packet forwarder needs adaptation steps for this gateway. +- The **communication with the device failed**. This can happen, for example: + - if you're using a build for the wrong gateway ; + - if you've made your own build, and that the communication interface (SPI-based, or FTDI-based) was not set up properly ; + - if some obstacle is preventing communication between the process and the concentrator. For example, if your concentrator needs a [reset before usage](https://github.com/TheThingsNetwork/packet_forwarder/blob/develop/docs/INSTALL_INSTRUCTIONS/IMST_RPI.md#pin-reset), or if the interface needs to be [enabled before usage](https://www.thethingsnetwork.org/forum/t/pause-or-stop-packet-forwarding-on-kerlink/5352/2). +- The LoRa concentrator is not **configured properly**. For examlpe, some gateways require additional [configuration steps](https://github.com/TheThingsNetwork/packet_forwarder/blob/dd535444e02f5ddd3ca379f2de715d417bde0f0c/pktfwd/configuration.go#L18-L21) - consult your gateway's documentation to know if the packet forwarder needs adaptation steps for this gateway. diff --git a/doc/content/lorawan/duty-cycle/_index.md b/doc/content/lorawan/duty-cycle/_index.md index dfd2cdb777..bafdc61c01 100644 --- a/doc/content/lorawan/duty-cycle/_index.md +++ b/doc/content/lorawan/duty-cycle/_index.md @@ -31,7 +31,8 @@ In Europe, duty cycles are regulated by section 4.3.3 of the [ETSI EN300.220-2 V Additionally, the LoRaWAN specification specifies duty cycles for the join frequencies, which are used for over-the-air activations (OTAA) by every LoRaWAN-compliant end device. In most regions, the duty cycle for these frequencies is set to **1%**. #### Fair Use Policy -On The Things Network's public community network a **Fair Use Policy** applies which limits the **uplink airtime** to **30 seconds per day (24 hours) per node** and the **downlink messages** to **10 messages per day (24 hours) per node**. If you use a private network, these limits do not apply, but you still have to be compliant with the governmental and LoRaWAN limits. + +On The Things Network's The Things Stack Sandbox a **Fair Use Policy** applies which limits the **uplink airtime** to **30 seconds per day (24 hours) per node** and the **downlink messages** to **10 messages per day (24 hours) per node**. If you use a private network, these limits do not apply, but you still have to be compliant with the governmental and LoRaWAN limits. ## Compliance @@ -44,12 +45,12 @@ Some radio modules (such as the RN2483) also enforce the duty cycle limits. If y _The figure below shows enforcement on a resource with a 20% duty cycle limit_ ![Single Channel Off-air](duty-cycle-single-channel-off-air.png) -In the European band, a transmission on a channel within a frequency band, also influences the other frequencies in that band. +In the European band, a transmission on a channel within a frequency band, also influences the other frequencies in that band. _The figure below shows enforcement on two bands, each with a 20% duty cycle limit_ ![Multiple Band Off-air](duty-cycle-multi-band-off-air.png) -As a per-channel duty cycle limit is easier to implement, you can also divide the sub-band duty cycle over the number of channels in that sub-band. So for example, in a sub-band with 8 channels and a duty cycle of 1%, each channel has a duty cycle of 1/8% (that's 0.125%). +As a per-channel duty cycle limit is easier to implement, you can also divide the sub-band duty cycle over the number of channels in that sub-band. So for example, in a sub-band with 8 channels and a duty cycle of 1%, each channel has a duty cycle of 1/8% (that's 0.125%). This method is also implemented by the RN2483 module, and as a result, instead of seeing the `no_free_ch` when you send too quickly after the first message you can send multiple messages before all 8 channels are "blocked" and the duty cycle is enforced. diff --git a/doc/content/network/architecture/_index.md b/doc/content/network/architecture/_index.md index 5aa96d0a53..bf0e9ae3b0 100644 --- a/doc/content/network/architecture/_index.md +++ b/doc/content/network/architecture/_index.md @@ -6,17 +6,17 @@ The backend systems of The Things Network are responsible for routing Internet o ![Network Overview](../overview.png) -The Things Network's vision is to perform all these routing functions in a decentralized and distributed way. Any interested party should be able to set up their own network and their own part of the backend, allowing them to participate in the global community network. In order to decentralize the network, it was split up into a number of components shown in the figure below. To simplify, components are only shown once, even though it is possible to have one-to-many or many-to-many relations between components. +The Things Network's vision is to perform all these routing functions in a decentralized and distributed way. Any interested party should be able to set up their own network and their own part of the backend, allowing them to participate in the global community network. In order to decentralize the network, it was split up into a number of components shown in the figure below. To simplify, components are only shown once, even though it is possible to have one-to-many or many-to-many relations between components. ![Architecture](../architecture.png) Nodes broadcast LoRaWAN messages over the LoRa radio protocol. These messages are received by a number of Gateways. The Gateway is a piece of hardware that forwards radio transmissions to the backend. It is connected to one Router. The Router is responsible for managing the gateway's status and for scheduling transmissions. Each Router is connected to one or more Brokers. Brokers are the central part of The Things Network. Their responsibility is to map a device to an application, to forward uplink messages to the correct application and to forward downlink messages to the correct Router (which forwards them to a Gateway). The Network Server is responsible for functionality that is specific for LoRaWAN. A Handler is responsible for handling the data of one or more Applications. To do so, it connects to a Broker where it registers applications and devices. The Handler is also the point where data is encrypted or decrypted. -The goal of The Things Network is to be very flexible in terms of deployment options. The preferred option is to connect to the public community network hosted by The Things Network Foundation or its partners. In this case the Application connects to a Public Community Network Handler, usually using the MQTT API. +The goal of The Things Network is to be very flexible in terms of deployment options. The preferred option is to connect to the The Things Stack Sandbox hosted by The Things Network Foundation or its partners. In this case the Application connects to a The Things Stack Sandbox Handler, usually using the MQTT API. It is also possible to deploy private networks, by running all these components in a private environment. This way, all data will remain within the private environment, but you can still make use of TTN's hosted Account Server for authentication and authorization. -Hybrid deployments will be possible in the future. The most simple option for this, is for someone to run his own Handler, allowing them to handle the encryption and decryption of messages. A more complicated option is a private network that exchanges data with the public network. For this to work, private Routers will have to connect to public Brokers and vice versa. In this case the private network can offload public traffic to the community network and use the public community network as back-up. The latter is not yet possible with the current implementation of the backend. +Hybrid deployments will be possible in the future. The most simple option for this, is for someone to run his own Handler, allowing them to handle the encryption and decryption of messages. A more complicated option is a private network that exchanges data with the public network. For this to work, private Routers will have to connect to public Brokers and vice versa. In this case the private network can offload public traffic to the community network and use the The Things Stack Sandbox as back-up. The latter is not yet possible with the current implementation of the backend. ## Core Functionality @@ -119,14 +119,14 @@ After decryption, the Handler is able to decode and convert the payload into a f function (bytes) { var data = (bytes[0] << 8) | bytes[1]; return { temperature: data / 100.0 }; -} +} ``` The optional _converter_ can convert values in the decoded JSON object. This could for example be a conversion from a voltage to an actual value, or from a temperature in Celsius to a temperature in Fahrenheit. The optional _validator_ can be used to check the validity of the data and drop outliers. In the future these payload functions can adapt their behaviour to the `FPort` field of the message, allowing the community to define standard data encoding formats for each `FPort`. An example could be a standard format for sending weather station data. #### MQTT (Handler) -The default Handler implementation simply publishes a JSON representation of uplink messages to a topic `/devices//up` on an MQTT broker. This allows applications to simply subscribe to the same MQTT topic and process the data in any way. +The default Handler implementation simply publishes a JSON representation of uplink messages to a topic `/devices//up` on an MQTT broker. This allows applications to simply subscribe to the same MQTT topic and process the data in any way. #### Downlink (Handler) diff --git a/doc/content/network/discovery/api/_index.md b/doc/content/network/discovery/api/_index.md index b380329eb3..e94059be9b 100644 --- a/doc/content/network/discovery/api/_index.md +++ b/doc/content/network/discovery/api/_index.md @@ -1,7 +1,7 @@ --- title: API Reference weight: -1000 -source: 'https://github.com/TheThingsNetwork/api/blob/master/discovery/Discovery.md' +source: "https://github.com/TheThingsNetwork/api/blob/master/discovery/Discovery.md" --- ## .discovery.Discovery @@ -145,81 +145,81 @@ Output: The Announcement of a service (also called component) -| **Name** | **Type** | **Description** | -| -------- | -------- | --------------- | -| `amqp_address` | `string` | Contains the address where the AMQP API is exposed (if there is one) Format of amqp_address: `(amqp(s)://)host(:port)` default amqp port is 5672, default amqps port is 5671. Examples: if `host:port` then `amqp://host:port` if `host:5671` then `amqps://host:5671` if `host` then `amqp://host:5672` and `amqps://host:5671` if `amqp://host` then `amqp://host:5672` if `amqps://host` then `amqp://host:5672` and `amqps://host:5671` | -| `api_address` | `string` | Contains the address where the HTTP API is exposed (if there is one). Format of api_address: `http(s)://domain(:port)` default http port is 80, default https port is 443. | -| `certificate` | `string` | TLS Certificate for gRPC on net_address (if TLS is enabled) | -| `description` | `string` | Description of the component | -| `id` | `string` | The ID of the component | -| `metadata` | _repeated_ [`Metadata`]({{< relref "../#discoverymetadata" >}}) | Metadata for this component | -| `mqtt_address` | `string` | Contains the address where the MQTT API is exposed (if there is one) Format of mqtt_address: `(mqtt(s)://)host(:port)` default mqtt port is 1883, default mqtts port is 8883. Examples: if `host:port` then `mqtt://host:port` if `host:8883` then `mqtts://host:8883` if `host` then `mqtt://host:1883` and `mqtts://host:8883` if `mqtt://host` then `mqtt://host:1883` if `mqtts://host` then `mqtt://host:1883` and `mqtts://host:8883` | -| `net_address` | `string` | Comma-separated network addresses in the form "domain1:port,domain2:port,domain3:port" (currently we only use the first) | -| `public` | `bool` | Indicates whether this service is part of The Things Network (the public community network) | -| `public_key` | `string` | ECDSA public key of this component | -| `service_name` | `string` | The name of the component (router/broker/handler) | -| `service_version` | `string` | Service version in the form "[version]-[commit] ([build date])" | -| `url` | `string` | URL with documentation or more information about this component | +| **Name** | **Type** | **Description** | +| ----------------- | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `amqp_address` | `string` | Contains the address where the AMQP API is exposed (if there is one) Format of amqp_address: `(amqp(s)://)host(:port)` default amqp port is 5672, default amqps port is 5671. Examples: if `host:port` then `amqp://host:port` if `host:5671` then `amqps://host:5671` if `host` then `amqp://host:5672` and `amqps://host:5671` if `amqp://host` then `amqp://host:5672` if `amqps://host` then `amqp://host:5672` and `amqps://host:5671` | +| `api_address` | `string` | Contains the address where the HTTP API is exposed (if there is one). Format of api_address: `http(s)://domain(:port)` default http port is 80, default https port is 443. | +| `certificate` | `string` | TLS Certificate for gRPC on net_address (if TLS is enabled) | +| `description` | `string` | Description of the component | +| `id` | `string` | The ID of the component | +| `metadata` | _repeated_ [`Metadata`]({{< relref "../#discoverymetadata" >}}) | Metadata for this component | +| `mqtt_address` | `string` | Contains the address where the MQTT API is exposed (if there is one) Format of mqtt_address: `(mqtt(s)://)host(:port)` default mqtt port is 1883, default mqtts port is 8883. Examples: if `host:port` then `mqtt://host:port` if `host:8883` then `mqtts://host:8883` if `host` then `mqtt://host:1883` and `mqtts://host:8883` if `mqtt://host` then `mqtt://host:1883` if `mqtts://host` then `mqtt://host:1883` and `mqtts://host:8883` | +| `net_address` | `string` | Comma-separated network addresses in the form "domain1:port,domain2:port,domain3:port" (currently we only use the first) | +| `public` | `bool` | Indicates whether this service is part of The Things Network (the The Things Stack Sandbox) | +| `public_key` | `string` | ECDSA public key of this component | +| `service_name` | `string` | The name of the component (router/broker/handler) | +| `service_version` | `string` | Service version in the form "[version]-[commit] ([build date])" | +| `url` | `string` | URL with documentation or more information about this component | ### `.discovery.AnnouncementsResponse` A list of announcements -| **Name** | **Type** | **Description** | -| -------- | -------- | --------------- | -| `services` | _repeated_ [`Announcement`]({{< relref "../#discoveryannouncement" >}}) | | +| **Name** | **Type** | **Description** | +| ---------- | ----------------------------------------------------------------------- | --------------- | +| `services` | _repeated_ [`Announcement`]({{< relref "../#discoveryannouncement" >}}) | | ### `.discovery.GetByAppEUIRequest` -| **Name** | **Type** | **Description** | -| -------- | -------- | --------------- | -| `app_eui` | `bytes` | | +| **Name** | **Type** | **Description** | +| --------- | -------- | --------------- | +| `app_eui` | `bytes` | | ### `.discovery.GetByAppIDRequest` | **Name** | **Type** | **Description** | | -------- | -------- | --------------- | -| `app_id` | `string` | | +| `app_id` | `string` | | ### `.discovery.GetByGatewayIDRequest` -| **Name** | **Type** | **Description** | -| -------- | -------- | --------------- | -| `gateway_id` | `string` | | +| **Name** | **Type** | **Description** | +| ------------ | -------- | --------------- | +| `gateway_id` | `string` | | ### `.discovery.GetRequest` The identifier of the service that should be returned -| **Name** | **Type** | **Description** | -| -------- | -------- | --------------- | -| `id` | `string` | The ID of the service | +| **Name** | **Type** | **Description** | +| -------------- | -------- | ----------------------------------------------- | +| `id` | `string` | The ID of the service | | `service_name` | `string` | The name of the service (router/broker/handler) | ### `.discovery.GetServiceRequest` -| **Name** | **Type** | **Description** | -| -------- | -------- | --------------- | +| **Name** | **Type** | **Description** | +| -------------- | -------- | ----------------------------------------------- | | `service_name` | `string` | The name of the service (router/broker/handler) | ### `.discovery.Metadata` -| **Name** | **Type** | **Description** | -| -------- | -------- | --------------- | -| `app_eui` | `bytes` | AppEUI that is registered to this Join Handler Only authorized Join Handlers can announce APP_EUI metadata (and we don't have any of those yet). | -| `app_id` | `string` | AppID that is registered to this Handler This metadata can only be added if the requesting client is authorized to manage this AppID. | -| `dev_addr_prefix` | `bytes` | DevAddr prefix that is routed by this Broker 5 bytes; the first byte is the prefix length, the following 4 bytes are the address. Only authorized Brokers can announce PREFIX metadata. | -| `gateway_id` | `string` | GatewayID that is registered to this Router This metadata can only be added if the requesting client is authorized to manage this GatewayID. | +| **Name** | **Type** | **Description** | +| ----------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `app_eui` | `bytes` | AppEUI that is registered to this Join Handler Only authorized Join Handlers can announce APP_EUI metadata (and we don't have any of those yet). | +| `app_id` | `string` | AppID that is registered to this Handler This metadata can only be added if the requesting client is authorized to manage this AppID. | +| `dev_addr_prefix` | `bytes` | DevAddr prefix that is routed by this Broker 5 bytes; the first byte is the prefix length, the following 4 bytes are the address. Only authorized Brokers can announce PREFIX metadata. | +| `gateway_id` | `string` | GatewayID that is registered to this Router This metadata can only be added if the requesting client is authorized to manage this GatewayID. | ### `.discovery.MetadataRequest` The metadata to add or remove from an announement -| **Name** | **Type** | **Description** | -| -------- | -------- | --------------- | -| `id` | `string` | The ID of the service that should be modified | -| `metadata` | [`Metadata`]({{< relref "../#discoverymetadata" >}}) | Metadata to add or remove | -| `service_name` | `string` | The name of the service (router/broker/handler) that should be modified | +| **Name** | **Type** | **Description** | +| -------------- | ---------------------------------------------------- | ----------------------------------------------------------------------- | +| `id` | `string` | The ID of the service that should be modified | +| `metadata` | [`Metadata`]({{< relref "../#discoverymetadata" >}}) | Metadata to add or remove | +| `service_name` | `string` | The name of the service (router/broker/handler) that should be modified | ### `.google.protobuf.Empty` diff --git a/doc/content/network/security/_index.md b/doc/content/network/security/_index.md index dfd26303f1..7671f60c3f 100644 --- a/doc/content/network/security/_index.md +++ b/doc/content/network/security/_index.md @@ -8,7 +8,7 @@ LoRaWAN enforces using AES 128-bit message integrity checks and payload encrypti ## User Accounts -Users need an account to use The Things Network. On the public community network, user accounts are stored in the [account server](https://account.thethingsnetwork.org). These accounts are identified by a username or e-mail address and protected by a password. In private networking setups, users may implement their own means of authentication and authorization. +Users need an account to use The Things Network. On the The Things Stack Sandbox, user accounts are stored in the [account server](https://account.thethingsnetwork.org). These accounts are identified by a username or e-mail address and protected by a password. In private networking setups, users may implement their own means of authentication and authorization. ## Applications diff --git a/doc/content/network/troubleshooting/_index.md b/doc/content/network/troubleshooting/_index.md index adad5c6dbd..a7db16a274 100644 --- a/doc/content/network/troubleshooting/_index.md +++ b/doc/content/network/troubleshooting/_index.md @@ -5,7 +5,7 @@ weight: 200 Is something not working like it should? This section is here to help you find out the issue might come from. ->If you have issues specifically with a gateway, see [Gateway Troubleshooting]({{< relref "../../gateways/troubleshooting" >}}). +> If you have issues specifically with a gateway, see [Gateway Troubleshooting]({{< relref "../../gateways/troubleshooting" >}}). ## Check the Status page @@ -29,7 +29,7 @@ If the network does not receive data from your device, i.e. the **Last seen** da ## Other issues -Our public community network is run by the community. The best way to reach out to the community for questions and issues is through [The THings Network Forum](https://www.thethingsnetwork.org/forum) and Slack ([request invite in your account](https://ttn.fyi/slack-invite)): the **#support** and **#ops** channel. +The best way to reach out to the community for questions and issues is through [The Things Network Forum](https://www.thethingsnetwork.org/forum) and Slack ([request invite in your account](https://ttn.fyi/slack-invite)): the **#support** and **#ops** channel. # Commercial support