Skip to content

API Documentation

Jack Shao edited this page Dec 24, 2015 · 53 revisions

Preface

About tokens

There're two kinds of tokens: user token and node token.

The /node/* API calls need node token specified.

Authorization method
  • with query string: xxxx/xxxx?access_token=[your token here]
  • with "Authorization" header: Authorization: token [your token here]
Post body

Arguments in post body must be specified in application/x-www-form-urlencoded format: arg1=xxx&arg2=xxx, application/json and multipart/form-data are not accepted.

User management APIs

Access with User Token

POST /v1/user/create
curl -d email=[email here] -d password=[password here] https://iot.seeed.cc/v1/user/create

response:

{"status": 200, "msg": "User created", "token": "9L0_ofzPHnan91UQbtcCS4KzCI8BGQk6-OgMOtmnI3Q"}
POST /v1/user/changepassword
curl -d password=[new password here] https://iot.seeed.cc/v1/user/changepassword?access_token=9L0_ofzPHnan91UQbtcCS4KzCI8BGQk6-OgMOtmnI3Q

response:

{"status": 200, "msg": "Password changed, new token is given", "token": "aKleqQebIsjmQMSCokemtgNXMD4Y7OTe3uyzEL1iwwA"}
POST /v1/user/retrievepassword

If you forget your password, you can retrieve it by this API. You should specify the right email address, otherwise you will not receive the email with new password attached.

curl -d email=[new email here] https://iot.seeed.cc/v1/user/retrievepassword

response:

{"status": 200, "msg": "The password has been sent to your email address\n"}
POST /v1/user/login
curl -d email=[email here] -d password=[password here] https://iot.seeed.cc/v1/user/login

response:

{"status": 200, "msg": "Logged in", "token": "aKleqQebIsjmQMSCokemtgNXMD4Y7OTe3uyzEL1iwwA"}

Nodes management APIs

Access with User Token

POST /v1/nodes/create
curl -H "Authorization: token aKleqQebIsjmQMSCokemtgNXMD4Y7OTe3uyzEL1iwwA" -d name=node_1  https://iot.seeed.cc/v1/nodes/create

response:

{"status": 200, "msg": "Node created", "node_key": "85a7c2b2fd97c357137414733e65d516", "node_sn": "200d8a94ac5f0905e1fbf9acdfcaba78"}
GET /v1/nodes/list
curl -H "Authorization: token aKleqQebIsjmQMSCokemtgNXMD4Y7OTe3uyzEL1iwwA" https://iot.seeed.cc/v1/nodes/list

response:

{"status": 200, "msg": "", "nodes": [{"node_key": "d6d68b4b6b43f213569f5832dd8277b2", "name": "node_1", "node_sn": "f70fd643b73f0c721b007ce453bafddd"}, {"node_key": "85a7c2b2fd97c357137414733e65d516", "name": "node_2", "node_sn": "200d8a94ac5f0905e1fbf9acdfcaba78"}]}
POST /v1/nodes/rename
curl -H "Authorization: token aKleqQebIsjmQMSCokemtgNXMD4Y7OTe3uyzEL1iwwA" https://iot.seeed.cc/v1/nodes/rename -d node_sn=160769ffa50feae76ec6f7a4fb95bf6c -d name=new_name

response:

{"status": 200, "msg": "Node renamed", "name": "node_2"}
POST /v1/nodes/delete
curl -H "Authorization: token StiLU1g5SNfQYWQLKpB7uMuE4l2uQuamKMBsIW1RGgA" https://iot.seeed.cc/v1/nodes/delete -d "node_sn=bac0df2d1b01b32c8ad3a0efbfc31c5f"

response:

{"status": 200, "msg": "Node deleted"}

Grove driver scanning APIs

Access with User Token

GET /v1/scan/drivers
curl -H "Authorization: token aKleqQebIsjmQMSCokemtgNXMD4Y7OTe3uyzEL1iwwA"  https://iot.seeed.cc/v1/scan/drivers

response:

{"status": 200, "msg": "", "drivers": [{"SKU": "104030003", "Files": ["grove_4_digit.cpp", "grove_4_digit.h"], "ClassFile": "grove_4_digit.h", "GroveName": "Grove - 4-Digit Display", "Inputs": {"write_display_point": ["uint8_t display"], "write_display_digits": ["uint8_t start_pos", "char *chars"], "write_clear": [""], "write_display_one_digit": ["uint8_t position", "char *chr"], "write_brightness": ["uint8_t brightness"]}, "Outputs": {}, "ImageURL": "http://www.seeedstudio.com/depot/bmz_cache/3/3a9f79323a82950c12fc7e69fa9fab4d.image.530x397.jpg", "ID": 0, "ClassName": "Grove4Digit", "HasPowerOnFunc": true, "CanGetLastError": true, "InterfaceType": "UART", "HasEvent": false, "IncludePath": "./grove_drivers/grove_4_digit", "HasPowerOffFunc": true, "Events": {}, "ConstructArgList": ["int pintx", "int pinrx"]}]}
GET /v1/scan/status
curl -H "Authorization: token aKleqQebIsjmQMSCokemtgNXMD4Y7OTe3uyzEL1iwwA"  https://iot.seeed.cc/v1/scan/status

response:

{"status": 200, "msg": "", "scan_status": {"msg": "scanned 40 grove drivers at 2015-12-23 22:56:48.246117", "result": "OK"}}

or

{"status": 200, "msg": "", "scan_status": {"status":"Failed", "msg":"Fail cause"}}

Boards/Platform APIs

Access with User Token

GET /v1/boards/list
curl -H "Authorization: token aKleqQebIsjmQMSCokemtgNXMD4Y7OTe3uyzEL1iwwA" https://iot.seeed.cc/v1/boards/list

response:

{"status": 200, "msg": "", "boards": [{"board_flash_spi_mode": "QIO", "board_builtin": {"FUNCTION_KEY": 0, "STATUS_LED": 2, "GROVE_POWER_SWITCH": 15}, "interfaces": {"UART0": {"pintx": 1, "pinrx": 3, "type": "UART"}, "D2": {"type": "GPIO", "pin": 13}, "A0": {"type": "ANALOG", "pin": 15}, "I2C0": {"pinscl": 5, "type": "I2C", "pinsda": 4}, "D0": {"type": "GPIO", "pin": 14}, "D1": {"type": "GPIO", "pin": 12}}, "board_name": "Wio Link v1.0", "board_flash_map": 6, "board_vendor": "seeedstudio", "board_flash_spi_speed": 40}]}

Single node APIs

Access with Node Token

GET /v1/node/.well-known

Access through Data Exchange Server

".well-known" API prints all the available resources on that node. This API needs the node online.

curl -H "Authorization: token d6d68b4b6b43f213569f5832dd8277b2" https://iot.seeed.cc/v1/node/.well-known

response:

{"status": 200, "msg": [
"GET /v1/node/GroveAccMMA7660/accelerometer -> float ax, float ay, float az", 
"GET /v1/node/Grove_Example1/with_arg/int_arg -> float cx, float cy, float cz, int degree", 
"POST /v1/node/Grove_Example1/float_value <- float f", 
"HasEvent Grove_Button1 button_pressed", 
"POST /v1/node/Grove_Gyro_ITG3200/zerocalibrate <- void"]}

The items on the right of the right arrow "->" are the properties that you can read via that API call, while the items on the right of the left arrow "<-" are the values that you can write to that method/action.

"HasEvent" keyword indicates that there's a particular event which will be reported by that grove module, you can receive an explicit semantic event message from the event reporting websocket, e.g. {u'msg': {u'button_pressed': u'0'}} which means the button attached to GPIO0 is pressed.

GET /v1/node/GroveInstanceName/Property/[Arg1[/arg2]]

Access through Data Exchange Server

Read a specified property of a specified grove instance on that node, returns the json expression of the property.

Note: Get to know the type of arguments with .well-known API output

curl -H "Authorization: token d6d68b4b6b43f213569f5832dd8277b2" https://iot.seeed.cc/v1/node/Grove_Example1/temp

curl -H "Authorization: token d6d68b4b6b43f213569f5832dd8277b2" https://iot.seeed.cc/v1/node/Grove_Example1/with_arg/90

response:

{"status": 200, "msg": {"temp": 30}}

{"status": 200, "msg": {"cz": 78.0, "cy": 45.6, "cx": 12.3, "degree": 90}}

{"status": 205, "msg": null}

{"status": 205, "msg": "error description here."}   #if driver tells the error reason
POST /v1/node/GroveInstanceName/Property-or-Method-or-Action/

Access through Data Exchange Server

Write or set the value to a specified property/method/action of a specified grove instance on that node. By writting, you can pass data down to the grove hardware ,or trigger an action, or do some configuration onto the hardware.

Note: Get to know the type of arguments with .well-known API output

Note2: Only this API supports application/json post body.

curl -H "Authorization: token d6d68b4b6b43f213569f5832dd8277b2" -d "{\"f\":10.5}" https://iot.seeed.cc/v1/node/Grove_Example1/float_value

curl -H "Authorization: token d6d68b4b6b43f213569f5832dd8277b2" https://iot.seeed.cc/v1/node/Grove_Example1/multi_value/10/10.5/445566

curl -H "Authorization: token d6d68b4b6b43f213569f5832dd8277b2" -d "a=10&b=10.5&c=445566" https://iot.seeed.cc/v1/node/Grove_Example1/multi_value

response:

{"status": 200, "msg": "OK"}

{"status": 205, "msg": "Failed"}

{"status": 205, "msg": "failure reason here."}   #if driver tells the fail reason
POST /v1/node/pm/sleep

Access through Data Exchange Server

Put the node into deep sleep mode in which the whole board's power will be shut down except that power of CP2102 if the system is powered by USB.

This will reduce the current consumption of the board to ~10mA if it's powered by micro USB (due to the usb to serial chip CP2102). And the current will drop to ~1mA if the board is powered by battery.

The sleep will not be intermittently triggered. You need to call the sleep API every time you want the node to sleep. You can continue to send GET/POST requests after a sleep command has been executed, the node will return a 404 status code and a message saying it's offline. Then the node wake up and join the router within about 5 seconds. You do some stuff and put the node into sleep again.

curl -H "Authorization: token d6d68b4b6b43f213569f5832dd8277b2" -d "sleep_time_sec=5" https://iot.seeed.cc/v1/node/pm/sleep

or

curl -X POST https://iot.seeed.cc/v1/node/pm/sleep/5?access_token=d6d68b4b6b43f213569f5832dd8277b2

response:

{"status": 200, "msg": "ok, deep sleep"}
GET /v1/node/resources

Access through OTA Server

This API shows a web page that displays the APIs available.

curl -H "Authorization: token d6d68b4b6b43f213569f5832dd8277b2" https://iot.seeed.cc/v1/node/resources

response:

A web page.

POST /v1/user/download

Access through OTA Server

This API let user trigger the OTA process, with a configuration description in json format.

curl -H "Authorization: token d6d68b4b6b43f213569f5832dd8277b2" https://iot.seeed.cc/v1/user/download -d '{"board_name": "Wio Link v1.0", "connections":{"UART0": "111020001"}}'

response:

if the OTA is triggered successfully

{"status": 200, "msg": "", "ota_msg": "Building the firmware..", "ota_status": "going"}
GET /v1/node/config

Access through OTA Server

This API let user retrieve the last config file.

curl -H "Authorization: token d6d68b4b6b43f213569f5832dd8277b2" https://iot.seeed.cc/v1/node/config

response:

{"status": 200, "msg": "{\"board_name\": \"Wio Link v1.0\", \"connections\": {\"UART0\": \"111020001\"}}", "type": "json"}
POST /v1/node/setting/dataxserver

Access through OTA Server

Change the data exchange server for a specific node. As the changing will be taken place at the node side, this API needs the node online. This API will cause the node reboot once. After rebooted, the node will interact with the configured data exchange server for data and event transmission. And the configured data exchange server can be queried with the nodes/list API.

curl -X POST https://iot.seeed.cc/v1/node/setting/dataxserver/192.168.31.2?access_token=d6d68b4b6b43f213569f5832dd8277b2

Node Event API (use Websocket)

connect wss://iot.seeed.cc/v1/node/event

If you want to get the node event at any time, you should open a websocket in the client's background. After, send the Node Key to complete the handshake. Like this:

    <script>    
    var ws = new WebSocket('wss://iot.seeed.cc/v1/node/event');
    ws.onopen = function() {
        ws.send("d6d68b4b6b43f213569f5832dd8277b2");
    };
    ws.onmessage = function (evt) {
        alert(evt.data);
    };
    </script>

Then, the onmessage will get event data when node post it.

The event data format like this:

{'event_name_here': 'event_data_here'}
Clone this wiki locally