Skip to main content

Testing Using CoAP CLI and goliothctl

Prerequisites​

With the a properly provisioned device, you can test LightDB to save, query and observe data changes on it. Make sure that the connection with the platform is working.

Let's simulated a light bulb that can report it's brightness and state and also control these values from the Cloud.

Saving and Querying data on LightDB​

To access LightDB over CoAP, you have to use the prefix /.d/ and anything past that represents a path that you want to save data. On the example bellow, we are saving a state attribute with value true and brightness with value 50 on path /light.

coap --path /.d/light -m POST --psk-id deadbeef-id@my-project-id --psk supersecret --host coap.golioth.io -b "{\"state\":true,\"brightness\":50}" --format json

Now you can query that data over CoAP or using goliothctl. And you can query any path, so if you query /light you get the full { state : true, brightness : 50 } or you can query a specific value like at /light/state and get only true.

  • Top level path:
coap --path /.d/light -m GET --psk-id deadbeef-id --psk supersecret --host coap.golioth.io --accept json
Response
payload: Type: Acknowledgement, MID: 64363, Code: Content, Token: 56f991b6703947d7, ContentFormat: application/json
body: {"brightness":50,"state":true}
  • Specific path:
coap --path /.d/light/state -m GET --psk-id deadbeef-id --psk supersecret --host coap.golioth.io --accept json
Response
payload: Type: Acknowledgement, MID: 64363, Code: Content, Token: 56f991b6703947d7, ContentFormat: application/json
body: true

You can also do the same with goliothctl:

  • Top level path:
$ goliothctl lightdb get [device name] /light
{"brightness":10,"state":0}
  • Specific path:
$ goliothctl lightdb get [device name] /light/brightness
50

Listening to changes on LightDB​

We can simulated a device listening to LightDB by using coap observe command. Here are some examples to listen to the top level /light path or we can also listen to the specific /light/state or /light/brightness path.

Open this on another terminal tab to simulate the device listening to data changes:

coap observe --path /.d/light/state --psk-id deadbeef-id --psk supersecret --host coap.golioth.io --accept json
waiting for more msgs. Type ctrl+c to close

or

coap observe --path /.d/light --psk-id deadbeef-id --psk supersecret --host coap.golioth.io --accept json
waiting for more msgs. Type ctrl+c to close

Now you can set new values on LightDB using goliothctl. You can set a specific value or pass a nested value in json format.

$ goliothctl lightdb set [device name] /light/state -b "true"
true
$ goliothctl lightdb set [device name] /light/state -b "false"
false
$ goliothctl lightdb set [device name] /light -b "{\"state\": true, \"brightness\": 30 }"
{"state":true,"brightness":30}

On the other terminal , you should see the device receiving the new data when it changes:

coap observe --path /.d/light/state --psk-id deadbeef-id --psk supersecret --host coap.golioth.io --accept json
waiting for more msgs. Type ctrl+c to close
Response
payload: Type: Acknowledgement, MID: 64363, Code: Content, Token: 56f991b6703947d7, ContentFormat: application/json
body: true
coap observe --path /.d/light --psk-id deadbeef-id --psk supersecret --host coap.golioth.io --accept json
waiting for more msgs. Type ctrl+c to close
Response
payload: Type: Acknowledgement, MID: 64363, Code: Content, Token: 56f991b6703947d7, ContentFormat: application/json
body: {"brightness":10,"state":0}
note

You can check more ways to use goliothctl lightdb and coap observe on their reference docs.