新版文档可查看:Open API新版文档
使用机智云提供的Open API(Http / WebSocket),可以快速开发网页或微信应用等基于html的轻应用,用于管理和控制智能设备。
机智云 Open API 主要帮助开发者通过 HTTP 的方式维护用户、用户与设备之间的绑定关系,以及获取设备数据、发送控制指令给设备。
本文档所定义接口基于HTTP/HTTPS协议进行传输,需要注意协议中标注的请求方式,通过GET、PUT、DELETE等进行不同的操作。
HTTP请求参数的类型一般分为三种。Header表示该参数是在HTTP请求头中;URL表示是通过url传参;Body表示是Request Body,通常Body中都是JSON格式
调用 API 需要获取 appid,product_key 和 token。appid 和 product_key 可以在产品信息页面获取到,token 通过用户注册和登录获取到。
下文中的参数统一用 {appid} 来表示,请将你自己的 appid 整个替换掉 {appid} (包括大括号)。
所有接口都需要设置该头部, 该头部信息的值通过在开发者中心的应用管理中创建应用获得
App用户token值, 生存周期为1个星期有效,调用获取token接口返回的expired_at为失效日期时间戳。若现在时间戳 > expired_at时间戳,则需要重新获取token, 获取token接口请见“App用户token申请”
该接口提供获取访问token访问权限的功能
http://api.gizwits.com/app/request_token
POST
Header1
2X-Gizwits-Application-Id: {appid}
X-Gizwits-Application-Auth: {signature}
1 | { |
如果您想让您的用户不需要显示注册和登录就能使用机智云的功能,就可以通过匿名注册的方式来为该用户创建一个匿名用户。phone_id 可以是手机的唯一识别码。
或者您已经有了自己的用户系统,不希望用户再次注册一次机智云帐号,您也可以使用该接口,为您的每一个用户创建一个对应的机智云匿名帐号。这时,phone_id 可以是用户在您的系统中的唯一识别码。如在与微信应用做对接时,phone_id 可以设置成微信用户的 openid。
http://api.gizwits.com/app/users
POST
参数 | 类型 | 必填 | 参数类型 | 描述 | 备注 |
---|---|---|---|---|---|
X-Gizwits-Application-Id | String | 是 | header | ||
phone_id | string | 是 | body | phone_id 可以是手机的唯一识别码 |
1 | { |
http://api.gizwits.com/app/users
POST
参数 | 类型 | 必填 | 参数类型 | 描述 | 备注 |
---|---|---|---|---|---|
X-Gizwits-Application-Id | String | 是 | header | ||
username | string | 是 | body | 用户名 | |
password | string | 是 | body | 密码 |
1 | { |
用户通过邮箱注册机智云帐号,注册成功后会收到一封邮件通知。
http://api.gizwits.com/app/users
POST
参数 | 类型 | 必填 | 参数类型 | 描述 | 备注 |
---|---|---|---|---|---|
X-Gizwits-Application-Id | String | 是 | header | ||
string | 是 | body | 用户邮箱 | ||
password | string | 是 | body | 密码 |
1 | { |
如果希望用户使用手机号注册机智云帐号,机智云提供短信验证码接口,您需要先调用获取验证码接口获取验证码,然后再进行注册。
http://api.gizwits.com/app/users
POST
参数 | 类型 | 必填 | 参数类型 | 描述 | 备注 |
---|---|---|---|---|---|
X-Gizwits-Application-Id | String | 是 | header | ||
phone | string | 是 | body | 手机号码 | |
password | string | 是 | body | 密码 | |
code | string | 是 | body | 验证码 |
1 | { |
机智云目前支持使用百度、新浪和QQ创建用户,但是需要您在客户端实现 OAuth 授权,获得用户的 uid 和 token,机智云会验证 uid 和 token 的合法性,验证通过就会创建一个机智云帐号。
使用 QQ 登录,需要提供您的机智云 APP ID 和 QQ 应用 APP ID 发送给我们的客服,我们客服将会在后台将二者进行关联。
手机客户端使用 QQ SDK 获取到用户的 openid 和 access_token,将 openid 和 access_token 作为 uid 和 token POST 到该接口:
{
"authData": {
"src": "qq",
"uid": opendid,
"token": access_token
}
}
http://api.gizwits.com/app/users
POST
Header1
X-Gizwits-Application-Id: {appid}
Body1
2
3
4
5
6
7{
"authData": {
"src": "baidu|sina|qq",
"uid": "2346677",
"token":"pnktnjyb996sj4p156gjtp4im"
}
}
1 | { |
假设您的机智云应用帮用户创建了一个匿名用户,他不需要注册就可以体验您的应用,并且绑定了设备,他体验满意之后,希望有一个自己的机智云帐号,但是又不想重复绑定设备。这时您可以调用该接口,为匿名用户设置用户名和密码,这样他就不再是一个匿名用户了。
http://api.gizwits.com/app/users
POST
参数 | 类型 | 必填 | 参数类型 | 描述 | 备注 |
---|---|---|---|---|---|
X-Gizwits-Application-Id | String | 是 | header | ||
X-Gizwits-User-token | String | 是 | header | ||
username | string | 是 | body | 用户名 | |
password | string | 是 | body | 密码 |
1 | { |
与匿名用户设置用户名和密码类似,该接口可以为匿名用户设置手机号和密码,但是需要先调用一次获取短信验证码的接口。
http://api.gizwits.com/app/users
POST
参数 | 类型 | 必填 | 参数类型 | 描述 | 备注 |
---|---|---|---|---|---|
X-Gizwits-Application-Id | String | 是 | header | ||
X-Gizwits-User-token | String | 是 | header | ||
phone | string | 是 | body | 手机号码 | |
password | string | 是 | body | 密码 | |
code | string | 是 | body | 验证码 |
1 | { |
该接口分别提供修改用户密码、修改用户邮箱、修改用户手机的功能
http://api.gizwits.com/app/users
PUT
参数 | 类型 | 必填 | 参数类型 | 描述 | 备注 |
---|---|---|---|---|---|
X-Gizwits-Application-Id | String | 是 | header | ||
X-Gizwits-User-token | String | 是 | header | ||
old_pwd | string | 是 | body | 旧密码 | |
new_pwd | string | 是 | body | 新密码 |
1 | { |
参数 | 类型 | 必填 | 参数类型 | 描述 | 备注 |
---|---|---|---|---|---|
X-Gizwits-Application-Id | String | 是 | header | ||
X-Gizwits-User-token | String | 是 | header | ||
string | 是 | body | 邮箱地址 |
1 | { |
修改手机号需要先调用一次获取短信验证码的接口,给新手机号发送一条短信验证码。
参数 | 类型 | 必填 | 参数类型 | 描述 | 备注 |
---|---|---|---|---|---|
X-Gizwits-Application-Id | String | 是 | header | ||
X-Gizwits-User-token | String | 是 | header | ||
phone | string | 是 | body | 手机号码 | |
code | string | 是 | body | 验证码 |
1 | { |
可以使用用户名/邮箱/手机号登录,一律填写到 username 字段。
api.gizwits.com/app/login
POST
参数 | 类型 | 必填 | 参数类型 | 描述 | 备注 |
---|---|---|---|---|---|
X-Gizwits-Application-Id | String | 是 | header | ||
username | string | 是 | body | 用户名 | |
password | string | 是 | body | 密码 |
1 | { |
该接口提供获取图片验证码
http://api.gizwits.com/app/verify/codes
POST
获取图片验证码
参数 | 类型 | 必填 | 参数类型 | 描述 | 备注 |
---|---|---|---|---|---|
X-Gizwits-Application-Id | String | 是 | header | ||
X-Gizwits-User-token | String | 是 | header | ||
captcha_url | string | 是 | body | ||
captcha_id | string | 是 | body |
Response 201
发送手机短信验证码
http://api.gizwits.com/app/verify/codes
POST
参数 | 类型 | 必填 | 参数类型 | 描述 | 备注 |
---|---|---|---|---|---|
X-Gizwits-Application-Id | String | 是 | header | ||
X-Gizwits-User-token | String | 是 | header | ||
captcha_url | string | 是 | body | ||
captcha_id | string | 是 | body | ||
phone | string | 是 | body |
Response 201
该接口校验短信验证码功能
PUT
参数 | 类型 | 必填 | 参数类型 | 描述 | 备注 |
---|---|---|---|---|---|
X-Gizwits-Application-Id | String | 是 | header | ||
X-Gizwits-User-token | String | 是 | header | ||
sms_code | string | 是 | body | ||
phone | string | 是 | body |
Response 200
请求成功后用户会收到一封重置密码的邮件, 用户根据邮件的链接进行密码重置。
http://api.gizwits.com/app/reset_password
POST
参数 | 类型 | 必填 | 参数类型 | 描述 | 备注 |
---|---|---|---|---|---|
X-Gizwits-Application-Id | String | 是 | header | ||
string | 是 | body |
Response 200 (application/json)
使用手机号重置密码需要先调用一次获取短信验证码的接口。
http://api.gizwits.com/app/reset_password
POST
参数 | 类型 | 必填 | 参数类型 | 描述 | 备注 |
---|---|---|---|---|---|
X-Gizwits-Application-Id | String | 是 | header | ||
phone | string | 是 | body | 手机号码 | |
code | string | 是 | body | 验证码 | |
new_pwd | string | 是 | body | 新密码 |
Response 200 (application/json)
X-Gizwits-Timestamp 与服务器相差不能超过 5 分钟
X-Gizwits-Signature = MD5(product_secret + X-Gizwits-Timestamp).lower()
http://api.gizwits.com/app/bind_mac
POST
1、 Header1
2
3
4X-Gizwits-Application-Id: {appid}
X-Gizwits-User-token: {token}
X-Gizwits-Timestamp: {req_ts}
X-Gizwits-Signature: {sig}
2、 Body1
2
3
4
5
6{
"product_key": "xxx",
"mac": "xxx",
"remark": "xxx",
"dev_alias": "xxx"
}
Response 201 (application/json)
该接口提供绑定列表
http://api.gizwits.com/app/bindings
GET
参数 | 类型 | 必填 | 参数类型 | 描述 | 备注 |
---|---|---|---|---|---|
X-Gizwits-Application-Id | String | 是 | header | ||
X-Gizwits-User-token | String | 是 | header | ||
limit | String | 是 | url | ||
skip | String | 是 | url |
limit 和 skip 表示分页参数。limit 为一次性返回的最多条数,skip 为跳过多少条数据。
如每页 10 条数据,获取第一页数据:limit=10, skip=0;获取第二页数据:limit=10, skip=10.
1 | { |
修改绑定信息
http://api.gizwits.com/app/bindings/{did}
PUT
参数 | 类型 | 必填 | 参数类型 | 描述 | 备注 |
---|---|---|---|---|---|
did | String | 是 | url | ||
X-Gizwits-Application-Id | String | 是 | header | ||
X-Gizwits-User-token | String | 是 | header | ||
remark | String | 是 | body | ||
dev_alias | String | 是 | body |
1 | { |
提供解除绑定功能
http://api.gizwits.com/app/bindings
DELETE
Header
X-Gizwits-Application-Id: {appid}
X-Gizwits-User-token: {token}
Body1
2
3
4
5{
"devices": [{
"did": "gdGn7PzAYf4VrhnVag5x8D"
}]
}
1 | { |
提供设备加密注册功能,当设备使用加密注册接口进行注册后,设备将生成唯一did,且该did无法调用普通的设备注销接口注销,如进行重复加密注册操作,生成的did不会发生变化。
设备使用加密注册接口注册生成唯一did后,设备之前生成的did会自动被注销。
设备调用加密注册接口成功后,设备将无法调用非加密的设备注册接口,设备provison接口,以及设备注销接口。
http://api.gizwits.com/dev/{product_key}/device
POST
Header
Content-Type:application/x-www-form-urlencoded
body:
data={data}
data内容为mac={mac}&passcode={passcode}&type={type}&extra={extra}经过AES加密后的密文。
data内容说明:
内容 | 说明 |
---|---|
MAC | 设备mac地址 |
passcode | 设备passcode |
type | 设备type,当前只可以取noraml或center_control |
extra | 16进制格式字符串,长度8bit: 1.当最后一位字符转换成二进制的末尾一位为1,则默认设备type为center_control,如果为0,则默认type为normal 2当最后一位字符转换成二进制的倒数第二位为1,则默认使用了代码自动生成,如果为0,则默认未使用代码自动生成. |
AES加密方法说明:
AES 补码方式为 pcks7padding
AES key 为 product_secret 转为 16 进制(128 bit)
AES mode 为 AES.MODE_ECB
响应编码 | 返回内容 | 说明 |
---|---|---|
201 | adfkkgkljsdfd | 返回结果为did={did}经过AES加密后的密文 |
http://api.gizwits.com/app/control/{did}
POST
远程控制设备可以通过两种方式,一种是设置数据点,一种是发送原始控制指令。
推荐使用设置数据点的方式,通过这种方式控制设备,系统内部自动会生成原始控制指令发送给设备,使用起来更简单。
did
)Header
X-Gizwits-Application-Id: {appid}
X-Gizwits-User-token: {token}
Body1
2
3
4
5{
"attrs": {
"temp": 10
}
}
1 | {} |
Header
X-Gizwits-Application-Id: {appid}
X-Gizwits-User-token: {token}Body1
2
3{
"raw": [<byte>, <byte>, ...]
}
1 | {} |
该接口提供设备通信日志,上下线日志查询
http://api.gizwits.com/app/devices/{did}/raw_data
GET
参数 | 类型 | 必填 | 参数类型 | 描述 | 备注 |
---|---|---|---|---|---|
did | String | 是 | url | ||
X-Gizwits-Application-Id | String | 是 | header | ||
X-Gizwits-User-token | String | 是 | header | ||
type | String | 是 | url | cmd通信日志查询,online上下线日志查询 | |
start_time | Integer | 是 | url | 查询起始时间戳,单位秒 | 大于此时间戳的数据将会被查询到 |
end_time | Integer | 是 | url | 查询终止时间戳,单位秒 | 小于等于此时间戳的数据会被查询到 |
skip | Integer | 否 | url | 跳过条目数,默认0 | skip+limit需要小于等于5000 |
limit | Integer | 否 | url | 返回条目数,默认20 | 需要小于等于1000 |
sort | String | 否 | url | 数据按生成时间排序规则 desc降序 asc升序,默认降序 |
1 | { |
定时任务分为一次性定时任务和可重复执行定时任务。一次性定时任务在设定好的日期和时间执行;可重复执行定时任务可以设置按星期重复,如每周一执行,工作日执行等,在重复的星期的设定时间执行。
执行日期通过 date 参数进行设置,格式为:”2015-01-01”。
执行时间通过 time 参数进行设置,格式为:”10:10”, 注意:该时间为 UTC 时间!
重复类型通过 repeat 参数进行设置,不重复设置为 “none”;重复设置为 “mon”, “tue”, “wed”, “thu”, “fri”, “sat”, “sun” 的组合,组合之间用逗号分隔,如每周一和周二重复为 “mon,tue”。
一次定时任务可以给多个已绑定的设备发送控制指令,只有设定的所有控制指令都发送成功,本次定时任务才算执行成功。任务内容通过 task 设定,为一个列表,列表内的内容为每个具体的任务。具体的任务需要提供设备 did, product_key 和要设置的数据点键值对 attrs。如:
1 | { |
对于执行失败的定时任务,可以设置重复次数和重复策略。重复次数的范围为 0 ~ 60 次。置重复策略分为全部重试和部分重试。全部重试,将在重试的时候发送所有设定的控制指令;部分重试,只对还未发送成功指令进行发送。
重复次数通过 retry_count 来设置。
重复策略通过 retry_task 来设置,全部重试为 “all”,部分重试为 “failed”。
该接口提供定时任务创建功能
http://api.gizwits.com/app/scheduler
POST
参数 | 类型 | 必填 | 参数类型 | 描述 | 备注 |
---|---|---|---|---|---|
X-Gizwits-Application-Id | String | 是 | header | ||
X-Gizwits-User-token | String | 是 | header | ||
limit | String | 是 | url | ||
skip | String | 是 | url | 跳过条数 |
1 | { |
1 | { |
该接口提供定时任务获取功能
http://api.gizwits.com/app/scheduler
GET
参数 | 类型 | 必填 | 参数类型 | 描述 | 备注 |
---|---|---|---|---|---|
X-Gizwits-Application-Id | String | 是 | header | ||
X-Gizwits-User-token | String | 是 | header | ||
limit | String | 是 | url | ||
skip | String | 是 | url |
1 | [ |
该接口提供定时任务删除功能
http://api.gizwits.com/app/scheduler/{id}
DELETE
参数 | 类型 | 必填 | 参数类型 | 描述 | 备注 |
---|---|---|---|---|---|
id | String | 是 | url | ||
X-Gizwits-Application-Id | String | 是 | header | ||
X-Gizwits-User-token | String | 是 | header |
Response 200 (application/json)
http://api.gizwits.com/app/devices/{did}/scheduler
GET
参数 | 类型 | 必填 | 参数类型 | 描述 | 备注 |
---|---|---|---|---|---|
did | String | 是 | url | ||
X-Gizwits-Application-Id | String | 是 | header | ||
X-Gizwits-User-token | String | 是 | header | ||
limit | String | 是 | url | default:20 | |
skip | String | 是 | url | default:0 |
1 | [ |
该接口提供设备定时任务创建功能
http://api.gizwits.com/app/devices/{did}/scheduler
POST
参数 | 类型 | 必填 | 参数类型 | 描述 | 备注 |
---|---|---|---|---|---|
did | String | 是 | url | ||
X-Gizwits-Application-Id | String | 是 | header | ||
X-Gizwits-User-token | String | 是 | header |
Body request1
2
3
4
5
6
7
8
9
10
11
12
13{
"attrs": {},
"date": "2016-11-07",
"time": "12:00",
"repeat": "none",
"days": [
0
],
"start_date": "2016-11-07",
"end_date": "2016-11-07",
"enabled": true,
"remark": ""
}
1 | { |
该接口提供设备定时任务修改功能
http://api.gizwits.com/app/devices/{did}/scheduler
PUT
参数 | 类型 | 必填 | 参数类型 | 描述 | 备注 |
---|---|---|---|---|---|
did | String | 是 | url | ||
X-Gizwits-Application-Id | String | 是 | header | ||
X-Gizwits-User-token | String | 是 | header |
Body request1
2
3
4
5
6
7
8
9
10
11
12
13{
"attrs": {},
"date": "2016-11-07",
"time": "12:00",
"repeat": "none",
"days": [
0
],
"start_date": "2016-11-07",
"end_date": "2016-11-07",
"enabled": true,
"remark": ""
}
1 | { |
该接口提供设备定时任务删除功能
http://api.gizwits.com/app/devices/{did}/scheduler/{id}
DELETE
参数 | 类型 | 必填 | 参数类型 | 描述 | 备注 |
---|---|---|---|---|---|
did | String | 是 | url | ||
id | String | 是 | url | ||
X-Gizwits-Application-Id | String | 是 | header | ||
X-Gizwits-User-token | String | 是 | header |
Response 200 (application/json)
该接口提供定时任务执行日志功能
http://api.gizwits.com/app/scheduler/{id}/logs
GET
参数 | 类型 | 必填 | 参数类型 | 描述 | 备注 |
---|---|---|---|---|---|
id | String | 是 | url | ||
X-Gizwits-Application-Id | String | 是 | header | ||
X-Gizwits-User-token | String | 是 | header |
1 | { |
1 | { |
status | code | message |
---|---|---|
400 | 9001 | mac already registered! |
400 | 9002 | product_key invalid |
400 | 9003 | appid invalid |
400 | 9004 | token invalid |
400 | 9005 | user not exist |
400 | 9006 | token expired |
400 | 9007 | m2m_id invalid |
500 | 9008 | server error |
400 | 9009 | code expired |
400 | 9010 | code invalid |
400 | 9011 | sandbox scale quota exhausted! |
400 | 9012 | production scale quota exhausted! |
400 | 9013 | product has no request scale! |
404 | 9014 | device not found! |
400 | 9015 | form invalid! |
400 | 9016 | did or passcode invalid! |
401 | 9017 | device not bound! |
400 | 9018 | phone unavailable! |
400 | 9019 | username unavailable! |
400 | 9020 | username or password error! |
400 | 9021 | send command failed! |
400 | 9022 | email unavailable! |
400 | 9023 | device is disabled! |
400 | 9024 | fail to notify m2m! |
400 | 9025 | attr invalid! |
400 | 9026 | user invalid! |
404 | 9027 | firmware not found! |
404 | 9028 | JD product info not found! |
400 | 9029 | datapoint data not found! |
404 | 9030 | scheduler not found! |
400 | 9031 | qq oauth key invalid! |
400 | 9032 | ota upgrade service OK, but in idle or disable! |
400 | 9033 | bt firmware unverified, except verify device! |
404 | 9034 | bt firmware is OK, but nothing to upgrade! |
500 | 9035 | Save kairosdb error! |
400 | 9036 | event not defined! |
400 | 9037 | send sms failed! |
400 | 9038 | X-Gizwits-Application-Auth invalid! |
403 | 9039 | Not allowed to call deprecated API! |
400 | 9040 | bad qrcode content! |
429 | 9041 | request was throttled |
400 | 9042 | device offline! |
400 | 9043 | X-Gizwits-Timestamp invalid! |
400 | 9044 | X-Gizwits-Signature invalid! |
400 | 9045 | API deprecated! |
400 | 9046 | Register already in progress! |
400 | 9047 | device encrypt disabled! |
400 | 9048 | device encrypt enabled, does not support this api! |
xxx | 9999 | reserved |