# OpenThread CLI - CoAP Example
The OpenThread CoAP APIs may be invoked via the OpenThread CLI.
## Quick Start
### Form Network
Form a network with at least two devices.
### Node 1
On node 1, setup CoAP server with resource `test-resource`.
```bash
> coap start
Done
> coap resource test-resource
Done
```
### Node 2
```bash
> coap start
Done
> coap get fdde:ad00:beef:0:d395:daee:a75:3964 test-resource
Done
coap response from [fdde:ad00:beef:0:2780:9423:166c:1aac] with payload: 30
> coap put fdde:ad00:beef:0:2780:9423:166c:1aac test-resource con payload
Done
coap response from [fdde:ad00:beef:0:2780:9423:166c:1aac]
```
### Result
On node 1, you should see output similar to below:
```bash
coap request from [fdde:ad00:beef:0:b3:e3f6:2dcc:4b79] GET
coap response sent
coap request from [fdde:ad00:beef:0:b3:e3f6:2dcc:4b79] PUT with payload: 7061796c6f6164
coap response sent
```
## Command List
- [help](#help)
- [cancel](#cancel)
- [delete](#delete-address-uri-path-type-payload)
- [get](#get-address-uri-path-type)
- [observe](#observe-address-uri-path-type)
- [parameters](#parameters)
- [post](#post-address-uri-path-type-payload)
- [put](#put-address-uri-path-type-payload)
- [resource](#resource-uri-path)
- [set](#set-new-content)
- [start](#start)
- [stop](#stop)
## Command Details
### help
```bash
> coap help
help
cancel
delete
get
observe
parameters
post
put
resource
set
start
stop
Done
```
List the CoAP CLI commands.
### cancel
Request the cancellation of an existing observation subscription to a remote resource.
```bash
> coap cancel
Done
```
### delete \
\ \[type\] \[payload\]
- address: IPv6 address of the CoAP server.
- uri-path: URI path of the resource.
- type: "con" for Confirmable or "non-con" for Non-confirmable (default).
- payload: CoAP request payload.
```bash
> coap delete fdde:ad00:beef:0:2780:9423:166c:1aac test-resource con payload
Done
```
### get \ \ \[type\]
- address: IPv6 address of the CoAP server.
- uri-path: URI path of the resource.
- type: "con" for Confirmable or "non-con" for Non-confirmable (default). Use "block-" if the response should be transferred block-wise. ("block-16","block-32","block-64","block-128","block-256","block-512","block-1024")
```bash
> coap get fdde:ad00:beef:0:2780:9423:166c:1aac test-resource
Done
```
```bash
> coap get fdde:ad00:beef:0:2780:9423:166c:1aac test-resource block-1024
Done
```
### observe \ \ \[type\]
This is the same a `get`, but the `Observe` parameter will be sent, set to 0 triggering a subscription request.
- address: IPv6 address of the CoAP server.
- uri-path: URI path of the resource.
- type: "con" for Confirmable or "non-con" for Non-confirmable (default).
```bash
> coap observe fdde:ad00:beef:0:2780:9423:166c:1aac test-resource
Done
```
### parameters \ \["default"| \]
Sets transmission parameters for the following interactions.
- type: "request" for CoAP requests and "response" for CoAP responses.
If no more parameters are given, the command prints the current configuration:
```bash
> coap parameters request
Transmission parameters for request:
ACK_TIMEOUT=1000 ms, ACK_RANDOM_FACTOR=255/254, MAX_RETRANSMIT=2
Done
```
If `"default"` is given, the command sets the default configuration for the transmission parameters.
```bash
> coap parameters request default
Transmission parameters for request:
default
Done
```
Also, you can specify the transmission parameters in the command line:
- ack_timeout (0~UINT32_MAX): RFC7252 ACK_TIMEOUT, in milliseconds.
- ack_random_factor_numerator, ack_random_factor_denominator (0~255): RFC7252 ACK_RANDOM_FACTOR=ack_random_factor_numerator/ack_random_factor_denominator.
- max_retransmit (0~255): RFC7252 MAX_RETRANSMIT.
```bash
> coap parameters request 1000 255 254 2
Transmission parameters for request:
ACK_TIMEOUT=1000 ms, ACK_RANDOM_FACTOR=255/254, MAX_RETRANSMIT=2
Done
```
### post \ \ \[type\] \[payload\]
- address: IPv6 address of the CoAP server.
- uri-path: URI path of the resource.
- type: "con" for Confirmable or "non-con" for Non-confirmable (default). Use "block-" to send blocks with random payload. ("block-16","block-32","block-64","block-128","block-256","block-512","block-1024")
- payload: CoAP request payload. If \[type\] is "block-", the amount of blocks to be sent can be set here.
```bash
> coap post fdde:ad00:beef:0:2780:9423:166c:1aac test-resource con payload
Done
```
```bash
> coap post fdde:ad00:beef:0:2780:9423:166c:1aac test-resource block-1024 10
Done
```
### put \ \ \[type\] \[payload\]
- address: IPv6 address of the CoAP server.
- uri-path: URI path of the resource.
- type: "con" for Confirmable or "non-con" for Non-confirmable (default). Use "block-" to send blocks with random payload. ("block-16","block-32","block-64","block-128","block-256","block-512","block-1024")
- payload: CoAP request payload. If \[type\] is "block-", the amount of blocks to be sent can be set here.
```bash
> coap put fdde:ad00:beef:0:2780:9423:166c:1aac test-resource con payload
Done
```
```bash
> coap put fdde:ad00:beef:0:2780:9423:166c:1aac test-resource block-1024 10
Done
```
### resource \[uri-path\]
Sets the URI path for the test resource.
```bash
> coap resource test-resource
Done
> coap resource
test-resource
Done
```
### set \[new-content\]
Sets the content sent by the test resource. If a CoAP client is observing the resource, a notification is sent to that client.
```bash
> coap set Testing123
Done
```
### start
Starts the application coap service.
```bash
> coap start
Done
```
### stop
Stops the application coap service.
```bash
> coap stop
Done
```